1. 程式人生 > >利用Editor.md構建Markdown富文字編輯器

利用Editor.md構建Markdown富文字編輯器

Markdown是一種可以使用普通文字編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文字內容具有一定的格式,就像我們使用的CSDN Markdown編輯器一樣。下面我們利用開源的Editor.md來構建屬於我們自己的Markdown編輯器。

0x01 下載檔案

官網:http://pandao.github.io/editor.md

其中最關鍵的兩個檔案是editormd.css和editormd.js。同時資料夾lib和plugins也需要在工程中引入。如果發現有圖示顯示不正常,還要引入font資料夾,最終的結構如下圖:

0x02 配置模板

引入檔案:

{%block styles%}
{{super()}} <link rel="stylesheet" href="{{url_for('static',filename='css/editormd.min.css')}}"> {%endblock%} {%block scripts%} {{super()}} <script src="{{url_for('static',filename='js/editormd.min.js')}}"></script> {%endblock%}

新增如下的js程式碼:

<script>
        var testEditor;
        $(function
(){
testEditor=editormd("test-editormd",{ width:'500px', height:'300px', syncScrolling : "single", path:"
{{url_for('static',filename='editormd/lib/')}}", //啟動本地圖片上傳功能 imageUpload:true, imageFormats : ["
jpg", "jpeg", "gif", "png", "bmp", "webp"], imageUploadURL : "
{{url_for('main.upload')}}" }); }) </script>

在模板中新增關聯的textarea:

<form method="post">
    {{form.hidden_tag()}}
    <div id="test-editormd" class="form-control">
        {{form.body(class="form-control",style="display:none;",id="ts")}}
    </div>
    <button type="submit" class="btn btn-primary form-control">提交</button>
</form>

這樣,我們就完成了客戶端的配置。

0x03 服務端實現

首先我們在對應的資料表中新增一個新的欄位,用來記憶Markdown格式轉換為html後的內容,這樣做可以方便客戶端顯示。

…
body_html=db.Column(db.Text)
…
#處理body欄位變化的函式
@staticmethod
def on_changed_post(target,value,oldvalue,initiaor):
    allow_tags=['a','abbr','acronym','b','blockquote','code',
                'em','i','li','ol','pre','strong','ul',
                'h1','h2','h3','p','img']
    #轉換markdown為html,並清洗html標籤
    target.body_html=bleach.linkify(bleach.clean(
        markdown(value,output_form='html'),
        tags=allow_tags,strip=True,
        attributes={
            '*': ['class'],
            'a': ['href', 'rel'],
            'img': ['src', 'alt'],#支援<img src …>標籤和屬性
        }
))

#註冊監聽事件
db.event.listen(Posts.body,'set',Posts.on_changed_post)

on_changed_post函式註冊在body欄位上,作為SQLAlchemy的”set”時間監聽程式,當body欄位發生變化時,將觸發函式,從而完成對應的body_html欄位的更新。這樣可以高效地完成markdown格式到html格式的轉換。

上面的函式中還使用了bleach來過濾html標籤,只允許指定的標籤存在,這樣是為了防止出現惡意的程式碼,避免XSS等漏洞的出現。

對應的路由處理程式碼沒有什麼特別的地方,和前面講解分頁過程差不多(參見:利用SQLAlchemy和Bootstrap實現資料分頁顯示),下面補充講下圖片上傳的處理問題。

0x04 補充:圖片上傳

上面提到了Editor.md客戶端啟動圖片上傳的做法:

//啟動本地圖片上傳功能
imageUpload:true,
imageFormats   : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL : "{{url_for('main.upload')}}"

在Editor.md中,啟動圖片上傳功能後,相應的對話方塊採用Ajax傳送圖片資訊,並接收特定格式的Json字串作為合法的返回結果:

{
    success : 0 | 1,           // 0 表示上傳失敗,1 表示上傳成功
    message : "提示的資訊,上傳成功或上傳失敗及錯誤資訊等。",
    url     : "圖片地址"        // 上傳成功時才返回
}

上面的處理過程指定需要main.upload來進行圖片上傳處理,相應的程式碼如下:

# 圖片上傳處理
@main.route('/upload/',methods=['POST'])
def upload():
    file=request.files.get('editormd-image-file')
    if not file:
        res={
            'success':0,
            'message':u'圖片格式異常'
        }
    else:
        ex=os.path.splitext(file.filename)[1]
        filename=datetime.now().strftime('%Y%m%d%H%M%S')+ex
        from app import app
        file.save(os.path.join(app.config['SAVEPIC'],filename))
        #返回
        res={
            'success':1,
            'message':u'圖片上傳成功',
            'url':url_for('.image',name=filename)
        }
    return jsonify(res)

#編輯器上傳圖片處理
@main.route('/image/<name>')
def image(name):
    with open(os.path.join(app.config['SAVEPIC'],name),'rb') as f:
        resp=Response(f.read(),mimetype="image/jpeg")
    return resp

效果如下:

同時圖片也被儲存到伺服器了。

這樣,我們就可以構建一個比較完整的Markdown編輯器了。先就講到這裡吧,以後有時間在慢慢改進!

相關推薦

利用Editor.md構建Markdown文字編輯

Markdown是一種可以使用普通文字編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文字內容具有一定的格式,就像我們使用的CSDN Markdown編輯器一樣。下面我們利用開源的Editor.md來構建屬於我們自己的Markdown編輯器。 0x0

layui 整合 editor.md 文字編輯

前言 lyaui 是國產對後端程式設計師友好的前端UI框架,賢心大佬的作品,editor.md 是國產功能非常全面的Markdown富文字編輯器,pandao大佬的作品。但是目前,layui並沒有一款牛逼的富文字編輯器,本部落格介紹如何在layui中整合使用editor.md富文字編

在網頁中使用文字編輯editor+vue

先下載一個富文字編輯器(官網地址) 在vue中新建一個editor.vue <template> <div> <script id="editor" type="text/plain"></script> </div

vue專案中文字編輯vue-quill-editor的使用

前端開發過程中,會遇到在頁面上加入富文字編輯器,在vue專案中開發遇到這一需求的時候,我們可以使用富文字編輯器vue-quill-editor,話不多說,先上一張效果圖: 1)安裝 vue-quill-editor 依賴 npm install vue

RichEditor——一款基於RecyclerView實現的文字編輯實現方案(支援圖文、轉義生成MarkDown、粗體、斜體、下劃線、刪除線、超連結、標題等)

前言 對於富文字編輯器的實現,首先我們肯定會想到實現的編輯器需要支援的幾個必要特性: 1.涉及大量文字,圖片,文字樣式的展示與編輯。 2.涉及極其複雜的使用者互動。 目前Github上我所瞭解的富文字編輯器基本上實現方式基於兩種: * 1.基於WebView

django引入文字編輯Markdown

一、引入編輯器: 1,編輯器樣式效果截圖: 2,引入檔案: https://github.com/qiwsir/DjangoPracticeProject/tree/master/mysite2/static 放入本地static目錄下。 3,html程式碼:

【Vue】quill-editor文字編輯元件的運用與修改配置使圖片上傳到伺服器

前言:Vue的生態已經越來越繁榮,越來越多有趣好用的元件加入的生態中了。quill-editor富文字編輯器就是很好用的元件之一。 一、quill-editor的安裝與使用 ①、安裝 npm install vue-quill-editor --save ②、

vue使用editor文字編輯

   最近公司系統要換成前後端分離的,前端採用vue框架,而我負責的模組剛好有富文字編輯器,查了好幾種編輯器,最後還是決定用ueditor 百度編輯器目錄結構:  將config.json檔案放在conf下:修改獲取config.json的路徑地址 controller類獲取

利用ueditor文字編輯上傳圖片解決跨域問題

          百度ueditor富文字編輯器單張圖片上傳有固有缺陷,那就是不支援跨域配置,下圖是UEditor官網說明。        但是我們在實際開發中,前後臺分離,跨域上傳圖片是很平常的,那麼怎麼解決跨域問題呢?答案是通過nginx配置域名來解決。      

在Vue專案使用quill-editor帶樣式編輯(更改插入圖片和視訊) 運用vue-quilt-editor編寫文字編輯 自定義圖片路徑 獲取後臺返回路徑

一、首先在main.js  引入 vue-quilt-editorimport VueQuillEditor from 'vue-quill-editor'import 'quill/dist/quill.core.css'import 'quill/dist/quill.s

Vue +Element UI +vue-quill-editor 文字編輯及插入圖片自定義

1.安裝npm install vue-quill-editor --save2.在main.js中引入import VueQuillEditor from 'vue-quill-editor' im

Vue基於vue-quill-editor文字編輯使用心得

vue-quill-editor的guthub地址,現在市面上有很多的富文字編輯器,我個人還是非常推薦Vue自己家的vue-quill-deitor,雖然說只支援IE10+,但這種問題,帥給別人吧! 那麼我們直擊正題,在vue中使用quill呢,我們需要npm進行安裝,安裝命令如下: npm ins

vue中使用vue-quill-editor文字編輯,自定義toolbar修改工具欄options

基於webpack和vue 一、npm 安裝 vue-quill-editor 二、在main.js中引入 import VueQuillEditor from 'vue-quill-editor' // require styles 引入樣式 im

利用 javascript 實現文字編輯

近期專案中需要開發一個相容PC和移動端的富文字編輯器,其中包含了一些特殊的定製功能。考察了下現有的js富文字編輯器,桌面端的很多,移動端的幾乎沒有。桌面端以UEditor為代表。但是我們並不打算考慮相容性,所以沒有必要採用UEditor這麼重的外掛。為此決定自研一個富文字編輯器。本文,主要介紹如何實現富文

vue移動端文字編輯vue-html5-editor

簡介 IntroVue-html5-editor是一個Vue的富文字編輯器外掛,簡潔靈活可擴充套件,適用於vue2.0以上版本,支援IE11.Vue-html5-editor is an html5 wysiwyg editor for vue,easy and flexib

使用百度editor 文字編輯上傳圖片

在jsp 檔案中 <img src="F:/upload/image/test.jpg"/> 這樣是引不到圖片的。因為,JSP頁面在引圖片的時候是 在頁面解析的路徑是:<img src="http://localhost:8080/upload/images/test.jpg">。也就

vue中使用vue-quill-editor文字編輯,自定義toolbar,圖片上傳到七牛

一、npm 安裝 vue-quill-editor  二、在main.js中引入 import VueQuillEditor from 'vue-quill-editor' // require styles 引入樣式 import 'quill/dist/quill.c

Vue2 封裝的 Quill 文字編輯元件 Vue-Quill-Editor

1、安裝   npm install vue-quill-editor --save 2、使用 引入vue-quill-editor import { quillEditor } from 'vue-quill-editor' <!-- --><quil

summernote文字編輯實現圖片新增上傳和刪除圖片

summernote的基本使用 HTML程式碼 //div添加個id就可以 <div id="summernote" ></div> 然後JS操作 //例項化呼叫 var $summernote = $('#summernote').summernote(

百度文字編輯ueditor的使用、非空校驗、引用預定義模板

最近用到百度ueditor編輯器,遇到了很多問題,總結一下ueditor的使用、非空校驗、引用預先寫好的模板。 一、百度ueditor編輯器簡單使用: 1.在百度官網http://ueditor.baidu.com/website/download.html下載壓縮包,解壓之後整體拷