@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.
- package/CHANGELOG.md +0 -302
- package/lib/components.js +116 -0
- package/lib/components.js.map +1 -0
- package/lib/editor.js +418 -103
- package/lib/editor.js.map +1 -1
- package/lib/index.js +101 -155
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +320 -0
- package/lib/new-serialization.js.map +1 -0
- package/lib/old-serialization.js +330 -0
- package/lib/parse-html.js +1 -1
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +1 -1
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +21 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +67 -0
- package/lib/plugins/hotKeys/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +1 -6
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +70 -53
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +7 -9
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +83 -27
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +72 -33
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +23 -41
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +64 -100
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +86 -60
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +202 -132
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +17 -16
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +3 -3
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +21 -58
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +13 -15
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +87 -53
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +17 -20
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -1
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +381 -212
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +5 -6
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +55 -11
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +1 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +1 -2
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +253 -239
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +27 -2
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +1 -1
- package/lib/serialization.js.map +1 -1
- package/lib/slate-editor.js +302 -0
- package/lib/test-serializer.js +189 -0
- package/lib/test-serializer.js.map +1 -0
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -14
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +22 -20
- package/playground/image/index.jsx +12 -10
- package/playground/index.html +25 -23
- package/playground/mathquill/index.html +23 -20
- package/playground/mathquill/index.jsx +18 -22
- package/playground/prod-test/index.html +24 -20
- package/playground/prod-test/index.jsx +5 -3
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +3 -4
- package/playground/schema-override/index.html +21 -19
- package/playground/schema-override/index.jsx +13 -14
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +3 -4
- package/playground/serialization/index.html +22 -20
- package/playground/table-examples.html +5 -8
- package/playground/webpack.config.js +10 -10
- package/src/components.js +135 -0
- package/src/editor.jsx +478 -141
- package/src/index.jsx +71 -95
- package/src/new-serialization.jsx +291 -0
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +33 -34
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/hotKeys/index.js +54 -0
- package/src/plugins/image/alt-dialog.jsx +4 -5
- package/src/plugins/image/component.jsx +106 -89
- package/src/plugins/image/image-toolbar.jsx +27 -19
- package/src/plugins/image/index.jsx +75 -43
- package/src/plugins/image/insert-image-handler.js +62 -27
- package/src/plugins/index.jsx +23 -41
- package/src/plugins/list/index.jsx +70 -95
- package/src/plugins/math/index.jsx +102 -82
- package/src/plugins/media/index.jsx +159 -124
- package/src/plugins/media/media-dialog.js +98 -71
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +29 -30
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
- package/src/plugins/respArea/icons/index.jsx +11 -14
- package/src/plugins/respArea/index.jsx +92 -52
- package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
- package/src/plugins/respArea/utils.jsx +26 -35
- package/src/plugins/table/icons/index.jsx +17 -11
- package/src/plugins/table/index.jsx +288 -231
- package/src/plugins/table/table-toolbar.jsx +15 -11
- package/src/plugins/toolbar/default-toolbar.jsx +65 -19
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
- package/src/plugins/toolbar/index.jsx +2 -3
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +244 -221
- package/src/plugins/utils.js +21 -4
- package/src/serialization.jsx +32 -32
- package/src/test-serializer.js +139 -0
- 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 ? '<' : ''}${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 ? '<' : ''}${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(
|
|
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
|
-
|
|
106
|
-
|
|
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
|
|
112
|
-
return
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
178
|
+
editor.apply({
|
|
179
|
+
type: 'remove_node',
|
|
180
|
+
path: nodePath
|
|
120
181
|
});
|
|
121
182
|
} else {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
226
|
+
editor = props.editor;
|
|
152
227
|
var data = node.data;
|
|
153
|
-
|
|
154
|
-
var
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
|
198
|
-
|
|
199
|
-
|
|
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"],
|
|
214
|
-
editor: true,
|
|
308
|
+
return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], {
|
|
215
309
|
"data-type": type,
|
|
216
|
-
width: style.width
|
|
217
|
-
|
|
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"],
|
|
229
|
-
editor: true,
|
|
323
|
+
return /*#__PURE__*/_react["default"].createElement(_mediaWrapper["default"], {
|
|
230
324
|
"data-type": type,
|
|
231
|
-
width: style.width
|
|
232
|
-
|
|
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
|
-
|
|
394
|
+
|
|
395
|
+
if (typeIndex < 0) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
|
|
331
399
|
var type = types[typeIndex];
|
|
332
|
-
|
|
333
|
-
var
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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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
|