王辰 劉曉鑫 曹曉燕 王佳楠
摘 要:隨著Web技術的不斷革新,ECMAScript標準應運而生,ECMAScript6版本通過加入模塊和類,從而使得JavaScript可以通過模塊化的開發方式開發各類插件。基于Vue.js技術,遵循插件化的原則,開發了符合Markdown標記語言標準的Web插件,具備了結構清晰、可移植性強、API(Application Programming Interface,應用程序編程接口)簡明、與宿主程序低耦合。
關鍵詞:Vue.js;Markdown;插件化開發
近幾年Web前端技術飛速發展,前端技術從靜態到動態、從前端到全端。[1]2009年發布的Node.js,Node.js可以運行JavaScript的服務端,它基于V8引擎。其允許JavaScript運行在其之上,這也意味著JavaScript不僅僅是運行在瀏覽器上的腳本語言,更能夠作為服務端處理數據。NPM是Node的模塊管理器,開發者可以通過NPM開發者能夠模塊化引入或者導出代碼,大大增強了代碼的復用性。
隨著CMAScript標準的誕生,前端的框架也層出不窮,例如Google的Angular.js、Facebook的React.js、以及當下發展最迅猛的Vue.js。Vue.js可以提供插件化編程方法,允許開發者在其基礎上構建插件,提升代碼質量,提高開發效率。
1 Markdown標記語言
Markdown是一種可以使用普通文本編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文本內容具有一定的格式。[2]Markdown的語法簡潔明了、學習成本低,而且功能比純文本豐富。[3]目前,一些主流的大型的在線編輯類的Web平臺,例如一些大型博客以及大型CMS,都能夠很好的支持Markdown標記語言。
2 相關技術
2.1 Vue.js框架
Vue.js(通常稱作Vue)是一個用于構建用戶界面的開源漸進式JavaScript框架。與其他重量級框架不同的是,Vue遵循自底向頂增量開發的設計模式,Vue的核心庫只關注視圖層,它不僅易于上手,還便于與第三方庫或既有項目進行整合。此外,Vue是一個功能強大的Web應用程序框架,能夠為高級單頁應用程序提供支持。[4]
2.2 響應式設計
響應式網頁自身會根據用戶行為和設備環境(系統平臺、屏幕尺寸、屏幕方向等)進行相應的響應和調整,以達到最優體驗。由各方面的具體實踐,從而總結出響應式開發的基本要領,如彈性布局、響應式媒體、CSS媒體查詢等,都能有效的提升用戶體驗度,無論用戶使用筆記本電腦或平板電腦,頁面會根據分辨率自動適應展示最優效果。總而言之,響應式頁面應該有自動響應用戶的設備環境的能力。
響應式網頁設計可以做到多終端兼容,而不是為每一個終端做一個特定版本,避免開發上的資源浪費,提高開發效率。
3 插件功能結構圖
3.1 結構分析
本插件主要擁有四大塊:
(1)Markdown文本渲染,拓展Markdown基礎語法,豐富編輯操作。
(2)快捷編輯工具欄開發,支持鍵盤快捷鍵與鼠標點擊按鈕編輯操作
(3)功能性工具欄開發,支持閱讀模式、單欄編輯、標題導航等個性化功能。
(4)插件響應式,多終端自適應。
其中上圖所示解析器采用Markdown-it,它在初始化的時候需要做一些個性化定制,并裝配語法拓展。遵循模塊化的思想,將Markdown-it的初始化單獨放入Markdown.js中,并利用export關鍵詞將其對外開放。
通過初始化與裝配Markdoen-it實現對Markdown文本的渲染以及語法的拓展,核心代碼如下:
var markdown = require(markdown-it)({
html: true, // Enable HTML tags in source
xhtmlOut: true, // Use /
breaks: true, // Convert \\n
langPrefix: language-markdown, // CSS
linkify: false, // 自動識別url
typographer: true,
quotes:“”‘
});
export default markdown
3.2 單欄實時編輯模式
傳統的Markdown編輯器都是采用左右分欄式設計,根據左側Markdown文本實時渲染右側Html樣式。但是不乏有些比較成熟的編輯器支持單欄目編輯,將Markdown與Html相結合,實時渲染Markdown文本,這樣雖然增加了邏輯復雜性,但提升的用戶體驗度,本設計采用此種設計方式,實現實時渲染模式。
單欄目實時編輯的核心在于需要把Html文本反編譯為Markdown文本,將相關邏輯處理放入to-Markdown.js中,當用戶開啟單欄目編輯的時候,原始雙欄編輯框會被隱藏,取而代之的是一個可編輯的div,因為div能夠實時渲染樣式,此時每次觸發TAB鍵編譯的時候,to-Markdown.js會將div中的Html代碼反編譯為Markdown文本。如下對上角標的渲染示例:
// 上角標
const coverterSup = {
filter:sup,
replacement:function(content){
return ^ + content + ^;
}
}
4 API設計
4.1 插件引入方式
插件化的軟件要做到能夠方便開發者使用,擁有多元化接入方式、簡潔的接入步驟。本插件在詳細設計階段分析了多種接入方式,最終選擇借助webpack進行打包,通過NPM進行發布進行發布,這樣,最大限度的方便了開發者引入插件。
4.2 @event事件響應
當用戶觸發某些事件,如:輸入文本、點擊閱讀模式、點擊保存等,插件都會以回調函數的形式通知給開發者,方便開發者做進一步處理。預定義@event事件如下所示:
預定義@event事件:
name 方法名params 參數describe 描述
changeString:value,String:reder編輯區發生變化的回調事件
saveString:value,String:rederctrl + s 的回調事件
……
5 結語
本文基于Vue.js框架,遵循插件化開發原則,設計并實現了一套Markdown標記語言的Web插件,具有結構清晰、可移植性強、API簡明、與宿主程序低耦合等特點。并在普通文本編輯器功能的基礎上,拓展了Markdown的語法規則,支持表情、數學公式等,提供單雙欄編輯、實時預覽、沉浸式閱讀、標題導航等個性化功能,且所有功能允許熱插拔式接入插件,實現插件內部的解耦。
參考文獻:
[1]朱二華.基于Vue.js的Web前端應用研究[J].科技與創新,2017(20):119-121.
[2]王偉.標記語言及HTML和XML的比較分析[J].現代圖書情報技術,2000,16(5):22-24.
[3]胡亞明.基于標記語言的論文寫作輔助系統[J].廣東化工,2017,44(4):81.
[4]麥冬,陳濤,梁宗灣.輕量級響應式框架Vue.js應用分析[J].信息與電腦(理論版),2017(7):58-59.
作者簡介:王辰(1988-),助教,研究方向:移動信息化。