@pie-lib/editable-html 9.3.1-next.53 → 9.4.0
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 +17 -0
- package/lib/editor.js +244 -114
- package/lib/editor.js.map +1 -1
- package/lib/index.js +51 -5
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +50 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +82 -29
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +41 -2
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +22 -2
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +34 -13
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +42 -13
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +75 -30
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +75 -18
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +188 -100
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +29 -5
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +18 -4
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +8 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +47 -1
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +8 -1
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +22 -0
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +94 -15
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +43 -11
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +30 -8
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +48 -18
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +67 -19
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +15 -0
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +69 -8
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +4 -4
- package/src/plugins/media/index.jsx +1 -0
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.serialization = exports["default"] = void 0;
|
|
9
|
+
|
|
8
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
9
12
|
var _slate = require("slate");
|
|
13
|
+
|
|
10
14
|
var _immutable = _interopRequireDefault(require("immutable"));
|
|
15
|
+
|
|
11
16
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
|
+
|
|
12
18
|
var _slateEditList = _interopRequireDefault(require("slate-edit-list"));
|
|
19
|
+
|
|
13
20
|
var _debug = _interopRequireDefault(require("debug"));
|
|
21
|
+
|
|
14
22
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:list');
|
|
23
|
+
|
|
15
24
|
var b = function b(type, next, childNodes) {
|
|
16
25
|
return {
|
|
17
26
|
object: 'block',
|
|
@@ -19,51 +28,59 @@ var b = function b(type, next, childNodes) {
|
|
|
19
28
|
nodes: next(childNodes)
|
|
20
29
|
};
|
|
21
30
|
};
|
|
31
|
+
|
|
22
32
|
var serialization = {
|
|
23
33
|
deserialize: function deserialize(el, next) {
|
|
24
34
|
var name = el.tagName.toLowerCase();
|
|
35
|
+
|
|
25
36
|
if (name === 'li') {
|
|
26
37
|
return b('list_item', next, el.childNodes);
|
|
27
38
|
}
|
|
39
|
+
|
|
28
40
|
if (name === 'ul') {
|
|
29
41
|
return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
|
|
30
42
|
}
|
|
43
|
+
|
|
31
44
|
if (name === 'ol') {
|
|
32
45
|
return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
|
|
33
46
|
}
|
|
34
47
|
},
|
|
35
48
|
serialize: function serialize(object, children) {
|
|
36
49
|
if (object.object !== 'block') return;
|
|
50
|
+
|
|
37
51
|
if (object.type === 'list_item') {
|
|
38
52
|
return /*#__PURE__*/_react["default"].createElement("li", null, children);
|
|
39
53
|
}
|
|
54
|
+
|
|
40
55
|
if (object.type === 'ul_list') {
|
|
41
56
|
return /*#__PURE__*/_react["default"].createElement("ul", null, children);
|
|
42
57
|
}
|
|
58
|
+
|
|
43
59
|
if (object.type === 'ol_list') {
|
|
44
60
|
return /*#__PURE__*/_react["default"].createElement("ol", null, children);
|
|
45
61
|
}
|
|
46
62
|
}
|
|
47
63
|
};
|
|
48
64
|
exports.serialization = serialization;
|
|
65
|
+
|
|
49
66
|
var createEditList = function createEditList() {
|
|
50
67
|
var core = (0, _slateEditList["default"])({
|
|
51
68
|
typeDefault: 'span'
|
|
52
|
-
});
|
|
69
|
+
}); // fix outdated schema
|
|
53
70
|
|
|
54
|
-
// fix outdated schema
|
|
55
71
|
if (core.schema && core.schema.blocks) {
|
|
56
72
|
Object.keys(core.schema.blocks).forEach(function (key) {
|
|
57
73
|
var block = core.schema.blocks[key];
|
|
74
|
+
|
|
58
75
|
if (block.parent) {
|
|
59
76
|
return;
|
|
60
77
|
}
|
|
78
|
+
|
|
61
79
|
block.nodes[0] = {
|
|
62
80
|
type: block.nodes[0].types[0]
|
|
63
81
|
};
|
|
64
82
|
});
|
|
65
83
|
}
|
|
66
|
-
|
|
67
84
|
/**
|
|
68
85
|
* This override of the core.changes.wrapInList is needed because the version
|
|
69
86
|
* of immutable that we have does not support getting the element at a specific
|
|
@@ -73,36 +90,39 @@ var createEditList = function createEditList() {
|
|
|
73
90
|
/**
|
|
74
91
|
* Returns the highest list of blocks that cover the current selection
|
|
75
92
|
*/
|
|
93
|
+
|
|
94
|
+
|
|
76
95
|
var getHighestSelectedBlocks = function getHighestSelectedBlocks(value) {
|
|
77
96
|
var range = value.selection;
|
|
78
97
|
var document = value.document;
|
|
79
98
|
var startBlock = document.getClosestBlock(range.startKey);
|
|
80
99
|
var endBlock = document.getClosestBlock(range.endKey);
|
|
100
|
+
|
|
81
101
|
if (startBlock === endBlock) {
|
|
82
102
|
return _immutable["default"].List([startBlock]);
|
|
83
103
|
}
|
|
104
|
+
|
|
84
105
|
var ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
|
|
85
106
|
var startPath = ancestor.getPath(startBlock.key);
|
|
86
107
|
var endPath = ancestor.getPath(endBlock.key);
|
|
87
108
|
return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
|
|
88
109
|
};
|
|
89
|
-
|
|
90
110
|
/**
|
|
91
111
|
* Wrap the blocks in the current selection in a new list. Selected
|
|
92
112
|
* lists are merged together.
|
|
93
113
|
*/
|
|
114
|
+
|
|
115
|
+
|
|
94
116
|
core.changes.wrapInList = function (change, type, data) {
|
|
95
|
-
var selectedBlocks = getHighestSelectedBlocks(change.value);
|
|
117
|
+
var selectedBlocks = getHighestSelectedBlocks(change.value); // Wrap in container
|
|
96
118
|
|
|
97
|
-
// Wrap in container
|
|
98
119
|
change.wrapBlock({
|
|
99
120
|
type: type,
|
|
100
121
|
data: _slate.Data.create(data)
|
|
101
122
|
}, {
|
|
102
123
|
normalize: false
|
|
103
|
-
});
|
|
124
|
+
}); // Wrap in list items
|
|
104
125
|
|
|
105
|
-
// Wrap in list items
|
|
106
126
|
selectedBlocks.forEach(function (node) {
|
|
107
127
|
if (core.utils.isList(node)) {
|
|
108
128
|
// Merge its items with the created list
|
|
@@ -120,27 +140,32 @@ var createEditList = function createEditList() {
|
|
|
120
140
|
});
|
|
121
141
|
return change.normalize();
|
|
122
142
|
};
|
|
143
|
+
|
|
123
144
|
return core;
|
|
124
145
|
};
|
|
146
|
+
|
|
125
147
|
var _default = function _default(options) {
|
|
126
148
|
var type = options.type,
|
|
127
|
-
|
|
128
|
-
var core = createEditList();
|
|
149
|
+
icon = options.icon;
|
|
150
|
+
var core = createEditList(); // eslint-disable-next-line react/display-name
|
|
129
151
|
|
|
130
|
-
// eslint-disable-next-line react/display-name
|
|
131
152
|
core.renderNode = function (props) {
|
|
132
153
|
var node = props.node,
|
|
133
|
-
|
|
134
|
-
|
|
154
|
+
attributes = props.attributes,
|
|
155
|
+
children = props.children;
|
|
156
|
+
|
|
135
157
|
switch (node.type) {
|
|
136
158
|
case 'ul_list':
|
|
137
159
|
return /*#__PURE__*/_react["default"].createElement("ul", attributes, children);
|
|
160
|
+
|
|
138
161
|
case 'ol_list':
|
|
139
162
|
return /*#__PURE__*/_react["default"].createElement("ol", attributes, children);
|
|
163
|
+
|
|
140
164
|
case 'list_item':
|
|
141
165
|
return /*#__PURE__*/_react["default"].createElement("li", attributes, children);
|
|
142
166
|
}
|
|
143
167
|
};
|
|
168
|
+
|
|
144
169
|
core.toolbar = {
|
|
145
170
|
isMark: false,
|
|
146
171
|
type: type,
|
|
@@ -149,17 +174,20 @@ var _default = function _default(options) {
|
|
|
149
174
|
if (!core.utils.isSelectionInList(value)) {
|
|
150
175
|
return false;
|
|
151
176
|
}
|
|
177
|
+
|
|
152
178
|
var current = core.utils.getCurrentList(value);
|
|
153
179
|
return current ? current.type === type : false;
|
|
154
180
|
},
|
|
155
181
|
onClick: function onClick(value, onChange) {
|
|
156
182
|
log('[onClick]', value);
|
|
157
183
|
var inList = core.utils.isSelectionInList(value);
|
|
184
|
+
|
|
158
185
|
if (inList) {
|
|
159
186
|
var change = value.change().call(core.changes.unwrapList);
|
|
160
187
|
onChange(change);
|
|
161
188
|
} else {
|
|
162
189
|
var _change = value.change().call(core.changes.wrapInList, type);
|
|
190
|
+
|
|
163
191
|
onChange(_change);
|
|
164
192
|
}
|
|
165
193
|
}
|
|
@@ -171,5 +199,6 @@ var _default = function _default(options) {
|
|
|
171
199
|
};
|
|
172
200
|
return core;
|
|
173
201
|
};
|
|
202
|
+
|
|
174
203
|
exports["default"] = _default;
|
|
175
204
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["log","debug","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","createEditList","core","EditList","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"],"sources":["../../../src/plugins/list/index.jsx"],"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"],"mappings":"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"}
|
|
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,27 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.CustomToolbarComp = void 0;
|
|
8
9
|
exports["default"] = MathPlugin;
|
|
9
10
|
exports.serialization = exports.inlineMath = void 0;
|
|
11
|
+
|
|
10
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
11
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
12
16
|
var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
|
|
17
|
+
|
|
13
18
|
var _slate = require("slate");
|
|
19
|
+
|
|
14
20
|
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
21
|
+
|
|
15
22
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
23
|
+
|
|
16
24
|
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
17
26
|
var _debug = _interopRequireDefault(require("debug"));
|
|
27
|
+
|
|
18
28
|
var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
29
|
+
|
|
19
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
+
|
|
20
32
|
var _serialization = require("../../serialization");
|
|
33
|
+
|
|
21
34
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
35
|
+
|
|
22
36
|
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; }
|
|
37
|
+
|
|
23
38
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:math');
|
|
24
39
|
var TEXT_NODE = 3;
|
|
40
|
+
|
|
25
41
|
function generateAdditionalKeys() {
|
|
26
42
|
var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
27
43
|
return keyData.map(function (key) {
|
|
@@ -33,25 +49,31 @@ function generateAdditionalKeys() {
|
|
|
33
49
|
};
|
|
34
50
|
});
|
|
35
51
|
}
|
|
52
|
+
|
|
36
53
|
var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
37
54
|
var node = props.node,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
value = props.value,
|
|
56
|
+
onFocus = props.onFocus,
|
|
57
|
+
onBlur = props.onBlur,
|
|
58
|
+
onClick = props.onClick;
|
|
59
|
+
|
|
42
60
|
var _ref = props || {},
|
|
43
|
-
|
|
61
|
+
pluginProps = _ref.pluginProps;
|
|
62
|
+
|
|
44
63
|
var _ref2 = pluginProps || {},
|
|
45
|
-
|
|
64
|
+
math = _ref2.math;
|
|
65
|
+
|
|
46
66
|
var _ref3 = math || {},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
keypadMode = _ref3.keypadMode,
|
|
68
|
+
customKeys = _ref3.customKeys,
|
|
69
|
+
_ref3$controlledKeypa = _ref3.controlledKeypadMode,
|
|
70
|
+
controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
|
|
71
|
+
|
|
51
72
|
var onDone = function onDone(latex) {
|
|
52
73
|
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
53
74
|
latex: latex
|
|
54
75
|
});
|
|
76
|
+
|
|
55
77
|
var change = value.change().setNodeByKey(node.key, {
|
|
56
78
|
data: update
|
|
57
79
|
});
|
|
@@ -59,16 +81,19 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
|
59
81
|
change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
|
|
60
82
|
props.onToolbarDone(change, false);
|
|
61
83
|
};
|
|
84
|
+
|
|
62
85
|
var onChange = function onChange(latex) {
|
|
63
86
|
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
64
87
|
latex: latex
|
|
65
88
|
});
|
|
89
|
+
|
|
66
90
|
var change = value.change().setNodeByKey(node.key, {
|
|
67
91
|
data: update
|
|
68
92
|
});
|
|
69
93
|
log('call onToolbarChange:', change);
|
|
70
94
|
props.onDataChange(node.key, update);
|
|
71
95
|
};
|
|
96
|
+
|
|
72
97
|
var latex = node.data.get('latex');
|
|
73
98
|
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
|
|
74
99
|
autoFocus: true,
|
|
@@ -84,24 +109,25 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
|
84
109
|
});
|
|
85
110
|
}, function (prev, next) {
|
|
86
111
|
var node = prev.node,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
112
|
+
_prev$pluginProps = prev.pluginProps;
|
|
113
|
+
_prev$pluginProps = _prev$pluginProps === void 0 ? {} : _prev$pluginProps;
|
|
114
|
+
var _prev$pluginProps$mat = _prev$pluginProps.math;
|
|
115
|
+
_prev$pluginProps$mat = _prev$pluginProps$mat === void 0 ? {} : _prev$pluginProps$mat;
|
|
116
|
+
var keypadMode = _prev$pluginProps$mat.keypadMode,
|
|
117
|
+
controlledKeypadMode = _prev$pluginProps$mat.controlledKeypadMode;
|
|
93
118
|
var nodeNext = next.node,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
119
|
+
_next$pluginProps = next.pluginProps;
|
|
120
|
+
_next$pluginProps = _next$pluginProps === void 0 ? {} : _next$pluginProps;
|
|
121
|
+
var _next$pluginProps$mat = _next$pluginProps.math;
|
|
122
|
+
_next$pluginProps$mat = _next$pluginProps$mat === void 0 ? {} : _next$pluginProps$mat;
|
|
123
|
+
var keypadModeNext = _next$pluginProps$mat.keypadMode,
|
|
124
|
+
controlledKeypadModeNext = _next$pluginProps$mat.controlledKeypadMode;
|
|
100
125
|
var keypadModeChanged = keypadMode !== keypadModeNext;
|
|
101
126
|
var controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;
|
|
102
127
|
var equal = node.equals(nodeNext);
|
|
103
128
|
return equal && !keypadModeChanged && !controlledKeypadModeChanged;
|
|
104
129
|
});
|
|
130
|
+
|
|
105
131
|
exports.CustomToolbarComp = CustomToolbarComp;
|
|
106
132
|
CustomToolbarComp.propTypes = {
|
|
107
133
|
node: _slatePropTypes["default"].node.isRequired,
|
|
@@ -112,6 +138,7 @@ CustomToolbarComp.propTypes = {
|
|
|
112
138
|
onClick: _propTypes["default"].func,
|
|
113
139
|
onBlur: _propTypes["default"].func
|
|
114
140
|
};
|
|
141
|
+
|
|
115
142
|
function MathPlugin() {
|
|
116
143
|
return {
|
|
117
144
|
name: 'math',
|
|
@@ -126,6 +153,7 @@ function MathPlugin() {
|
|
|
126
153
|
supports: function supports(node) {
|
|
127
154
|
return node && node.object === 'inline' && node.type === 'math';
|
|
128
155
|
},
|
|
156
|
+
|
|
129
157
|
/**
|
|
130
158
|
* Return a react component function
|
|
131
159
|
* @param node {Slate.Node}
|
|
@@ -155,10 +183,11 @@ function MathPlugin() {
|
|
|
155
183
|
log('[renderNode]: data:', props.node.data);
|
|
156
184
|
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, props);
|
|
157
185
|
}
|
|
158
|
-
|
|
159
186
|
/**
|
|
160
187
|
* Here for rendering mathml content
|
|
161
188
|
*/
|
|
189
|
+
|
|
190
|
+
|
|
162
191
|
if (props.node.type === 'mathml') {
|
|
163
192
|
var html = props.node.data.get('html');
|
|
164
193
|
return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
|
|
@@ -170,10 +199,12 @@ function MathPlugin() {
|
|
|
170
199
|
}
|
|
171
200
|
};
|
|
172
201
|
}
|
|
202
|
+
|
|
173
203
|
MathPlugin.ROUND_BRACKETS = 'round_brackets';
|
|
174
204
|
MathPlugin.SQUARE_BRACKETS = 'square_brackets';
|
|
175
205
|
MathPlugin.DOLLAR = 'dollar';
|
|
176
206
|
MathPlugin.DOUBLE_DOLLAR = 'double_dollar';
|
|
207
|
+
|
|
177
208
|
var inlineMath = function inlineMath() {
|
|
178
209
|
return _slate.Inline.create({
|
|
179
210
|
object: 'inline',
|
|
@@ -184,15 +215,17 @@ var inlineMath = function inlineMath() {
|
|
|
184
215
|
}
|
|
185
216
|
});
|
|
186
217
|
};
|
|
218
|
+
|
|
187
219
|
exports.inlineMath = inlineMath;
|
|
220
|
+
|
|
188
221
|
var htmlDecode = function htmlDecode(input) {
|
|
189
222
|
var doc = new DOMParser().parseFromString(input, 'text/html');
|
|
190
223
|
return doc.documentElement.textContent;
|
|
191
224
|
};
|
|
225
|
+
|
|
192
226
|
var getTagName = function getTagName(el) {
|
|
193
227
|
return (el && el.tagName || '').toLowerCase();
|
|
194
228
|
};
|
|
195
|
-
|
|
196
229
|
/**
|
|
197
230
|
* Makes sure that strings that contain stuff like:
|
|
198
231
|
* x<y are not transformed into x by the DOMParser because it thinks
|
|
@@ -200,10 +233,11 @@ var getTagName = function getTagName(el) {
|
|
|
200
233
|
* @param input
|
|
201
234
|
* @returns {*}
|
|
202
235
|
*/
|
|
236
|
+
|
|
237
|
+
|
|
203
238
|
var lessThanHandling = function lessThanHandling(input) {
|
|
204
|
-
var arrowSplit = input.split('<');
|
|
239
|
+
var arrowSplit = input.split('<'); // if we don't have at least 2 characters there's no point in checking
|
|
205
240
|
|
|
206
|
-
// if we don't have at least 2 characters there's no point in checking
|
|
207
241
|
if (input.length > 2) {
|
|
208
242
|
return arrowSplit.reduce(function (st, part) {
|
|
209
243
|
/*
|
|
@@ -215,11 +249,14 @@ var lessThanHandling = function lessThanHandling(input) {
|
|
|
215
249
|
if (part.match(/<[a-zA-Z/][\s\S]*>/gi)) {
|
|
216
250
|
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
217
251
|
}
|
|
252
|
+
|
|
218
253
|
return "".concat(st).concat(st ? '<' : '').concat(part);
|
|
219
254
|
}, '');
|
|
220
255
|
}
|
|
256
|
+
|
|
221
257
|
return input;
|
|
222
258
|
};
|
|
259
|
+
|
|
223
260
|
var serialization = {
|
|
224
261
|
deserialize: function deserialize(el) {
|
|
225
262
|
var tagName = getTagName(el);
|
|
@@ -230,12 +267,13 @@ var serialization = {
|
|
|
230
267
|
* an inline child and the block is of type block
|
|
231
268
|
* This is for legacy content only since our math rendering is valid for the core slate rules
|
|
232
269
|
*/
|
|
270
|
+
|
|
233
271
|
var hasMathChild = _serialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
|
|
234
272
|
log('[deserialize] name: ', tagName);
|
|
235
|
-
|
|
236
273
|
/**
|
|
237
274
|
* This is here in order to be able to render mathml content
|
|
238
275
|
*/
|
|
276
|
+
|
|
239
277
|
if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
|
|
240
278
|
var newHtml = hasMathChild ? el.innerHTML : el.outerHTML;
|
|
241
279
|
return {
|
|
@@ -247,18 +285,24 @@ var serialization = {
|
|
|
247
285
|
}
|
|
248
286
|
};
|
|
249
287
|
}
|
|
288
|
+
|
|
250
289
|
if (el.nodeType === TEXT_NODE) {
|
|
251
290
|
return;
|
|
252
291
|
}
|
|
292
|
+
|
|
253
293
|
if (tagName !== 'span') {
|
|
254
294
|
return;
|
|
255
295
|
}
|
|
296
|
+
|
|
256
297
|
var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
|
|
298
|
+
|
|
257
299
|
if (hasLatex) {
|
|
258
300
|
var latex = htmlDecode(el.innerHTML);
|
|
301
|
+
|
|
259
302
|
var _unWrapMath = (0, _mathRendering.unWrapMath)(latex),
|
|
260
|
-
|
|
261
|
-
|
|
303
|
+
unwrapped = _unWrapMath.unwrapped,
|
|
304
|
+
wrapType = _unWrapMath.wrapType;
|
|
305
|
+
|
|
262
306
|
log('[deserialize]: noBrackets: ', unwrapped, wrapType);
|
|
263
307
|
return {
|
|
264
308
|
object: 'inline',
|
|
@@ -283,10 +327,11 @@ var serialization = {
|
|
|
283
327
|
"data-raw": decoded
|
|
284
328
|
}, (0, _mathRendering.wrapMath)(decoded, wrapper));
|
|
285
329
|
}
|
|
286
|
-
|
|
287
330
|
/**
|
|
288
331
|
* Here for rendering mathml content
|
|
289
332
|
*/
|
|
333
|
+
|
|
334
|
+
|
|
290
335
|
if (object.type === 'mathml') {
|
|
291
336
|
var html = object.data.get('html');
|
|
292
337
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["log","debug","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","unWrapMath","unwrapped","wrapType","nodes","wrapper","serialize","l","decoded","wrapMath"],"sources":["../../../src/plugins/math/index.jsx"],"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"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAiD;AAAA;AACjD,IAAMA,GAAG,GAAG,IAAAC,iBAAK,EAAC,qCAAqC,CAAC;AAExD,IAAMC,SAAS,GAAG,CAAC;AAEnB,SAASC,sBAAsB,GAAe;EAAA,IAAdC,OAAO,uEAAG,EAAE;EAC1C,OAAOA,OAAO,CAACC,GAAG,CAAC,UAACC,GAAG;IAAA,OAAM;MAC3BC,IAAI,EAAED,GAAG;MACTE,KAAK,EAAEF,GAAG;MACVG,KAAK,EAAEH,GAAG;MACVI,KAAK,EAAEJ;IACT,CAAC;EAAA,CAAC,CAAC;AACL;AAEO,IAAMK,iBAAiB,gBAAGC,iBAAK,CAACC,IAAI,CACzC,UAACC,KAAK,EAAK;EACT,IAAQC,IAAI,GAAsCD,KAAK,CAA/CC,IAAI;IAAEC,KAAK,GAA+BF,KAAK,CAAzCE,KAAK;IAAEC,OAAO,GAAsBH,KAAK,CAAlCG,OAAO;IAAEC,MAAM,GAAcJ,KAAK,CAAzBI,MAAM;IAAEC,OAAO,GAAKL,KAAK,CAAjBK,OAAO;EAC7C,WAAwBL,KAAK,IAAI,CAAC,CAAC;IAA3BM,WAAW,QAAXA,WAAW;EACnB,YAAiBA,WAAW,IAAI,CAAC,CAAC;IAA1BC,IAAI,SAAJA,IAAI;EACZ,YAAgEA,IAAI,IAAI,CAAC,CAAC;IAAlEC,UAAU,SAAVA,UAAU;IAAEC,UAAU,SAAVA,UAAU;IAAA,8BAAEC,oBAAoB;IAApBA,oBAAoB,sCAAG,IAAI;EAE3D,IAAMC,MAAM,GAAG,SAATA,MAAM,CAAIjB,KAAK,EAAK;IACxB,IAAMkB,MAAM,mCACPX,IAAI,CAACY,IAAI,CAACC,QAAQ,EAAE;MACvBpB,KAAK,EAALA;IAAK,EACN;IACD,IAAMqB,MAAM,GAAGb,KAAK,CAACa,MAAM,EAAE,CAACC,YAAY,CAACf,IAAI,CAACT,GAAG,EAAE;MAAEqB,IAAI,EAAED;IAAO,CAAC,CAAC;IAEtE,IAAMK,QAAQ,GAAGf,KAAK,CAACgB,QAAQ,CAACC,WAAW,CAAClB,IAAI,CAACT,GAAG,CAAC;IAErDuB,MAAM,CAACK,WAAW,CAACH,QAAQ,CAACzB,GAAG,EAAE,CAAC,CAAC,CAAC6B,YAAY,CAACJ,QAAQ,CAACzB,GAAG,EAAE,CAAC,CAAC;IAEjEQ,KAAK,CAACsB,aAAa,CAACP,MAAM,EAAE,KAAK,CAAC;EACpC,CAAC;EAED,IAAMQ,QAAQ,GAAG,SAAXA,QAAQ,CAAI7B,KAAK,EAAK;IAC1B,IAAMkB,MAAM,mCACPX,IAAI,CAACY,IAAI,CAACC,QAAQ,EAAE;MACvBpB,KAAK,EAALA;IAAK,EACN;IACD,IAAMqB,MAAM,GAAGb,KAAK,CAACa,MAAM,EAAE,CAACC,YAAY,CAACf,IAAI,CAACT,GAAG,EAAE;MAAEqB,IAAI,EAAED;IAAO,CAAC,CAAC;IACtE1B,GAAG,CAAC,uBAAuB,EAAE6B,MAAM,CAAC;IACpCf,KAAK,CAACwB,YAAY,CAACvB,IAAI,CAACT,GAAG,EAAEoB,MAAM,CAAC;EACtC,CAAC;EAED,IAAMlB,KAAK,GAAGO,IAAI,CAACY,IAAI,CAACY,GAAG,CAAC,OAAO,CAAC;EAEpC,oBACE,gCAAC,wBAAW;IACV,SAAS;IACT,cAAc,EAAEpC,sBAAsB,CAACoB,UAAU,CAAE;IACnD,KAAK,EAAEf,KAAM;IACb,QAAQ,EAAE6B,QAAS;IACnB,MAAM,EAAEZ,MAAO;IACf,MAAM,EAAEP,MAAO;IACf,OAAO,EAAED,OAAQ;IACjB,OAAO,EAAEE,OAAQ;IACjB,UAAU,EAAEG,UAAW;IACvB,oBAAoB,EAAEE;EAAqB,EAC3C;AAEN,CAAC,EACD,UAACgB,IAAI,EAAEC,IAAI,EAAK;EACd,IAAQ1B,IAAI,GAA4EyB,IAAI,CAApFzB,IAAI;IAAA,oBAA4EyB,IAAI,CAA9EpB,WAAW;IAAA,oDAAwD,CAAC,CAAC;IAAA,2CAAtDC,IAAI;IAAA,4DAAyC,CAAC,CAAC;IAAvCC,UAAU,0BAAVA,UAAU;IAAEE,oBAAoB,0BAApBA,oBAAoB;EACrE,IACQkB,QAAQ,GAEZD,IAAI,CAFN1B,IAAI;IAAA,oBAEF0B,IAAI,CADNrB,WAAW;IAAA,oDAAkG,CAAC,CAAC;IAAA,2CAAhGC,IAAI;IAAA,4DAAmF,CAAC,CAAC;IAArEsB,cAAc,0BAA1BrB,UAAU;IAAwCsB,wBAAwB,0BAA9CpB,oBAAoB;EAEzE,IAAMqB,iBAAiB,GAAGvB,UAAU,KAAKqB,cAAc;EACvD,IAAMG,2BAA2B,GAAGtB,oBAAoB,KAAKoB,wBAAwB;EAErF,IAAMG,KAAK,GAAGhC,IAAI,CAACiC,MAAM,CAACN,QAAQ,CAAC;EACnC,OAAOK,KAAK,IAAI,CAACF,iBAAiB,IAAI,CAACC,2BAA2B;AACpE,CAAC,CACF;AAAC;AAEFnC,iBAAiB,CAACsC,SAAS,GAAG;EAC5BlC,IAAI,EAAEmC,0BAAc,CAACnC,IAAI,CAACoC,UAAU;EACpCnC,KAAK,EAAEkC,0BAAc,CAAClC,KAAK;EAC3BoB,aAAa,EAAEgB,qBAAS,CAACC,IAAI;EAC7Bf,YAAY,EAAEc,qBAAS,CAACC,IAAI;EAC5BpC,OAAO,EAAEmC,qBAAS,CAACC,IAAI;EACvBlC,OAAO,EAAEiC,qBAAS,CAACC,IAAI;EACvBnC,MAAM,EAAEkC,qBAAS,CAACC;AACpB,CAAC;AAEc,SAASC,UAAU,GAAG;EACnC,OAAO;IACL/C,IAAI,EAAE,MAAM;IACZgD,OAAO,EAAE;MACPC,IAAI,eAAE,gCAAC,qBAAS,OAAG;MACnBrC,OAAO,EAAE,iBAACH,KAAK,EAAEqB,QAAQ,EAAK;QAC5BrC,GAAG,CAAC,cAAc,CAAC;QACnB,IAAMqB,IAAI,GAAGoC,UAAU,EAAE;QACzB,IAAM5B,MAAM,GAAGb,KAAK,CAACa,MAAM,EAAE,CAAC6B,YAAY,CAACrC,IAAI,CAAC;QAChDgB,QAAQ,CAACR,MAAM,CAAC;MAClB,CAAC;MACD8B,QAAQ,EAAE,kBAAC5C,IAAI;QAAA,OAAKA,IAAI,IAAIA,IAAI,CAAC6C,MAAM,KAAK,QAAQ,IAAI7C,IAAI,CAAC8C,IAAI,KAAK,MAAM;MAAA;MAC5E;AACN;AACA;AACA;AACA;AACA;AACA;MACMlD,iBAAiB,EAAjBA;IACF,CAAC;IACDmD,MAAM,EAAE;MACN9B,QAAQ,EAAE;QAAE+B,KAAK,EAAE,CAAC;UAAEF,IAAI,EAAE;QAAO,CAAC;MAAE;IACxC,CAAC;IAEDG,YAAY,EAAE,sBAACjD,IAAI,EAAEkD,UAAU,EAAEC,CAAC,EAAK;MACrC,IAAIA,CAAC,EAAE;QACL,OAAO;UACLC,QAAQ,EAAE,UAAU;UACpBC,GAAG,EAAE;QACP,CAAC;MACH;IACF,CAAC;IAEDC,UAAU,EAAE,oBAACvD,KAAK,EAAK;MACrB,IAAIA,KAAK,CAACC,IAAI,CAAC8C,IAAI,KAAK,MAAM,EAAE;QAC9B7D,GAAG,CAAC,qBAAqB,EAAEc,KAAK,CAACC,IAAI,CAACY,IAAI,CAAC;QAC3C,oBAAO,gCAAC,wBAAW,EAAKb,KAAK,CAAI;MACnC;;MAEA;AACN;AACA;MACM,IAAIA,KAAK,CAACC,IAAI,CAAC8C,IAAI,KAAK,QAAQ,EAAE;QAChC,IAAMS,IAAI,GAAGxD,KAAK,CAACC,IAAI,CAACY,IAAI,CAACY,GAAG,CAAC,MAAM,CAAC;QAExC,oBAAO,sEAAUzB,KAAK,CAACyD,UAAU;UAAE,uBAAuB,EAAE;YAAEC,MAAM,EAAEF;UAAK;QAAE,GAAG;MAClF;IACF;EACF,CAAC;AACH;AAEAhB,UAAU,CAACmB,cAAc,GAAG,gBAAgB;AAC5CnB,UAAU,CAACoB,eAAe,GAAG,iBAAiB;AAC9CpB,UAAU,CAACqB,MAAM,GAAG,QAAQ;AAC5BrB,UAAU,CAACsB,aAAa,GAAG,eAAe;AAEnC,IAAMnB,UAAU,GAAG,SAAbA,UAAU;EAAA,OACrBoB,aAAM,CAACC,MAAM,CAAC;IACZlB,MAAM,EAAE,QAAQ;IAChBC,IAAI,EAAE,MAAM;IACZkB,MAAM,EAAE,IAAI;IACZpD,IAAI,EAAE;MACJnB,KAAK,EAAE;IACT;EACF,CAAC,CAAC;AAAA;AAAC;AAEL,IAAMwE,UAAU,GAAG,SAAbA,UAAU,CAAIC,KAAK,EAAK;EAC5B,IAAMC,GAAG,GAAG,IAAIC,SAAS,EAAE,CAACC,eAAe,CAACH,KAAK,EAAE,WAAW,CAAC;EAE/D,OAAOC,GAAG,CAACG,eAAe,CAACC,WAAW;AACxC,CAAC;AAED,IAAMC,UAAU,GAAG,SAAbA,UAAU,CAAIC,EAAE,EAAK;EACzB,OAAO,CAAEA,EAAE,IAAIA,EAAE,CAACC,OAAO,IAAK,EAAE,EAAEC,WAAW,EAAE;AACjD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgB,CAAIV,KAAK,EAAK;EAClC,IAAMW,UAAU,GAAGX,KAAK,CAACY,KAAK,CAAC,GAAG,CAAC;;EAEnC;EACA,IAAIZ,KAAK,CAACa,MAAM,GAAG,CAAC,EAAE;IACpB,OAAOF,UAAU,CAACG,MAAM,CAAC,UAACC,EAAE,EAAEC,IAAI,EAAK;MACrC;AACN;AACA;AACA;AACA;AACA;MACM,IAAIA,IAAI,CAAClC,KAAK,CAAC,sBAAsB,CAAC,EAAE;QACtC,iBAAUiC,EAAE,SAAGA,EAAE,GAAG,GAAG,GAAG,EAAE,SAAGC,IAAI;MACrC;MAEA,iBAAUD,EAAE,SAAGA,EAAE,GAAG,MAAM,GAAG,EAAE,SAAGC,IAAI;IACxC,CAAC,EAAE,EAAE,CAAC;EACR;EAEA,OAAOhB,KAAK;AACd,CAAC;AAEM,IAAMiB,aAAa,GAAG;EAC3BC,WAAW,uBAACX,EAAE,EAAE;IACd,IAAMC,OAAO,GAAGF,UAAU,CAACC,EAAE,CAAC;IAC9B;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAMY,YAAY,GAAGC,yBAAU,CAACZ,OAAO,CAAC,IAAID,EAAE,CAACc,UAAU,CAACR,MAAM,KAAK,CAAC,IAAIP,UAAU,CAACC,EAAE,CAACe,UAAU,CAAC,KAAK,MAAM;IAC9GvG,GAAG,CAAC,sBAAsB,EAAEyF,OAAO,CAAC;;IAEpC;AACJ;AACA;IACI,IAAIA,OAAO,KAAK,MAAM,IAAKD,EAAE,CAACgB,OAAO,IAAIhB,EAAE,CAACgB,OAAO,CAAC3C,IAAI,KAAK,QAAS,IAAIuC,YAAY,EAAE;MACtF,IAAMK,OAAO,GAAGL,YAAY,GAAGZ,EAAE,CAACkB,SAAS,GAAGlB,EAAE,CAACmB,SAAS;MAE1D,OAAO;QACL/C,MAAM,EAAE,QAAQ;QAChBmB,MAAM,EAAE,IAAI;QACZlB,IAAI,EAAE,QAAQ;QACdlC,IAAI,EAAE;UACJ2C,IAAI,EAAEmC;QACR;MACF,CAAC;IACH;IAEA,IAAIjB,EAAE,CAACoB,QAAQ,KAAK1G,SAAS,EAAE;MAC7B;IACF;IAEA,IAAIuF,OAAO,KAAK,MAAM,EAAE;MACtB;IACF;IAEA,IAAMoB,QAAQ,GAAGrB,EAAE,CAACsB,YAAY,CAAC,YAAY,CAAC,IAAItB,EAAE,CAACsB,YAAY,CAAC,OAAO,CAAC;IAE1E,IAAID,QAAQ,EAAE;MACZ,IAAMrG,KAAK,GAAGwE,UAAU,CAACQ,EAAE,CAACkB,SAAS,CAAC;MACtC,kBAAgC,IAAAK,yBAAU,EAACvG,KAAK,CAAC;QAAzCwG,SAAS,eAATA,SAAS;QAAEC,QAAQ,eAARA,QAAQ;MAC3BjH,GAAG,CAAC,6BAA6B,EAAEgH,SAAS,EAAEC,QAAQ,CAAC;MACvD,OAAO;QACLrD,MAAM,EAAE,QAAQ;QAChBC,IAAI,EAAE,MAAM;QACZkB,MAAM,EAAE,IAAI;QACZmC,KAAK,EAAE,EAAE;QACTvF,IAAI,EAAE;UACJnB,KAAK,EAAEwG,SAAS;UAChBG,OAAO,EAAEF;QACX;MACF,CAAC;IACH;EACF,CAAC;EACDG,SAAS,qBAACxD,MAAM,EAAE;IAChB,IAAIA,MAAM,CAACC,IAAI,KAAK,MAAM,EAAE;MAC1B,IAAMwD,CAAC,GAAGzD,MAAM,CAACjC,IAAI,CAACY,GAAG,CAAC,OAAO,CAAC;MAClC,IAAM4E,OAAO,GAAGvD,MAAM,CAACjC,IAAI,CAACY,GAAG,CAAC,SAAS,CAAC;MAC1CvC,GAAG,CAAC,qBAAqB,EAAEqH,CAAC,CAAC;MAC7B,IAAMC,OAAO,GAAGtC,UAAU,CAACW,gBAAgB,CAAC0B,CAAC,CAAC,CAAC;MAC/C,oBACE;QAAM,cAAW,EAAE;QAAC,YAAUC;MAAQ,GACnC,IAAAC,uBAAQ,EAACD,OAAO,EAAEH,OAAO,CAAC,CACtB;IAEX;;IAEA;AACJ;AACA;IACI,IAAIvD,MAAM,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC5B,IAAMS,IAAI,GAAGV,MAAM,CAACjC,IAAI,CAACY,GAAG,CAAC,MAAM,CAAC;MAEpC,oBAAO;QAAM,aAAU,QAAQ;QAAC,uBAAuB,EAAE;UAAEiC,MAAM,EAAEF;QAAK;MAAE,EAAG;IAC/E;EACF;AACF,CAAC;AAAC"}
|
|
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"}
|