@pie-lib/editable-html 9.5.13 → 10.0.0-beta.1

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.
Files changed (144) hide show
  1. package/CHANGELOG.md +0 -302
  2. package/lib/components.js +116 -0
  3. package/lib/components.js.map +1 -0
  4. package/lib/editor.js +418 -103
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +101 -155
  7. package/lib/index.js.map +1 -1
  8. package/lib/new-serialization.js +320 -0
  9. package/lib/new-serialization.js.map +1 -0
  10. package/lib/old-serialization.js +330 -0
  11. package/lib/parse-html.js +1 -1
  12. package/lib/parse-html.js.map +1 -1
  13. package/lib/plugins/characters/custom-popper.js +1 -1
  14. package/lib/plugins/characters/custom-popper.js.map +1 -1
  15. package/lib/plugins/characters/index.js +21 -19
  16. package/lib/plugins/characters/index.js.map +1 -1
  17. package/lib/plugins/characters/utils.js +1 -1
  18. package/lib/plugins/characters/utils.js.map +1 -1
  19. package/lib/plugins/hotKeys/index.js +67 -0
  20. package/lib/plugins/hotKeys/index.js.map +1 -0
  21. package/lib/plugins/image/alt-dialog.js +1 -6
  22. package/lib/plugins/image/alt-dialog.js.map +1 -1
  23. package/lib/plugins/image/component.js +70 -53
  24. package/lib/plugins/image/component.js.map +1 -1
  25. package/lib/plugins/image/image-toolbar.js +7 -9
  26. package/lib/plugins/image/image-toolbar.js.map +1 -1
  27. package/lib/plugins/image/index.js +83 -27
  28. package/lib/plugins/image/index.js.map +1 -1
  29. package/lib/plugins/image/insert-image-handler.js +72 -33
  30. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  31. package/lib/plugins/index.js +23 -41
  32. package/lib/plugins/index.js.map +1 -1
  33. package/lib/plugins/list/index.js +64 -100
  34. package/lib/plugins/list/index.js.map +1 -1
  35. package/lib/plugins/math/index.js +86 -60
  36. package/lib/plugins/math/index.js.map +1 -1
  37. package/lib/plugins/media/index.js +202 -132
  38. package/lib/plugins/media/index.js.map +1 -1
  39. package/lib/plugins/media/media-dialog.js +17 -16
  40. package/lib/plugins/media/media-dialog.js.map +1 -1
  41. package/lib/plugins/media/media-toolbar.js +3 -3
  42. package/lib/plugins/media/media-toolbar.js.map +1 -1
  43. package/lib/plugins/media/media-wrapper.js +21 -58
  44. package/lib/plugins/media/media-wrapper.js.map +1 -1
  45. package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
  46. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  47. package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
  48. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  49. package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
  50. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  51. package/lib/plugins/respArea/icons/index.js +13 -15
  52. package/lib/plugins/respArea/icons/index.js.map +1 -1
  53. package/lib/plugins/respArea/index.js +87 -53
  54. package/lib/plugins/respArea/index.js.map +1 -1
  55. package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
  56. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  57. package/lib/plugins/respArea/utils.js +17 -20
  58. package/lib/plugins/respArea/utils.js.map +1 -1
  59. package/lib/plugins/table/icons/index.js +1 -1
  60. package/lib/plugins/table/icons/index.js.map +1 -1
  61. package/lib/plugins/table/index.js +381 -212
  62. package/lib/plugins/table/index.js.map +1 -1
  63. package/lib/plugins/table/table-toolbar.js +5 -6
  64. package/lib/plugins/table/table-toolbar.js.map +1 -1
  65. package/lib/plugins/toolbar/default-toolbar.js +55 -11
  66. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  67. package/lib/plugins/toolbar/done-button.js +1 -1
  68. package/lib/plugins/toolbar/done-button.js.map +1 -1
  69. package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
  70. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  71. package/lib/plugins/toolbar/index.js +1 -2
  72. package/lib/plugins/toolbar/index.js.map +1 -1
  73. package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
  74. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  75. package/lib/plugins/toolbar/toolbar.js +253 -239
  76. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  77. package/lib/plugins/utils.js +27 -2
  78. package/lib/plugins/utils.js.map +1 -1
  79. package/lib/serialization.js +1 -1
  80. package/lib/serialization.js.map +1 -1
  81. package/lib/slate-editor.js +302 -0
  82. package/lib/test-serializer.js +189 -0
  83. package/lib/test-serializer.js.map +1 -0
  84. package/lib/theme.js +1 -1
  85. package/lib/theme.js.map +1 -1
  86. package/package.json +18 -14
  87. package/playground/image/data.js +20 -20
  88. package/playground/image/index.html +22 -20
  89. package/playground/image/index.jsx +12 -10
  90. package/playground/index.html +25 -23
  91. package/playground/mathquill/index.html +23 -20
  92. package/playground/mathquill/index.jsx +18 -22
  93. package/playground/prod-test/index.html +24 -20
  94. package/playground/prod-test/index.jsx +5 -3
  95. package/playground/schema-override/data.js +10 -10
  96. package/playground/schema-override/image-plugin.jsx +3 -4
  97. package/playground/schema-override/index.html +21 -19
  98. package/playground/schema-override/index.jsx +13 -14
  99. package/playground/serialization/data.js +10 -10
  100. package/playground/serialization/image-plugin.jsx +3 -4
  101. package/playground/serialization/index.html +22 -20
  102. package/playground/table-examples.html +5 -8
  103. package/playground/webpack.config.js +10 -10
  104. package/src/components.js +135 -0
  105. package/src/editor.jsx +478 -141
  106. package/src/index.jsx +71 -95
  107. package/src/new-serialization.jsx +291 -0
  108. package/src/parse-html.js +1 -1
  109. package/src/plugins/characters/custom-popper.js +7 -7
  110. package/src/plugins/characters/index.jsx +33 -34
  111. package/src/plugins/characters/utils.js +81 -81
  112. package/src/plugins/hotKeys/index.js +54 -0
  113. package/src/plugins/image/alt-dialog.jsx +4 -5
  114. package/src/plugins/image/component.jsx +106 -89
  115. package/src/plugins/image/image-toolbar.jsx +27 -19
  116. package/src/plugins/image/index.jsx +75 -43
  117. package/src/plugins/image/insert-image-handler.js +62 -27
  118. package/src/plugins/index.jsx +23 -41
  119. package/src/plugins/list/index.jsx +70 -95
  120. package/src/plugins/math/index.jsx +102 -82
  121. package/src/plugins/media/index.jsx +159 -124
  122. package/src/plugins/media/media-dialog.js +98 -71
  123. package/src/plugins/media/media-toolbar.jsx +8 -8
  124. package/src/plugins/media/media-wrapper.jsx +29 -30
  125. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
  126. package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
  127. package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
  128. package/src/plugins/respArea/icons/index.jsx +11 -14
  129. package/src/plugins/respArea/index.jsx +92 -52
  130. package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
  131. package/src/plugins/respArea/utils.jsx +26 -35
  132. package/src/plugins/table/icons/index.jsx +17 -11
  133. package/src/plugins/table/index.jsx +288 -231
  134. package/src/plugins/table/table-toolbar.jsx +15 -11
  135. package/src/plugins/toolbar/default-toolbar.jsx +65 -19
  136. package/src/plugins/toolbar/done-button.jsx +4 -4
  137. package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
  138. package/src/plugins/toolbar/index.jsx +2 -3
  139. package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
  140. package/src/plugins/toolbar/toolbar.jsx +244 -221
  141. package/src/plugins/utils.js +21 -4
  142. package/src/serialization.jsx +32 -32
  143. package/src/test-serializer.js +139 -0
  144. package/src/test-serializer.js.rej +20 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","toolbar","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","nodeType","hasLatex","hasAttribute","unwrapped","wrapType","nodes","wrapper","serialize","l","decoded"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin() {\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["log","debug","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","onFocus","onBlur","onClick","editor","nodePath","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","apply","type","path","properties","newProperties","ReactEditor","focus","Transforms","move","distance","unit","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","isEqual","propTypes","PropTypes","object","shape","string","children","array","isRequired","value","arrayOf","onToolbarDone","func","MathPlugin","toolbar","icon","inlineMath","insertNode","rules","isVoid","isInline","element","supports","schema","document","match","pluginStyles","parentNode","p","position","top","renderNode","html","get","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","text","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","jsx","nodeType","hasLatex","hasAttribute","unWrapMath","unwrapped","wrapType","wrapper","serialize","decoded","wrapMath"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Editor, Inline, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { jsx } from 'slate-hyperscript';\nimport Functions from '@material-ui/icons/Functions';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\n\nimport { BLOCK_TAGS } from '../../new-serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map(key => ({\n name: key,\n latex: key,\n write: key,\n label: key\n }));\n}\n\nexport const CustomToolbarComp = React.memo(\n props => {\n const { node, onFocus, onBlur, onClick, editor, nodePath } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = latex => {\n const update = {\n ...node.data,\n latex\n };\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n ReactEditor.focus(editor);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n };\n\n const latex = node.data.latex;\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: {\n math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {}\n } = {}\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = isEqual(node, nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n }\n);\n\nCustomToolbarComp.propTypes = {\n editor: PropTypes.object,\n node: PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n }).isRequired,\n value: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n })\n ).isRequired,\n onToolbarDone: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func\n};\n\nexport default function MathPlugin() {\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: editor => {\n log('[insertMath]');\n const math = inlineMath();\n\n editor.insertNode(math);\n },\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp\n },\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return element.type === 'math' ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return element.type === 'math' ? true : isInline(element);\n };\n\n return editor;\n },\n supports: node => node && node.type === 'math',\n schema: {\n document: { match: [{ type: 'math' }] }\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial'\n };\n }\n },\n\n renderNode: props => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n }\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\n\nexport const inlineMath = () => ({\n type: 'math',\n data: {\n latex: ''\n },\n children: [{ text: '' }]\n});\n\nconst htmlDecode = input => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = el => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = input => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el, children) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild =\n BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n return jsx('element', {\n type: 'mathml',\n data: {\n html: newHtml\n }\n });\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType\n }\n });\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const { latex, wrapper } = object.data || {};\n log('[serialize] latex: ', latex);\n const decoded = htmlDecode(lessThanHandling(latex));\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const { html } = object.data || {};\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AACA,IAAMA,GAAG,GAAG,IAAAC,iBAAA,EAAM,qCAAN,CAAZ;AAEA,IAAMC,SAAS,GAAG,CAAlB;;AAEA,SAASC,sBAAT,GAA8C;EAAA,IAAdC,OAAc,uEAAJ,EAAI;EAC5C,OAAOA,OAAO,CAACC,GAAR,CAAY,UAAAC,GAAG;IAAA,OAAK;MACzBC,IAAI,EAAED,GADmB;MAEzBE,KAAK,EAAEF,GAFkB;MAGzBG,KAAK,EAAEH,GAHkB;MAIzBI,KAAK,EAAEJ;IAJkB,CAAL;EAAA,CAAf,CAAP;AAMD;;AAEM,IAAMK,iBAAiB,gBAAGC,iBAAA,CAAMC,IAAN,CAC/B,UAAAC,KAAK,EAAI;EACP,IAAQC,IAAR,GAA6DD,KAA7D,CAAQC,IAAR;EAAA,IAAcC,OAAd,GAA6DF,KAA7D,CAAcE,OAAd;EAAA,IAAuBC,MAAvB,GAA6DH,KAA7D,CAAuBG,MAAvB;EAAA,IAA+BC,OAA/B,GAA6DJ,KAA7D,CAA+BI,OAA/B;EAAA,IAAwCC,MAAxC,GAA6DL,KAA7D,CAAwCK,MAAxC;EAAA,IAAgDC,QAAhD,GAA6DN,KAA7D,CAAgDM,QAAhD;;EACA,WAAwBN,KAAK,IAAI,EAAjC;EAAA,IAAQO,WAAR,QAAQA,WAAR;;EACA,YAAiBA,WAAW,IAAI,EAAhC;EAAA,IAAQC,IAAR,SAAQA,IAAR;;EACA,YAAgEA,IAAI,IAAI,EAAxE;EAAA,IAAQC,UAAR,SAAQA,UAAR;EAAA,IAAoBC,UAApB,SAAoBA,UAApB;EAAA,kCAAgCC,oBAAhC;EAAA,IAAgCA,oBAAhC,sCAAuD,IAAvD;;EAEA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAAAlB,KAAK,EAAI;IACtB,IAAMmB,MAAM,mCACPZ,IAAI,CAACa,IADE;MAEVpB,KAAK,EAALA;IAFU,EAAZ;;IAIAW,MAAM,CAACU,KAAP,CAAa;MACXC,IAAI,EAAE,UADK;MAEXC,IAAI,EAAEX,QAFK;MAGXY,UAAU,EAAE;QACVJ,IAAI,EAAEb,IAAI,CAACa;MADD,CAHD;MAMXK,aAAa,EAAE;QAAEL,IAAI,EAAED;MAAR;IANJ,CAAb;;IAQAO,uBAAA,CAAYC,KAAZ,CAAkBhB,MAAlB;;IACAiB,iBAAA,CAAWC,IAAX,CAAgBlB,MAAhB,EAAwB;MAAEmB,QAAQ,EAAE,CAAZ;MAAeC,IAAI,EAAE;IAArB,CAAxB;EACD,CAfD;;EAiBA,IAAM/B,KAAK,GAAGO,IAAI,CAACa,IAAL,CAAUpB,KAAxB;EAEA,oBACE,gCAAC,wBAAD;IACE,SAAS,MADX;IAEE,cAAc,EAAEL,sBAAsB,CAACqB,UAAD,CAFxC;IAGE,KAAK,EAAEhB,KAHT;IAIE,MAAM,EAAEkB,MAJV;IAKE,MAAM,EAAET,MALV;IAME,OAAO,EAAED,OANX;IAOE,OAAO,EAAEE,OAPX;IAQE,UAAU,EAAEK,UARd;IASE,oBAAoB,EAAEE;EATxB,EADF;AAaD,CAvC8B,EAwC/B,UAACe,IAAD,EAAOC,IAAP,EAAgB;EACd,IAAQ1B,IAAR,GAAwFyB,IAAxF,CAAQzB,IAAR;EAAA,wBAAwFyB,IAAxF,CAAcnB,WAAd;EAAA,mDAAiF,EAAjF;EAAA,8CAA6BC,IAA7B;EAAA,2DAA0E,EAA1E;EAAA,IAAqCC,UAArC,yBAAqCA,UAArC;EAAA,IAAiDE,oBAAjD,yBAAiDA,oBAAjD;EACA,IACQiB,QADR,GAKID,IALJ,CACE1B,IADF;EAAA,wBAKI0B,IALJ,CAEEpB,WAFF;EAAA,mDAIM,EAJN;EAAA,8CAGIC,IAHJ;EAAA,2DAG2F,EAH3F;EAAA,IAGwBqB,cAHxB,yBAGYpB,UAHZ;EAAA,IAG8DqB,wBAH9D,yBAGwCnB,oBAHxC;EAMA,IAAMoB,iBAAiB,GAAGtB,UAAU,KAAKoB,cAAzC;EACA,IAAMG,2BAA2B,GAAGrB,oBAAoB,KAAKmB,wBAA7D;EAEA,IAAMG,KAAK,GAAG,IAAAC,mBAAA,EAAQjC,IAAR,EAAc2B,QAAd,CAAd;EACA,OAAOK,KAAK,IAAI,CAACF,iBAAV,IAA+B,CAACC,2BAAvC;AACD,CArD8B,CAA1B;;;AAwDPnC,iBAAiB,CAACsC,SAAlB,GAA8B;EAC5B9B,MAAM,EAAE+B,qBAAA,CAAUC,MADU;EAE5BpC,IAAI,EAAEmC,qBAAA,CAAUE,KAAV,CAAgB;IACpBtB,IAAI,EAAEoB,qBAAA,CAAUG,MADI;IAEpBC,QAAQ,EAAEJ,qBAAA,CAAUK,KAFA;IAGpB3B,IAAI,EAAEsB,qBAAA,CAAUC;EAHI,CAAhB,EAIHK,UANyB;EAO5BC,KAAK,EAAEP,qBAAA,CAAUQ,OAAV,CACLR,qBAAA,CAAUE,KAAV,CAAgB;IACdtB,IAAI,EAAEoB,qBAAA,CAAUG,MADF;IAEdC,QAAQ,EAAEJ,qBAAA,CAAUK,KAFN;IAGd3B,IAAI,EAAEsB,qBAAA,CAAUC;EAHF,CAAhB,CADK,EAMLK,UAb0B;EAc5BG,aAAa,EAAET,qBAAA,CAAUU,IAdG;EAe5B5C,OAAO,EAAEkC,qBAAA,CAAUU,IAfS;EAgB5B1C,OAAO,EAAEgC,qBAAA,CAAUU,IAhBS;EAiB5B3C,MAAM,EAAEiC,qBAAA,CAAUU;AAjBU,CAA9B;;AAoBe,SAASC,UAAT,GAAsB;EACnC,OAAO;IACLtD,IAAI,EAAE,MADD;IAELuD,OAAO,EAAE;MACPC,IAAI,eAAE,gCAAC,qBAAD,OADC;MAEP7C,OAAO,EAAE,iBAAAC,MAAM,EAAI;QACjBnB,GAAG,CAAC,cAAD,CAAH;QACA,IAAMsB,IAAI,GAAG0C,UAAU,EAAvB;QAEA7C,MAAM,CAAC8C,UAAP,CAAkB3C,IAAlB;MACD,CAPM;;MAQP;AACN;AACA;AACA;AACA;AACA;AACA;MACMX,iBAAiB,EAAjBA;IAfO,CAFJ;IAmBLuD,KAAK,EAAE,eAAA/C,MAAM,EAAI;MACf,IAAQgD,MAAR,GAA6BhD,MAA7B,CAAQgD,MAAR;MAAA,IAAgBC,QAAhB,GAA6BjD,MAA7B,CAAgBiD,QAAhB;;MAEAjD,MAAM,CAACgD,MAAP,GAAgB,UAAAE,OAAO,EAAI;QACzB,OAAOA,OAAO,CAACvC,IAAR,KAAiB,MAAjB,GAA0B,IAA1B,GAAiCqC,MAAM,CAACE,OAAD,CAA9C;MACD,CAFD;;MAIAlD,MAAM,CAACiD,QAAP,GAAkB,UAAAC,OAAO,EAAI;QAC3B,OAAOA,OAAO,CAACvC,IAAR,KAAiB,MAAjB,GAA0B,IAA1B,GAAiCsC,QAAQ,CAACC,OAAD,CAAhD;MACD,CAFD;;MAIA,OAAOlD,MAAP;IACD,CA/BI;IAgCLmD,QAAQ,EAAE,kBAAAvD,IAAI;MAAA,OAAIA,IAAI,IAAIA,IAAI,CAACe,IAAL,KAAc,MAA1B;IAAA,CAhCT;IAiCLyC,MAAM,EAAE;MACNC,QAAQ,EAAE;QAAEC,KAAK,EAAE,CAAC;UAAE3C,IAAI,EAAE;QAAR,CAAD;MAAT;IADJ,CAjCH;IAqCL4C,YAAY,EAAE,sBAAC3D,IAAD,EAAO4D,UAAP,EAAmBC,CAAnB,EAAyB;MACrC,IAAIA,CAAJ,EAAO;QACL,OAAO;UACLC,QAAQ,EAAE,UADL;UAELC,GAAG,EAAE;QAFA,CAAP;MAID;IACF,CA5CI;IA8CLC,UAAU,EAAE,oBAAAjE,KAAK,EAAI;MACnB,IAAIA,KAAK,CAACC,IAAN,CAAWe,IAAX,KAAoB,MAAxB,EAAgC;QAC9B9B,GAAG,CAAC,qBAAD,EAAwBc,KAAK,CAACC,IAAN,CAAWa,IAAnC,CAAH;QACA,oBAAO,gCAAC,wBAAD,EAAiBd,KAAjB,CAAP;MACD;MAED;AACN;AACA;;;MACM,IAAIA,KAAK,CAACC,IAAN,CAAWe,IAAX,KAAoB,QAAxB,EAAkC;QAChC,IAAMkD,IAAI,GAAGlE,KAAK,CAACC,IAAN,CAAWa,IAAX,CAAgBqD,GAAhB,CAAoB,MAApB,CAAb;QAEA,oBAAO,sEAAUnE,KAAK,CAACoE,UAAhB;UAA4B,uBAAuB,EAAE;YAAEC,MAAM,EAAEH;UAAV;QAArD,GAAP;MACD;IACF;EA5DI,CAAP;AA8DD;;AAEDnB,UAAU,CAACuB,cAAX,GAA4B,gBAA5B;AACAvB,UAAU,CAACwB,eAAX,GAA6B,iBAA7B;AACAxB,UAAU,CAACyB,MAAX,GAAoB,QAApB;AACAzB,UAAU,CAAC0B,aAAX,GAA2B,eAA3B;;AAEO,IAAMvB,UAAU,GAAG,SAAbA,UAAa;EAAA,OAAO;IAC/BlC,IAAI,EAAE,MADyB;IAE/BF,IAAI,EAAE;MACJpB,KAAK,EAAE;IADH,CAFyB;IAK/B8C,QAAQ,EAAE,CAAC;MAAEkC,IAAI,EAAE;IAAR,CAAD;EALqB,CAAP;AAAA,CAAnB;;;;AAQP,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAC,KAAK,EAAI;EAC1B,IAAMC,GAAG,GAAG,IAAIC,SAAJ,GAAgBC,eAAhB,CAAgCH,KAAhC,EAAuC,WAAvC,CAAZ;EAEA,OAAOC,GAAG,CAACG,eAAJ,CAAoBC,WAA3B;AACD,CAJD;;AAMA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAAC,EAAE,EAAI;EACvB,OAAO,CAAEA,EAAE,IAAIA,EAAE,CAACC,OAAV,IAAsB,EAAvB,EAA2BC,WAA3B,EAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAAV,KAAK,EAAI;EAChC,IAAMW,UAAU,GAAGX,KAAK,CAACY,KAAN,CAAY,GAAZ,CAAnB,CADgC,CAGhC;;EACA,IAAIZ,KAAK,CAACa,MAAN,GAAe,CAAnB,EAAsB;IACpB,OAAOF,UAAU,CAACG,MAAX,CAAkB,UAACC,EAAD,EAAKC,IAAL,EAAc;MACrC;AACN;AACA;AACA;AACA;AACA;MACM,IAAIA,IAAI,CAACjC,KAAL,CAAW,sBAAX,CAAJ,EAAwC;QACtC,iBAAUgC,EAAV,SAAeA,EAAE,GAAG,GAAH,GAAS,EAA1B,SAA+BC,IAA/B;MACD;;MAED,iBAAUD,EAAV,SAAeA,EAAE,GAAG,MAAH,GAAY,EAA7B,SAAkCC,IAAlC;IACD,CAZM,EAYJ,EAZI,CAAP;EAaD;;EAED,OAAOhB,KAAP;AACD,CArBD;;AAuBO,IAAMiB,aAAa,GAAG;EAC3BC,WAD2B,uBACfX,EADe,EACX3C,QADW,EACD;IACxB,IAAM4C,OAAO,GAAGF,UAAU,CAACC,EAAD,CAA1B;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;;IACI,IAAMY,YAAY,GAChBC,4BAAA,CAAWZ,OAAX,KAAuBD,EAAE,CAACc,UAAH,CAAcR,MAAd,KAAyB,CAAhD,IAAqDP,UAAU,CAACC,EAAE,CAACe,UAAJ,CAAV,KAA8B,MADrF;IAEAhH,GAAG,CAAC,sBAAD,EAAyBkG,OAAzB,CAAH;IAEA;AACJ;AACA;;IACI,IAAIA,OAAO,KAAK,MAAZ,IAAuBD,EAAE,CAACgB,OAAH,IAAchB,EAAE,CAACgB,OAAH,CAAWnF,IAAX,KAAoB,QAAzD,IAAsE+E,YAA1E,EAAwF;MACtF,IAAMK,OAAO,GAAGL,YAAY,GAAGZ,EAAE,CAACkB,SAAN,GAAkBlB,EAAE,CAACmB,SAAjD;MAEA,OAAO,IAAAC,qBAAA,EAAI,SAAJ,EAAe;QACpBvF,IAAI,EAAE,QADc;QAEpBF,IAAI,EAAE;UACJoD,IAAI,EAAEkC;QADF;MAFc,CAAf,CAAP;IAMD;;IAED,IAAIjB,EAAE,CAACqB,QAAH,KAAgBpH,SAApB,EAA+B;MAC7B;IACD;;IAED,IAAIgG,OAAO,KAAK,MAAhB,EAAwB;MACtB;IACD;;IAED,IAAMqB,QAAQ,GAAGtB,EAAE,CAACuB,YAAH,CAAgB,YAAhB,KAAiCvB,EAAE,CAACuB,YAAH,CAAgB,OAAhB,CAAlD;;IAEA,IAAID,QAAJ,EAAc;MACZ,IAAM/G,KAAK,GAAGiF,UAAU,CAACQ,EAAE,CAACkB,SAAJ,CAAxB;;MACA,kBAAgC,IAAAM,yBAAA,EAAWjH,KAAX,CAAhC;MAAA,IAAQkH,SAAR,eAAQA,SAAR;MAAA,IAAmBC,QAAnB,eAAmBA,QAAnB;;MACA3H,GAAG,CAAC,6BAAD,EAAgC0H,SAAhC,EAA2CC,QAA3C,CAAH;MAEA,OAAO,IAAAN,qBAAA,EAAI,SAAJ,EAAe;QACpBvF,IAAI,EAAE,MADc;QAEpBF,IAAI,EAAE;UACJpB,KAAK,EAAEkH,SADH;UAEJE,OAAO,EAAED;QAFL;MAFc,CAAf,CAAP;IAOD;EACF,CAnD0B;EAoD3BE,SApD2B,qBAoDjB1E,MApDiB,EAoDT;IAChB,IAAIA,MAAM,CAACrB,IAAP,KAAgB,MAApB,EAA4B;MAC1B,YAA2BqB,MAAM,CAACvB,IAAP,IAAe,EAA1C;MAAA,IAAQpB,KAAR,SAAQA,KAAR;MAAA,IAAeoH,OAAf,SAAeA,OAAf;;MACA5H,GAAG,CAAC,qBAAD,EAAwBQ,KAAxB,CAAH;MACA,IAAMsH,OAAO,GAAGrC,UAAU,CAACW,gBAAgB,CAAC5F,KAAD,CAAjB,CAA1B;MACA,oBACE;QAAM,cAAW,EAAjB;QAAoB,YAAUsH;MAA9B,GACG,IAAAC,uBAAA,EAASD,OAAT,EAAkBF,OAAlB,CADH,CADF;IAKD;IAED;AACJ;AACA;;;IACI,IAAIzE,MAAM,CAACrB,IAAP,KAAgB,QAApB,EAA8B;MAC5B,YAAiBqB,MAAM,CAACvB,IAAP,IAAe,EAAhC;MAAA,IAAQoD,IAAR,SAAQA,IAAR;;MAEA,oBAAO;QAAM,aAAU,QAAhB;QAAyB,uBAAuB,EAAE;UAAEG,MAAM,EAAEH;QAAV;MAAlD,EAAP;IACD;EACF;AAxE0B,CAAtB"}
@@ -10,6 +10,8 @@ exports.serialization = exports.insertDialog = void 0;
10
10
 
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
12
 
13
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
+
13
15
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
16
 
15
17
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -20,10 +22,18 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
20
22
 
21
23
  var _slate = require("slate");
22
24
 
25
+ var _slateHyperscript = require("slate-hyperscript");
26
+
27
+ var _slateReact = require("slate-react");
28
+
23
29
  var _Theaters = _interopRequireDefault(require("@material-ui/icons/Theaters"));
24
30
 
25
31
  var _VolumeUp = _interopRequireDefault(require("@material-ui/icons/VolumeUp"));
26
32
 
33
+ var _get = _interopRequireDefault(require("lodash/get"));
34
+
35
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
36
+
27
37
  var _debug = _interopRequireDefault(require("debug"));
28
38
 
29
39
  var _mediaDialog = _interopRequireDefault(require("./media-dialog"));
@@ -39,6 +49,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
39
49
 
40
50
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
51
 
52
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
53
+
54
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
55
+
56
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
57
+
42
58
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image');
43
59
 
44
60
  var removeDialogs = function removeDialogs() {
@@ -79,18 +95,59 @@ var insertDialog = function insertDialog(props) {
79
95
  };
80
96
 
81
97
  exports.insertDialog = insertDialog;
98
+
99
+ var getNodeBy = function getNodeBy(editor, callback) {
100
+ var descendants = _slate.Node.descendants(editor, {
101
+ reverse: true
102
+ });
103
+
104
+ var _iterator = _createForOfIteratorHelper(descendants),
105
+ _step;
106
+
107
+ try {
108
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
109
+ var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
110
+ descendant = _step$value[0],
111
+ descendantPath = _step$value[1];
112
+
113
+ if (callback(descendant, descendantPath)) {
114
+ return [descendant, descendantPath];
115
+ }
116
+ }
117
+ } catch (err) {
118
+ _iterator.e(err);
119
+ } finally {
120
+ _iterator.f();
121
+ }
122
+ };
123
+
124
+ var moveFocusAfterMedia = function moveFocusAfterMedia(editor, node) {
125
+ if (!editor || !node) {
126
+ return;
127
+ }
128
+
129
+ setTimeout(function () {
130
+ _slateReact.ReactEditor.focus(editor);
131
+
132
+ _slate.Transforms.move(editor, {
133
+ distance: 1,
134
+ unit: 'offset'
135
+ });
136
+ }, 0);
137
+ };
138
+
82
139
  var types = ['audio', 'video'];
83
140
 
84
141
  function MediaPlugin(type, opts) {
85
142
  var toolbar = {
86
143
  icon: type === 'audio' ? /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null),
87
- onClick: function onClick(value, onChange) {
144
+ onClick: function onClick(editor) {
88
145
  log('[toolbar] onClick');
89
-
90
- var inline = _slate.Inline.create({
146
+ var inline = {
91
147
  type: type,
92
148
  isVoid: true,
93
149
  data: {
150
+ newMedia: true,
94
151
  editing: false,
95
152
  ends: undefined,
96
153
  height: undefined,
@@ -99,104 +156,142 @@ function MediaPlugin(type, opts) {
99
156
  src: undefined,
100
157
  url: undefined,
101
158
  width: undefined
102
- }
103
- });
104
-
105
- var change = value.change().insertInline(inline);
106
- onChange(change);
159
+ },
160
+ children: [{
161
+ text: ''
162
+ }]
163
+ };
164
+ editor.insertNode(inline);
107
165
  insertDialog({
108
166
  type: type,
109
167
  opts: opts,
110
168
  callback: function callback(val, data) {
111
- var nodeIsThere = change.value.document.findDescendant(function (d) {
112
- return d.key === inline.key;
113
- });
114
-
115
- if (nodeIsThere) {
169
+ var _getNodeBy = getNodeBy(editor, function (descendant) {
170
+ return descendant.type === type && (0, _get["default"])(descendant, 'data.newMedia');
171
+ }),
172
+ _getNodeBy2 = (0, _slicedToArray2["default"])(_getNodeBy, 2),
173
+ node = _getNodeBy2[0],
174
+ nodePath = _getNodeBy2[1];
175
+
176
+ if (node) {
116
177
  if (!val) {
117
- var c = change.removeNodeByKey(inline.key);
118
- onChange(c, function () {
119
- return opts.focus();
178
+ editor.apply({
179
+ type: 'remove_node',
180
+ path: nodePath
120
181
  });
121
182
  } else {
122
- var _c = change.setNodeByKey(inline.key, {
123
- data: data
124
- });
125
-
126
- onChange(_c, function () {
127
- return opts.focus('beginning', nodeIsThere);
183
+ editor.apply({
184
+ type: 'set_node',
185
+ path: nodePath,
186
+ properties: {
187
+ data: node.data
188
+ },
189
+ newProperties: {
190
+ data: _objectSpread(_objectSpread({}, data), {}, {
191
+ newMedia: false
192
+ })
193
+ }
128
194
  });
129
195
  }
130
- } else {
131
- opts.focus();
132
196
  }
197
+
198
+ moveFocusAfterMedia(editor, node);
133
199
  }
134
200
  });
135
- },
136
- supports: function supports(node) {
137
- return node.object === 'inline' && node.type === type;
138
201
  }
139
202
  };
140
203
  return {
141
204
  name: type,
142
205
  toolbar: toolbar,
143
- deleteNode: function deleteNode(e, node, value, onChange) {
144
- e.preventDefault();
145
- var change = value.change().removeNodeByKey(node.key);
146
- onChange(change);
206
+ rules: function rules(editor) {
207
+ var isVoid = editor.isVoid,
208
+ isInline = editor.isInline;
209
+
210
+ editor.isVoid = function (element) {
211
+ return ['audio', 'video'].includes(element.type) ? true : isVoid(element);
212
+ };
213
+
214
+ editor.isInline = function (element) {
215
+ return ['audio', 'video'].includes(element.type) ? true : isInline(element);
216
+ };
217
+
218
+ return editor;
219
+ },
220
+ supports: function supports(node) {
221
+ return node.type === type;
147
222
  },
148
223
  renderNode: function renderNode(props) {
149
224
  if (props.node.type === type) {
150
225
  var node = props.node,
151
- key = props.key;
226
+ editor = props.editor;
152
227
  var data = node.data;
153
- var jsonData = data.toJSON();
154
- var src = jsonData.src,
155
- height = jsonData.height,
156
- width = jsonData.width,
157
- editing = jsonData.editing,
158
- tag = jsonData.tag,
159
- rest = (0, _objectWithoutProperties2["default"])(jsonData, _excluded2);
160
-
161
- var handleEdit = function handleEdit() {
162
- var change = opts.createChange();
163
- var c = change.setNodeByKey(key, {
164
- data: _objectSpread(_objectSpread({}, jsonData), {}, {
165
- editing: true
166
- })
228
+
229
+ var _omit = (0, _omit2["default"])(data, ['newMedia', 'urlToUse']),
230
+ src = _omit.src,
231
+ height = _omit.height,
232
+ width = _omit.width,
233
+ editing = _omit.editing,
234
+ tag = _omit.tag,
235
+ rest = (0, _objectWithoutProperties2["default"])(_omit, _excluded2);
236
+
237
+ var attributes = _objectSpread(_objectSpread({}, rest), props.attributes);
238
+
239
+ var handleEdit = function handleEdit(event) {
240
+ var nodeToEdit = _slateReact.ReactEditor.toSlateNode(editor, event.target);
241
+
242
+ var nodePath = _slateReact.ReactEditor.findPath(editor, nodeToEdit);
243
+
244
+ editor.apply({
245
+ type: 'set_node',
246
+ path: nodePath,
247
+ properties: {
248
+ data: node.data
249
+ },
250
+ newProperties: {
251
+ data: _objectSpread(_objectSpread({}, data), {}, {
252
+ editing: true
253
+ })
254
+ }
167
255
  });
168
- opts.onChange(c, function () {
169
- insertDialog(_objectSpread(_objectSpread({}, jsonData), {}, {
170
- edit: true,
171
- type: type,
172
- opts: opts,
173
- callback: function callback(val, data) {
174
- var key = node.key;
175
- var nodeIsThere = change.value.document.findDescendant(function (d) {
176
- return d.type === type && d.data.get('editing');
256
+ insertDialog(_objectSpread(_objectSpread({}, data), {}, {
257
+ edit: true,
258
+ type: type,
259
+ opts: opts,
260
+ callback: function callback(val, data) {
261
+ var _getNodeBy3 = getNodeBy(editor, function (descendant) {
262
+ return descendant.type === type && (0, _get["default"])(descendant, 'data.editing');
263
+ }),
264
+ _getNodeBy4 = (0, _slicedToArray2["default"])(_getNodeBy3, 2),
265
+ nodeIsThere = _getNodeBy4[0],
266
+ nodePath = _getNodeBy4[1];
267
+
268
+ if (nodeIsThere && val) {
269
+ editor.apply({
270
+ type: 'set_node',
271
+ path: nodePath,
272
+ properties: {
273
+ data: node.data
274
+ },
275
+ newProperties: {
276
+ data: _objectSpread(_objectSpread({}, data), {}, {
277
+ editing: true
278
+ })
279
+ }
177
280
  });
178
-
179
- if (nodeIsThere && val) {
180
- var _c2 = change.setNodeByKey(key, {
181
- data: data,
182
- editing: false
183
- });
184
-
185
- opts.onChange(_c2, function () {
186
- return opts.focus('beginning', nodeIsThere);
187
- });
188
- } else {
189
- opts.focus();
190
- }
191
281
  }
192
- }));
193
- });
282
+ }
283
+ }));
194
284
  };
195
285
 
196
- var handleDelete = function handleDelete() {
197
- var change = opts.createChange();
198
- var c = change.removeNodeByKey(node.key);
199
- opts.onChange(c);
286
+ var handleDelete = function handleDelete(event) {
287
+ var nodeToEdit = _slateReact.ReactEditor.toSlateNode(editor, event.target);
288
+
289
+ var nodePath = _slateReact.ReactEditor.findPath(editor, nodeToEdit);
290
+
291
+ editor.apply({
292
+ type: 'remove_node',
293
+ path: nodePath
294
+ });
200
295
  };
201
296
 
202
297
  var style = {};
@@ -210,11 +305,11 @@ function MediaPlugin(type, opts) {
210
305
  }
211
306
 
212
307
  if (tag === 'audio') {
213
- return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
214
- editor: true,
308
+ return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], {
215
309
  "data-type": type,
216
- width: style.width
217
- }, rest), /*#__PURE__*/_react["default"].createElement("audio", {
310
+ width: style.width,
311
+ attributes: attributes
312
+ }, /*#__PURE__*/_react["default"].createElement("audio", {
218
313
  controls: "controls"
219
314
  }, /*#__PURE__*/_react["default"].createElement("source", {
220
315
  type: "audio/mp3",
@@ -222,14 +317,16 @@ function MediaPlugin(type, opts) {
222
317
  })), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
223
318
  hideEdit: true,
224
319
  onRemove: handleDelete
225
- }));
320
+ }), props.children);
226
321
  }
227
322
 
228
- return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], (0, _extends2["default"])({
229
- editor: true,
323
+ return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], {
230
324
  "data-type": type,
231
- width: style.width
232
- }, rest), /*#__PURE__*/_react["default"].createElement("iframe", (0, _extends2["default"])({
325
+ width: style.width,
326
+ attributes: attributes
327
+ }, /*#__PURE__*/_react["default"].createElement("div", {
328
+ contentEditable: false
329
+ }, /*#__PURE__*/_react["default"].createElement("iframe", (0, _extends2["default"])({
233
330
  frameBorder: "0",
234
331
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
235
332
  allowFullScreen: true,
@@ -238,37 +335,8 @@ function MediaPlugin(type, opts) {
238
335
  }, rest, style)), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
239
336
  onEdit: handleEdit,
240
337
  onRemove: handleDelete
241
- }));
338
+ })), props.children);
242
339
  }
243
- },
244
- normalizeNode: function normalizeNode(node) {
245
- var textNodeMap = {};
246
- var updateNodesArray = [];
247
- var index = 0;
248
- if (node.object !== 'document') return;
249
- node.findDescendant(function (d) {
250
- if (d.object === 'text') {
251
- textNodeMap[index] = d;
252
- }
253
-
254
- var isMedia = types.indexOf(d.type) >= 0;
255
-
256
- if (isMedia) {
257
- if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {
258
- updateNodesArray.push(textNodeMap[index - 1]);
259
- }
260
- }
261
-
262
- index++;
263
- });
264
- if (!updateNodesArray.length) return;
265
- return function (change) {
266
- change.withoutNormalization(function () {
267
- updateNodesArray.forEach(function (n) {
268
- return change.insertTextByKey(n.key, 0, ' ');
269
- });
270
- });
271
- };
272
340
  }
273
341
  };
274
342
  }
@@ -304,10 +372,8 @@ var serialization = {
304
372
  log('deserialize: ', name);
305
373
  var width = parseInt(el.getAttribute('width'), 10) || null;
306
374
  var height = parseInt(el.getAttribute('height'), 10) || null;
307
- var out = {
308
- object: 'inline',
375
+ var out = (0, _slateHyperscript.jsx)('element', {
309
376
  type: type,
310
- isVoid: true,
311
377
  data: {
312
378
  tag: tag,
313
379
  src: src || el.getAttribute('src'),
@@ -319,26 +385,30 @@ var serialization = {
319
385
  width: width,
320
386
  url: url
321
387
  }
322
- };
388
+ });
323
389
  log('return object: ', out);
324
390
  return out;
325
391
  },
326
- serialize: function serialize(object
327
- /*, children*/
328
- ) {
392
+ serialize: function serialize(object) {
329
393
  var typeIndex = types.indexOf(object.type);
330
- if (typeIndex < 0) return;
394
+
395
+ if (typeIndex < 0) {
396
+ return;
397
+ }
398
+
331
399
  var type = types[typeIndex];
332
- var data = object.data;
333
- var editing = data.get('editing');
334
- var tag = data.get('tag');
335
- var ends = data.get('ends');
336
- var src = data.get('src');
337
- var starts = data.get('starts');
338
- var title = data.get('title');
339
- var width = data.get('width');
340
- var height = data.get('height');
341
- var url = data.get('url');
400
+
401
+ var _ref2 = object.data || {},
402
+ editing = _ref2.editing,
403
+ tag = _ref2.tag,
404
+ ends = _ref2.ends,
405
+ src = _ref2.src,
406
+ starts = _ref2.starts,
407
+ title = _ref2.title,
408
+ width = _ref2.width,
409
+ height = _ref2.height,
410
+ url = _ref2.url;
411
+
342
412
  var style = {};
343
413
 
344
414
  if (width) {
@@ -381,4 +451,4 @@ var serialization = {
381
451
  }
382
452
  };
383
453
  exports.serialization = serialization;
384
- //# sourceMappingURL=index.js.map
454
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsInJlbW92ZURpYWxvZ3MiLCJwcmV2RGlhbG9ncyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJzIiwicmVtb3ZlIiwiaW5zZXJ0RGlhbG9nIiwicHJvcHMiLCJuZXdFbCIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiY2FsbGJhY2siLCJvcHRzIiwicmVzdCIsImluaXRpYWxCb2R5T3ZlcmZsb3ciLCJib2R5Iiwic3R5bGUiLCJvdmVyZmxvdyIsImNsYXNzTmFtZSIsImhhbmRsZUNsb3NlIiwidmFsIiwiZGF0YSIsImVsIiwidXBsb2FkU291bmRTdXBwb3J0IiwiUmVhY3RET00iLCJyZW5kZXIiLCJhcHBlbmRDaGlsZCIsImdldE5vZGVCeSIsImVkaXRvciIsImRlc2NlbmRhbnRzIiwiU2xhdGVOb2RlIiwicmV2ZXJzZSIsImRlc2NlbmRhbnQiLCJkZXNjZW5kYW50UGF0aCIsIm1vdmVGb2N1c0FmdGVyTWVkaWEiLCJub2RlIiwic2V0VGltZW91dCIsIlJlYWN0RWRpdG9yIiwiZm9jdXMiLCJUcmFuc2Zvcm1zIiwibW92ZSIsImRpc3RhbmNlIiwidW5pdCIsInR5cGVzIiwiTWVkaWFQbHVnaW4iLCJ0b29sYmFyIiwiaWNvbiIsIm9uQ2xpY2siLCJpbmxpbmUiLCJpc1ZvaWQiLCJuZXdNZWRpYSIsImVkaXRpbmciLCJlbmRzIiwidW5kZWZpbmVkIiwiaGVpZ2h0IiwidGl0bGUiLCJzdGFydHMiLCJzcmMiLCJ1cmwiLCJ3aWR0aCIsImNoaWxkcmVuIiwidGV4dCIsImluc2VydE5vZGUiLCJnZXQiLCJub2RlUGF0aCIsImFwcGx5IiwicGF0aCIsInByb3BlcnRpZXMiLCJuZXdQcm9wZXJ0aWVzIiwibmFtZSIsInJ1bGVzIiwiaXNJbmxpbmUiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJzdXBwb3J0cyIsInJlbmRlck5vZGUiLCJvbWl0IiwidGFnIiwiYXR0cmlidXRlcyIsImhhbmRsZUVkaXQiLCJldmVudCIsIm5vZGVUb0VkaXQiLCJ0b1NsYXRlTm9kZSIsInRhcmdldCIsImZpbmRQYXRoIiwiZWRpdCIsIm5vZGVJc1RoZXJlIiwiaGFuZGxlRGVsZXRlIiwic2VyaWFsaXphdGlvbiIsImRlc2VyaWFsaXplIiwiZGF0YXNldCIsInR5cGVJbmRleCIsImluZGV4T2YiLCJFbGVtZW50IiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiZmlyc3RDaGlsZCIsImdldEF0dHJpYnV0ZSIsInBhcnNlSW50Iiwib3V0IiwianN4Iiwic2VyaWFsaXplIiwib2JqZWN0IiwiZGl2UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9tZWRpYS9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgTm9kZSBhcyBTbGF0ZU5vZGUsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdzbGF0ZS1oeXBlcnNjcmlwdCc7XG5pbXBvcnQgeyBSZWFjdEVkaXRvciB9IGZyb20gJ3NsYXRlLXJlYWN0JztcbmltcG9ydCBUaGVhdGVyc0ljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1RoZWF0ZXJzJztcbmltcG9ydCBWb2x1bWVVcEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1ZvbHVtZVVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTWVkaWFEaWFsb2cgZnJvbSAnLi9tZWRpYS1kaWFsb2cnO1xuaW1wb3J0IE1lZGlhVG9vbGJhciBmcm9tICcuL21lZGlhLXRvb2xiYXInO1xuaW1wb3J0IE1lZGlhV3JhcHBlciBmcm9tICcuL21lZGlhLXdyYXBwZXInO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOmltYWdlJyk7XG5cbmNvbnN0IHJlbW92ZURpYWxvZ3MgPSAoKSA9PiB7XG4gIGNvbnN0IHByZXZEaWFsb2dzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmluc2VydC1tZWRpYS1kaWFsb2cnKTtcblxuICBwcmV2RGlhbG9ncy5mb3JFYWNoKHMgPT4gcy5yZW1vdmUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0RGlhbG9nID0gcHJvcHMgPT4ge1xuICBjb25zdCBuZXdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb25zdCB7IHR5cGUsIGNhbGxiYWNrLCBvcHRzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3QgaW5pdGlhbEJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG5cbiAgcmVtb3ZlRGlhbG9ncygpO1xuXG4gIG5ld0VsLmNsYXNzTmFtZSA9ICdpbnNlcnQtbWVkaWEtZGlhbG9nJztcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHZhbCwgZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbCwgZGF0YSk7XG4gICAgbmV3RWwucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IGluaXRpYWxCb2R5T3ZlcmZsb3c7XG4gIH07XG5cbiAgY29uc3QgZWwgPSAoXG4gICAgPE1lZGlhRGlhbG9nXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17b3B0cy51cGxvYWRTb3VuZFN1cHBvcnR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGlzYWJsZVBvcnRhbD17dHJ1ZX1cbiAgICAgIG9wZW49e3RydWV9XG4gICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgLz5cbiAgKTtcblxuICBSZWFjdERPTS5yZW5kZXIoZWwsIG5ld0VsKTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld0VsKTtcbn07XG5cbmNvbnN0IGdldE5vZGVCeSA9IChlZGl0b3IsIGNhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IGRlc2NlbmRhbnRzID0gU2xhdGVOb2RlLmRlc2NlbmRhbnRzKGVkaXRvciwge1xuICAgIHJldmVyc2U6IHRydWVcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBbZGVzY2VuZGFudCwgZGVzY2VuZGFudFBhdGhdIG9mIGRlc2NlbmRhbnRzKSB7XG4gICAgaWYgKGNhbGxiYWNrKGRlc2NlbmRhbnQsIGRlc2NlbmRhbnRQYXRoKSkge1xuICAgICAgcmV0dXJuIFtkZXNjZW5kYW50LCBkZXNjZW5kYW50UGF0aF07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBtb3ZlRm9jdXNBZnRlck1lZGlhID0gKGVkaXRvciwgbm9kZSkgPT4ge1xuICBpZiAoIWVkaXRvciB8fCAhbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIFJlYWN0RWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyBkaXN0YW5jZTogMSwgdW5pdDogJ29mZnNldCcgfSk7XG4gIH0sIDApO1xufTtcblxuY29uc3QgdHlwZXMgPSBbJ2F1ZGlvJywgJ3ZpZGVvJ107XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lZGlhUGx1Z2luKHR5cGUsIG9wdHMpIHtcbiAgY29uc3QgdG9vbGJhciA9IHtcbiAgICBpY29uOiB0eXBlID09PSAnYXVkaW8nID8gPFZvbHVtZVVwSWNvbiAvPiA6IDxUaGVhdGVyc0ljb24gLz4sXG4gICAgb25DbGljazogZWRpdG9yID0+IHtcbiAgICAgIGxvZygnW3Rvb2xiYXJdIG9uQ2xpY2snKTtcbiAgICAgIGNvbnN0IGlubGluZSA9IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbmV3TWVkaWE6IHRydWUsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgZW5kczogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3RhcnRzOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3JjOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3sgdGV4dDogJycgfV1cbiAgICAgIH07XG5cbiAgICAgIGVkaXRvci5pbnNlcnROb2RlKGlubGluZSk7XG5cbiAgICAgIGluc2VydERpYWxvZyh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG9wdHMsXG4gICAgICAgIGNhbGxiYWNrOiAodmFsLCBkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc3QgW25vZGUsIG5vZGVQYXRoXSA9IGdldE5vZGVCeShcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGRlc2NlbmRhbnQgPT4gZGVzY2VuZGFudC50eXBlID09PSB0eXBlICYmIGdldChkZXNjZW5kYW50LCAnZGF0YS5uZXdNZWRpYScpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdyZW1vdmVfbm9kZScsXG4gICAgICAgICAgICAgICAgcGF0aDogbm9kZVBhdGhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzZXRfbm9kZScsXG4gICAgICAgICAgICAgICAgcGF0aDogbm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogbm9kZS5kYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5ld01lZGlhOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbW92ZUZvY3VzQWZ0ZXJNZWRpYShlZGl0b3IsIG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB0eXBlLFxuICAgIHRvb2xiYXIsXG4gICAgcnVsZXM6IGVkaXRvciA9PiB7XG4gICAgICBjb25zdCB7IGlzVm9pZCwgaXNJbmxpbmUgfSA9IGVkaXRvcjtcblxuICAgICAgZWRpdG9yLmlzVm9pZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gWydhdWRpbycsICd2aWRlbyddLmluY2x1ZGVzKGVsZW1lbnQudHlwZSkgPyB0cnVlIDogaXNWb2lkKGVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgZWRpdG9yLmlzSW5saW5lID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBbJ2F1ZGlvJywgJ3ZpZGVvJ10uaW5jbHVkZXMoZWxlbWVudC50eXBlKSA/IHRydWUgOiBpc0lubGluZShlbGVtZW50KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSxcbiAgICBzdXBwb3J0czogbm9kZSA9PiBub2RlLnR5cGUgPT09IHR5cGUsXG4gICAgcmVuZGVyTm9kZShwcm9wcykge1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gdHlwZSkge1xuICAgICAgICBjb25zdCB7IG5vZGUsIGVkaXRvciB9ID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gbm9kZTtcbiAgICAgICAgY29uc3QgeyBzcmMsIGhlaWdodCwgd2lkdGgsIGVkaXRpbmcsIHRhZywgLi4ucmVzdCB9ID0gb21pdChkYXRhLCBbJ25ld01lZGlhJywgJ3VybFRvVXNlJ10pO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geyAuLi5yZXN0LCAuLi5wcm9wcy5hdHRyaWJ1dGVzIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZUVkaXQgPSBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZVRvRWRpdCA9IFJlYWN0RWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCBub2RlUGF0aCA9IFJlYWN0RWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZVRvRWRpdCk7XG5cbiAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgdHlwZTogJ3NldF9ub2RlJyxcbiAgICAgICAgICAgIHBhdGg6IG5vZGVQYXRoLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBkYXRhOiBub2RlLmRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgIGVkaXRpbmc6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW5zZXJ0RGlhbG9nKHtcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBlZGl0OiB0cnVlLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgICBjYWxsYmFjazogKHZhbCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbbm9kZUlzVGhlcmUsIG5vZGVQYXRoXSA9IGdldE5vZGVCeShcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgZGVzY2VuZGFudCA9PiBkZXNjZW5kYW50LnR5cGUgPT09IHR5cGUgJiYgZ2V0KGRlc2NlbmRhbnQsICdkYXRhLmVkaXRpbmcnKVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmIChub2RlSXNUaGVyZSAmJiB2YWwpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldF9ub2RlJyxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IG5vZGVQYXRoLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBub2RlLmRhdGFcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlVG9FZGl0ID0gUmVhY3RFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBldmVudC50YXJnZXQpO1xuICAgICAgICAgIGNvbnN0IG5vZGVQYXRoID0gUmVhY3RFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlVG9FZGl0KTtcblxuICAgICAgICAgIGVkaXRvci5hcHBseSh7XG4gICAgICAgICAgICB0eXBlOiAncmVtb3ZlX25vZGUnLFxuICAgICAgICAgICAgcGF0aDogbm9kZVBhdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7fTtcblxuICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICBzdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWlnaHQpIHtcbiAgICAgICAgICBzdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVkaWFXcmFwcGVyIGRhdGEtdHlwZT17dHlwZX0gd2lkdGg9e3N0eWxlLndpZHRofSBhdHRyaWJ1dGVzPXthdHRyaWJ1dGVzfT5cbiAgICAgICAgICAgICAgPGF1ZGlvIGNvbnRyb2xzPVwiY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICA8c291cmNlIHR5cGU9XCJhdWRpby9tcDNcIiBzcmM9e3NyY30gLz5cbiAgICAgICAgICAgICAgPC9hdWRpbz5cbiAgICAgICAgICAgICAgPE1lZGlhVG9vbGJhciBoaWRlRWRpdCBvblJlbW92ZT17aGFuZGxlRGVsZXRlfSAvPlxuICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICA8L01lZGlhV3JhcHBlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TWVkaWFXcmFwcGVyIGRhdGEtdHlwZT17dHlwZX0gd2lkdGg9e3N0eWxlLndpZHRofSBhdHRyaWJ1dGVzPXthdHRyaWJ1dGVzfT5cbiAgICAgICAgICAgIDxkaXYgY29udGVudEVkaXRhYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgICAgICAgICAgc3JjPXtzcmN9XG4gICAgICAgICAgICAgICAgZWRpdGluZz17ZWRpdGluZyA/IDEgOiAwfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIHsuLi5zdHlsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPE1lZGlhVG9vbGJhciBvbkVkaXQ9e2hhbmRsZUVkaXR9IG9uUmVtb3ZlPXtoYW5kbGVEZWxldGV9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8L01lZGlhV3JhcHBlcj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXphdGlvbiA9IHtcbiAgZGVzZXJpYWxpemUoZWwgLyosIG5leHQqLykge1xuICAgIGxldCB0eXBlID0gZWwuZGF0YXNldCAmJiBlbC5kYXRhc2V0LnR5cGU7XG4gICAgbGV0IHRhZyA9ICdpZnJhbWUnO1xuICAgIGxldCBzcmM7XG4gICAgY29uc3QgdHlwZUluZGV4ID0gdHlwZXMuaW5kZXhPZih0eXBlKTtcblxuICAgIGlmICh0eXBlSW5kZXggPCAwKSB7XG4gICAgICBpZiAoZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICB0eXBlID0gJ2F1ZGlvJztcbiAgICAgICAgdGFnID0gJ2F1ZGlvJztcbiAgICAgICAgc3JjID0gZWwuZmlyc3RDaGlsZD8uZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZHMsIHN0YXJ0cywgdGl0bGUsIGVkaXRpbmcsIHVybCB9ID0gZWwuZGF0YXNldCB8fCB7fTtcblxuICAgIGxvZygnZGVzZXJpYWxpemU6ICcsIG5hbWUpO1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAxMCkgfHwgbnVsbDtcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLCAxMCkgfHwgbnVsbDtcblxuICAgIGNvbnN0IG91dCA9IGpzeCgnZWxlbWVudCcsIHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRhZyxcbiAgICAgICAgc3JjOiBzcmMgfHwgZWwuZ2V0QXR0cmlidXRlKCdzcmMnKSxcbiAgICAgICAgZWRpdGluZyxcbiAgICAgICAgZW5kcyxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBzdGFydHMsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgdXJsXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsb2coJ3JldHVybiBvYmplY3Q6ICcsIG91dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGVJbmRleCA9IHR5cGVzLmluZGV4T2Yob2JqZWN0LnR5cGUpO1xuXG4gICAgaWYgKHR5cGVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdHlwZXNbdHlwZUluZGV4XTtcblxuICAgIGNvbnN0IHsgZWRpdGluZywgdGFnLCBlbmRzLCBzcmMsIHN0YXJ0cywgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIHVybCB9ID0gb2JqZWN0LmRhdGEgfHwge307XG4gICAgY29uc3Qgc3R5bGUgPSB7fTtcblxuICAgIGlmICh3aWR0aCkge1xuICAgICAgc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCkge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXZQcm9wcyA9IHtcbiAgICAgICdkYXRhLWVkaXRpbmcnOiBlZGl0aW5nLFxuICAgICAgJ2RhdGEtZW5kcyc6IGVuZHMsXG4gICAgICAnZGF0YS1zdGFydHMnOiBzdGFydHMsXG4gICAgICAnZGF0YS10aXRsZSc6IHRpdGxlLFxuICAgICAgJ2RhdGEtdXJsJzogdXJsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgc3JjXG4gICAgfTtcblxuICAgIGlmICh0YWcgPT09ICdhdWRpbycpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxhdWRpbyBjb250cm9scz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgPHNvdXJjZSB0eXBlPVwiYXVkaW8vbXAzXCIgc3JjPXtzcmN9IC8+XG4gICAgICAgIDwvYXVkaW8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8aWZyYW1lXG4gICAgICAgIGRhdGEtdHlwZT17dHlwZX1cbiAgICAgICAgc3JjPXtzcmN9XG4gICAgICAgIHsuLi5kaXZQcm9wc31cbiAgICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7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