node-quill-converter
Version:
Convert HTML to Delta or Delta to HTML
68 lines (52 loc) • 1.6 kB
JavaScript
const fs = require('fs');
const path = require('path');
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
let quillFilePath = require.resolve('quill');
let quillMinFilePath = quillFilePath.replace('quill.js', 'quill.min.js');
let quillLibrary = fs.readFileSync(quillMinFilePath);
let mutationObserverPolyfill = fs.readFileSync(path.join(__dirname, 'polyfill.js'));
const JSDOM_TEMPLATE = `
<div id="editor">hello</div>
<script>${mutationObserverPolyfill}</script>
<script>${quillLibrary}</script>
<script>
document.getSelection = function() {
return {
getRangeAt: function() { }
};
};
document.execCommand = function (command, showUI, value) {
try {
return document.execCommand(command, showUI, value);
} catch(e) {}
return false;
};
</script>
`;
const JSDOM_OPTIONS = { runScripts: 'dangerously', resources: 'usable' };
const DOM = new JSDOM(JSDOM_TEMPLATE, JSDOM_OPTIONS);
const cache = {};
exports.convertTextToDelta = (text) => {
if (!cache.quill) {
cache.quill = new DOM.window.Quill('#editor');
}
cache.quill.setText(text);
let delta = cache.quill.getContents();
return delta;
};
exports.convertHtmlToDelta = (html) => {
if (!cache.quill) {
cache.quill = new DOM.window.Quill('#editor');
}
let delta = cache.quill.clipboard.convert(html);
return delta;
};
exports.convertDeltaToHtml = (delta) => {
if (!cache.quill) {
cache.quill = new DOM.window.Quill('#editor');
}
cache.quill.setContents(delta);
let html = cache.quill.root.innerHTML;
return html;
};