@pie-lib/editable-html 10.0.0-beta.7 → 10.0.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 (118) hide show
  1. package/CHANGELOG.json +1 -1
  2. package/CHANGELOG.md +81 -0
  3. package/LICENSE.md +5 -0
  4. package/lib/editor.js +410 -543
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +200 -101
  7. package/lib/index.js.map +1 -1
  8. package/lib/parse-html.js +5 -6
  9. package/lib/parse-html.js.map +1 -1
  10. package/lib/plugins/characters/custom-popper.js +12 -2
  11. package/lib/plugins/characters/custom-popper.js.map +1 -1
  12. package/lib/plugins/characters/index.js +71 -19
  13. package/lib/plugins/characters/index.js.map +1 -1
  14. package/lib/plugins/characters/utils.js.map +1 -1
  15. package/lib/plugins/html/icons/index.js +38 -0
  16. package/lib/plugins/html/icons/index.js.map +1 -0
  17. package/lib/plugins/html/index.js +75 -0
  18. package/lib/plugins/html/index.js.map +1 -0
  19. package/lib/plugins/image/alt-dialog.js +26 -0
  20. package/lib/plugins/image/alt-dialog.js.map +1 -1
  21. package/lib/plugins/image/component.js +124 -90
  22. package/lib/plugins/image/component.js.map +1 -1
  23. package/lib/plugins/image/image-toolbar.js +45 -7
  24. package/lib/plugins/image/image-toolbar.js.map +1 -1
  25. package/lib/plugins/image/index.js +91 -113
  26. package/lib/plugins/image/index.js.map +1 -1
  27. package/lib/plugins/image/insert-image-handler.js +54 -72
  28. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  29. package/lib/plugins/index.js +71 -31
  30. package/lib/plugins/index.js.map +1 -1
  31. package/lib/plugins/list/index.js +129 -58
  32. package/lib/plugins/list/index.js.map +1 -1
  33. package/lib/plugins/math/index.js +152 -118
  34. package/lib/plugins/math/index.js.map +1 -1
  35. package/lib/plugins/media/index.js +185 -168
  36. package/lib/plugins/media/index.js.map +1 -1
  37. package/lib/plugins/media/media-dialog.js +197 -110
  38. package/lib/plugins/media/media-dialog.js.map +1 -1
  39. package/lib/plugins/media/media-toolbar.js +24 -4
  40. package/lib/plugins/media/media-toolbar.js.map +1 -1
  41. package/lib/plugins/media/media-wrapper.js +65 -23
  42. package/lib/plugins/media/media-wrapper.js.map +1 -1
  43. package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
  44. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  45. package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
  46. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  47. package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
  48. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  49. package/lib/plugins/respArea/icons/index.js +18 -1
  50. package/lib/plugins/respArea/icons/index.js.map +1 -1
  51. package/lib/plugins/respArea/index.js +133 -122
  52. package/lib/plugins/respArea/index.js.map +1 -1
  53. package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
  54. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  55. package/lib/plugins/respArea/utils.js +33 -15
  56. package/lib/plugins/respArea/utils.js.map +1 -1
  57. package/lib/plugins/table/icons/index.js +7 -0
  58. package/lib/plugins/table/icons/index.js.map +1 -1
  59. package/lib/plugins/table/index.js +279 -390
  60. package/lib/plugins/table/index.js.map +1 -1
  61. package/lib/plugins/table/table-toolbar.js +47 -14
  62. package/lib/plugins/table/table-toolbar.js.map +1 -1
  63. package/lib/plugins/toolbar/default-toolbar.js +63 -51
  64. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  65. package/lib/plugins/toolbar/done-button.js +9 -1
  66. package/lib/plugins/toolbar/done-button.js.map +1 -1
  67. package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
  68. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  69. package/lib/plugins/toolbar/index.js +5 -0
  70. package/lib/plugins/toolbar/index.js.map +1 -1
  71. package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
  72. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  73. package/lib/plugins/toolbar/toolbar.js +261 -225
  74. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  75. package/lib/plugins/utils.js +16 -19
  76. package/lib/plugins/utils.js.map +1 -1
  77. package/lib/serialization.js +70 -11
  78. package/lib/serialization.js.map +1 -1
  79. package/lib/theme.js.map +1 -1
  80. package/package.json +18 -17
  81. package/src/editor.jsx +139 -434
  82. package/src/index.jsx +96 -62
  83. package/src/plugins/characters/index.jsx +17 -12
  84. package/src/plugins/html/icons/index.jsx +19 -0
  85. package/src/plugins/html/index.jsx +68 -0
  86. package/src/plugins/image/component.jsx +38 -60
  87. package/src/plugins/image/index.jsx +42 -95
  88. package/src/plugins/image/insert-image-handler.js +27 -62
  89. package/src/plugins/index.jsx +39 -21
  90. package/src/plugins/list/index.jsx +90 -62
  91. package/src/plugins/math/index.jsx +70 -93
  92. package/src/plugins/media/index.jsx +117 -146
  93. package/src/plugins/media/media-dialog.js +9 -10
  94. package/src/plugins/media/media-wrapper.jsx +27 -29
  95. package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
  96. package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
  97. package/src/plugins/respArea/index.jsx +84 -114
  98. package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
  99. package/src/plugins/respArea/utils.jsx +28 -23
  100. package/src/plugins/table/index.jsx +214 -334
  101. package/src/plugins/table/table-toolbar.jsx +4 -3
  102. package/src/plugins/toolbar/default-toolbar.jsx +30 -48
  103. package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
  104. package/src/plugins/toolbar/toolbar.jsx +224 -254
  105. package/src/plugins/utils.js +0 -16
  106. package/src/serialization.jsx +1 -1
  107. package/lib/components.js +0 -92
  108. package/lib/components.js.map +0 -1
  109. package/lib/new-serialization.js +0 -280
  110. package/lib/new-serialization.js.map +0 -1
  111. package/lib/plugins/hotKeys/index.js +0 -60
  112. package/lib/plugins/hotKeys/index.js.map +0 -1
  113. package/lib/test-serializer.js +0 -138
  114. package/lib/test-serializer.js.map +0 -1
  115. package/src/components.js +0 -135
  116. package/src/new-serialization.jsx +0 -310
  117. package/src/plugins/hotKeys/index.js +0 -54
  118. package/src/test-serializer.js +0 -132
@@ -1 +1 @@
1
- {"version":3,"file":"insert-image-handler.js","names":["_omit","_interopRequireDefault","require","_debug","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","InsertImageHandler","node","placeHolderPath","editor","isPasted","undefined","_classCallCheck2","chosenFile","_createClass2","value","getPlaceholderInDocument","document","directChild","getChild","child","getDescendant","Error","cancel","type","path","done","err","src","console","properties","data","newProperties","loaded","percent","newData","assign","omit","fileChosen","file","_this","reader","FileReader","onload","dataURL","result","readAsDataURL","progress","bytes","total","getChosenFile","_default","exports"],"sources":["../../../src/plugins/image/insert-image-handler.js"],"sourcesContent":["import omit from 'lodash/omit';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:image:insert-image-handler');\n\n/**\n * Handles user selection, insertion (or cancellation) of an image into the editor.\n * @param {Block} placeHolderPath - a block that has been added to the editor as a place holder for the image\n * @param {Function} getValue - a function to return the value of the editor\n * @param {Function} onChange - callback to notify changes applied by the handler\n * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted\n */\nclass InsertImageHandler {\n constructor(node, placeHolderPath, editor, isPasted = false) {\n this.node = node;\n this.placeHolderPath = placeHolderPath;\n this.editor = editor;\n this.isPasted = isPasted;\n this.chosenFile = null;\n }\n\n getPlaceholderInDocument(value) {\n const { document } = value;\n const directChild = document.getChild(this.placeHolderPath);\n\n if (directChild) {\n return directChild;\n }\n\n const child = document.getDescendant(this.placeHolderPath);\n\n if (child) {\n return child;\n } else {\n //eslint-disable-next-line\n throw new Error(\"insert-image: Can't find placeholder!\");\n }\n }\n\n cancel() {\n log('insert cancelled');\n this.editor.apply({\n type: 'remove_node',\n path: this.placeHolderPath\n });\n }\n\n done(err, src) {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n } else {\n this.editor.apply({\n type: 'set_node',\n path: this.placeHolderPath,\n properties: {\n data: this.node.data\n },\n newProperties: {\n data: {\n src,\n loaded: true,\n percent: 100\n }\n }\n });\n const newData = {\n ...this.node.data,\n src,\n loaded: true,\n percent: 100\n };\n\n this.node = Object.assign({}, this.node, {\n data: omit(newData, 'newImage')\n });\n }\n }\n\n /**\n * Notify handler that the user chose a file - will create a change with a preview in the editor.\n *\n * @param {File} file - the file that the user chose using a file input.\n */\n fileChosen(file) {\n if (!file) {\n return;\n }\n\n // Save the chosen file to this.chosenFile\n this.chosenFile = file;\n\n log('[fileChosen] file: ', file);\n const reader = new FileReader();\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.editor.apply({\n type: 'set_node',\n path: this.placeHolderPath,\n properties: {\n data: this.node.data\n },\n newProperties: {\n data: {\n ...this.node.data,\n src: dataURL\n }\n }\n });\n this.node = Object.assign({}, this.node, { data: { src: dataURL } });\n };\n reader.readAsDataURL(file);\n }\n\n progress(percent, bytes, total) {\n log('progress: ', percent, bytes, total);\n\n this.editor.apply({\n type: 'set_node',\n path: this.placeHolderPath,\n properties: {\n data: this.node.data\n },\n newProperties: {\n data: { ...this.node.data, percent }\n }\n });\n this.node = Object.assign({}, this.node, { data: { percent } });\n }\n\n // Add a getter method to retrieve the chosen file\n getChosenFile() {\n return this.chosenFile;\n }\n}\n\nexport default InsertImageHandler;\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/plugins/image/insert-image-handler.js"],"names":["log","InsertImageHandler","placeholderBlock","getValue","onChange","isPasted","chosenFile","value","document","directChild","getChild","key","child","getDescendant","Error","c","change","removeNodeByKey","err","src","console","getPlaceholderInDocument","data","merge","Data","create","loaded","percent","setNodeByKey","file","reader","FileReader","onload","dataURL","result","set","readAsDataURL","bytes","total"],"mappings":"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","sourcesContent":["import { Data } from 'slate';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:image:insert-image-handler');\n\n/**\n * Handles user selection, insertion (or cancellation) of an image into the editor.\n * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image\n * @param {Function} getValue - a function to return the value of the editor\n * @param {Function} onChange - callback to notify changes applied by the handler\n * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted\n */\nclass InsertImageHandler {\n constructor(placeholderBlock, getValue, onChange, isPasted = false) {\n this.placeholderBlock = placeholderBlock;\n this.getValue = getValue;\n this.onChange = onChange;\n this.isPasted = isPasted;\n this.chosenFile = null;\n }\n\n getPlaceholderInDocument(value) {\n const { document } = value;\n const directChild = document.getChild(this.placeholderBlock.key);\n\n if (directChild) {\n return directChild;\n }\n\n const child = document.getDescendant(this.placeholderBlock.key);\n\n if (child) {\n return child;\n } else {\n //eslint-disable-next-line\n throw new Error(\"insert-image: Can't find placeholder!\");\n }\n }\n\n cancel() {\n log('insert cancelled');\n const c = this.getValue()\n .change()\n .removeNodeByKey(this.placeholderBlock.key);\n this.onChange(c);\n }\n\n done(err, src) {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n } else {\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.merge(Data.create({ loaded: true, src, percent: 100 }));\n\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n }\n }\n\n /**\n * Notify handler that the user chose a file - will create a change with a preview in the editor.\n *\n * @param {File} file - the file that the user chose using a file input.\n */\n fileChosen(file) {\n if (!file) {\n return;\n }\n\n // Save the chosen file to this.chosenFile\n this.chosenFile = file;\n\n log('[fileChosen] file: ', file);\n const reader = new FileReader();\n reader.onload = () => {\n const value = this.getValue();\n const dataURL = reader.result;\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('src', dataURL);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n };\n reader.readAsDataURL(file);\n }\n\n progress(percent, bytes, total) {\n log('progress: ', percent, bytes, total);\n const value = this.getValue();\n const child = this.getPlaceholderInDocument(value);\n const data = child.data.set('percent', percent);\n const change = value.change().setNodeByKey(this.placeholderBlock.key, { data });\n this.onChange(change);\n }\n\n // Add a getter method to retrieve the chosen file\n getChosenFile() {\n return this.chosenFile;\n }\n}\n\nexport default InsertImageHandler;\n"],"file":"insert-image-handler.js"}
@@ -1,71 +1,125 @@
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
- exports.withPlugins = exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
8
+ exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
9
+
8
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _slate = require("slate");
10
- var _slateHistory = require("slate-history");
11
- var _slateReact = require("slate-react");
11
+
12
12
  var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
13
+
13
14
  var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
15
+
14
16
  var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
17
+
15
18
  var _image = _interopRequireDefault(require("./image"));
19
+
16
20
  var _media = _interopRequireDefault(require("./media"));
21
+
17
22
  var _characters = _interopRequireDefault(require("./characters"));
23
+
18
24
  var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
25
+
19
26
  var _math = _interopRequireDefault(require("./math"));
27
+
20
28
  var _react = _interopRequireDefault(require("react"));
29
+
21
30
  var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
31
+
22
32
  var _toolbar = _interopRequireDefault(require("./toolbar"));
33
+
23
34
  var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
35
+
24
36
  var _compact = _interopRequireDefault(require("lodash/compact"));
37
+
25
38
  var _slateSoftBreak = _interopRequireDefault(require("slate-soft-break"));
39
+
26
40
  var _debug = _interopRequireDefault(require("debug"));
41
+
27
42
  var _list = _interopRequireDefault(require("./list"));
43
+
28
44
  var _table = _interopRequireDefault(require("./table"));
45
+
29
46
  var _respArea = _interopRequireDefault(require("./respArea"));
30
- var _hotKeys = _interopRequireDefault(require("./hotKeys"));
31
- // import Code from '@material-ui/icons/Code';
32
47
 
48
+ var _html = _interopRequireDefault(require("./html"));
49
+
50
+ //import Code from '@material-ui/icons/Code';
33
51
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins');
34
- var ALL_PLUGINS = ['bold',
35
- // 'code',
36
- 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'table', 'video', 'audio', 'responseArea'];
52
+
53
+ function MarkHotkey(options) {
54
+ var type = options.type,
55
+ key = options.key,
56
+ icon = options.icon,
57
+ tag = options.tag; // Return our "plugin" object, containing the `onKeyDown` handler.
58
+
59
+ return {
60
+ toolbar: {
61
+ isMark: true,
62
+ type: type,
63
+ icon: icon,
64
+ onToggle: function onToggle(change) {
65
+ log('[onToggleMark] type: ', type);
66
+ return change.toggleMark(type);
67
+ }
68
+ },
69
+ renderMark: function renderMark(props) {
70
+ if (props.mark.type === type) {
71
+ var K = tag || type;
72
+ return /*#__PURE__*/_react["default"].createElement(K, null, props.children);
73
+ }
74
+ },
75
+ onKeyDown: function onKeyDown(event, change) {
76
+ // Check that the key pressed matches our `key` option.
77
+ if (!event.metaKey || event.key != key) return; // Prevent the default characters from being inserted.
78
+
79
+ event.preventDefault(); // Toggle the mark `type`.
80
+
81
+ change.toggleMark(type);
82
+ return true;
83
+ }
84
+ };
85
+ }
86
+
87
+ var ALL_PLUGINS = ['bold', // 'code',
88
+ 'html', 'italic', 'underline', 'strikethrough', 'bulleted-list', 'numbered-list', 'image', 'math', 'languageCharacters', 'table', 'video', 'audio', 'responseArea'];
37
89
  exports.ALL_PLUGINS = ALL_PLUGINS;
38
90
  var DEFAULT_PLUGINS = ALL_PLUGINS.filter(function (plug) {
39
91
  return plug !== 'responseArea';
40
92
  });
41
93
  exports.DEFAULT_PLUGINS = DEFAULT_PLUGINS;
94
+
42
95
  var buildPlugins = function buildPlugins(activePlugins, opts) {
43
96
  log('[buildPlugins] opts: ', opts);
44
97
  activePlugins = activePlugins || DEFAULT_PLUGINS;
98
+
45
99
  var addIf = function addIf(key, p) {
46
100
  return activePlugins.includes(key) && p;
47
101
  };
102
+
48
103
  var imagePlugin = opts.image && opts.image.onDelete && (0, _image["default"])(opts.image);
49
104
  var mathPlugin = (0, _math["default"])(opts.math);
50
105
  var respAreaPlugin = opts.responseArea && opts.responseArea.type && (0, _respArea["default"])(opts.responseArea, (0, _compact["default"])([mathPlugin]));
51
- return (0, _compact["default"])([addIf('table', (0, _table["default"])(opts.table, (0, _compact["default"])([imagePlugin, mathPlugin, respAreaPlugin]))), addIf('bold', (0, _hotKeys["default"])({
106
+ return (0, _compact["default"])([addIf('table', (0, _table["default"])(opts.table, (0, _compact["default"])([imagePlugin, mathPlugin, respAreaPlugin]))), addIf('bold', MarkHotkey({
52
107
  key: 'b',
53
108
  type: 'bold',
54
109
  icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
55
110
  tag: 'strong'
56
- })),
57
- // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),
58
- addIf('italic', (0, _hotKeys["default"])({
111
+ })), // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),
112
+ addIf('italic', MarkHotkey({
59
113
  key: 'i',
60
114
  type: 'italic',
61
115
  icon: /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null),
62
116
  tag: 'em'
63
- })), addIf('strikethrough', (0, _hotKeys["default"])({
117
+ })), addIf('strikethrough', MarkHotkey({
64
118
  key: '~',
65
119
  type: 'strikethrough',
66
120
  icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
67
121
  tag: 'del'
68
- })), addIf('underline', (0, _hotKeys["default"])({
122
+ })), addIf('underline', MarkHotkey({
69
123
  key: 'u',
70
124
  type: 'underline',
71
125
  icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
@@ -82,22 +136,8 @@ var buildPlugins = function buildPlugins(activePlugins, opts) {
82
136
  icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)
83
137
  })), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
84
138
  shift: true
85
- }), addIf('responseArea', respAreaPlugin)]));
139
+ }), addIf('responseArea', respAreaPlugin), addIf('html', (0, _html["default"])(opts.html))]));
86
140
  };
141
+
87
142
  exports.buildPlugins = buildPlugins;
88
- var withPlugins = function withPlugins(editor, activePlugins) {
89
- editor.continueNormalization = function () {
90
- _slate.Editor.setNormalizing(editor, true);
91
- _slate.Editor.normalize(editor, {
92
- force: true
93
- });
94
- };
95
- activePlugins.forEach(function (plugin) {
96
- if (typeof plugin.rules === 'function') {
97
- plugin.rules(editor);
98
- }
99
- });
100
- return (0, _slateHistory.withHistory)((0, _slateReact.withReact)(editor));
101
- };
102
- exports.withPlugins = withPlugins;
103
143
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_slate","require","_slateHistory","_slateReact","_FormatBold","_interopRequireDefault","_FormatListBulleted","_FormatListNumbered","_image","_media","_characters","_FormatItalic","_math","_react","_FormatStrikethrough","_toolbar","_FormatUnderlined","_compact","_slateSoftBreak","_debug","_list","_table","_respArea","_hotKeys","log","debug","ALL_PLUGINS","exports","DEFAULT_PLUGINS","filter","plug","buildPlugins","activePlugins","opts","addIf","key","p","includes","imagePlugin","image","onDelete","ImagePlugin","mathPlugin","MathPlugin","math","respAreaPlugin","responseArea","type","RespAreaPlugin","compact","TablePlugin","table","MarkHotkey","icon","createElement","tag","MediaPlugin","media","concat","_toConsumableArray2","languageCharacters","map","config","CharactersPlugin","List","ToolbarPlugin","toolbar","SoftBreakPlugin","shift","withPlugins","editor","continueNormalization","Editor","setNormalizing","normalize","force","forEach","plugin","rules","withHistory","withReact"],"sources":["../../src/plugins/index.jsx"],"sourcesContent":["import { Editor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { withReact } from 'slate-react';\n\nimport Bold from '@material-ui/icons/FormatBold';\n// import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\nimport ImagePlugin from './image';\nimport MediaPlugin from './media';\nimport CharactersPlugin from './characters';\nimport Italic from '@material-ui/icons/FormatItalic';\nimport MathPlugin from './math';\nimport React from 'react';\nimport Strikethrough from '@material-ui/icons/FormatStrikethrough';\nimport ToolbarPlugin from './toolbar';\nimport Underline from '@material-ui/icons/FormatUnderlined';\nimport compact from 'lodash/compact';\nimport SoftBreakPlugin from 'slate-soft-break';\nimport debug from 'debug';\nimport List from './list';\nimport TablePlugin from './table';\nimport RespAreaPlugin from './respArea';\nimport MarkHotkey from './hotKeys';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => plug !== 'responseArea');\n\nexport const buildPlugins = (activePlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\n const imagePlugin = opts.image && opts.image.onDelete && ImagePlugin(opts.image);\n const mathPlugin = MathPlugin(opts.math);\n const respAreaPlugin =\n opts.responseArea && opts.responseArea.type && RespAreaPlugin(opts.responseArea, compact([mathPlugin]));\n\n return compact([\n addIf('table', TablePlugin(opts.table, compact([imagePlugin, mathPlugin, respAreaPlugin]))),\n addIf('bold', MarkHotkey({ key: 'b', type: 'bold', icon: <Bold />, tag: 'strong' })),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic', MarkHotkey({ key: 'i', type: 'italic', icon: <Italic />, tag: 'em' })),\n addIf(\n 'strikethrough',\n MarkHotkey({\n key: '~',\n type: 'strikethrough',\n icon: <Strikethrough />,\n tag: 'del',\n }),\n ),\n addIf('underline', MarkHotkey({ key: 'u', type: 'underline', icon: <Underline />, tag: 'u' })),\n addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n ...opts.languageCharacters.map((config) => addIf('languageCharacters', CharactersPlugin(config))),\n addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),\n addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),\n ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin({ shift: true }),\n addIf('responseArea', respAreaPlugin),\n ]);\n};\n\nexport const withPlugins = (editor, activePlugins) => {\n editor.continueNormalization = () => {\n Editor.setNormalizing(editor, true);\n Editor.normalize(editor, { force: true });\n };\n\n activePlugins.forEach(plugin => {\n if (typeof plugin.rules === 'function') {\n plugin.rules(editor);\n }\n });\n\n return withHistory(withReact(editor));\n};\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/plugins/index.jsx"],"names":["log","MarkHotkey","options","type","key","icon","tag","toolbar","isMark","onToggle","change","toggleMark","renderMark","props","mark","K","children","onKeyDown","event","metaKey","preventDefault","ALL_PLUGINS","DEFAULT_PLUGINS","filter","plug","buildPlugins","activePlugins","opts","addIf","p","includes","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","table","media","languageCharacters","map","config","shift","html"],"mappings":"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","sourcesContent":["import Bold from '@material-ui/icons/FormatBold';\n//import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\nimport ImagePlugin from './image';\nimport MediaPlugin from './media';\nimport CharactersPlugin from './characters';\nimport Italic from '@material-ui/icons/FormatItalic';\nimport MathPlugin from './math';\nimport React from 'react';\nimport Strikethrough from '@material-ui/icons/FormatStrikethrough';\nimport ToolbarPlugin from './toolbar';\nimport Underline from '@material-ui/icons/FormatUnderlined';\nimport compact from 'lodash/compact';\nimport SoftBreakPlugin from 'slate-soft-break';\nimport debug from 'debug';\nimport List from './list';\nimport TablePlugin from './table';\nimport RespAreaPlugin from './respArea';\nimport HtmlPlugin from './html';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nfunction MarkHotkey(options) {\n const { type, key, icon, tag } = options;\n\n // Return our \"plugin\" object, containing the `onKeyDown` handler.\n return {\n toolbar: {\n isMark: true,\n type,\n icon,\n onToggle: (change) => {\n log('[onToggleMark] type: ', type);\n return change.toggleMark(type);\n },\n },\n renderMark(props) {\n if (props.mark.type === type) {\n const K = tag || type;\n\n return <K>{props.children}</K>;\n }\n },\n onKeyDown(event, change) {\n // Check that the key pressed matches our `key` option.\n if (!event.metaKey || event.key != key) return;\n\n // Prevent the default characters from being inserted.\n event.preventDefault();\n\n // Toggle the mark `type`.\n change.toggleMark(type);\n return true;\n },\n };\n}\n\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'html',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter((plug) => plug !== 'responseArea');\n\nexport const buildPlugins = (activePlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\n const imagePlugin = opts.image && opts.image.onDelete && ImagePlugin(opts.image);\n const mathPlugin = MathPlugin(opts.math);\n const respAreaPlugin =\n opts.responseArea && opts.responseArea.type && RespAreaPlugin(opts.responseArea, compact([mathPlugin]));\n\n return compact([\n addIf('table', TablePlugin(opts.table, compact([imagePlugin, mathPlugin, respAreaPlugin]))),\n addIf('bold', MarkHotkey({ key: 'b', type: 'bold', icon: <Bold />, tag: 'strong' })),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic', MarkHotkey({ key: 'i', type: 'italic', icon: <Italic />, tag: 'em' })),\n addIf(\n 'strikethrough',\n MarkHotkey({\n key: '~',\n type: 'strikethrough',\n icon: <Strikethrough />,\n tag: 'del',\n }),\n ),\n addIf('underline', MarkHotkey({ key: 'u', type: 'underline', icon: <Underline />, tag: 'u' })),\n addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n ...opts.languageCharacters.map((config) => addIf('languageCharacters', CharactersPlugin(config))),\n addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),\n addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),\n ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin({ shift: true }),\n addIf('responseArea', respAreaPlugin),\n addIf('html', HtmlPlugin(opts.html)),\n ]);\n};\n"],"file":"index.js"}
@@ -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;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+
9
10
  var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _slate = require("slate");
13
+
14
+ var _immutable = _interopRequireDefault(require("immutable"));
15
+
10
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
+
18
+ var _slateEditList = _interopRequireDefault(require("slate-edit-list"));
19
+
11
20
  var _debug = _interopRequireDefault(require("debug"));
12
- var _slate = require("slate");
13
- var _slateHyperscript = require("slate-hyperscript");
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,107 +28,168 @@ 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();
25
- var children = el.children.length ? Array.from(el.children) : el.childNodes;
35
+
26
36
  if (name === 'li') {
27
- return (0, _slateHyperscript.jsx)('element', {
28
- type: 'li'
29
- }, next(children));
37
+ return b('list_item', next, el.childNodes);
30
38
  }
39
+
31
40
  if (name === 'ul') {
32
- return (0, _slateHyperscript.jsx)('element', {
33
- type: 'ul'
34
- }, next(children));
41
+ return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
35
42
  }
43
+
36
44
  if (name === 'ol') {
37
- return (0, _slateHyperscript.jsx)('element', {
38
- type: 'ol'
39
- }, next(children));
45
+ return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
40
46
  }
41
47
  },
42
48
  serialize: function serialize(object, children) {
49
+ if (object.object !== 'block') return;
50
+
43
51
  if (object.type === 'list_item') {
44
52
  return /*#__PURE__*/_react["default"].createElement("li", null, children);
45
53
  }
54
+
46
55
  if (object.type === 'ul_list') {
47
56
  return /*#__PURE__*/_react["default"].createElement("ul", null, children);
48
57
  }
58
+
49
59
  if (object.type === 'ol_list') {
50
60
  return /*#__PURE__*/_react["default"].createElement("ol", null, children);
51
61
  }
52
62
  }
53
63
  };
54
64
  exports.serialization = serialization;
55
- var isBlockActive = function isBlockActive(editor, format) {
56
- var selection = editor.selection;
57
- if (!selection) return false;
58
- var _Array$from = Array.from(_slate.Editor.nodes(editor, {
59
- at: _slate.Editor.unhangRange(editor, selection),
60
- match: function match(node) {
61
- return !_slate.Editor.isEditor(node) && _slate.Element.isElement(node) && node.type === format;
62
- }
63
- })),
64
- _Array$from2 = (0, _slicedToArray2["default"])(_Array$from, 1),
65
- match = _Array$from2[0];
66
- return !!match;
67
- };
65
+
68
66
  var createEditList = function createEditList() {
69
- var core = {
70
- changes: {}
71
- };
72
- core.changes.wrapInList = function (editor, format) {
73
- var isActive = isBlockActive(editor, format);
74
- var isList = LIST_TYPES.includes(format);
75
- _slate.Transforms.unwrapNodes(editor, {
76
- match: function match(n) {
77
- return !_slate.Editor.isEditor(n) && _slate.Element.isElement(n) && LIST_TYPES.includes(n.type);
78
- },
79
- split: true
80
- });
81
- var newProperties = {
82
- type: isActive ? 'paragraph' : isList ? 'list_item' : format
83
- };
84
- _slate.Transforms.setNodes(editor, newProperties);
85
- if (!isActive && isList) {
86
- var block = {
87
- type: format,
88
- children: []
67
+ var core = (0, _slateEditList["default"])({
68
+ typeDefault: 'span'
69
+ }); // fix outdated schema
70
+
71
+ if (core.schema && core.schema.blocks) {
72
+ Object.keys(core.schema.blocks).forEach(function (key) {
73
+ var block = core.schema.blocks[key];
74
+
75
+ if (block.parent) {
76
+ return;
77
+ }
78
+
79
+ block.nodes[0] = {
80
+ type: block.nodes[0].types[0]
89
81
  };
90
- _slate.Transforms.wrapNodes(editor, block);
82
+ });
83
+ }
84
+ /**
85
+ * This override of the core.changes.wrapInList is needed because the version
86
+ * of immutable that we have does not support getting the element at a specific
87
+ * index with a square bracket (list[0]). We have to use the list.get function instead
88
+ */
89
+
90
+ /**
91
+ * Returns the highest list of blocks that cover the current selection
92
+ */
93
+
94
+
95
+ var getHighestSelectedBlocks = function getHighestSelectedBlocks(value) {
96
+ var range = value.selection;
97
+ var document = value.document;
98
+ var startBlock = document.getClosestBlock(range.startKey);
99
+ var endBlock = document.getClosestBlock(range.endKey);
100
+
101
+ if (startBlock === endBlock) {
102
+ return _immutable["default"].List([startBlock]);
91
103
  }
104
+
105
+ var ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
106
+ var startPath = ancestor.getPath(startBlock.key);
107
+ var endPath = ancestor.getPath(endBlock.key);
108
+ return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
109
+ };
110
+ /**
111
+ * Wrap the blocks in the current selection in a new list. Selected
112
+ * lists are merged together.
113
+ */
114
+
115
+
116
+ core.changes.wrapInList = function (change, type, data) {
117
+ var selectedBlocks = getHighestSelectedBlocks(change.value); // Wrap in container
118
+
119
+ change.wrapBlock({
120
+ type: type,
121
+ data: _slate.Data.create(data)
122
+ }, {
123
+ normalize: false
124
+ }); // Wrap in list items
125
+
126
+ selectedBlocks.forEach(function (node) {
127
+ if (core.utils.isList(node)) {
128
+ // Merge its items with the created list
129
+ node.nodes.forEach(function (_ref) {
130
+ var key = _ref.key;
131
+ return change.unwrapNodeByKey(key, {
132
+ normalize: false
133
+ });
134
+ });
135
+ } else if (node.type !== 'list_item') {
136
+ change.wrapBlockByKey(node.key, 'list_item', {
137
+ normalize: false
138
+ });
139
+ }
140
+ });
141
+ return change.normalize();
92
142
  };
143
+
93
144
  return core;
94
145
  };
95
- var LIST_TYPES = ['ol_list', 'ul_list', 'list_item'];
146
+
96
147
  var _default = function _default(options) {
97
148
  var type = options.type,
98
- icon = options.icon;
99
- var core = createEditList();
100
- core.supports = function (node) {
101
- return LIST_TYPES.includes(node.type);
102
- };
149
+ icon = options.icon;
150
+ var core = createEditList(); // eslint-disable-next-line react/display-name
151
+
103
152
  core.renderNode = function (props) {
104
153
  var node = props.node,
105
- attributes = props.attributes,
106
- children = props.children;
154
+ attributes = props.attributes,
155
+ children = props.children;
156
+
107
157
  switch (node.type) {
108
158
  case 'ul_list':
109
159
  return /*#__PURE__*/_react["default"].createElement("ul", attributes, children);
160
+
110
161
  case 'ol_list':
111
162
  return /*#__PURE__*/_react["default"].createElement("ol", attributes, children);
163
+
112
164
  case 'list_item':
113
165
  return /*#__PURE__*/_react["default"].createElement("li", attributes, children);
114
166
  }
115
167
  };
168
+
116
169
  core.toolbar = {
117
170
  isMark: false,
118
171
  type: type,
119
172
  icon: icon,
120
- isActive: isBlockActive,
121
- onClick: function onClick(editor) {
122
- core.changes.wrapInList(editor, type);
173
+ isActive: function isActive(value, type) {
174
+ if (!core.utils.isSelectionInList(value)) {
175
+ return false;
176
+ }
177
+
178
+ var current = core.utils.getCurrentList(value);
179
+ return current ? current.type === type : false;
180
+ },
181
+ onClick: function onClick(value, onChange) {
182
+ log('[onClick]', value);
183
+ var inList = core.utils.isSelectionInList(value);
184
+
185
+ if (inList) {
186
+ var change = value.change().call(core.changes.unwrapList);
187
+ onChange(change);
188
+ } else {
189
+ var _change = value.change().call(core.changes.wrapInList, type);
190
+
191
+ onChange(_change);
192
+ }
123
193
  }
124
194
  };
125
195
  core.renderNode.propTypes = {
@@ -129,5 +199,6 @@ var _default = function _default(options) {
129
199
  };
130
200
  return core;
131
201
  };
202
+
132
203
  exports["default"] = _default;
133
204
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_slate","_slateHyperscript","log","debug","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","jsx","serialize","createElement","exports","isBlockActive","editor","format","selection","_Array$from","Editor","at","unhangRange","match","node","isEditor","SlateElement","isElement","_Array$from2","_slicedToArray2","createEditList","core","changes","wrapInList","isActive","isList","LIST_TYPES","includes","Transforms","unwrapNodes","n","split","newProperties","setNodes","block","wrapNodes","_default","options","icon","supports","renderNode","props","attributes","toolbar","isMark","onClick","propTypes","PropTypes","func"],"sources":["../../../src/plugins/list/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { Editor, Element as SlateElement, Transforms } from 'slate';\nimport { jsx } from \"slate-hyperscript\";\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 const children = el.children.length ? Array.from(el.children) : el.childNodes;\n\n if (name === 'li') {\n return jsx(\n 'element',\n {\n type: 'li'\n },\n next(children)\n );\n }\n\n if (name === 'ul') {\n return jsx(\n 'element',\n {\n type: 'ul'\n },\n next(children)\n );\n }\n\n if (name === 'ol') {\n return jsx(\n 'element',\n {\n type: 'ol'\n },\n next(children)\n );\n }\n },\n serialize(object, children) {\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 isBlockActive = (editor, format) => {\n const { selection } = editor;\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: node => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === format\n })\n );\n\n return !!match;\n};\n\nconst createEditList = () => {\n const core = {\n changes: {},\n };\n\n core.changes.wrapInList = (editor, format) => {\n const isActive = isBlockActive(editor, format);\n const isList = LIST_TYPES.includes(format);\n\n Transforms.unwrapNodes(editor, {\n match: n =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes(n.type),\n split: true\n });\n\n const newProperties = {\n type: isActive ? 'paragraph' : isList ? 'list_item' : format\n };\n\n Transforms.setNodes(editor, newProperties);\n\n if (!isActive && isList) {\n const block = { type: format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n };\n\n return core;\n};\n\nconst LIST_TYPES = ['ol_list', 'ul_list', 'list_item'];\n\nexport default (options) => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n core.supports = (node) => LIST_TYPES.includes(node.type);\n\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: isBlockActive,\n onClick: editor => {\n core.changes.wrapInList(editor, type);\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"}