@pie-lib/editable-html 11.1.2-next.0 → 11.2.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 +43 -167
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/block-tags.js +25 -0
- package/lib/block-tags.js.map +1 -0
- package/lib/constants.js +16 -0
- package/lib/constants.js.map +1 -0
- package/lib/editor.js +348 -87
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -9
- package/lib/index.js.map +1 -1
- package/lib/plugins/characters/index.js +8 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +12 -12
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/icons/index.js.map +1 -0
- package/lib/plugins/css/index.js +397 -0
- package/lib/plugins/css/index.js.map +1 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/customPlugin/index.js.map +1 -0
- package/lib/plugins/html/index.js +11 -7
- package/lib/plugins/html/index.js.map +1 -1
- package/lib/plugins/image/index.js +2 -1
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -4
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +270 -11
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +130 -0
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +91 -56
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +5 -2
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +98 -57
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/rendering/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +5 -2
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +69 -21
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -5
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/math-templated/index.js.map +1 -0
- package/lib/plugins/respArea/utils.js +16 -1
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
- package/lib/plugins/table/index.js +43 -59
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +33 -4
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/textAlign/icons/index.js +226 -0
- package/lib/plugins/textAlign/icons/index.js.map +1 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/textAlign/index.js.map +1 -0
- package/lib/plugins/toolbar/default-toolbar.js +82 -27
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +5 -2
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +35 -11
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/serialization.js +233 -44
- package/lib/serialization.js.map +1 -1
- package/package.json +11 -6
- package/src/__tests__/editor.test.jsx +363 -0
- package/src/__tests__/serialization.test.js +291 -0
- package/src/__tests__/utils.js +36 -0
- package/src/block-tags.js +17 -0
- package/src/constants.js +7 -0
- package/src/editor.jsx +303 -49
- package/src/index.jsx +19 -10
- package/src/plugins/characters/index.jsx +11 -3
- package/src/plugins/characters/utils.js +12 -12
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +346 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/index.jsx +9 -6
- package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
- package/src/plugins/image/__tests__/component.test.jsx +41 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
- package/src/plugins/image/__tests__/index.test.js +95 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/image/index.jsx +2 -1
- package/src/plugins/image/insert-image-handler.js +13 -6
- package/src/plugins/index.jsx +248 -5
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +130 -0
- package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
- package/src/plugins/math/__tests__/index.test.jsx +245 -0
- package/src/plugins/math/index.jsx +87 -56
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +3 -2
- package/src/plugins/media/media-dialog.js +106 -57
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
- package/src/plugins/respArea/index.jsx +53 -7
- package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +11 -0
- package/src/plugins/table/CustomTablePlugin.js +113 -0
- package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
- package/src/plugins/table/index.jsx +46 -59
- package/src/plugins/table/table-toolbar.jsx +39 -2
- package/src/plugins/textAlign/icons/index.jsx +139 -0
- package/src/plugins/textAlign/index.jsx +23 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
- package/src/plugins/toolbar/default-toolbar.jsx +82 -20
- package/src/plugins/toolbar/done-button.jsx +3 -1
- package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
- package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
- package/src/plugins/toolbar/toolbar.jsx +31 -8
- package/src/serialization.jsx +213 -38
- package/README.md +0 -45
- package/deploy.sh +0 -16
- package/playground/image/data.js +0 -59
- package/playground/image/index.html +0 -22
- package/playground/image/index.jsx +0 -81
- package/playground/index.html +0 -25
- package/playground/mathquill/index.html +0 -22
- package/playground/mathquill/index.jsx +0 -155
- package/playground/package.json +0 -15
- package/playground/prod-test/index.html +0 -22
- package/playground/prod-test/index.jsx +0 -28
- package/playground/schema-override/data.js +0 -29
- package/playground/schema-override/image-plugin.jsx +0 -41
- package/playground/schema-override/index.html +0 -21
- package/playground/schema-override/index.jsx +0 -97
- package/playground/serialization/data.js +0 -29
- package/playground/serialization/image-plugin.jsx +0 -41
- package/playground/serialization/index.html +0 -22
- package/playground/serialization/index.jsx +0 -12
- package/playground/static.json +0 -3
- package/playground/table-examples.html +0 -70
- package/playground/webpack.config.js +0 -42
- package/static.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/list/index.jsx"],"names":["log","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","createEditList","core","typeDefault","schema","blocks","Object","keys","forEach","key","block","parent","types","getHighestSelectedBlocks","value","range","selection","document","startBlock","getClosestBlock","startKey","endBlock","endKey","Immutable","List","ancestor","getCommonAncestor","startPath","getPath","endPath","slice","get","changes","wrapInList","change","data","selectedBlocks","wrapBlock","Data","create","normalize","node","utils","isList","_ref","unwrapNodeByKey","wrapBlockByKey","options","icon","renderNode","props","attributes","toolbar","isMark","isActive","isSelectionInList","current","getCurrentList","onClick","onChange","inList","call","unwrapList","propTypes","PropTypes","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Data } from 'slate';\nimport Immutable from 'immutable';\nimport PropTypes from 'prop-types';\nimport EditList from 'slate-edit-list';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes),\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n\n if (name === 'li') {\n return b('list_item', next, el.childNodes);\n }\n\n if (name === 'ul') {\n return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n\n if (name === 'ol') {\n return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') return;\n\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n },\n};\n\nconst createEditList = () => {\n const core = EditList({\n typeDefault: 'span',\n });\n\n // fix outdated schema\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach((key) => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n return;\n }\n\n block.nodes[0] = { type: block.nodes[0].types[0] };\n });\n }\n\n /**\n * This override of the core.changes.wrapInList is needed because the version\n * of immutable that we have does not support getting the element at a specific\n * index with a square bracket (list[0]). We have to use the list.get function instead\n */\n\n /**\n * Returns the highest list of blocks that cover the current selection\n */\n const getHighestSelectedBlocks = (value) => {\n const range = value.selection;\n const document = value.document;\n\n const startBlock = document.getClosestBlock(range.startKey);\n const endBlock = document.getClosestBlock(range.endKey);\n\n if (startBlock === endBlock) {\n return Immutable.List([startBlock]);\n }\n\n const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);\n const startPath = ancestor.getPath(startBlock.key);\n const endPath = ancestor.getPath(endBlock.key);\n\n return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);\n };\n\n /**\n * Wrap the blocks in the current selection in a new list. Selected\n * lists are merged together.\n */\n core.changes.wrapInList = function(change, type, data) {\n const selectedBlocks = getHighestSelectedBlocks(change.value);\n\n // Wrap in container\n change.wrapBlock({ type: type, data: Data.create(data) }, { normalize: false });\n\n // Wrap in list items\n selectedBlocks.forEach(function(node) {\n if (core.utils.isList(node)) {\n // Merge its items with the created list\n node.nodes.forEach(function(_ref) {\n const key = _ref.key;\n return change.unwrapNodeByKey(key, { normalize: false });\n });\n } else if (node.type !== 'list_item') {\n change.wrapBlockByKey(node.key, 'list_item', {\n normalize: false,\n });\n }\n });\n\n return change.normalize();\n };\n\n return core;\n};\n\nexport default (options) => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n // eslint-disable-next-line react/display-name\n core.renderNode = (props) => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n type,\n icon,\n isActive: (value, type) => {\n if (!core.utils.isSelectionInList(value)) {\n return false;\n }\n const current = core.utils.getCurrentList(value);\n return current ? current.type === type : false;\n },\n onClick: (value, onChange) => {\n log('[onClick]', value);\n const inList = core.utils.isSelectionInList(value);\n if (inList) {\n const change = value.change().call(core.changes.unwrapList);\n onChange(change);\n } else {\n const change = value.change().call(core.changes.wrapInList, type);\n onChange(change);\n }\n },\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func,\n };\n\n return core;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/list/index.jsx"],"names":["log","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","createEditList","core","typeDefault","listOptions","ListOptions","schema","blocks","Object","keys","forEach","key","block","parent","types","getHighestSelectedBlocks","value","range","selection","document","startBlock","getClosestBlock","startKey","endBlock","endKey","Immutable","List","ancestor","getCommonAncestor","startPath","getPath","endPath","slice","get","changes","wrapInList","change","data","selectedBlocks","wrapBlock","Data","create","normalize","node","utils","isList","_ref","unwrapNodeByKey","wrapBlockByKey","unwrapList","opts","items","getItemsAtRange","isEmpty","item","firstItem","first","getParent","index","findIndex","moveNodeByKey","removeNodeByKey","bind","getCurrentItem","typeItem","getListForItem","isSelectionInList","options","icon","renderNode","props","attributes","toolbar","isMark","ariaLabel","isActive","current","getCurrentList","onClick","onChange","inList","call","normalizeNode","undefined","response","validateNode","invalidListItems","forEachDescendant","d","size","push","withoutNormalization","textNode","wrappedBlock","toJSON","insertNodeByKey","propTypes","PropTypes","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Data } from 'slate';\nimport Immutable from 'immutable';\nimport PropTypes from 'prop-types';\nimport EditList from 'slate-edit-list';\nimport ListOptions from 'slate-edit-list/dist/options';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes),\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n\n if (name === 'li') {\n return b('list_item', next, el.childNodes);\n }\n\n if (name === 'ul') {\n return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n\n if (name === 'ol') {\n return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') return;\n\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n },\n};\n\nconst createEditList = () => {\n const core = EditList({\n typeDefault: 'span',\n });\n\n const listOptions = new ListOptions({\n typeDefault: 'span',\n });\n\n // fix outdated schema\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach((key) => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n return;\n }\n\n block.nodes[0] = { type: block.nodes[0].types[0] };\n });\n }\n\n /**\n * This override of the core.changes.wrapInList is needed because the version\n * of immutable that we have does not support getting the element at a specific\n * index with a square bracket (list[0]). We have to use the list.get function instead\n */\n\n /**\n * Returns the highest list of blocks that cover the current selection\n */\n const getHighestSelectedBlocks = (value) => {\n const range = value.selection;\n const document = value.document;\n\n const startBlock = document.getClosestBlock(range.startKey);\n const endBlock = document.getClosestBlock(range.endKey);\n\n if (startBlock === endBlock) {\n return Immutable.List([startBlock]);\n }\n\n const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);\n const startPath = ancestor.getPath(startBlock.key);\n const endPath = ancestor.getPath(endBlock.key);\n\n return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);\n };\n\n /**\n * Wrap the blocks in the current selection in a new list. Selected\n * lists are merged together.\n */\n core.changes.wrapInList = function(change, type, data) {\n const selectedBlocks = getHighestSelectedBlocks(change.value);\n\n // Wrap in container\n change.wrapBlock({ type: type, data: Data.create(data) }, { normalize: false });\n\n // Wrap in list items\n selectedBlocks.forEach(function(node) {\n if (core.utils.isList(node)) {\n // Merge its items with the created list\n node.nodes.forEach(function(_ref) {\n const key = _ref.key;\n return change.unwrapNodeByKey(key, { normalize: false });\n });\n } else if (node.type !== 'list_item') {\n change.wrapBlockByKey(node.key, 'list_item', {\n normalize: false,\n });\n }\n });\n\n return change.normalize();\n };\n\n core.changes.unwrapList = function unwrapList(opts, change) {\n const items = core.utils.getItemsAtRange(change.value);\n\n if (items.isEmpty()) {\n return change;\n }\n\n // Unwrap the items from their list\n items.forEach((item) => change.unwrapNodeByKey(item.key, { normalize: false }));\n\n // Parent of the list of the items\n const firstItem = items.first();\n const parent = change.value.document.getParent(firstItem.key);\n\n let index = parent.nodes.findIndex((node) => node.key === firstItem.key);\n\n // Unwrap the items' children\n items.forEach((item) => {\n item.nodes.forEach((node) => {\n change.moveNodeByKey(node.key, parent.key, index, {\n normalize: false,\n });\n index += 1;\n });\n });\n\n // Finally, remove the now empty items\n items.forEach((item) => change.removeNodeByKey(item.key, { normalize: false }));\n\n return change;\n }.bind(this, listOptions);\n\n core.utils.getItemsAtRange = function(opts, value, range) {\n range = range || value.selection;\n\n if (!range.startKey) {\n return Immutable.List();\n }\n\n const { document } = value;\n\n const startBlock = document.getClosestBlock(range.startKey);\n const endBlock = document.getClosestBlock(range.endKey);\n\n if (startBlock === endBlock) {\n const item = core.utils.getCurrentItem(value, startBlock);\n return item ? Immutable.List([item]) : Immutable.List();\n }\n\n const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);\n\n if (core.utils.isList(ancestor)) {\n const startPath = ancestor.getPath(startBlock.key);\n const endPath = ancestor.getPath(endBlock.key);\n\n return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);\n } else if (ancestor.type === opts.typeItem) {\n // The ancestor is the highest list item that covers the range\n return Immutable.List([ancestor]);\n }\n // No list of items can cover the range\n return Immutable.List();\n }.bind(this, listOptions);\n\n core.utils.getListForItem = function(opts, value, item) {\n const { document } = value;\n const parent = document.getParent(item.key);\n return parent && core.utils.isList(parent) ? parent : null;\n }.bind(this, listOptions);\n\n core.utils.isSelectionInList = function(opts, value, type) {\n const items = core.utils.getItemsAtRange(value);\n return (\n !items.isEmpty() &&\n // Check the type of the list if needed\n (!type || core.utils.getListForItem(value, items.first()).get('type') === type)\n );\n }.bind(this, listOptions);\n\n return core;\n};\n\nexport default (options) => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n // eslint-disable-next-line react/display-name\n core.renderNode = (props) => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n ariaLabel: type == 'ul_list' ? 'bulleted list' : 'numbered-list',\n type,\n icon,\n isActive: (value, type) => {\n if (!core.utils.isSelectionInList(value)) {\n return false;\n }\n const current = core.utils.getCurrentList(value);\n return current ? current.type === type : false;\n },\n onClick: (value, onChange) => {\n log('[onClick]', value);\n const inList = core.utils.isSelectionInList(value);\n if (inList) {\n const change = value.change().call(core.changes.unwrapList);\n onChange(change);\n } else {\n const change = value.change().call(core.changes.wrapInList, type);\n onChange(change);\n }\n },\n };\n\n core.normalizeNode = (node) => {\n if (node.object !== 'document' && node.object !== 'block') {\n return undefined;\n }\n\n const response = core.validateNode(node);\n\n const invalidListItems = [];\n\n node.forEachDescendant((d) => {\n if (d.type === 'list_item' && d.nodes.size === 1 && d.nodes.first().object === 'text') {\n // if we have a list_item that has only a text inside, we need to add a block in it\n invalidListItems.push(d);\n }\n });\n\n if (!invalidListItems.length && !response) {\n return undefined;\n }\n\n return (change) => {\n if (response) {\n response(change);\n }\n\n if (invalidListItems.length) {\n change.withoutNormalization(() => {\n invalidListItems.forEach((node) => {\n const textNode = node.nodes.first();\n const wrappedBlock = {\n object: 'block',\n type: 'div',\n nodes: [textNode.toJSON()],\n };\n\n change.removeNodeByKey(textNode.key);\n\n change.insertNodeByKey(node.key, 0, wrappedBlock);\n });\n });\n }\n };\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func,\n };\n core.name = type;\n\n return core;\n};\n"],"file":"index.js"}
|
|
@@ -29,7 +29,7 @@ var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
|
29
29
|
|
|
30
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _blockTags = require("../../block-tags");
|
|
33
33
|
|
|
34
34
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
35
35
|
|
|
@@ -150,6 +150,7 @@ function MathPlugin(opts) {
|
|
|
150
150
|
return {
|
|
151
151
|
name: 'math',
|
|
152
152
|
toolbar: {
|
|
153
|
+
ariaLabel: 'Math Toolbar',
|
|
153
154
|
icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
|
|
154
155
|
onClick: function onClick(value, onChange) {
|
|
155
156
|
log('[insertMath]');
|
|
@@ -247,34 +248,77 @@ var getTagName = function getTagName(el) {
|
|
|
247
248
|
*/
|
|
248
249
|
|
|
249
250
|
|
|
250
|
-
var
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
We check if this element resulted is:
|
|
257
|
-
div - continuation of a beginning of a HTML element
|
|
258
|
-
/div - closing of a HTML tag
|
|
259
|
-
br/> - beginning and closing of a html TAG
|
|
260
|
-
*/
|
|
261
|
-
if (part.match(/<[a-zA-Z/][\s\S]*>/gi)) {
|
|
262
|
-
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
266
|
-
}, '');
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return input;
|
|
251
|
+
var arrowHandlingCase = function arrowHandlingCase(input) {
|
|
252
|
+
/*
|
|
253
|
+
If we have a < character followed by a letter
|
|
254
|
+
we make sure to replace it with a < sign instead
|
|
255
|
+
*/
|
|
256
|
+
return input.replace(/<([a-zA-Z]*)/g, '<$1');
|
|
270
257
|
};
|
|
271
258
|
|
|
272
|
-
function
|
|
259
|
+
function replaceLeftRight(latexInput) {
|
|
273
260
|
// for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them
|
|
274
261
|
// Replace '\\left.' and '\\right.' with an empty string
|
|
275
262
|
return latexInput.replace(/\\left\.\s*|\\right\.\s*/g, '');
|
|
276
263
|
}
|
|
277
264
|
|
|
265
|
+
var convertLatexToMathMl = function convertLatexToMathMl(_ref4) {
|
|
266
|
+
var latex = _ref4.latex,
|
|
267
|
+
decoded = _ref4.decoded,
|
|
268
|
+
wrapper = _ref4.wrapper;
|
|
269
|
+
|
|
270
|
+
var removeEmptyMos = function removeEmptyMos(mmlFromLatex) {
|
|
271
|
+
// Regular expression to match <mo>⁡</mo> and <mo ...>⁡</mo>, which get added when using log with base
|
|
272
|
+
// not sure why they get added, but they add an extra space which is not needed
|
|
273
|
+
var regex = /<mo(?: [^>]*)?>⁡<\/mo>/g; // Replace all occurrences of the matched patterns
|
|
274
|
+
|
|
275
|
+
return mmlFromLatex.replace(regex, '');
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
var handled = arrowHandlingCase(decoded);
|
|
279
|
+
var latexToConvert = "<span data-latex=\"\" data-raw=\"".concat(handled, "\">").concat((0, _mathRendering.wrapMath)(handled, wrapper), "</span>"); // use math rendering (MathJax) to convert latex to mathMl
|
|
280
|
+
|
|
281
|
+
var mathMlFromLatex = (0, _mathRendering.renderMath)(latexToConvert, {
|
|
282
|
+
skipWaitForMathRenderingLib: true
|
|
283
|
+
}); // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done
|
|
284
|
+
|
|
285
|
+
var conversionDidNotWork = (0, _isEqual["default"])(latexToConvert, mathMlFromLatex);
|
|
286
|
+
mathMlFromLatex = removeEmptyMos(mathMlFromLatex); // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later
|
|
287
|
+
|
|
288
|
+
var latexFromMathMl = mathMlFromLatex ? (0, _mathRendering.mmlToLatex)(mathMlFromLatex) : ''; // we need to remove all the spaces from the latex to be able to compare it
|
|
289
|
+
|
|
290
|
+
var strippedL = latex.replace(/\s/g, '');
|
|
291
|
+
var strippedNewL = latexFromMathMl.replace(/\s/g, ''); // we check if the latex keeps his form after being converted to mathml and back to latex
|
|
292
|
+
// if it does, we can safely convert it to mathml
|
|
293
|
+
|
|
294
|
+
if (!(0, _isEqual["default"])(strippedL, strippedNewL)) {
|
|
295
|
+
var correctedLatex = replaceLeftRight(latexFromMathMl); // As George requested in PD-3167, I will set the new mathML anyway, and also log differences
|
|
296
|
+
// if it doesn't, we keep the latex version
|
|
297
|
+
// eslint-disable-next-line no-console
|
|
298
|
+
|
|
299
|
+
console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {
|
|
300
|
+
initialLatex: latex,
|
|
301
|
+
newLatex: latexFromMathMl,
|
|
302
|
+
correctedLatex: correctedLatex,
|
|
303
|
+
mathML: mathMlFromLatex,
|
|
304
|
+
conversionDidNotWork: conversionDidNotWork
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return {
|
|
309
|
+
mathMlFromLatex: mathMlFromLatex,
|
|
310
|
+
conversionDidNotWork: conversionDidNotWork
|
|
311
|
+
};
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
var convertMathMlToLatex = function convertMathMlToLatex(mathMl) {
|
|
315
|
+
var htmlWithRemovedSpaces = mathMl.replaceAll(' ', ' ');
|
|
316
|
+
var htmlToUse = (0, _mathRendering.mmlToLatex)(htmlWithRemovedSpaces);
|
|
317
|
+
var latex = htmlDecode(htmlToUse); // todo fix this in mathml-to-latex
|
|
318
|
+
|
|
319
|
+
return replaceLeftRight(latex);
|
|
320
|
+
};
|
|
321
|
+
|
|
278
322
|
var serialization = {
|
|
279
323
|
deserialize: function deserialize(el) {
|
|
280
324
|
var tagName = getTagName(el);
|
|
@@ -286,24 +330,17 @@ var serialization = {
|
|
|
286
330
|
* This is for legacy content only since our math rendering is valid for the core slate rules
|
|
287
331
|
*/
|
|
288
332
|
|
|
289
|
-
var hasMathChild =
|
|
333
|
+
var hasMathChild = _blockTags.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
|
|
290
334
|
log('[deserialize] name: ', tagName);
|
|
291
335
|
/**
|
|
292
336
|
* This is here in order to be able to render mathml content
|
|
293
337
|
*/
|
|
294
338
|
|
|
295
339
|
if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
|
|
296
|
-
var
|
|
340
|
+
var mathMl = hasMathChild ? el.innerHTML : el.outerHTML;
|
|
297
341
|
|
|
298
342
|
if (MathPlugin.mathMlOptions.mmlEditing) {
|
|
299
|
-
|
|
300
|
-
var htmlWithRemovedSpaces = newHtml.replaceAll(" ", " ");
|
|
301
|
-
var htmlToUse = (0, _mathRendering.mmlToLatex)(htmlWithRemovedSpaces);
|
|
302
|
-
var latex = htmlDecode(htmlToUse); // todo fix this in mathml-to-latex
|
|
303
|
-
|
|
304
|
-
var correctedLatex = fixLatexExpression(latex);
|
|
305
|
-
|
|
306
|
-
var _unWrapMath = (0, _mathRendering.unWrapMath)(correctedLatex),
|
|
343
|
+
var _unWrapMath = (0, _mathRendering.unWrapMath)(convertMathMlToLatex(mathMl)),
|
|
307
344
|
unwrapped = _unWrapMath.unwrapped,
|
|
308
345
|
wrapType = _unWrapMath.wrapType;
|
|
309
346
|
|
|
@@ -324,7 +361,7 @@ var serialization = {
|
|
|
324
361
|
isVoid: true,
|
|
325
362
|
type: 'mathml',
|
|
326
363
|
data: {
|
|
327
|
-
html:
|
|
364
|
+
html: mathMl
|
|
328
365
|
}
|
|
329
366
|
};
|
|
330
367
|
}
|
|
@@ -340,9 +377,9 @@ var serialization = {
|
|
|
340
377
|
var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
|
|
341
378
|
|
|
342
379
|
if (hasLatex) {
|
|
343
|
-
var
|
|
380
|
+
var latex = htmlDecode(el.innerHTML);
|
|
344
381
|
|
|
345
|
-
var _unWrapMath2 = (0, _mathRendering.unWrapMath)(
|
|
382
|
+
var _unWrapMath2 = (0, _mathRendering.unWrapMath)(latex),
|
|
346
383
|
_unwrapped = _unWrapMath2.unwrapped,
|
|
347
384
|
_wrapType = _unWrapMath2.wrapType;
|
|
348
385
|
|
|
@@ -361,35 +398,33 @@ var serialization = {
|
|
|
361
398
|
},
|
|
362
399
|
serialize: function serialize(object) {
|
|
363
400
|
if (object.type === 'math') {
|
|
364
|
-
var
|
|
401
|
+
var latex = object.data.get('latex');
|
|
365
402
|
var wrapper = object.data.get('wrapper');
|
|
366
|
-
|
|
367
|
-
|
|
403
|
+
var decoded = htmlDecode(arrowHandlingCase(latex));
|
|
404
|
+
log('[serialize] latex: ', latex);
|
|
368
405
|
|
|
369
406
|
if (MathPlugin.mathMlOptions.mmlOutput) {
|
|
370
|
-
var
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
//
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
mathML: res
|
|
386
|
-
});
|
|
407
|
+
var _convertLatexToMathMl = convertLatexToMathMl({
|
|
408
|
+
latex: latex,
|
|
409
|
+
decoded: decoded,
|
|
410
|
+
wrapper: wrapper
|
|
411
|
+
}),
|
|
412
|
+
mathMlFromLatex = _convertLatexToMathMl.mathMlFromLatex,
|
|
413
|
+
conversionDidNotWork = _convertLatexToMathMl.conversionDidNotWork;
|
|
414
|
+
|
|
415
|
+
if (conversionDidNotWork) {
|
|
416
|
+
// this means we could not convert latex to mathMl, so just return the latex version,
|
|
417
|
+
// same as we would do if mmlOutput would not be enabled
|
|
418
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
419
|
+
"data-latex": "",
|
|
420
|
+
"data-raw": decoded
|
|
421
|
+
}, (0, _mathRendering.wrapMath)(decoded, wrapper));
|
|
387
422
|
}
|
|
388
423
|
|
|
389
424
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
390
425
|
"data-type": "mathml",
|
|
391
426
|
dangerouslySetInnerHTML: {
|
|
392
|
-
__html:
|
|
427
|
+
__html: mathMlFromLatex
|
|
393
428
|
}
|
|
394
429
|
});
|
|
395
430
|
}
|
|
@@ -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","opts","mathMlOptions","mmlOutput","mmlEditing","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","fixLatexExpression","latexInput","replace","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlWithRemovedSpaces","replaceAll","htmlToUse","correctedLatex","unwrapped","wrapType","nodes","wrapper","nodeType","hasLatex","hasAttribute","serialize","l","decoded","res","newLatex","strippedL","strippedNewL","console","initialLatex","mathML"],"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, mmlToLatex, renderMath } 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';\nimport isEqual from 'lodash/isEqual';\n\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\n// eslint-disable-next-line react/display-name\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(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\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';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\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\nfunction fixLatexExpression(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\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 if (MathPlugin.mathMlOptions.mmlEditing) {\n // todo fix this in mathml-to-latex\n const htmlWithRemovedSpaces = newHtml.replaceAll(\" \", \" \");\n const htmlToUse = mmlToLatex(htmlWithRemovedSpaces);\n const latex = htmlDecode(htmlToUse);\n // todo fix this in mathml-to-latex\n const correctedLatex = fixLatexExpression(latex);\n const { unwrapped, wrapType } = unWrapMath(correctedLatex);\n\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 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\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = l.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (!isEqual(strippedL, strippedNewL)) {\n const correctedLatex = fixLatexExpression(newLatex);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: l,\n newLatex: newLatex,\n correctedLatex,\n mathML: res,\n });\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n }\n\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,"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","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","ariaLabel","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","arrowHandlingCase","replace","replaceLeftRight","latexInput","convertLatexToMathMl","decoded","wrapper","removeEmptyMos","mmlFromLatex","regex","handled","latexToConvert","mathMlFromLatex","skipWaitForMathRenderingLib","conversionDidNotWork","latexFromMathMl","strippedL","strippedNewL","correctedLatex","console","initialLatex","newLatex","mathML","convertMathMlToLatex","mathMl","htmlWithRemovedSpaces","replaceAll","htmlToUse","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","length","firstChild","dataset","innerHTML","outerHTML","unwrapped","wrapType","nodes","nodeType","hasLatex","hasAttribute","serialize"],"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, mmlToLatex, renderMath } 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 '../../block-tags';\nimport isEqual from 'lodash/isEqual';\n\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\n// eslint-disable-next-line react/display-name\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\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(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n ariaLabel: 'Math 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';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\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 arrowHandlingCase = (input) => {\n /*\n If we have a < character followed by a letter\n we make sure to replace it with a < sign instead\n */\n return input.replace(/<([a-zA-Z]*)/g, '<$1');\n};\n\nfunction replaceLeftRight(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\n}\n\nconst convertLatexToMathMl = ({ latex, decoded, wrapper }) => {\n const removeEmptyMos = (mmlFromLatex) => {\n // Regular expression to match <mo>⁡</mo> and <mo ...>⁡</mo>, which get added when using log with base\n // not sure why they get added, but they add an extra space which is not needed\n const regex = /<mo(?: [^>]*)?>⁡<\\/mo>/g;\n\n // Replace all occurrences of the matched patterns\n return mmlFromLatex.replace(regex, '');\n };\n const handled = arrowHandlingCase(decoded);\n\n const latexToConvert = `<span data-latex=\"\" data-raw=\"${handled}\">${wrapMath(handled, wrapper)}</span>`;\n\n // use math rendering (MathJax) to convert latex to mathMl\n let mathMlFromLatex = renderMath(latexToConvert, {\n skipWaitForMathRenderingLib: true,\n });\n\n // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done\n const conversionDidNotWork = isEqual(latexToConvert, mathMlFromLatex);\n\n mathMlFromLatex = removeEmptyMos(mathMlFromLatex);\n\n // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later\n const latexFromMathMl = mathMlFromLatex ? mmlToLatex(mathMlFromLatex) : '';\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = latex.replace(/\\s/g, '');\n const strippedNewL = latexFromMathMl.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does, we can safely convert it to mathml\n if (!isEqual(strippedL, strippedNewL)) {\n const correctedLatex = replaceLeftRight(latexFromMathMl);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't, we keep the latex version\n // eslint-disable-next-line no-console\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: latex,\n newLatex: latexFromMathMl,\n correctedLatex,\n mathML: mathMlFromLatex,\n conversionDidNotWork,\n });\n }\n\n return { mathMlFromLatex, conversionDidNotWork };\n};\n\nconst convertMathMlToLatex = (mathMl) => {\n const htmlWithRemovedSpaces = mathMl.replaceAll(' ', ' ');\n const htmlToUse = mmlToLatex(htmlWithRemovedSpaces);\n const latex = htmlDecode(htmlToUse);\n\n // todo fix this in mathml-to-latex\n return replaceLeftRight(latex);\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 mathMl = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const { unwrapped, wrapType } = unWrapMath(convertMathMlToLatex(mathMl));\n\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 return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: mathMl,\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 latex = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n const decoded = htmlDecode(arrowHandlingCase(latex));\n\n log('[serialize] latex: ', latex);\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const { mathMlFromLatex, conversionDidNotWork } = convertLatexToMathMl({ latex, decoded, wrapper });\n\n if (conversionDidNotWork) {\n // this means we could not convert latex to mathMl, so just return the latex version,\n // same as we would do if mmlOutput would not be enabled\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: mathMlFromLatex }} />;\n }\n\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"}
|
|
@@ -84,6 +84,7 @@ var types = ['audio', 'video'];
|
|
|
84
84
|
function MediaPlugin(type, opts) {
|
|
85
85
|
var toolbar = {
|
|
86
86
|
icon: type === 'audio' ? /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null),
|
|
87
|
+
ariaLabel: type === 'audio' ? 'Insert audio' : 'Insert video',
|
|
87
88
|
onClick: function onClick(value, onChange) {
|
|
88
89
|
log('[toolbar] onClick');
|
|
89
90
|
|
|
@@ -215,7 +216,8 @@ function MediaPlugin(type, opts) {
|
|
|
215
216
|
"data-type": type,
|
|
216
217
|
width: style.width
|
|
217
218
|
}, rest), /*#__PURE__*/_react["default"].createElement("audio", {
|
|
218
|
-
controls: "controls"
|
|
219
|
+
controls: "controls",
|
|
220
|
+
controlsList: "nodownload"
|
|
219
221
|
}, /*#__PURE__*/_react["default"].createElement("source", {
|
|
220
222
|
type: "audio/mp3",
|
|
221
223
|
src: src
|
|
@@ -363,7 +365,8 @@ var serialization = {
|
|
|
363
365
|
|
|
364
366
|
if (tag === 'audio') {
|
|
365
367
|
return /*#__PURE__*/_react["default"].createElement("audio", {
|
|
366
|
-
controls: "controls"
|
|
368
|
+
controls: "controls",
|
|
369
|
+
controlsList: "nodownload"
|
|
367
370
|
}, /*#__PURE__*/_react["default"].createElement("source", {
|
|
368
371
|
type: "audio/mp3",
|
|
369
372
|
src: src
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"mappings":";;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,sCAAN,CAAZ;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,MAAMC,WAAW,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,sBAA1B,CAApB;AAEAF,EAAAA,WAAW,CAACG,OAAZ,CAAoB,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,MAAF,EAAP;AAAA,GAApB;AACD,CAJD;;AAMO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAW;AACrC,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,aAAT,CAAuB,KAAvB,CAAd;AACA,MAAQC,IAAR,GAA0CH,KAA1C,CAAQG,IAAR;AAAA,MAAcC,QAAd,GAA0CJ,KAA1C,CAAcI,QAAd;AAAA,MAAwBC,IAAxB,GAA0CL,KAA1C,CAAwBK,IAAxB;AAAA,MAAiCC,IAAjC,6CAA0CN,KAA1C;AACA,MAAMO,mBAAmB,GAAGb,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAAhD;AAEAlB,EAAAA,aAAa;AAEbS,EAAAA,KAAK,CAACU,SAAN,GAAkB,qBAAlB;AACAjB,EAAAA,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAApB,GAA+B,QAA/B;;AAEA,MAAME,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD,EAAMC,IAAN,EAAe;AACjCV,IAAAA,QAAQ,CAACS,GAAD,EAAMC,IAAN,CAAR;AACAb,IAAAA,KAAK,CAACH,MAAN;AACAJ,IAAAA,QAAQ,CAACc,IAAT,CAAcC,KAAd,CAAoBC,QAApB,GAA+BH,mBAA/B;AACD,GAJD;;AAMA,MAAMQ,EAAE,gBACN,gCAAC,uBAAD,gCACMT,IADN;AAEE,IAAA,kBAAkB,EAAED,IAAI,CAACW,kBAF3B;AAGE,IAAA,IAAI,EAAEb,IAHR;AAIE,IAAA,aAAa,EAAE,IAJjB;AAKE,IAAA,IAAI,EAAE,IALR;AAME,IAAA,WAAW,EAAES;AANf,KADF;;AAWAK,uBAASC,MAAT,CAAgBH,EAAhB,EAAoBd,KAApB;;AAEAP,EAAAA,QAAQ,CAACc,IAAT,CAAcW,WAAd,CAA0BlB,KAA1B;AACD,CA9BM;;;AAgCP,IAAMmB,KAAK,GAAG,CAAC,OAAD,EAAU,OAAV,CAAd;;AAEe,SAASC,WAAT,CAAqBlB,IAArB,EAA2BE,IAA3B,EAAiC;AAC9C,MAAMiB,OAAO,GAAG;AACdC,IAAAA,IAAI,EAAEpB,IAAI,KAAK,OAAT,gBAAmB,gCAAC,oBAAD,OAAnB,gBAAsC,gCAAC,oBAAD,OAD9B;AAEdqB,IAAAA,OAAO,EAAE,iBAACC,KAAD,EAAQC,QAAR,EAAqB;AAC5BnC,MAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,UAAMoC,MAAM,GAAGC,cAAOC,MAAP,CAAc;AAC3B1B,QAAAA,IAAI,EAAEA,IADqB;AAE3B2B,QAAAA,MAAM,EAAE,IAFmB;AAG3BhB,QAAAA,IAAI,EAAE;AACJiB,UAAAA,OAAO,EAAE,KADL;AAEJC,UAAAA,IAAI,EAAEC,SAFF;AAGJC,UAAAA,MAAM,EAAED,SAHJ;AAIJE,UAAAA,KAAK,EAAEF,SAJH;AAKJG,UAAAA,MAAM,EAAEH,SALJ;AAMJI,UAAAA,GAAG,EAAEJ,SAND;AAOJK,UAAAA,GAAG,EAAEL,SAPD;AAQJM,UAAAA,KAAK,EAAEN;AARH;AAHqB,OAAd,CAAf;;AAeA,UAAMO,MAAM,GAAGf,KAAK,CAACe,MAAN,GAAeC,YAAf,CAA4Bd,MAA5B,CAAf;AACAD,MAAAA,QAAQ,CAACc,MAAD,CAAR;AACAzC,MAAAA,YAAY,CAAC;AACXI,QAAAA,IAAI,EAAJA,IADW;AAEXE,QAAAA,IAAI,EAAJA,IAFW;AAGXD,QAAAA,QAAQ,EAAE,kBAACS,GAAD,EAAMC,IAAN,EAAe;AACvB,cAAM4B,WAAW,GAAGF,MAAM,CAACf,KAAP,CAAa/B,QAAb,CAAsBiD,cAAtB,CAAqC,UAACC,CAAD;AAAA,mBAAOA,CAAC,CAACC,GAAF,KAAUlB,MAAM,CAACkB,GAAxB;AAAA,WAArC,CAApB;;AAEA,cAAIH,WAAJ,EAAiB;AACf,gBAAI,CAAC7B,GAAL,EAAU;AACR,kBAAMiC,CAAC,GAAGN,MAAM,CAACO,eAAP,CAAuBpB,MAAM,CAACkB,GAA9B,CAAV;AACAnB,cAAAA,QAAQ,CAACoB,CAAD,EAAI;AAAA,uBAAMzC,IAAI,CAAC2C,KAAL,EAAN;AAAA,eAAJ,CAAR;AACD,aAHD,MAGO;AACL,kBAAMF,EAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBtB,MAAM,CAACkB,GAA3B,EAAgC;AAAE/B,gBAAAA,IAAI,EAAJA;AAAF,eAAhC,CAAV;;AACAY,cAAAA,QAAQ,CAACoB,EAAD,EAAI;AAAA,uBAAMzC,IAAI,CAAC2C,KAAL,CAAW,WAAX,EAAwBN,WAAxB,CAAN;AAAA,eAAJ,CAAR;AACD;AACF,WARD,MAQO;AACLrC,YAAAA,IAAI,CAAC2C,KAAL;AACD;AACF;AAjBU,OAAD,CAAZ;AAmBD,KAxCa;AAyCdE,IAAAA,QAAQ,EAAE,kBAACC,IAAD;AAAA,aAAUA,IAAI,CAACC,MAAL,KAAgB,QAAhB,IAA4BD,IAAI,CAAChD,IAAL,KAAcA,IAApD;AAAA;AAzCI,GAAhB;AA4CA,SAAO;AACLkD,IAAAA,IAAI,EAAElD,IADD;AAELmB,IAAAA,OAAO,EAAPA,OAFK;AAGLgC,IAAAA,UAAU,EAAE,oBAACC,CAAD,EAAIJ,IAAJ,EAAU1B,KAAV,EAAiBC,QAAjB,EAA8B;AACxC6B,MAAAA,CAAC,CAACC,cAAF;AACA,UAAMhB,MAAM,GAAGf,KAAK,CAACe,MAAN,GAAeO,eAAf,CAA+BI,IAAI,CAACN,GAApC,CAAf;AAEAnB,MAAAA,QAAQ,CAACc,MAAD,CAAR;AACD,KARI;AASLiB,IAAAA,UATK,sBASMzD,KATN,EASa;AAChB,UAAIA,KAAK,CAACmD,IAAN,CAAWhD,IAAX,KAAoBA,IAAxB,EAA8B;AAC5B,YAAQgD,IAAR,GAAsBnD,KAAtB,CAAQmD,IAAR;AAAA,YAAcN,GAAd,GAAsB7C,KAAtB,CAAc6C,GAAd;AACA,YAAQ/B,IAAR,GAAiBqC,IAAjB,CAAQrC,IAAR;AACA,YAAM4C,QAAQ,GAAG5C,IAAI,CAAC6C,MAAL,EAAjB;AACA,YAAQtB,GAAR,GAAsDqB,QAAtD,CAAQrB,GAAR;AAAA,YAAaH,MAAb,GAAsDwB,QAAtD,CAAaxB,MAAb;AAAA,YAAqBK,KAArB,GAAsDmB,QAAtD,CAAqBnB,KAArB;AAAA,YAA4BR,OAA5B,GAAsD2B,QAAtD,CAA4B3B,OAA5B;AAAA,YAAqC6B,GAArC,GAAsDF,QAAtD,CAAqCE,GAArC;AAAA,YAA6CtD,IAA7C,6CAAsDoD,QAAtD;;AACA,YAAMG,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvB,cAAMrB,MAAM,GAAGnC,IAAI,CAACyD,YAAL,EAAf;AACA,cAAMhB,CAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBJ,GAApB,EAAyB;AACjC/B,YAAAA,IAAI,kCACC4C,QADD;AAEF3B,cAAAA,OAAO,EAAE;AAFP;AAD6B,WAAzB,CAAV;AAOA1B,UAAAA,IAAI,CAACqB,QAAL,CAAcoB,CAAd,EAAiB,YAAM;AACrB/C,YAAAA,YAAY,iCACP2D,QADO;AAEVK,cAAAA,IAAI,EAAE,IAFI;AAGV5D,cAAAA,IAAI,EAAJA,IAHU;AAIVE,cAAAA,IAAI,EAAJA,IAJU;AAKVD,cAAAA,QAAQ,EAAE,kBAACS,GAAD,EAAMC,IAAN,EAAe;AACvB,oBAAQ+B,GAAR,GAAgBM,IAAhB,CAAQN,GAAR;AAEA,oBAAMH,WAAW,GAAGF,MAAM,CAACf,KAAP,CAAa/B,QAAb,CAAsBiD,cAAtB,CAClB,UAACC,CAAD;AAAA,yBAAOA,CAAC,CAACzC,IAAF,KAAWA,IAAX,IAAmByC,CAAC,CAAC9B,IAAF,CAAOkD,GAAP,CAAW,SAAX,CAA1B;AAAA,iBADkB,CAApB;;AAIA,oBAAItB,WAAW,IAAI7B,GAAnB,EAAwB;AACtB,sBAAMiC,GAAC,GAAGN,MAAM,CAACS,YAAP,CAAoBJ,GAApB,EAAyB;AAAE/B,oBAAAA,IAAI,EAAJA,IAAF;AAAQiB,oBAAAA,OAAO,EAAE;AAAjB,mBAAzB,CAAV;;AACA1B,kBAAAA,IAAI,CAACqB,QAAL,CAAcoB,GAAd,EAAiB;AAAA,2BAAMzC,IAAI,CAAC2C,KAAL,CAAW,WAAX,EAAwBN,WAAxB,CAAN;AAAA,mBAAjB;AACD,iBAHD,MAGO;AACLrC,kBAAAA,IAAI,CAAC2C,KAAL;AACD;AACF;AAlBS,eAAZ;AAoBD,WArBD;AAsBD,SA/BD;;AAgCA,YAAMiB,YAAY,GAAG,SAAfA,YAAe,GAAM;AACzB,cAAMzB,MAAM,GAAGnC,IAAI,CAACyD,YAAL,EAAf;AACA,cAAMhB,CAAC,GAAGN,MAAM,CAACO,eAAP,CAAuBI,IAAI,CAACN,GAA5B,CAAV;AAEAxC,UAAAA,IAAI,CAACqB,QAAL,CAAcoB,CAAd;AACD,SALD;;AAMA,YAAMrC,KAAK,GAAG,EAAd;;AAEA,YAAI8B,KAAJ,EAAW;AACT9B,UAAAA,KAAK,CAAC8B,KAAN,aAAiBA,KAAjB;AACD;;AAED,YAAIL,MAAJ,EAAY;AACVzB,UAAAA,KAAK,CAACyB,MAAN,aAAkBA,MAAlB;AACD;;AAED,YAAI0B,GAAG,KAAK,OAAZ,EAAqB;AACnB,8BACE,gCAAC,wBAAD;AAAc,YAAA,MAAM,MAApB;AAAqB,yBAAWzD,IAAhC;AAAsC,YAAA,KAAK,EAAEM,KAAK,CAAC8B;AAAnD,aAA8DjC,IAA9D,gBACE;AAAO,YAAA,QAAQ,EAAC;AAAhB,0BACE;AAAQ,YAAA,IAAI,EAAC,WAAb;AAAyB,YAAA,GAAG,EAAE+B;AAA9B,YADF,CADF,eAIE,gCAAC,wBAAD;AAAc,YAAA,QAAQ,MAAtB;AAAuB,YAAA,QAAQ,EAAE4B;AAAjC,YAJF,CADF;AAQD;;AAED,4BACE,gCAAC,wBAAD;AAAc,UAAA,MAAM,MAApB;AAAqB,uBAAW9D,IAAhC;AAAsC,UAAA,KAAK,EAAEM,KAAK,CAAC8B;AAAnD,WAA8DjC,IAA9D,gBACE;AACE,UAAA,WAAW,EAAC,GADd;AAEE,UAAA,KAAK,EAAC,0FAFR;AAGE,UAAA,eAAe,MAHjB;AAIE,UAAA,GAAG,EAAE+B,GAJP;AAKE,UAAA,OAAO,EAAEN,OAAO,GAAG,CAAH,GAAO;AALzB,WAMMzB,IANN,EAOMG,KAPN,EADF,eAUE,gCAAC,wBAAD;AAAc,UAAA,MAAM,EAAEoD,UAAtB;AAAkC,UAAA,QAAQ,EAAEI;AAA5C,UAVF,CADF;AAcD;AACF,KAzFI;AA0FLC,IAAAA,aAAa,EAAE,uBAACf,IAAD,EAAU;AACvB,UAAMgB,WAAW,GAAG,EAApB;AACA,UAAMC,gBAAgB,GAAG,EAAzB;AACA,UAAIC,KAAK,GAAG,CAAZ;AAEA,UAAIlB,IAAI,CAACC,MAAL,KAAgB,UAApB,EAAgC;AAEhCD,MAAAA,IAAI,CAACR,cAAL,CAAoB,UAACC,CAAD,EAAO;AACzB,YAAIA,CAAC,CAACQ,MAAF,KAAa,MAAjB,EAAyB;AACvBe,UAAAA,WAAW,CAACE,KAAD,CAAX,GAAqBzB,CAArB;AACD;;AAED,YAAM0B,OAAO,GAAGlD,KAAK,CAACmD,OAAN,CAAc3B,CAAC,CAACzC,IAAhB,KAAyB,CAAzC;;AAEA,YAAImE,OAAJ,EAAa;AACX,cAAID,KAAK,GAAG,CAAR,IAAaF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAxB,IAAuCF,WAAW,CAACE,KAAK,GAAG,CAAT,CAAX,CAAuBG,IAAvB,KAAgC,EAA3E,EAA+E;AAC7EJ,YAAAA,gBAAgB,CAACK,IAAjB,CAAsBN,WAAW,CAACE,KAAK,GAAG,CAAT,CAAjC;AACD;AACF;;AAEDA,QAAAA,KAAK;AACN,OAdD;AAgBA,UAAI,CAACD,gBAAgB,CAACM,MAAtB,EAA8B;AAE9B,aAAO,UAAClC,MAAD,EAAY;AACjBA,QAAAA,MAAM,CAACmC,oBAAP,CAA4B,YAAM;AAChCP,UAAAA,gBAAgB,CAACxE,OAAjB,CAAyB,UAACgF,CAAD;AAAA,mBAAOpC,MAAM,CAACqC,eAAP,CAAuBD,CAAC,CAAC/B,GAAzB,EAA8B,CAA9B,EAAiC,GAAjC,CAAP;AAAA,WAAzB;AACD,SAFD;AAGD,OAJD;AAKD;AAxHI,GAAP;AA0HD;;AAEM,IAAMiC,aAAa,GAAG;AAC3BC,EAAAA,WAD2B,uBACfhE;AAAG;AADY,IACA;AACzB,QAAIZ,IAAI,GAAGY,EAAE,CAACiE,OAAH,IAAcjE,EAAE,CAACiE,OAAH,CAAW7E,IAApC;AACA,QAAIyD,GAAG,GAAG,QAAV;AACA,QAAIvB,GAAJ;AACA,QAAM4C,SAAS,GAAG7D,KAAK,CAACmD,OAAN,CAAcpE,IAAd,CAAlB;;AAEA,QAAI8E,SAAS,GAAG,CAAhB,EAAmB;AACjB,UAAIlE,EAAE,YAAYmE,OAAd,IAAyBnE,EAAE,CAACoE,OAAH,CAAWC,WAAX,OAA6B,OAA1D,EAAmE;AAAA;;AACjEjF,QAAAA,IAAI,GAAG,OAAP;AACAyD,QAAAA,GAAG,GAAG,OAAN;AACAvB,QAAAA,GAAG,qBAAGtB,EAAE,CAACsE,UAAN,mDAAG,eAAeC,YAAf,CAA4B,KAA5B,CAAN;AACD,OAJD,MAIO;AACL;AACD;AACF;;AAED,eAA8CvE,EAAE,CAACiE,OAAH,IAAc,EAA5D;AAAA,QAAQhD,IAAR,QAAQA,IAAR;AAAA,QAAcI,MAAd,QAAcA,MAAd;AAAA,QAAsBD,KAAtB,QAAsBA,KAAtB;AAAA,QAA6BJ,OAA7B,QAA6BA,OAA7B;AAAA,QAAsCO,GAAtC,QAAsCA,GAAtC;;AAEA/C,IAAAA,GAAG,CAAC,eAAD,EAAkB8D,IAAlB,CAAH;AACA,QAAMd,KAAK,GAAGgD,QAAQ,CAACxE,EAAE,CAACuE,YAAH,CAAgB,OAAhB,CAAD,EAA2B,EAA3B,CAAR,IAA0C,IAAxD;AACA,QAAMpD,MAAM,GAAGqD,QAAQ,CAACxE,EAAE,CAACuE,YAAH,CAAgB,QAAhB,CAAD,EAA4B,EAA5B,CAAR,IAA2C,IAA1D;AAEA,QAAME,GAAG,GAAG;AACVpC,MAAAA,MAAM,EAAE,QADE;AAEVjD,MAAAA,IAAI,EAAEA,IAFI;AAGV2B,MAAAA,MAAM,EAAE,IAHE;AAIVhB,MAAAA,IAAI,EAAE;AACJ8C,QAAAA,GAAG,EAAHA,GADI;AAEJvB,QAAAA,GAAG,EAAEA,GAAG,IAAItB,EAAE,CAACuE,YAAH,CAAgB,KAAhB,CAFR;AAGJvD,QAAAA,OAAO,EAAPA,OAHI;AAIJC,QAAAA,IAAI,EAAJA,IAJI;AAKJE,QAAAA,MAAM,EAANA,MALI;AAMJE,QAAAA,MAAM,EAANA,MANI;AAOJD,QAAAA,KAAK,EAALA,KAPI;AAQJI,QAAAA,KAAK,EAALA,KARI;AASJD,QAAAA,GAAG,EAAHA;AATI;AAJI,KAAZ;AAgBA/C,IAAAA,GAAG,CAAC,iBAAD,EAAoBiG,GAApB,CAAH;AACA,WAAOA,GAAP;AACD,GAzC0B;AA0C3BC,EAAAA,SA1C2B,qBA0CjBrC;AAAO;AA1CU,IA0CM;AAC/B,QAAM6B,SAAS,GAAG7D,KAAK,CAACmD,OAAN,CAAcnB,MAAM,CAACjD,IAArB,CAAlB;AAEA,QAAI8E,SAAS,GAAG,CAAhB,EAAmB;AAEnB,QAAM9E,IAAI,GAAGiB,KAAK,CAAC6D,SAAD,CAAlB;AAEA,QAAQnE,IAAR,GAAiBsC,MAAjB,CAAQtC,IAAR;AACA,QAAMiB,OAAO,GAAGjB,IAAI,CAACkD,GAAL,CAAS,SAAT,CAAhB;AACA,QAAMJ,GAAG,GAAG9C,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAMhC,IAAI,GAAGlB,IAAI,CAACkD,GAAL,CAAS,MAAT,CAAb;AACA,QAAM3B,GAAG,GAAGvB,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAM5B,MAAM,GAAGtB,IAAI,CAACkD,GAAL,CAAS,QAAT,CAAf;AACA,QAAM7B,KAAK,GAAGrB,IAAI,CAACkD,GAAL,CAAS,OAAT,CAAd;AACA,QAAMzB,KAAK,GAAGzB,IAAI,CAACkD,GAAL,CAAS,OAAT,CAAd;AACA,QAAM9B,MAAM,GAAGpB,IAAI,CAACkD,GAAL,CAAS,QAAT,CAAf;AACA,QAAM1B,GAAG,GAAGxB,IAAI,CAACkD,GAAL,CAAS,KAAT,CAAZ;AACA,QAAMvD,KAAK,GAAG,EAAd;;AAEA,QAAI8B,KAAJ,EAAW;AACT9B,MAAAA,KAAK,CAAC8B,KAAN,aAAiBA,KAAjB;AACD;;AAED,QAAIL,MAAJ,EAAY;AACVzB,MAAAA,KAAK,CAACyB,MAAN,aAAkBA,MAAlB;AACD;;AAED,QAAMwD,QAAQ,GAAG;AACf,sBAAgB3D,OADD;AAEf,mBAAaC,IAFE;AAGf,qBAAeI,MAHA;AAIf,oBAAcD,KAJC;AAKf,kBAAYG;AALG,KAAjB;;AAOA,QAAMtC,KAAK,mCACNS,KADM;AAET4B,MAAAA,GAAG,EAAHA;AAFS,MAAX;;AAKA,QAAIuB,GAAG,KAAK,OAAZ,EAAqB;AACnB,0BACE;AAAO,QAAA,QAAQ,EAAC;AAAhB,sBACE;AAAQ,QAAA,IAAI,EAAC,WAAb;AAAyB,QAAA,GAAG,EAAEvB;AAA9B,QADF,CADF;AAKD;;AAED,wBACE;AACE,mBAAWlC,IADb;AAEE,MAAA,GAAG,EAAEkC;AAFP,OAGMqD,QAHN;AAIE,MAAA,WAAW,EAAC,GAJd;AAKE,MAAA,KAAK,EAAC,0FALR;AAME,MAAA,eAAe;AANjB,OAOM1F,KAPN,EADF;AAWD;AApG0B,CAAtB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant((d) => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n },\n });\n },\n supports: (node) => node.object === 'inline' && node.type === type,\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true,\n },\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n (d) => d.type === type && d.data.get('editing'),\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n },\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: (node) => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return (change) => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach((n) => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n },\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild?.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url,\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url,\n };\n const props = {\n ...style,\n src,\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n },\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","opts","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","uploadSoundSupport","ReactDOM","render","appendChild","types","MediaPlugin","toolbar","icon","ariaLabel","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","tag","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","Element","tagName","toLowerCase","firstChild","getAttribute","parseInt","out","serialize","divProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, opts, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={opts.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n ariaLabel: type === 'audio' ? 'Insert audio' : 'Insert video',\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined,\n },\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n opts,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant((d) => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n },\n });\n },\n supports: (node) => node.object === 'inline' && node.type === type,\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, tag, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true,\n },\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n opts,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n (d) => d.type === type && d.data.get('editing'),\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n },\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n if (tag === 'audio') {\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n <MediaToolbar hideEdit onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: (node) => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant((d) => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return (change) => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach((n) => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n },\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n let type = el.dataset && el.dataset.type;\n let tag = 'iframe';\n let src;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) {\n if (el instanceof Element && el.tagName.toLowerCase() === 'audio') {\n type = 'audio';\n tag = 'audio';\n src = el.firstChild?.getAttribute('src');\n } else {\n return;\n }\n }\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n tag,\n src: src || el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url,\n },\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const tag = data.get('tag');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url,\n };\n const props = {\n ...style,\n src,\n };\n\n if (tag === 'audio') {\n return (\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n );\n }\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n },\n};\n"],"file":"index.js"}
|