@pie-lib/editable-html 11.1.1 → 11.1.2-next.1595
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +12 -3322
- package/CHANGELOG.md +170 -100
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/block-tags.js +25 -0
- package/lib/block-tags.js.map +1 -0
- package/lib/constants.js +16 -0
- package/lib/constants.js.map +1 -0
- package/lib/editor.js +352 -90
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -9
- package/lib/index.js.map +1 -1
- package/lib/plugins/characters/index.js +8 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +12 -12
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/icons/index.js.map +1 -0
- package/lib/plugins/css/index.js +397 -0
- package/lib/plugins/css/index.js.map +1 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/customPlugin/index.js.map +1 -0
- package/lib/plugins/html/index.js +11 -7
- package/lib/plugins/html/index.js.map +1 -1
- package/lib/plugins/image/index.js +2 -1
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -4
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +270 -11
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +130 -0
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +91 -56
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +5 -2
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +98 -57
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/rendering/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +45 -7
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +69 -21
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +9 -4
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/math-templated/index.js.map +1 -0
- package/lib/plugins/respArea/utils.js +16 -1
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
- package/lib/plugins/table/index.js +43 -59
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +33 -4
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/textAlign/icons/index.js +226 -0
- package/lib/plugins/textAlign/icons/index.js.map +1 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/textAlign/index.js.map +1 -0
- package/lib/plugins/toolbar/default-toolbar.js +82 -27
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +5 -2
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +35 -11
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/serialization.js +233 -44
- package/lib/serialization.js.map +1 -1
- package/lib/shared/alert-dialog.js +75 -0
- package/package.json +7 -6
- package/src/__tests__/editor.test.jsx +363 -0
- package/src/__tests__/serialization.test.js +291 -0
- package/src/__tests__/utils.js +36 -0
- package/src/block-tags.js +17 -0
- package/src/constants.js +7 -0
- package/src/editor.jsx +307 -52
- package/src/index.jsx +19 -10
- package/src/plugins/characters/index.jsx +11 -3
- package/src/plugins/characters/utils.js +12 -12
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +346 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/index.jsx +9 -6
- package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
- package/src/plugins/image/__tests__/component.test.jsx +41 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
- package/src/plugins/image/__tests__/index.test.js +95 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/image/index.jsx +2 -1
- package/src/plugins/image/insert-image-handler.js +13 -6
- package/src/plugins/index.jsx +248 -5
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +130 -0
- package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
- package/src/plugins/math/__tests__/index.test.jsx +245 -0
- package/src/plugins/math/index.jsx +87 -56
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +3 -2
- package/src/plugins/media/media-dialog.js +106 -57
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +35 -5
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
- package/src/plugins/respArea/index.jsx +53 -7
- package/src/plugins/respArea/inline-dropdown/index.jsx +12 -5
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +11 -0
- package/src/plugins/table/CustomTablePlugin.js +113 -0
- package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
- package/src/plugins/table/index.jsx +46 -59
- package/src/plugins/table/table-toolbar.jsx +39 -2
- package/src/plugins/textAlign/icons/index.jsx +139 -0
- package/src/plugins/textAlign/index.jsx +23 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
- package/src/plugins/toolbar/default-toolbar.jsx +82 -20
- package/src/plugins/toolbar/done-button.jsx +3 -1
- package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
- package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
- package/src/plugins/toolbar/toolbar.jsx +31 -8
- package/src/serialization.jsx +213 -38
- package/README.md +0 -45
- package/deploy.sh +0 -16
- package/playground/image/data.js +0 -59
- package/playground/image/index.html +0 -22
- package/playground/image/index.jsx +0 -81
- package/playground/index.html +0 -25
- package/playground/mathquill/index.html +0 -22
- package/playground/mathquill/index.jsx +0 -155
- package/playground/package.json +0 -15
- package/playground/prod-test/index.html +0 -22
- package/playground/prod-test/index.jsx +0 -28
- package/playground/schema-override/data.js +0 -29
- package/playground/schema-override/image-plugin.jsx +0 -41
- package/playground/schema-override/index.html +0 -21
- package/playground/schema-override/index.jsx +0 -97
- package/playground/serialization/data.js +0 -29
- package/playground/serialization/image-plugin.jsx +0 -41
- package/playground/serialization/index.html +0 -22
- package/playground/serialization/index.jsx +0 -12
- package/playground/static.json +0 -3
- package/playground/table-examples.html +0 -70
- package/playground/webpack.config.js +0 -42
- package/static.json +0 -1
package/lib/serialization.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/serialization.jsx"],"names":["log","BLOCK_TAGS","div","span","p","blockquote","pre","h1","h2","h3","h4","h5","h6","MARK_TAGS","b","em","u","s","code","strong","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","marks","mark","Mark","isMark","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","obj","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","Object","assign","target","arguments","source","prototype","hasOwnProperty","call","options","undefined","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","wrapHtmlProperly","createElement","innerHTML","parseNode","childArray","hasParagraphs","find","child","forEach","remove","replaceWith","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to blocks.\n *\n * @type {Object}\n */\n\nexport const BLOCK_TAGS = {\n div: 'div',\n span: 'span',\n p: 'paragraph',\n blockquote: 'quote',\n pre: 'code',\n h1: 'heading-one',\n h2: 'heading-two',\n h3: 'heading-three',\n h4: 'heading-four',\n h5: 'heading-five',\n h6: 'heading-six',\n};\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n if (!mark) return;\n log('[deserialize] mark: ', mark);\n return {\n object: 'mark',\n type: mark,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n return <Tag>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n if (allWhitespace(n) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst wrapHtmlProperly = (markup) => {\n const el = document.createElement('div');\n\n el.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param el\n */\n const parseNode = (el) => {\n const childArray = Array.from(el.children);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n\n childArray.forEach((child) => {\n // removing empty blocks\n if ((child.nodeName === 'DIV' || child.nodeName === 'P') && child.childNodes.length === 0) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n child.replaceWith(p);\n }\n\n parseNode(child);\n });\n };\n\n parseNode(el);\n\n return el.innerHTML;\n};\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(wrapHtmlProperly(reduceRedundantNewLineCharacters(reduceMultipleBrs(html))));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
|
|
1
|
+
{"version":3,"sources":["../src/serialization.jsx"],"names":["log","MARK_TAGS","b","em","u","s","code","strong","blockquote","h3","sup","sub","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","BLOCK_TAGS","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","INLINE_TAGS","span","inlines","inlineTag","extraCSSRulesOpts","STYLES_MAP","fontSize","fontWeight","background","borderLeft","margin","padding","reactToHTMLAttributesMap","marks","mark","elClasses","hasCSSRule","names","find","name","includes","attrs","undefined","htmlAttrs","Object","keys","obj","Mark","isMark","additionalStyles","style","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","isWhiteSpace","isNotNearMarkup","nextSibling","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","assign","target","arguments","source","prototype","hasOwnProperty","call","options","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","fixHtmlCode","wrapperEl","createElement","innerHTML","fixParagraphs","child","p","forEach","attr","setAttribute","replaceWith","fixTables","tableArray","index","parent","nodesBefore","nodesAfter","allNodes","beforeEl","append","after","afterEl","emptyBlockCheck","parseNode","childArray","hasParagraphs","tables","remove","handleHtml","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\nimport { BLOCK_TAGS } from './block-tags';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n blockquote: 'blockquote',\n h3: 'h3',\n sup: 'sup',\n sub: 'sub',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style', 'align'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const INLINE_TAGS = {\n span: 'span',\n};\n\nconst inlines = {\n deserialize(el, next) {\n log('[inlines:deserialize] inline: ', el);\n const inlineTag = INLINE_TAGS[el.tagName.toLowerCase()];\n if (!inlineTag) return;\n log('[inlines:deserialize] inline: ', inlineTag);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === inlineTag) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'inline',\n type: inlineTag,\n /**\n * Here for rendering styles for all inline elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'inline') return;\n\n const jsonData = object.data.toJSON();\n\n log('[inlines:serialize] object: ', object, children);\n let key;\n\n for (key in INLINE_TAGS) {\n if (INLINE_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const extraCSSRulesOpts = {};\n\nconst STYLES_MAP = {\n h3: {\n fontSize: 'inherit',\n fontWeight: 'inherit',\n },\n blockquote: {\n background: '#f9f9f9',\n borderLeft: '5px solid #ccc',\n margin: '1.5em 10px',\n padding: '.5em 10px',\n },\n};\n\nconst reactToHTMLAttributesMap = {\n class: 'className',\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n const elClasses = el.getAttribute('class') || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (!mark && !hasCSSRule) {\n return;\n }\n\n log('[deserialize] mark: ', mark);\n const attrs = attributes.reduce(attributesToMap(el), {});\n const data = isEmpty(attrs) ? undefined : { attributes: attrs };\n\n return {\n object: 'mark',\n type: hasCSSRule ? 'css' : mark,\n /**\n * Here for rendering styles for all elements\n */\n data,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n const jsonData = object.data?.toJSON() || {};\n const elClasses = jsonData.attributes?.class || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (hasCSSRule) {\n const htmlAttrs = Object.keys(jsonData.attributes).reduce((obj, key) => {\n obj[reactToHTMLAttributesMap[key] || key] = jsonData.attributes[key];\n return obj;\n }, {});\n\n return <span {...htmlAttrs}>{children}</span>;\n }\n\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n const additionalStyles = STYLES_MAP[Tag];\n\n if (additionalStyles) {\n if (!jsonData.attributes) {\n jsonData.attributes = {};\n }\n\n jsonData.attributes.style = {\n ...jsonData.attributes.style,\n ...additionalStyles,\n };\n }\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n inlines,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n const isWhiteSpace = allWhitespace(n);\n const isNotNearMarkup =\n !MARK_TAGS[n.nextSibling?.tagName?.toLowerCase()] && !MARK_TAGS[n.previousSibling?.tagName?.toLowerCase()];\n\n if ((isWhiteSpace && isNotNearMarkup) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\n/**\n * Makes sure that the html provided respects the schema\n * rules for the slate editor.\n * @param markup\n * @returns {string}\n */\nconst fixHtmlCode = (markup) => {\n const wrapperEl = document.createElement('div');\n\n wrapperEl.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param child\n */\n const fixParagraphs = (child) => {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n\n Array.from(child.attributes).forEach((attr) => {\n p.setAttribute(attr.name, attr.value);\n });\n child.replaceWith(p);\n };\n\n /**\n * @summary Makes sure that tables are placed in the root document.\n * @description This function removes the tables from the nodes that are\n * placed inside the root element and places them exactly near\n * the parent element.\n * @param tableArray\n */\n const fixTables = (tableArray) => {\n tableArray.forEach((el) => {\n const { index, child, parent } = el;\n const nodesBefore = [];\n const nodesAfter = [];\n const allNodes = Array.from(parent.childNodes);\n let i;\n\n for (i = 0; i < allNodes.length; i++) {\n const node = allNodes[i];\n\n if (i < index) {\n nodesBefore.push(node);\n } else if (i > index) {\n nodesAfter.push(node);\n }\n }\n\n // creating the element that is going to be placed instead of the parent\n const beforeEl = document.createElement(parent.nodeName);\n\n beforeEl.append(...nodesBefore);\n\n // replacing parent with the beforeElement\n parent.replaceWith(beforeEl);\n\n // adding the table right after the before element\n beforeEl.after(child);\n\n // creating the element that is going to be placed after the table\n const afterEl = document.createElement(parent.nodeName);\n\n afterEl.append(...nodesAfter);\n\n // adding the after element near the table\n child.after(afterEl);\n });\n };\n\n const emptyBlockCheck = (node) =>\n (node.nodeName === 'DIV' || node.nodeName === 'P' || node.nodeName === 'LI') && node.childNodes.length === 0;\n\n const parseNode = (el) => {\n const childArray = Array.from(el.childNodes);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n const tables = [];\n\n childArray.forEach((child, index) => {\n // removing empty blocks\n if (emptyBlockCheck(child)) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n fixParagraphs(child);\n }\n\n if (wrapperEl !== el && child.nodeName === 'TABLE') {\n // we don't need to fix tables in the root element\n tables.push({\n index,\n child,\n parent: el,\n });\n }\n\n parseNode(child);\n });\n\n if (tables.length) {\n fixTables(tables);\n }\n };\n\n parseNode(wrapperEl);\n\n return wrapperEl.innerHTML;\n};\n\nexport const handleHtml = (html) => fixHtmlCode(reduceRedundantNewLineCharacters(reduceMultipleBrs(html)));\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(handleHtml(html));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _core = require("@material-ui/core");
|
|
15
|
+
|
|
16
|
+
var _styles = require("@material-ui/core/styles");
|
|
17
|
+
|
|
18
|
+
var AlertDialog = function AlertDialog(_ref) {
|
|
19
|
+
var text = _ref.text,
|
|
20
|
+
title = _ref.title,
|
|
21
|
+
onClose = _ref.onClose,
|
|
22
|
+
onConfirm = _ref.onConfirm,
|
|
23
|
+
open = _ref.open,
|
|
24
|
+
onCloseText = _ref.onCloseText,
|
|
25
|
+
onConfirmText = _ref.onConfirmText,
|
|
26
|
+
classes = _ref.classes;
|
|
27
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
|
|
28
|
+
open: open,
|
|
29
|
+
onClose: onClose
|
|
30
|
+
}, title && /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, {
|
|
31
|
+
className: classes.heading
|
|
32
|
+
}, title), text && /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, /*#__PURE__*/_react["default"].createElement(_core.DialogContentText, {
|
|
33
|
+
className: classes.subheading
|
|
34
|
+
}, text)), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, onClose && /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
35
|
+
onClick: onClose,
|
|
36
|
+
color: "primary"
|
|
37
|
+
}, onCloseText), onConfirm && /*#__PURE__*/_react["default"].createElement(_core.Button, {
|
|
38
|
+
autoFocus: true,
|
|
39
|
+
onClick: onConfirm,
|
|
40
|
+
color: "primary"
|
|
41
|
+
}, onConfirmText)));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
AlertDialog.defaultProps = {
|
|
45
|
+
onCloseText: 'CANCEL',
|
|
46
|
+
onConfirmText: 'OK'
|
|
47
|
+
};
|
|
48
|
+
AlertDialog.propTypes = {
|
|
49
|
+
text: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
|
|
50
|
+
title: _propTypes["default"].string,
|
|
51
|
+
onClose: _propTypes["default"].func,
|
|
52
|
+
onConfirm: _propTypes["default"].func,
|
|
53
|
+
open: _propTypes["default"].bool,
|
|
54
|
+
onConfirmText: _propTypes["default"].string,
|
|
55
|
+
onCloseText: _propTypes["default"].string,
|
|
56
|
+
classes: _propTypes["default"].object
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
var styles = function styles() {
|
|
60
|
+
return {
|
|
61
|
+
heading: {
|
|
62
|
+
'& h2': {
|
|
63
|
+
fontSize: 'max(1.25rem, 18px)'
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
subheading: {
|
|
67
|
+
fontSize: 'max(1rem, 14px)'
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
var _default = (0, _styles.withStyles)(styles)(AlertDialog);
|
|
73
|
+
|
|
74
|
+
exports["default"] = _default;
|
|
75
|
+
//# sourceMappingURL=alert-dialog.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/editable-html",
|
|
3
|
-
"version": "11.1.
|
|
3
|
+
"version": "11.1.2-next.1595+4ac095ca",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
"@material-ui/core": "^3.8.3",
|
|
11
11
|
"@material-ui/icons": "^3.0.2",
|
|
12
12
|
"@material-ui/styles": "^3.0.0-alpha.10",
|
|
13
|
-
"@pie-lib/drag": "^2.2.
|
|
14
|
-
"@pie-lib/math-
|
|
15
|
-
"@pie-lib/math-
|
|
16
|
-
"@pie-lib/
|
|
13
|
+
"@pie-lib/drag": "^2.2.10-next.1639+4ac095ca",
|
|
14
|
+
"@pie-lib/math-input": "^6.11.5-next.1844+4ac095ca",
|
|
15
|
+
"@pie-lib/math-rendering": "^3.2.2-next.1642+4ac095ca",
|
|
16
|
+
"@pie-lib/math-toolbar": "^1.11.31-next.1844+4ac095ca",
|
|
17
|
+
"@pie-lib/render-ui": "^4.15.10-next.1639+4ac095ca",
|
|
17
18
|
"change-case": "^3.0.2",
|
|
18
19
|
"classnames": "^2.2.6",
|
|
19
20
|
"debug": "^4.1.1",
|
|
@@ -47,6 +48,6 @@
|
|
|
47
48
|
"publishConfig": {
|
|
48
49
|
"access": "public"
|
|
49
50
|
},
|
|
50
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "4ac095ca931e5fe8f131f28f41dd61093bd55d98",
|
|
51
52
|
"scripts": {}
|
|
52
53
|
}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { htmlToValue, valueToHtml } from '../index';
|
|
3
|
+
import { Editor } from '../editor';
|
|
4
|
+
import { shallow, configure } from 'enzyme';
|
|
5
|
+
import debug from 'debug';
|
|
6
|
+
|
|
7
|
+
import { mockComponents } from './utils';
|
|
8
|
+
|
|
9
|
+
const log = debug('@pie-lib:editable-html:test');
|
|
10
|
+
|
|
11
|
+
const value = htmlToValue('hi');
|
|
12
|
+
|
|
13
|
+
const resizeWindow = (width, height) => {
|
|
14
|
+
window.innerWidth = width;
|
|
15
|
+
window.innerHeight = height;
|
|
16
|
+
window.dispatchEvent(new Event('resize'));
|
|
17
|
+
};
|
|
18
|
+
jest.mock('@pie-lib/math-toolbar', () => ({}));
|
|
19
|
+
jest.mock('@pie-lib/math-input', () => {
|
|
20
|
+
HorizontalKeypad: () => <div>HorizontalKeypad</div>;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
expect.extend({
|
|
24
|
+
toEqualHtml(value, html) {
|
|
25
|
+
const v = valueToHtml(value);
|
|
26
|
+
const pass = v === html;
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
pass,
|
|
30
|
+
message: () => `expected ${html} to match ${v}`,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('logic', () => {
|
|
36
|
+
test('onFocus/onBlur saves the value', async () => {
|
|
37
|
+
const wrapper = shallow(
|
|
38
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
await wrapper.instance().onFocus();
|
|
42
|
+
|
|
43
|
+
const v = htmlToValue('hi');
|
|
44
|
+
|
|
45
|
+
expect(wrapper.state('stashedValue')).toEqualHtml('<div>hi</div>');
|
|
46
|
+
|
|
47
|
+
wrapper.instance().onChange({ value: htmlToValue('new value') });
|
|
48
|
+
|
|
49
|
+
expect(wrapper.state('value')).toEqualHtml('<div>new value</div>');
|
|
50
|
+
|
|
51
|
+
return wrapper
|
|
52
|
+
.instance()
|
|
53
|
+
.onBlur({})
|
|
54
|
+
.then(() => {
|
|
55
|
+
expect(wrapper.state('value')).toEqualHtml('<div>new value</div>');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('onFocus does not change focus if related target is a button from language keypad', async () => {
|
|
61
|
+
const wrapper = shallow(
|
|
62
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const event = {
|
|
66
|
+
relatedTarget: {
|
|
67
|
+
tagName: 'button',
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const change = {
|
|
72
|
+
focus: jest.fn(),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
wrapper.instance().keypadInteractionDetected = true;
|
|
76
|
+
|
|
77
|
+
await wrapper.instance().onFocus(event, change);
|
|
78
|
+
|
|
79
|
+
expect(change.focus).not.toHaveBeenCalled();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('onFocus changes focus if related target is not a button from language keypad', async () => {
|
|
83
|
+
const wrapper = shallow(
|
|
84
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const event = {
|
|
88
|
+
relatedTarget: {
|
|
89
|
+
tagName: 'div',
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const change = {
|
|
94
|
+
focus: jest.fn(),
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
await wrapper.instance().onFocus(event, change);
|
|
98
|
+
|
|
99
|
+
expect(change.focus).toHaveBeenCalled();
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test('onFocus stashes the value', async () => {
|
|
103
|
+
const wrapper = shallow(
|
|
104
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
await wrapper.instance().onFocus();
|
|
108
|
+
|
|
109
|
+
expect(wrapper.state('stashedValue')).toEqualHtml('<div>hi</div>');
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('onBlur does not set focusToolbar if related target is RawDoneButton', async () => {
|
|
113
|
+
const wrapper = shallow(
|
|
114
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
const toolbarElement = document.createElement('div');
|
|
118
|
+
const relatedTarget = document.createElement('button');
|
|
119
|
+
relatedTarget.className = 'RawDoneButton';
|
|
120
|
+
toolbarElement.className = 'toolbar';
|
|
121
|
+
toolbarElement.appendChild(relatedTarget);
|
|
122
|
+
|
|
123
|
+
wrapper.instance().toolbarRef = toolbarElement;
|
|
124
|
+
wrapper.instance().doneButtonRef.current = relatedTarget;
|
|
125
|
+
|
|
126
|
+
const event = { relatedTarget };
|
|
127
|
+
|
|
128
|
+
await wrapper.instance().onBlur(event);
|
|
129
|
+
|
|
130
|
+
expect(wrapper.state('focusToolbar')).toBe(false);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('handleToolbarFocus sets focusToolbar to true', () => {
|
|
134
|
+
const wrapper = shallow(
|
|
135
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
wrapper.instance().handleToolbarFocus();
|
|
139
|
+
expect(wrapper.state('focusToolbar')).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('handleToolbarBlur sets focusToolbar to false if toolbar does not contain focus', (done) => {
|
|
143
|
+
const wrapper = shallow(
|
|
144
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
wrapper.instance().toolbarContainsFocus = jest.fn().mockReturnValue(false);
|
|
148
|
+
|
|
149
|
+
wrapper.instance().handleToolbarBlur();
|
|
150
|
+
|
|
151
|
+
setTimeout(() => {
|
|
152
|
+
expect(wrapper.state('focusToolbar')).toBe(false);
|
|
153
|
+
done();
|
|
154
|
+
}, 20);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test('handleToolbarBlur does not set focusToolbar to false if toolbar contains focus', (done) => {
|
|
158
|
+
const wrapper = shallow(
|
|
159
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
wrapper.instance().toolbarContainsFocus = jest.fn().mockReturnValue(true);
|
|
163
|
+
|
|
164
|
+
wrapper.setState({ focusToolbar: true });
|
|
165
|
+
|
|
166
|
+
wrapper.instance().handleToolbarBlur();
|
|
167
|
+
|
|
168
|
+
setTimeout(() => {
|
|
169
|
+
expect(wrapper.state('focusToolbar')).toBe(true);
|
|
170
|
+
done();
|
|
171
|
+
}, 20);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('toolbarContainsFocus correctly detects focus within toolbar', () => {
|
|
175
|
+
const wrapper = shallow(
|
|
176
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
const toolbarElement = document.createElement('div');
|
|
180
|
+
const activeElement = document.createElement('button');
|
|
181
|
+
toolbarElement.appendChild(activeElement);
|
|
182
|
+
|
|
183
|
+
Object.defineProperty(document, 'activeElement', {
|
|
184
|
+
value: activeElement,
|
|
185
|
+
configurable: true,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
wrapper.instance().toolbarRef = toolbarElement;
|
|
189
|
+
|
|
190
|
+
expect(wrapper.instance().toolbarContainsFocus()).toBe(true);
|
|
191
|
+
|
|
192
|
+
Object.defineProperty(document, 'activeElement', {
|
|
193
|
+
value: document.createElement('div'),
|
|
194
|
+
configurable: true,
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
expect(wrapper.instance().toolbarContainsFocus()).toBe(false);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test('onBlur sets focusToolbar to true if related target is within toolbar', async () => {
|
|
201
|
+
const wrapper = shallow(
|
|
202
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
const toolbarElement = document.createElement('div');
|
|
206
|
+
const relatedTarget = document.createElement('button');
|
|
207
|
+
toolbarElement.className = 'toolbar';
|
|
208
|
+
toolbarElement.appendChild(relatedTarget);
|
|
209
|
+
|
|
210
|
+
wrapper.instance().toolbarRef = toolbarElement;
|
|
211
|
+
|
|
212
|
+
const event = { relatedTarget };
|
|
213
|
+
|
|
214
|
+
await wrapper.instance().onBlur(event);
|
|
215
|
+
|
|
216
|
+
expect(wrapper.state('focusToolbar')).toBe(true);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
describe('buildSizeStyle', () => {
|
|
220
|
+
const wrapper = (extras) => {
|
|
221
|
+
const props = Object.assign({}, extras);
|
|
222
|
+
return shallow(
|
|
223
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} {...props} />,
|
|
224
|
+
);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
it('builds width with px', () => {
|
|
228
|
+
const w = wrapper({ width: 100 });
|
|
229
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
230
|
+
width: '100px',
|
|
231
|
+
height: undefined,
|
|
232
|
+
minHeight: undefined,
|
|
233
|
+
maxHeight: undefined,
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('returns undefined for % ', () => {
|
|
238
|
+
const w = wrapper({ height: '100%', width: '100%' });
|
|
239
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
240
|
+
width: undefined,
|
|
241
|
+
height: undefined,
|
|
242
|
+
minHeight: undefined,
|
|
243
|
+
maxHeight: undefined,
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it('builds height', () => {
|
|
248
|
+
const w = wrapper({ height: 100 });
|
|
249
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
250
|
+
width: undefined,
|
|
251
|
+
height: '100px',
|
|
252
|
+
minHeight: undefined,
|
|
253
|
+
maxHeight: undefined,
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it('builds minHeight', () => {
|
|
258
|
+
const w = wrapper({ minHeight: 100 });
|
|
259
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
260
|
+
width: undefined,
|
|
261
|
+
height: undefined,
|
|
262
|
+
minHeight: '100px',
|
|
263
|
+
maxHeight: undefined,
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('builds maxHeight', () => {
|
|
268
|
+
const w = wrapper({ maxHeight: 100 });
|
|
269
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
270
|
+
width: undefined,
|
|
271
|
+
height: undefined,
|
|
272
|
+
minHeight: undefined,
|
|
273
|
+
maxHeight: '100px',
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('builds width with calc()', () => {
|
|
278
|
+
const w = wrapper({ width: 'calc(10em + 42px)' });
|
|
279
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
280
|
+
width: 'calc(10em + 42px)',
|
|
281
|
+
height: undefined,
|
|
282
|
+
minHeight: undefined,
|
|
283
|
+
maxHeight: undefined,
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('builds width with ch', () => {
|
|
288
|
+
const w = wrapper({ width: '9ch' });
|
|
289
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
290
|
+
width: '9ch',
|
|
291
|
+
height: undefined,
|
|
292
|
+
minHeight: undefined,
|
|
293
|
+
maxHeight: undefined,
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('builds', () => {
|
|
298
|
+
const w = wrapper({});
|
|
299
|
+
expect(w.instance().buildSizeStyle()).toEqual({
|
|
300
|
+
width: undefined,
|
|
301
|
+
height: undefined,
|
|
302
|
+
minHeight: undefined,
|
|
303
|
+
maxHeight: undefined,
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
describe('onResize', () => {
|
|
309
|
+
it('should display html of current state on Resize', () => {
|
|
310
|
+
const wrapper = shallow(
|
|
311
|
+
<Editor editorRef={jest.fn()} value={value} classes={{}} onChange={jest.fn()} onRef={jest.fn()} />,
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
resizeWindow(500, 300);
|
|
315
|
+
expect(wrapper.state('value')).toEqualHtml('<div>hi</div>');
|
|
316
|
+
|
|
317
|
+
wrapper.instance().onChange({ value: htmlToValue('new value') });
|
|
318
|
+
resizeWindow(1024, 768);
|
|
319
|
+
expect(wrapper.state('value')).toEqualHtml('<div>new value</div>');
|
|
320
|
+
|
|
321
|
+
resizeWindow(500, 300);
|
|
322
|
+
expect(wrapper.state('value')).toEqualHtml('<div>new value</div>');
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
describe('MathMl', () => {
|
|
327
|
+
beforeEach(() => {});
|
|
328
|
+
|
|
329
|
+
it('should not call runSerializationOnMarkup if mathMl props are not there', () => {
|
|
330
|
+
const runSerializationOnMarkup = jest.fn();
|
|
331
|
+
|
|
332
|
+
const wrapper = shallow(
|
|
333
|
+
<Editor
|
|
334
|
+
editorRef={jest.fn()}
|
|
335
|
+
value={value}
|
|
336
|
+
classes={{}}
|
|
337
|
+
onChange={jest.fn()}
|
|
338
|
+
onRef={jest.fn()}
|
|
339
|
+
runSerializationOnMarkup={runSerializationOnMarkup}
|
|
340
|
+
/>,
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
expect(runSerializationOnMarkup).not.toHaveBeenCalled();
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
it('should call runSerializationOnMarkup if mmlEditing or mmlOutput are true', () => {
|
|
347
|
+
const runSerializationOnMarkup = jest.fn();
|
|
348
|
+
|
|
349
|
+
const wrapper = shallow(
|
|
350
|
+
<Editor
|
|
351
|
+
editorRef={jest.fn()}
|
|
352
|
+
value={value}
|
|
353
|
+
classes={{}}
|
|
354
|
+
onChange={jest.fn()}
|
|
355
|
+
onRef={jest.fn()}
|
|
356
|
+
runSerializationOnMarkup={runSerializationOnMarkup}
|
|
357
|
+
mathMlOptions={{ mmlOutput: true }}
|
|
358
|
+
/>,
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
expect(runSerializationOnMarkup).toHaveBeenCalled();
|
|
362
|
+
});
|
|
363
|
+
});
|