fix to use with sveltekit
This commit is contained in:
61
src/lib/quill.js
Normal file
61
src/lib/quill.js
Normal file
@@ -0,0 +1,61 @@
|
||||
import Quill from 'quill'
|
||||
|
||||
const Clipboard = Quill.import('modules/clipboard')
|
||||
const Delta = Quill.import('delta')
|
||||
|
||||
class PlainClipboard extends Clipboard {
|
||||
convert(html) {
|
||||
if (typeof html === 'string') {
|
||||
this.container.innerHTML = html
|
||||
}
|
||||
const text = this.container.textContent
|
||||
this.container.innerHTML = ''
|
||||
return new Delta().insert(text)
|
||||
}
|
||||
}
|
||||
|
||||
export function quill(node, options) {
|
||||
const toolbar = [
|
||||
[{header: 1}, {header: 2}],
|
||||
['bold', 'italic', 'underline'],
|
||||
[{list: 'ordered'}, {list: 'bullet'}],
|
||||
['link', 'image', 'video'],
|
||||
['code-block', 'clean'],
|
||||
]
|
||||
|
||||
const {plainclipboard} = options
|
||||
if (plainclipboard) {
|
||||
Quill.register('modules/clipboard', PlainClipboard, true)
|
||||
}
|
||||
|
||||
if (Reflect.has(options, 'plainclipboard')) {
|
||||
Reflect.deleteProperty(options, 'plainclipboard')
|
||||
}
|
||||
|
||||
const q = new Quill(node, {
|
||||
modules: {
|
||||
toolbar,
|
||||
},
|
||||
placeholder: 'Digite algo...',
|
||||
...options,
|
||||
})
|
||||
|
||||
const _container = node.querySelector('.ql-editor')
|
||||
|
||||
const onTextChange = () => {
|
||||
const html = _container?.innerHTML ?? ''
|
||||
const customEvent = new CustomEvent('text-change', {
|
||||
detail: {
|
||||
html,
|
||||
text: q.getText(),
|
||||
},
|
||||
})
|
||||
node.dispatchEvent(customEvent)
|
||||
}
|
||||
|
||||
q.on('text-change', onTextChange)
|
||||
|
||||
return () => {
|
||||
q.off('text-change', onTextChange)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user