@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.
- package/CHANGELOG.json +1 -1
- package/CHANGELOG.md +81 -0
- package/LICENSE.md +5 -0
- package/lib/editor.js +410 -543
- package/lib/editor.js.map +1 -1
- package/lib/index.js +200 -101
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +71 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/html/icons/index.js +38 -0
- package/lib/plugins/html/icons/index.js.map +1 -0
- package/lib/plugins/html/index.js +75 -0
- package/lib/plugins/html/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +124 -90
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +91 -113
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +54 -72
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +71 -31
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +129 -58
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +152 -118
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +185 -168
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +197 -110
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +65 -23
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +133 -122
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +33 -15
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +279 -390
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +47 -14
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +63 -51
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +261 -225
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +16 -19
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +70 -11
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -17
- package/src/editor.jsx +139 -434
- package/src/index.jsx +96 -62
- package/src/plugins/characters/index.jsx +17 -12
- package/src/plugins/html/icons/index.jsx +19 -0
- package/src/plugins/html/index.jsx +68 -0
- package/src/plugins/image/component.jsx +38 -60
- package/src/plugins/image/index.jsx +42 -95
- package/src/plugins/image/insert-image-handler.js +27 -62
- package/src/plugins/index.jsx +39 -21
- package/src/plugins/list/index.jsx +90 -62
- package/src/plugins/math/index.jsx +70 -93
- package/src/plugins/media/index.jsx +117 -146
- package/src/plugins/media/media-dialog.js +9 -10
- package/src/plugins/media/media-wrapper.jsx +27 -29
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
- package/src/plugins/respArea/index.jsx +84 -114
- package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
- package/src/plugins/respArea/utils.jsx +28 -23
- package/src/plugins/table/index.jsx +214 -334
- package/src/plugins/table/table-toolbar.jsx +4 -3
- package/src/plugins/toolbar/default-toolbar.jsx +30 -48
- package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
- package/src/plugins/toolbar/toolbar.jsx +224 -254
- package/src/plugins/utils.js +0 -16
- package/src/serialization.jsx +1 -1
- package/lib/components.js +0 -92
- package/lib/components.js.map +0 -1
- package/lib/new-serialization.js +0 -280
- package/lib/new-serialization.js.map +0 -1
- package/lib/plugins/hotKeys/index.js +0 -60
- package/lib/plugins/hotKeys/index.js.map +0 -1
- package/lib/test-serializer.js +0 -138
- package/lib/test-serializer.js.map +0 -1
- package/src/components.js +0 -135
- package/src/new-serialization.jsx +0 -310
- package/src/plugins/hotKeys/index.js +0 -54
- package/src/test-serializer.js +0 -132
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/lib/plugins/index.js
CHANGED
|
@@ -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.
|
|
8
|
+
exports.buildPlugins = exports.DEFAULT_PLUGINS = exports.ALL_PLUGINS = void 0;
|
|
9
|
+
|
|
8
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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', (
|
|
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
|
-
|
|
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', (
|
|
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', (
|
|
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
|
package/lib/plugins/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
+
|
|
26
36
|
if (name === 'li') {
|
|
27
|
-
return (
|
|
28
|
-
type: 'li'
|
|
29
|
-
}, next(children));
|
|
37
|
+
return b('list_item', next, el.childNodes);
|
|
30
38
|
}
|
|
39
|
+
|
|
31
40
|
if (name === 'ul') {
|
|
32
|
-
return (
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
146
|
+
|
|
96
147
|
var _default = function _default(options) {
|
|
97
148
|
var type = options.type,
|
|
98
|
-
|
|
99
|
-
var core = createEditList();
|
|
100
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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:
|
|
121
|
-
|
|
122
|
-
|
|
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"}
|