@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.
Files changed (75) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/lib/editor.js +244 -114
  3. package/lib/editor.js.map +1 -1
  4. package/lib/index.js +51 -5
  5. package/lib/index.js.map +1 -1
  6. package/lib/parse-html.js +5 -6
  7. package/lib/parse-html.js.map +1 -1
  8. package/lib/plugins/characters/custom-popper.js +12 -2
  9. package/lib/plugins/characters/custom-popper.js.map +1 -1
  10. package/lib/plugins/characters/index.js +50 -3
  11. package/lib/plugins/characters/index.js.map +1 -1
  12. package/lib/plugins/characters/utils.js.map +1 -1
  13. package/lib/plugins/image/alt-dialog.js +26 -0
  14. package/lib/plugins/image/alt-dialog.js.map +1 -1
  15. package/lib/plugins/image/component.js +82 -29
  16. package/lib/plugins/image/component.js.map +1 -1
  17. package/lib/plugins/image/image-toolbar.js +45 -7
  18. package/lib/plugins/image/image-toolbar.js.map +1 -1
  19. package/lib/plugins/image/index.js +41 -2
  20. package/lib/plugins/image/index.js.map +1 -1
  21. package/lib/plugins/image/insert-image-handler.js +22 -2
  22. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  23. package/lib/plugins/index.js +34 -13
  24. package/lib/plugins/index.js.map +1 -1
  25. package/lib/plugins/list/index.js +42 -13
  26. package/lib/plugins/list/index.js.map +1 -1
  27. package/lib/plugins/math/index.js +75 -30
  28. package/lib/plugins/math/index.js.map +1 -1
  29. package/lib/plugins/media/index.js +75 -18
  30. package/lib/plugins/media/index.js.map +1 -1
  31. package/lib/plugins/media/media-dialog.js +188 -100
  32. package/lib/plugins/media/media-dialog.js.map +1 -1
  33. package/lib/plugins/media/media-toolbar.js +24 -4
  34. package/lib/plugins/media/media-toolbar.js.map +1 -1
  35. package/lib/plugins/media/media-wrapper.js +29 -5
  36. package/lib/plugins/media/media-wrapper.js.map +1 -1
  37. package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
  38. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  39. package/lib/plugins/respArea/drag-in-the-blank/index.js +18 -4
  40. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  41. package/lib/plugins/respArea/explicit-constructed-response/index.js +8 -2
  42. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  43. package/lib/plugins/respArea/icons/index.js +18 -1
  44. package/lib/plugins/respArea/icons/index.js.map +1 -1
  45. package/lib/plugins/respArea/index.js +47 -1
  46. package/lib/plugins/respArea/index.js.map +1 -1
  47. package/lib/plugins/respArea/inline-dropdown/index.js +8 -1
  48. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  49. package/lib/plugins/respArea/utils.js +22 -0
  50. package/lib/plugins/respArea/utils.js.map +1 -1
  51. package/lib/plugins/table/icons/index.js +7 -0
  52. package/lib/plugins/table/icons/index.js.map +1 -1
  53. package/lib/plugins/table/index.js +94 -15
  54. package/lib/plugins/table/index.js.map +1 -1
  55. package/lib/plugins/table/table-toolbar.js +43 -11
  56. package/lib/plugins/table/table-toolbar.js.map +1 -1
  57. package/lib/plugins/toolbar/default-toolbar.js +30 -8
  58. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  59. package/lib/plugins/toolbar/done-button.js +9 -1
  60. package/lib/plugins/toolbar/done-button.js.map +1 -1
  61. package/lib/plugins/toolbar/editor-and-toolbar.js +48 -18
  62. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  63. package/lib/plugins/toolbar/index.js +5 -0
  64. package/lib/plugins/toolbar/index.js.map +1 -1
  65. package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
  66. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  67. package/lib/plugins/toolbar/toolbar.js +67 -19
  68. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  69. package/lib/plugins/utils.js +15 -0
  70. package/lib/plugins/utils.js.map +1 -1
  71. package/lib/serialization.js +69 -8
  72. package/lib/serialization.js.map +1 -1
  73. package/lib/theme.js.map +1 -1
  74. package/package.json +4 -4
  75. 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
- icon = options.icon;
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
- attributes = props.attributes,
134
- children = props.children;
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":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMA,GAAG,GAAG,IAAAC,iBAAK,EAAC,qCAAqC,CAAC;AAExD,IAAMC,CAAC,GAAG,SAAJA,CAAC,CAAIC,IAAI,EAAEC,IAAI,EAAEC,UAAU;EAAA,OAAM;IACrCC,MAAM,EAAE,OAAO;IACfH,IAAI,EAAJA,IAAI;IACJI,KAAK,EAAEH,IAAI,CAACC,UAAU;EACxB,CAAC;AAAA,CAAC;AAEK,IAAMG,aAAa,GAAG;EAC3BC,WAAW,uBAACC,EAAE,EAAEN,IAAI,EAAE;IACpB,IAAMO,IAAI,GAAGD,EAAE,CAACE,OAAO,CAACC,WAAW,EAAE;IAErC,IAAIF,IAAI,KAAK,IAAI,EAAE;MACjB,OAAOT,CAAC,CAAC,WAAW,EAAEE,IAAI,EAAEM,EAAE,CAACL,UAAU,CAAC;IAC5C;IAEA,IAAIM,IAAI,KAAK,IAAI,EAAE;MACjB,OAAOT,CAAC,CAAC,SAAS,EAAEE,IAAI,EAAEM,EAAE,CAACI,QAAQ,CAACC,MAAM,GAAGC,KAAK,CAACC,IAAI,CAACP,EAAE,CAACI,QAAQ,CAAC,GAAGJ,EAAE,CAACL,UAAU,CAAC;IACzF;IAEA,IAAIM,IAAI,KAAK,IAAI,EAAE;MACjB,OAAOT,CAAC,CAAC,SAAS,EAAEE,IAAI,EAAEM,EAAE,CAACI,QAAQ,CAACC,MAAM,GAAGC,KAAK,CAACC,IAAI,CAACP,EAAE,CAACI,QAAQ,CAAC,GAAGJ,EAAE,CAACL,UAAU,CAAC;IACzF;EACF,CAAC;EACDa,SAAS,qBAACZ,MAAM,EAAEQ,QAAQ,EAAE;IAC1B,IAAIR,MAAM,CAACA,MAAM,KAAK,OAAO,EAAE;IAE/B,IAAIA,MAAM,CAACH,IAAI,KAAK,WAAW,EAAE;MAC/B,oBAAO,4CAAKW,QAAQ,CAAM;IAC5B;IAEA,IAAIR,MAAM,CAACH,IAAI,KAAK,SAAS,EAAE;MAC7B,oBAAO,4CAAKW,QAAQ,CAAM;IAC5B;IAEA,IAAIR,MAAM,CAACH,IAAI,KAAK,SAAS,EAAE;MAC7B,oBAAO,4CAAKW,QAAQ,CAAM;IAC5B;EACF;AACF,CAAC;AAAC;AAEF,IAAMK,cAAc,GAAG,SAAjBA,cAAc,GAAS;EAC3B,IAAMC,IAAI,GAAG,IAAAC,yBAAQ,EAAC;IACpBC,WAAW,EAAE;EACf,CAAC,CAAC;;EAEF;EACA,IAAIF,IAAI,CAACG,MAAM,IAAIH,IAAI,CAACG,MAAM,CAACC,MAAM,EAAE;IACrCC,MAAM,CAACC,IAAI,CAACN,IAAI,CAACG,MAAM,CAACC,MAAM,CAAC,CAACG,OAAO,CAAC,UAACC,GAAG,EAAK;MAC/C,IAAMC,KAAK,GAAGT,IAAI,CAACG,MAAM,CAACC,MAAM,CAACI,GAAG,CAAC;MAErC,IAAIC,KAAK,CAACC,MAAM,EAAE;QAChB;MACF;MAEAD,KAAK,CAACtB,KAAK,CAAC,CAAC,CAAC,GAAG;QAAEJ,IAAI,EAAE0B,KAAK,CAACtB,KAAK,CAAC,CAAC,CAAC,CAACwB,KAAK,CAAC,CAAC;MAAE,CAAC;IACpD,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;;EAEE;AACF;AACA;EACE,IAAMC,wBAAwB,GAAG,SAA3BA,wBAAwB,CAAIC,KAAK,EAAK;IAC1C,IAAMC,KAAK,GAAGD,KAAK,CAACE,SAAS;IAC7B,IAAMC,QAAQ,GAAGH,KAAK,CAACG,QAAQ;IAE/B,IAAMC,UAAU,GAAGD,QAAQ,CAACE,eAAe,CAACJ,KAAK,CAACK,QAAQ,CAAC;IAC3D,IAAMC,QAAQ,GAAGJ,QAAQ,CAACE,eAAe,CAACJ,KAAK,CAACO,MAAM,CAAC;IAEvD,IAAIJ,UAAU,KAAKG,QAAQ,EAAE;MAC3B,OAAOE,qBAAS,CAACC,IAAI,CAAC,CAACN,UAAU,CAAC,CAAC;IACrC;IAEA,IAAMO,QAAQ,GAAGR,QAAQ,CAACS,iBAAiB,CAACR,UAAU,CAACT,GAAG,EAAEY,QAAQ,CAACZ,GAAG,CAAC;IACzE,IAAMkB,SAAS,GAAGF,QAAQ,CAACG,OAAO,CAACV,UAAU,CAACT,GAAG,CAAC;IAClD,IAAMoB,OAAO,GAAGJ,QAAQ,CAACG,OAAO,CAACP,QAAQ,CAACZ,GAAG,CAAC;IAE9C,OAAOgB,QAAQ,CAACrC,KAAK,CAAC0C,KAAK,CAACH,SAAS,CAACI,GAAG,CAAC,CAAC,CAAC,EAAEF,OAAO,CAACE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnE,CAAC;;EAED;AACF;AACA;AACA;EACE9B,IAAI,CAAC+B,OAAO,CAACC,UAAU,GAAG,UAASC,MAAM,EAAElD,IAAI,EAAEmD,IAAI,EAAE;IACrD,IAAMC,cAAc,GAAGvB,wBAAwB,CAACqB,MAAM,CAACpB,KAAK,CAAC;;IAE7D;IACAoB,MAAM,CAACG,SAAS,CAAC;MAAErD,IAAI,EAAEA,IAAI;MAAEmD,IAAI,EAAEG,WAAI,CAACC,MAAM,CAACJ,IAAI;IAAE,CAAC,EAAE;MAAEK,SAAS,EAAE;IAAM,CAAC,CAAC;;IAE/E;IACAJ,cAAc,CAAC5B,OAAO,CAAC,UAASiC,IAAI,EAAE;MACpC,IAAIxC,IAAI,CAACyC,KAAK,CAACC,MAAM,CAACF,IAAI,CAAC,EAAE;QAC3B;QACAA,IAAI,CAACrD,KAAK,CAACoB,OAAO,CAAC,UAASoC,IAAI,EAAE;UAChC,IAAMnC,GAAG,GAAGmC,IAAI,CAACnC,GAAG;UACpB,OAAOyB,MAAM,CAACW,eAAe,CAACpC,GAAG,EAAE;YAAE+B,SAAS,EAAE;UAAM,CAAC,CAAC;QAC1D,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIC,IAAI,CAACzD,IAAI,KAAK,WAAW,EAAE;QACpCkD,MAAM,CAACY,cAAc,CAACL,IAAI,CAAChC,GAAG,EAAE,WAAW,EAAE;UAC3C+B,SAAS,EAAE;QACb,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;IAEF,OAAON,MAAM,CAACM,SAAS,EAAE;EAC3B,CAAC;EAED,OAAOvC,IAAI;AACb,CAAC;AAAC,eAEa,kBAAC8C,OAAO,EAAK;EAC1B,IAAQ/D,IAAI,GAAW+D,OAAO,CAAtB/D,IAAI;IAAEgE,IAAI,GAAKD,OAAO,CAAhBC,IAAI;EAElB,IAAM/C,IAAI,GAAGD,cAAc,EAAE;;EAE7B;EACAC,IAAI,CAACgD,UAAU,GAAG,UAACC,KAAK,EAAK;IAC3B,IAAQT,IAAI,GAA2BS,KAAK,CAApCT,IAAI;MAAEU,UAAU,GAAeD,KAAK,CAA9BC,UAAU;MAAExD,QAAQ,GAAKuD,KAAK,CAAlBvD,QAAQ;IAElC,QAAQ8C,IAAI,CAACzD,IAAI;MACf,KAAK,SAAS;QACZ,oBAAO,sCAAQmE,UAAU,EAAGxD,QAAQ,CAAM;MAC5C,KAAK,SAAS;QACZ,oBAAO,sCAAQwD,UAAU,EAAGxD,QAAQ,CAAM;MAC5C,KAAK,WAAW;QACd,oBAAO,sCAAQwD,UAAU,EAAGxD,QAAQ,CAAM;IAAC;EAEjD,CAAC;EAEDM,IAAI,CAACmD,OAAO,GAAG;IACbC,MAAM,EAAE,KAAK;IACbrE,IAAI,EAAJA,IAAI;IACJgE,IAAI,EAAJA,IAAI;IACJM,QAAQ,EAAE,kBAACxC,KAAK,EAAE9B,IAAI,EAAK;MACzB,IAAI,CAACiB,IAAI,CAACyC,KAAK,CAACa,iBAAiB,CAACzC,KAAK,CAAC,EAAE;QACxC,OAAO,KAAK;MACd;MACA,IAAM0C,OAAO,GAAGvD,IAAI,CAACyC,KAAK,CAACe,cAAc,CAAC3C,KAAK,CAAC;MAChD,OAAO0C,OAAO,GAAGA,OAAO,CAACxE,IAAI,KAAKA,IAAI,GAAG,KAAK;IAChD,CAAC;IACD0E,OAAO,EAAE,iBAAC5C,KAAK,EAAE6C,QAAQ,EAAK;MAC5B9E,GAAG,CAAC,WAAW,EAAEiC,KAAK,CAAC;MACvB,IAAM8C,MAAM,GAAG3D,IAAI,CAACyC,KAAK,CAACa,iBAAiB,CAACzC,KAAK,CAAC;MAClD,IAAI8C,MAAM,EAAE;QACV,IAAM1B,MAAM,GAAGpB,KAAK,CAACoB,MAAM,EAAE,CAAC2B,IAAI,CAAC5D,IAAI,CAAC+B,OAAO,CAAC8B,UAAU,CAAC;QAC3DH,QAAQ,CAACzB,MAAM,CAAC;MAClB,CAAC,MAAM;QACL,IAAMA,OAAM,GAAGpB,KAAK,CAACoB,MAAM,EAAE,CAAC2B,IAAI,CAAC5D,IAAI,CAAC+B,OAAO,CAACC,UAAU,EAAEjD,IAAI,CAAC;QACjE2E,QAAQ,CAACzB,OAAM,CAAC;MAClB;IACF;EACF,CAAC;EAEDjC,IAAI,CAACgD,UAAU,CAACc,SAAS,GAAG;IAC1BtB,IAAI,EAAEuB,qBAAS,CAAC7E,MAAM;IACtBgE,UAAU,EAAEa,qBAAS,CAAC7E,MAAM;IAC5BQ,QAAQ,EAAEqE,qBAAS,CAACC;EACtB,CAAC;EAED,OAAOhE,IAAI;AACb,CAAC;AAAA"}
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
- value = props.value,
39
- onFocus = props.onFocus,
40
- onBlur = props.onBlur,
41
- onClick = props.onClick;
55
+ value = props.value,
56
+ onFocus = props.onFocus,
57
+ onBlur = props.onBlur,
58
+ onClick = props.onClick;
59
+
42
60
  var _ref = props || {},
43
- pluginProps = _ref.pluginProps;
61
+ pluginProps = _ref.pluginProps;
62
+
44
63
  var _ref2 = pluginProps || {},
45
- math = _ref2.math;
64
+ math = _ref2.math;
65
+
46
66
  var _ref3 = math || {},
47
- keypadMode = _ref3.keypadMode,
48
- customKeys = _ref3.customKeys,
49
- _ref3$controlledKeypa = _ref3.controlledKeypadMode,
50
- controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
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
- _prev$pluginProps = prev.pluginProps,
88
- _prev$pluginProps2 = _prev$pluginProps === void 0 ? {} : _prev$pluginProps,
89
- _prev$pluginProps2$ma = _prev$pluginProps2.math,
90
- _prev$pluginProps2$ma2 = _prev$pluginProps2$ma === void 0 ? {} : _prev$pluginProps2$ma,
91
- keypadMode = _prev$pluginProps2$ma2.keypadMode,
92
- controlledKeypadMode = _prev$pluginProps2$ma2.controlledKeypadMode;
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
- _next$pluginProps = next.pluginProps,
95
- _next$pluginProps2 = _next$pluginProps === void 0 ? {} : _next$pluginProps,
96
- _next$pluginProps2$ma = _next$pluginProps2.math,
97
- _next$pluginProps2$ma2 = _next$pluginProps2$ma === void 0 ? {} : _next$pluginProps2$ma,
98
- keypadModeNext = _next$pluginProps2$ma2.keypadMode,
99
- controlledKeypadModeNext = _next$pluginProps2$ma2.controlledKeypadMode;
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 ? '&lt;' : '').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
- unwrapped = _unWrapMath.unwrapped,
261
- wrapType = _unWrapMath.wrapType;
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 ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","toolbar","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","nodeType","hasLatex","hasAttribute","unwrapped","wrapType","nodes","wrapper","serialize","l","decoded"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin() {\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: newHtml,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const l = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n log('[serialize] latex: ', l);\n const decoded = htmlDecode(lessThanHandling(l));\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}