接觸quilljs是由於公司以前的富文本編輯器已經沒法知足更多的內容生產場景,因而計劃研發一款更加定製化的編輯器。通過一番調研,被quilljs強大的可擴展性,和它獨有的parchment,delta的設計所吸引,選定了它(固然2W+的star也是一個重要緣由)。可是「表格編輯功能」一直困擾着這個優秀的富文本編輯器,具體可從quill的第117號issue: Add support for table瞭解一二。 javascript
按照quill做者的計劃,quilljs 2.0將會支持表格編輯,可是功能很是有限,好比:表格中沒法換行、沒法合併/拆分單元格等。因而決定努力爲quilljs補充這一功能缺失。 css
基於quilljs v2.0.0-dev.x版本的表格模塊,支持多種經常使用功能,旨在改善quill編輯器在表格編輯方面的弱勢。
git倉庫:github.com/soccerloway…
在線demo:codepen demojava
quill-better-table 基於quilljs 2.0版本實現,quilljs 2.0版目前並未發佈穩定版,須謹慎選擇使用(O(∩_∩)O~我已經把2.0用到生產環境了,hold住)。
因爲我使用webpack externals指定外部引入依賴的方式打包,因此請務必將Quill對象暴露到window對象上,或者經過script標籤的方式引入quilljs,以便quill-better-table獲取依賴。webpack
npm install quill-better-table
複製代碼
<script src="https://cdnjs.cloudflare.com/ajax/libs/quill/2.0.0-dev.3/quill.min.js" type="text/javascript"></script>
複製代碼
<link href="https://cdnjs.cloudflare.com/ajax/libs/quill/2.0.0-dev.3/quill.snow.min.css" rel="stylesheet">
<link href="unpkg.com/quill-better-table@1.1.0/dist/quill-better-table.css" rel="stylesheet">
複製代碼
import QuillBetterTable from 'quill-better-table'
Quill.register({
'modules/better-table': QuillBetterTable
}, true)
window.onload = () => {
const quill = new Quill('#editor-wrapper', {
theme: 'snow',
modules: {
table: false, // disable table module
'better-table': {
operationMenu: {
items: {
unmergeCells: {
text: 'Another unmerge cells name'
}
}
}
},
keyboard: {
bindings: QuillBetterTable.keyboardBindings
}
}
})
document.body.querySelector('#insert-table')
.onclick = () => {
let tableModule = quill.getModule('better-table')
tableModule.insertTable(3, 3)
}
}
複製代碼
首先,可使用quill.getModule(module_name)
獲取quill-better-table
:git
let tableModule = quill.getModule('better-table')
複製代碼
獲取傳入range位置的表格信息,返回一個裝有當前TableContainer, TableRow, TableCell, offset的數組。github
module.getTable() // current selection
module.getTable(range)
// [TableContainer, TableRow, TableCell, 0]
複製代碼
在光標位置插入新的表格web
tableModule.insertTable(3, 3)
複製代碼
目前quill-better-table只提供了右鍵功能菜單(operationMenu)的選項配置:ajax
const quill = new Quill('#editor', {
theme: 'snow',
modules: {
table: false, // disable table module
'better-table': {
operationMenu: {
items: {
unmergeCells: {
text: 'Another unmerge cells name'
}
}
}
},
keyboard: {
bindings: QuillBetterTable.keyboardBindings
}
}
})
複製代碼
右鍵操做菜單默認會開放全部操做功能。將items
中某一項配置爲false
即爲關閉該操做,右鍵菜單中也不會出現該對應按鈕。npm
items: {
{
operationKey: {
text: 'foo'
},
operationKey: false
}
}
複製代碼
operationKey
表示功能的名稱,下面的列表列出了全部功能名稱供配置:數組
operationKey.text
表示功能在右鍵菜單中的按鈕的文字,能夠根據須要配置按鈕文字。
若是quill-better-table
可以幫助到您,但願您能經過回覆、郵件或git issues提出你寶貴的建議,我會繼續努力,不斷完善它的。後續計劃經過另外一篇文章來具體講解一下quill-better-table的核心原理。