react-native-cn-quill
Version:
react-native quill richtext editor
2 lines (1 loc) • 10.2 kB
TypeScript
export declare const editor_js = "\n<script>\n(function (doc) {\n\n var getAttributes = function (node) {\n const attrArray = node?.attributes ? [...node.attributes] : [];\n return attrArray.reduce((_attr, node) => ({ ..._attr, [node.nodeName]: node.nodeValue}), {});\n }\n\n var sendMessage = function (message) {\n if (window.ReactNativeWebView)\n window.ReactNativeWebView.postMessage(message);\n else console.log(message)\n }\n\n // Get the dimensions of the quill content field\n var getDimensions = function (key) {\n const dimensionsJson = JSON.stringify({\n type: 'get-dimensions',\n key: key,\n data: {\n width: quill.root.scrollWidth,\n height: quill.root.scrollHeight\n }\n });\n sendMessage(dimensionsJson);\n }\n\n var getSelectedFormats = function () {\n var formats = quill.getFormat();\n var contentChanged = JSON.stringify({\n type: 'format-change',\n data: {formats} });\n sendMessage(contentChanged);\n }\n //Format text at user\u2019s current selection\n var formatSelection = function (name, value) {\n var range = quill.getSelection();\n if (!range) quill.focus();\n quill.format(name, value);\n getSelectedFormats();\n }\n\n var hasFocus = function (key) {\n var hs = quill.hasFocus();\n\n var hsJson = JSON.stringify({\n type: 'has-focus',\n key: key,\n data: hs });\n sendMessage(hsJson);\n }\n\n var getContents = function (key, index, length) {\n var getContentsData = quill.getContents(index, length);\n var getContentsDataJson = JSON.stringify({\n type: 'get-contents',\n key: key,\n data: getContentsData });\n sendMessage(getContentsDataJson);\n }\n\n var getText = function (key, index, length) {\n var getTextData = quill.getText(index, length);\n var getTextDataJson = JSON.stringify({\n type: 'get-text',\n key: key,\n data: getTextData });\n sendMessage(getTextDataJson);\n }\n\n var getLength = function (key) {\n var getLengthData = quill.getLength();\n var getLengthDataJson = JSON.stringify({\n type: 'get-length',\n key: key,\n data: getLengthData });\n sendMessage(getLengthDataJson);\n }\n\n var getHtml = function (key) {\n var html = quill.root.innerHTML;\n var getHtmlJson = JSON.stringify({\n type: 'get-html',\n key: key,\n data: html\n });\n sendMessage(getHtmlJson);\n }\n\n var insertEmbed = function (index, type, value) {\n quill.insertEmbed(index, type, value);\n }\n\n var insertText = function (index, text, formats={}) {\n quill.insertText(index, text, formats);\n }\n\n var setContents = function (key, delta) {\n try {\n var setContentsData = quill.setContents(delta);\n var setContentsDataJson = JSON.stringify({\n type: 'set-contents',\n key: key,\n data: setContentsData });\n sendMessage(setContentsDataJson);\n } catch (error) {\n var errorJson = JSON.stringify({\n type: 'set-contents-error',\n key: key,\n data: { message: error.message, stack: error.stack } });\n sendMessage(errorJson);\n\n var setContentsDataJson = JSON.stringify({\n type: 'set-contents',\n key: key,\n data: {} });\n sendMessage(setContentsDataJson);\n }\n }\n\n var setText = function (text) {\n quill.setText(text);\n }\n\n var setPlaceholder = function (text) {\n quill.root.dataset.placeholder = text;\n }\n\n var updateContents = function (delta) {\n quill.updateContents(delta);\n }\n\n var dangerouslyPasteHTML = function (index, html) {\n quill.clipboard.dangerouslyPasteHTML(index, html);\n }\n\n var setSelection = function (index, length = 0, source = 'api') {\n quill.setSelection(index, length, source);\n }\n\n var getBounds = function (key, index, length = 0) {\n var boundsData = quill.getBounds(index, length);\n var getBoundsJson = JSON.stringify({\n type: 'get-bounds',\n key: key,\n data: boundsData });\n sendMessage(getBoundsJson);\n }\n\n var getSelection = function (key, focus = false) {\n var getSelectionData = quill.getSelection(focus);\n var getSelectionJson = JSON.stringify({\n type: 'get-selection',\n key: key,\n data: getSelectionData \n });\n sendMessage(getSelectionJson);\n }\n\n const getFormat = function (key, index, length) {\n const getFormatData = quill.getFormat(index, length);\n const getFormatJson = JSON.stringify({\n type: 'get-format',\n key: key,\n data: getFormatData\n });\n sendMessage(getFormatJson);\n }\n\n const getLeaf = function (key, index) {\n const [leaf, offset] = quill.getLeaf(index);\n const getLeafData = leaf ? {\n offset,\n text: leaf.text,\n length: leaf.text.length,\n index: quill.getIndex(leaf),\n attributes: getAttributes(leaf?.parent?.domNode)\n } : null\n const getLeafJson = JSON.stringify({\n type: 'get-leaf',\n key: key,\n data: getLeafData\n });\n sendMessage(getLeafJson);\n }\n\n const removeFormat = function (key, index, length) {\n const removeFormatData = quill.removeFormat(index, length);\n const removeFormatJson = JSON.stringify({\n type: 'remove-format',\n key: key,\n data: removeFormatData\n });\n sendMessage(removeFormatJson);\n }\n\n const formatText = function (key, index, length, formats, source) {\n const formatTextData = quill.formatText(index, length, formats, source);\n const formatTextJson = JSON.stringify({\n type: 'format-text',\n key: key,\n data: formatTextData\n });\n sendMessage(formatTextJson);\n }\n\n\n var getRequest = function (event) {\n var msg = JSON.parse(event.data);\n switch (msg.command) {\n case 'format':\n formatSelection(msg.name, msg.value);\n break;\n case 'focus':\n quill.focus();\n break;\n case 'blur':\n quill.blur();\n break;\n case 'enable':\n quill.enable(msg.value);\n break;\n case 'hasFocus':\n hasFocus(msg.key);\n break;\n case 'deleteText':\n quill.deleteText(msg.index, msg.length);\n break;\n case 'getDimensions':\n getDimensions(msg.key);\n break;\n case 'getContents':\n getContents(msg.key, msg.index, msg.length);\n break;\n case 'getText':\n getText(msg.key, msg.index, msg.length);\n break;\n case 'getBounds':\n getBounds(msg.key, msg.index, msg.length);\n break;\n case 'getSelection':\n getSelection(msg.key, msg.focus);\n break;\n case 'getFormat': \n getFormat(msg.key, msg?.index, msg?.length);\n break;\n case 'getLeaf':\n getLeaf(msg.key, msg.index);\n break;\n case 'setSelection':\n setSelection(msg.index, msg.length, msg.source);\n break;\n case 'getHtml':\n getHtml(msg.key);\n break;\n case 'getLength':\n getLength(msg.key);\n break;\n case 'insertEmbed':\n insertEmbed(msg.index, msg.type, msg.value);\n break;\n case 'insertText':\n insertText(msg.index, msg.text, msg.formats);\n break;\n case 'setContents':\n setContents(msg.key, msg.delta);\n break;\n case 'setText':\n setText(msg.text);\n break;\n case 'setPlaceholder':\n setPlaceholder(msg.text);\n break;\n case 'updateContents':\n updateContents(msg.delta);\n break;\n case 'dangerouslyPasteHTML':\n dangerouslyPasteHTML(msg.index, msg.html);\n break;\n case 'removeFormat':\n removeFormat(msg.key, msg.index, msg.length);\n break;\n case 'formatText':\n formatText(msg.key, msg.index, msg.length, msg.formats, msg.source);\n break;\n default:\n break;\n }\n };\n\n document.addEventListener(\"message\", getRequest, false);\n window.addEventListener(\"message\", getRequest, false);\n\n quill.on('editor-change', function(eventName, ...args) {\n if (eventName === 'text-change') {\n getSelectedFormats();\n } else if (eventName === 'selection-change') {\n var range = quill.getSelection();\n if (range) {\n getSelectedFormats();\n }\n }\n var getEditorChange = JSON.stringify({\n type: 'editor-change',\n data: { eventName, args }\n });\n sendMessage(getEditorChange);\n\n // Notify of dimensions update\n const getDimensionsJson = JSON.stringify({\n type: 'dimensions-change',\n data: {\n width: quill.root.scrollWidth,\n height: quill.root.scrollHeight\n }\n });\n sendMessage(getDimensionsJson);\n });\n\n quill.on('text-change', function(delta, oldDelta, source) {\n var getTextChange = JSON.stringify({\n type: 'text-change',\n data: { delta, oldDelta, source }\n });\n sendMessage(getTextChange);\n\n // Notify of HTML update\n var html = quill.root.innerHTML;\n var getHtmlJson = JSON.stringify({\n type: 'html-change',\n data: { html }\n });\n sendMessage(getHtmlJson);\n });\n\n quill.on('selection-change', function(range, oldRange, source) {\n var getSelectionChange = JSON.stringify({\n type: 'selection-change',\n data: { range, oldRange, source } });\n sendMessage(getSelectionChange)\n });\n\n quill.root.addEventListener('blur', function () {\n sendMessage(JSON.stringify({type: 'blur'}));\n });\n\n quill.root.addEventListener('focus', function () {\n sendMessage(JSON.stringify({type: 'focus'}));\n });\n\n\n\n // Report initial dimensions when the editor is instantiated\n setTimeout(() => {\n const getDimensionsJson = JSON.stringify({\n type: 'dimensions-change',\n data: {\n width: quill.root.scrollWidth,\n height: quill.root.scrollHeight\n }\n });\n sendMessage(getDimensionsJson);\n }, 250)\n\n})(document)\n</script>\n";