@pie-lib/editable-html 11.1.1 → 11.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -167
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/block-tags.js +25 -0
- package/lib/block-tags.js.map +1 -0
- package/lib/constants.js +16 -0
- package/lib/constants.js.map +1 -0
- package/lib/editor.js +348 -87
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -9
- package/lib/index.js.map +1 -1
- package/lib/plugins/characters/index.js +8 -3
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +12 -12
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/icons/index.js.map +1 -0
- package/lib/plugins/css/index.js +397 -0
- package/lib/plugins/css/index.js.map +1 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/customPlugin/index.js.map +1 -0
- package/lib/plugins/html/index.js +11 -7
- package/lib/plugins/html/index.js.map +1 -1
- package/lib/plugins/image/index.js +2 -1
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -4
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +270 -11
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +130 -0
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +91 -56
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +5 -2
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +98 -57
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/rendering/index.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +5 -2
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +11 -9
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +69 -21
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -5
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/math-templated/index.js.map +1 -0
- package/lib/plugins/respArea/utils.js +16 -1
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
- package/lib/plugins/table/index.js +43 -59
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +33 -4
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/textAlign/icons/index.js +226 -0
- package/lib/plugins/textAlign/icons/index.js.map +1 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/textAlign/index.js.map +1 -0
- package/lib/plugins/toolbar/default-toolbar.js +82 -27
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +5 -2
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +18 -19
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +44 -11
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +35 -11
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/serialization.js +233 -44
- package/lib/serialization.js.map +1 -1
- package/package.json +11 -6
- package/src/__tests__/editor.test.jsx +363 -0
- package/src/__tests__/serialization.test.js +291 -0
- package/src/__tests__/utils.js +36 -0
- package/src/block-tags.js +17 -0
- package/src/constants.js +7 -0
- package/src/editor.jsx +303 -49
- package/src/index.jsx +19 -10
- package/src/plugins/characters/index.jsx +11 -3
- package/src/plugins/characters/utils.js +12 -12
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +346 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/index.jsx +9 -6
- package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
- package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
- package/src/plugins/image/__tests__/component.test.jsx +41 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
- package/src/plugins/image/__tests__/index.test.js +95 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/image/index.jsx +2 -1
- package/src/plugins/image/insert-image-handler.js +13 -6
- package/src/plugins/index.jsx +248 -5
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +130 -0
- package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
- package/src/plugins/math/__tests__/index.test.jsx +245 -0
- package/src/plugins/math/index.jsx +87 -56
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +3 -2
- package/src/plugins/media/media-dialog.js +106 -57
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
- package/src/plugins/respArea/index.jsx +53 -7
- package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +11 -0
- package/src/plugins/table/CustomTablePlugin.js +113 -0
- package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
- package/src/plugins/table/index.jsx +46 -59
- package/src/plugins/table/table-toolbar.jsx +39 -2
- package/src/plugins/textAlign/icons/index.jsx +139 -0
- package/src/plugins/textAlign/index.jsx +23 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
- package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
- package/src/plugins/toolbar/default-toolbar.jsx +82 -20
- package/src/plugins/toolbar/done-button.jsx +3 -1
- package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
- package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
- package/src/plugins/toolbar/toolbar.jsx +31 -8
- package/src/serialization.jsx +213 -38
- package/README.md +0 -45
- package/deploy.sh +0 -16
- package/playground/image/data.js +0 -59
- package/playground/image/index.html +0 -22
- package/playground/image/index.jsx +0 -81
- package/playground/index.html +0 -25
- package/playground/mathquill/index.html +0 -22
- package/playground/mathquill/index.jsx +0 -155
- package/playground/package.json +0 -15
- package/playground/prod-test/index.html +0 -22
- package/playground/prod-test/index.jsx +0 -28
- package/playground/schema-override/data.js +0 -29
- package/playground/schema-override/image-plugin.jsx +0 -41
- package/playground/schema-override/index.html +0 -21
- package/playground/schema-override/index.jsx +0 -97
- package/playground/serialization/data.js +0 -29
- package/playground/serialization/image-plugin.jsx +0 -41
- package/playground/serialization/index.html +0 -22
- package/playground/serialization/index.jsx +0 -12
- package/playground/static.json +0 -3
- package/playground/table-examples.html +0 -70
- package/playground/webpack.config.js +0 -42
- package/static.json +0 -1
package/lib/serialization.js
CHANGED
|
@@ -5,7 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.valueToHtml = exports.reduceMultipleBrs = exports.reactAttributes = exports.parseStyleString = exports.htmlToValue = exports.getBase64 = exports.TEXT_RULE = exports.
|
|
8
|
+
exports.valueToHtml = exports.reduceMultipleBrs = exports.reactAttributes = exports.parseStyleString = exports.htmlToValue = exports.handleHtml = exports.getBase64 = exports.extraCSSRulesOpts = exports.TEXT_RULE = exports.INLINE_TAGS = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
11
|
|
|
10
12
|
var _slateHtmlSerializer = _interopRequireDefault(require("slate-html-serializer"));
|
|
11
13
|
|
|
@@ -15,6 +17,8 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
15
17
|
|
|
16
18
|
var _toStyle = require("to-style");
|
|
17
19
|
|
|
20
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
21
|
+
|
|
18
22
|
var _image = require("./plugins/image");
|
|
19
23
|
|
|
20
24
|
var _math = require("./plugins/math");
|
|
@@ -29,40 +33,30 @@ var _respArea = require("./plugins/respArea");
|
|
|
29
33
|
|
|
30
34
|
var _slate = require("slate");
|
|
31
35
|
|
|
32
|
-
var
|
|
33
|
-
/**
|
|
34
|
-
* Tags to blocks.
|
|
35
|
-
*
|
|
36
|
-
* @type {Object}
|
|
37
|
-
*/
|
|
36
|
+
var _blockTags = require("./block-tags");
|
|
38
37
|
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
pre: 'code',
|
|
45
|
-
h1: 'heading-one',
|
|
46
|
-
h2: 'heading-two',
|
|
47
|
-
h3: 'heading-three',
|
|
48
|
-
h4: 'heading-four',
|
|
49
|
-
h5: 'heading-five',
|
|
50
|
-
h6: 'heading-six'
|
|
51
|
-
};
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:serialization');
|
|
52
43
|
/**
|
|
53
44
|
* Tags to marks.
|
|
54
45
|
*
|
|
55
46
|
* @type {Object}
|
|
56
47
|
*/
|
|
57
48
|
|
|
58
|
-
exports.BLOCK_TAGS = BLOCK_TAGS;
|
|
59
49
|
var MARK_TAGS = {
|
|
60
50
|
b: 'bold',
|
|
61
51
|
em: 'italic',
|
|
62
52
|
u: 'underline',
|
|
63
53
|
s: 'strikethrough',
|
|
64
54
|
code: 'code',
|
|
65
|
-
strong: 'bold'
|
|
55
|
+
strong: 'bold',
|
|
56
|
+
blockquote: 'blockquote',
|
|
57
|
+
h3: 'h3',
|
|
58
|
+
sup: 'sup',
|
|
59
|
+
sub: 'sub'
|
|
66
60
|
};
|
|
67
61
|
|
|
68
62
|
var parseStyleString = function parseStyleString(s) {
|
|
@@ -123,7 +117,7 @@ var attributesToMap = function attributesToMap(el) {
|
|
|
123
117
|
};
|
|
124
118
|
};
|
|
125
119
|
|
|
126
|
-
var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
|
|
120
|
+
var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style', 'align'];
|
|
127
121
|
/**
|
|
128
122
|
* Serializer rules.
|
|
129
123
|
*
|
|
@@ -133,7 +127,9 @@ var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
|
|
|
133
127
|
var blocks = {
|
|
134
128
|
deserialize: function deserialize(el, next) {
|
|
135
129
|
log('[blocks:deserialize] block: ', el);
|
|
136
|
-
|
|
130
|
+
|
|
131
|
+
var block = _blockTags.BLOCK_TAGS[el.tagName.toLowerCase()];
|
|
132
|
+
|
|
137
133
|
if (!block) return;
|
|
138
134
|
log('[blocks:deserialize] block: ', block);
|
|
139
135
|
|
|
@@ -165,31 +161,138 @@ var blocks = {
|
|
|
165
161
|
log('[blocks:serialize] object: ', object, children);
|
|
166
162
|
var key;
|
|
167
163
|
|
|
168
|
-
for (key in BLOCK_TAGS) {
|
|
169
|
-
if (BLOCK_TAGS[key] === object.type) {
|
|
164
|
+
for (key in _blockTags.BLOCK_TAGS) {
|
|
165
|
+
if (_blockTags.BLOCK_TAGS[key] === object.type) {
|
|
166
|
+
var Tag = key;
|
|
167
|
+
return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
var INLINE_TAGS = {
|
|
173
|
+
span: 'span'
|
|
174
|
+
};
|
|
175
|
+
exports.INLINE_TAGS = INLINE_TAGS;
|
|
176
|
+
var inlines = {
|
|
177
|
+
deserialize: function deserialize(el, next) {
|
|
178
|
+
log('[inlines:deserialize] inline: ', el);
|
|
179
|
+
var inlineTag = INLINE_TAGS[el.tagName.toLowerCase()];
|
|
180
|
+
if (!inlineTag) return;
|
|
181
|
+
log('[inlines:deserialize] inline: ', inlineTag);
|
|
182
|
+
|
|
183
|
+
if (el.childNodes.length === 1) {
|
|
184
|
+
var cn = el.childNodes[0];
|
|
185
|
+
|
|
186
|
+
if (cn && cn.tagName && cn.tagName.toLowerCase() === inlineTag) {
|
|
187
|
+
log('[we have a child node of the same]...');
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return {
|
|
193
|
+
object: 'inline',
|
|
194
|
+
type: inlineTag,
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Here for rendering styles for all inline elements
|
|
198
|
+
*/
|
|
199
|
+
data: {
|
|
200
|
+
attributes: attributes.reduce(attributesToMap(el), {})
|
|
201
|
+
},
|
|
202
|
+
nodes: next(el.childNodes)
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
serialize: function serialize(object, children) {
|
|
206
|
+
if (object.object !== 'inline') return;
|
|
207
|
+
var jsonData = object.data.toJSON();
|
|
208
|
+
log('[inlines:serialize] object: ', object, children);
|
|
209
|
+
var key;
|
|
210
|
+
|
|
211
|
+
for (key in INLINE_TAGS) {
|
|
212
|
+
if (INLINE_TAGS[key] === object.type) {
|
|
170
213
|
var Tag = key;
|
|
171
214
|
return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
|
|
172
215
|
}
|
|
173
216
|
}
|
|
174
217
|
}
|
|
175
218
|
};
|
|
219
|
+
var extraCSSRulesOpts = {};
|
|
220
|
+
exports.extraCSSRulesOpts = extraCSSRulesOpts;
|
|
221
|
+
var STYLES_MAP = {
|
|
222
|
+
h3: {
|
|
223
|
+
fontSize: 'inherit',
|
|
224
|
+
fontWeight: 'inherit'
|
|
225
|
+
},
|
|
226
|
+
blockquote: {
|
|
227
|
+
background: '#f9f9f9',
|
|
228
|
+
borderLeft: '5px solid #ccc',
|
|
229
|
+
margin: '1.5em 10px',
|
|
230
|
+
padding: '.5em 10px'
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
var reactToHTMLAttributesMap = {
|
|
234
|
+
"class": 'className'
|
|
235
|
+
};
|
|
176
236
|
var marks = {
|
|
177
237
|
deserialize: function deserialize(el, next) {
|
|
178
238
|
var mark = MARK_TAGS[el.tagName.toLowerCase()];
|
|
179
|
-
|
|
239
|
+
var elClasses = el.getAttribute('class') || '';
|
|
240
|
+
var hasCSSRule = ((extraCSSRulesOpts === null || extraCSSRulesOpts === void 0 ? void 0 : extraCSSRulesOpts.names) || []).find(function (name) {
|
|
241
|
+
return elClasses === null || elClasses === void 0 ? void 0 : elClasses.includes(name);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
if (!mark && !hasCSSRule) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
|
|
180
248
|
log('[deserialize] mark: ', mark);
|
|
249
|
+
var attrs = attributes.reduce(attributesToMap(el), {});
|
|
250
|
+
var data = (0, _isEmpty["default"])(attrs) ? undefined : {
|
|
251
|
+
attributes: attrs
|
|
252
|
+
};
|
|
181
253
|
return {
|
|
182
254
|
object: 'mark',
|
|
183
|
-
type: mark,
|
|
255
|
+
type: hasCSSRule ? 'css' : mark,
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Here for rendering styles for all elements
|
|
259
|
+
*/
|
|
260
|
+
data: data,
|
|
184
261
|
nodes: next(el.childNodes)
|
|
185
262
|
};
|
|
186
263
|
},
|
|
187
264
|
serialize: function serialize(object, children) {
|
|
265
|
+
var _object$data, _jsonData$attributes;
|
|
266
|
+
|
|
267
|
+
var jsonData = ((_object$data = object.data) === null || _object$data === void 0 ? void 0 : _object$data.toJSON()) || {};
|
|
268
|
+
var elClasses = ((_jsonData$attributes = jsonData.attributes) === null || _jsonData$attributes === void 0 ? void 0 : _jsonData$attributes["class"]) || '';
|
|
269
|
+
var hasCSSRule = ((extraCSSRulesOpts === null || extraCSSRulesOpts === void 0 ? void 0 : extraCSSRulesOpts.names) || []).find(function (name) {
|
|
270
|
+
return elClasses === null || elClasses === void 0 ? void 0 : elClasses.includes(name);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
if (hasCSSRule) {
|
|
274
|
+
var htmlAttrs = Object.keys(jsonData.attributes).reduce(function (obj, key) {
|
|
275
|
+
obj[reactToHTMLAttributesMap[key] || key] = jsonData.attributes[key];
|
|
276
|
+
return obj;
|
|
277
|
+
}, {});
|
|
278
|
+
return /*#__PURE__*/_react["default"].createElement("span", htmlAttrs, children);
|
|
279
|
+
}
|
|
280
|
+
|
|
188
281
|
if (_slate.Mark.isMark(object)) {
|
|
189
282
|
for (var key in MARK_TAGS) {
|
|
190
283
|
if (MARK_TAGS[key] === object.type) {
|
|
191
284
|
var Tag = key;
|
|
192
|
-
|
|
285
|
+
var additionalStyles = STYLES_MAP[Tag];
|
|
286
|
+
|
|
287
|
+
if (additionalStyles) {
|
|
288
|
+
if (!jsonData.attributes) {
|
|
289
|
+
jsonData.attributes = {};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
jsonData.attributes.style = _objectSpread(_objectSpread({}, jsonData.attributes.style), additionalStyles);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
|
|
193
296
|
}
|
|
194
297
|
}
|
|
195
298
|
}
|
|
@@ -248,7 +351,7 @@ var TEXT_RULE = {
|
|
|
248
351
|
}
|
|
249
352
|
};
|
|
250
353
|
exports.TEXT_RULE = TEXT_RULE;
|
|
251
|
-
var RULES = [_list.serialization, _math.serialization, _media.serialization, _image.serialization, _table.serialization, _respArea.serialization, TEXT_RULE, blocks, marks];
|
|
354
|
+
var RULES = [_list.serialization, _math.serialization, _media.serialization, _image.serialization, _table.serialization, _respArea.serialization, TEXT_RULE, inlines, blocks, marks];
|
|
252
355
|
|
|
253
356
|
function allWhitespace(node) {
|
|
254
357
|
// Use ECMA-262 Edition 3 String and RegExp features
|
|
@@ -266,7 +369,12 @@ function defaultParseHtml(html) {
|
|
|
266
369
|
var n = textNodes.nextNode();
|
|
267
370
|
|
|
268
371
|
while (n) {
|
|
269
|
-
|
|
372
|
+
var _n$nextSibling, _n$nextSibling$tagNam, _n$previousSibling, _n$previousSibling$ta;
|
|
373
|
+
|
|
374
|
+
var isWhiteSpace = allWhitespace(n);
|
|
375
|
+
var isNotNearMarkup = !MARK_TAGS[(_n$nextSibling = n.nextSibling) === null || _n$nextSibling === void 0 ? void 0 : (_n$nextSibling$tagNam = _n$nextSibling.tagName) === null || _n$nextSibling$tagNam === void 0 ? void 0 : _n$nextSibling$tagNam.toLowerCase()] && !MARK_TAGS[(_n$previousSibling = n.previousSibling) === null || _n$previousSibling === void 0 ? void 0 : (_n$previousSibling$ta = _n$previousSibling.tagName) === null || _n$previousSibling$ta === void 0 ? void 0 : _n$previousSibling$ta.toLowerCase()];
|
|
376
|
+
|
|
377
|
+
if (isWhiteSpace && isNotNearMarkup || n.nodeValue === "\u200B") {
|
|
270
378
|
n.parentNode.removeChild(n);
|
|
271
379
|
}
|
|
272
380
|
|
|
@@ -424,45 +532,126 @@ var reduceRedundantNewLineCharacters = function reduceRedundantNewLineCharacters
|
|
|
424
532
|
|
|
425
533
|
return markup;
|
|
426
534
|
};
|
|
535
|
+
/**
|
|
536
|
+
* Makes sure that the html provided respects the schema
|
|
537
|
+
* rules for the slate editor.
|
|
538
|
+
* @param markup
|
|
539
|
+
* @returns {string}
|
|
540
|
+
*/
|
|
541
|
+
|
|
427
542
|
|
|
428
|
-
var
|
|
429
|
-
var
|
|
430
|
-
|
|
543
|
+
var fixHtmlCode = function fixHtmlCode(markup) {
|
|
544
|
+
var wrapperEl = document.createElement('div');
|
|
545
|
+
wrapperEl.innerHTML = markup;
|
|
431
546
|
/**
|
|
432
547
|
* DIV elements that are at the same level as paragraphs
|
|
433
548
|
* are replaced with P elements for normalizing purposes
|
|
434
|
-
* @param
|
|
549
|
+
* @param child
|
|
550
|
+
*/
|
|
551
|
+
|
|
552
|
+
var fixParagraphs = function fixParagraphs(child) {
|
|
553
|
+
var p = document.createElement('p');
|
|
554
|
+
p.innerHTML = child.innerHTML;
|
|
555
|
+
Array.from(child.attributes).forEach(function (attr) {
|
|
556
|
+
p.setAttribute(attr.name, attr.value);
|
|
557
|
+
});
|
|
558
|
+
child.replaceWith(p);
|
|
559
|
+
};
|
|
560
|
+
/**
|
|
561
|
+
* @summary Makes sure that tables are placed in the root document.
|
|
562
|
+
* @description This function removes the tables from the nodes that are
|
|
563
|
+
* placed inside the root element and places them exactly near
|
|
564
|
+
* the parent element.
|
|
565
|
+
* @param tableArray
|
|
435
566
|
*/
|
|
436
567
|
|
|
568
|
+
|
|
569
|
+
var fixTables = function fixTables(tableArray) {
|
|
570
|
+
tableArray.forEach(function (el) {
|
|
571
|
+
var index = el.index,
|
|
572
|
+
child = el.child,
|
|
573
|
+
parent = el.parent;
|
|
574
|
+
var nodesBefore = [];
|
|
575
|
+
var nodesAfter = [];
|
|
576
|
+
var allNodes = Array.from(parent.childNodes);
|
|
577
|
+
var i;
|
|
578
|
+
|
|
579
|
+
for (i = 0; i < allNodes.length; i++) {
|
|
580
|
+
var node = allNodes[i];
|
|
581
|
+
|
|
582
|
+
if (i < index) {
|
|
583
|
+
nodesBefore.push(node);
|
|
584
|
+
} else if (i > index) {
|
|
585
|
+
nodesAfter.push(node);
|
|
586
|
+
}
|
|
587
|
+
} // creating the element that is going to be placed instead of the parent
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
var beforeEl = document.createElement(parent.nodeName);
|
|
591
|
+
beforeEl.append.apply(beforeEl, nodesBefore); // replacing parent with the beforeElement
|
|
592
|
+
|
|
593
|
+
parent.replaceWith(beforeEl); // adding the table right after the before element
|
|
594
|
+
|
|
595
|
+
beforeEl.after(child); // creating the element that is going to be placed after the table
|
|
596
|
+
|
|
597
|
+
var afterEl = document.createElement(parent.nodeName);
|
|
598
|
+
afterEl.append.apply(afterEl, nodesAfter); // adding the after element near the table
|
|
599
|
+
|
|
600
|
+
child.after(afterEl);
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
var emptyBlockCheck = function emptyBlockCheck(node) {
|
|
605
|
+
return (node.nodeName === 'DIV' || node.nodeName === 'P' || node.nodeName === 'LI') && node.childNodes.length === 0;
|
|
606
|
+
};
|
|
607
|
+
|
|
437
608
|
var parseNode = function parseNode(el) {
|
|
438
|
-
var childArray = Array.from(el.
|
|
609
|
+
var childArray = Array.from(el.childNodes);
|
|
439
610
|
var hasParagraphs = childArray.find(function (child) {
|
|
440
611
|
return child.nodeName === 'P';
|
|
441
612
|
});
|
|
442
|
-
|
|
613
|
+
var tables = [];
|
|
614
|
+
childArray.forEach(function (child, index) {
|
|
443
615
|
// removing empty blocks
|
|
444
|
-
if ((child
|
|
616
|
+
if (emptyBlockCheck(child)) {
|
|
445
617
|
child.remove();
|
|
446
618
|
return;
|
|
447
619
|
}
|
|
448
620
|
|
|
449
621
|
if (hasParagraphs && child.nodeName === 'DIV') {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
622
|
+
fixParagraphs(child);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
if (wrapperEl !== el && child.nodeName === 'TABLE') {
|
|
626
|
+
// we don't need to fix tables in the root element
|
|
627
|
+
tables.push({
|
|
628
|
+
index: index,
|
|
629
|
+
child: child,
|
|
630
|
+
parent: el
|
|
631
|
+
});
|
|
453
632
|
}
|
|
454
633
|
|
|
455
634
|
parseNode(child);
|
|
456
635
|
});
|
|
636
|
+
|
|
637
|
+
if (tables.length) {
|
|
638
|
+
fixTables(tables);
|
|
639
|
+
}
|
|
457
640
|
};
|
|
458
641
|
|
|
459
|
-
parseNode(
|
|
460
|
-
return
|
|
642
|
+
parseNode(wrapperEl);
|
|
643
|
+
return wrapperEl.innerHTML;
|
|
461
644
|
};
|
|
462
645
|
|
|
646
|
+
var handleHtml = function handleHtml(html) {
|
|
647
|
+
return fixHtmlCode(reduceRedundantNewLineCharacters(reduceMultipleBrs(html)));
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
exports.handleHtml = handleHtml;
|
|
651
|
+
|
|
463
652
|
var htmlToValue = function htmlToValue(html) {
|
|
464
653
|
try {
|
|
465
|
-
return serializer.deserialize(
|
|
654
|
+
return serializer.deserialize(handleHtml(html));
|
|
466
655
|
} catch (e) {
|
|
467
656
|
// eslint-disable-next-line no-console
|
|
468
657
|
console.log("Couldn't parse html: ", e);
|
package/lib/serialization.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/serialization.jsx"],"names":["log","BLOCK_TAGS","div","span","p","blockquote","pre","h1","h2","h3","h4","h5","h6","MARK_TAGS","b","em","u","s","code","strong","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","marks","mark","Mark","isMark","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","obj","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","Object","assign","target","arguments","source","prototype","hasOwnProperty","call","options","undefined","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","wrapHtmlProperly","createElement","innerHTML","parseNode","childArray","hasParagraphs","find","child","forEach","remove","replaceWith","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to blocks.\n *\n * @type {Object}\n */\n\nexport const BLOCK_TAGS = {\n div: 'div',\n span: 'span',\n p: 'paragraph',\n blockquote: 'quote',\n pre: 'code',\n h1: 'heading-one',\n h2: 'heading-two',\n h3: 'heading-three',\n h4: 'heading-four',\n h5: 'heading-five',\n h6: 'heading-six',\n};\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n if (!mark) return;\n log('[deserialize] mark: ', mark);\n return {\n object: 'mark',\n type: mark,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n return <Tag>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n if (allWhitespace(n) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst wrapHtmlProperly = (markup) => {\n const el = document.createElement('div');\n\n el.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param el\n */\n const parseNode = (el) => {\n const childArray = Array.from(el.children);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n\n childArray.forEach((child) => {\n // removing empty blocks\n if ((child.nodeName === 'DIV' || child.nodeName === 'P') && child.childNodes.length === 0) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n child.replaceWith(p);\n }\n\n parseNode(child);\n });\n };\n\n parseNode(el);\n\n return el.innerHTML;\n};\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(wrapHtmlProperly(reduceRedundantNewLineCharacters(reduceMultipleBrs(html))));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
|
|
1
|
+
{"version":3,"sources":["../src/serialization.jsx"],"names":["log","MARK_TAGS","b","em","u","s","code","strong","blockquote","h3","sup","sub","parseStyleString","regex","match","result","exec","trim","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","onerror","error","reactAttributes","o","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","BLOCK_TAGS","tagName","toLowerCase","childNodes","length","cn","object","type","data","reduce","nodes","serialize","children","jsonData","toJSON","key","Tag","INLINE_TAGS","span","inlines","inlineTag","extraCSSRulesOpts","STYLES_MAP","fontSize","fontWeight","background","borderLeft","margin","padding","reactToHTMLAttributesMap","marks","mark","elClasses","hasCSSRule","names","find","name","includes","attrs","undefined","htmlAttrs","Object","keys","obj","Mark","isMark","additionalStyles","style","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","leaves","text","nodeValue","split","array","i","push","RULES","listSerialization","mathSerialization","mediaSerialization","imgSerialization","tableSerialization","responseAreaSerialization","allWhitespace","node","test","textContent","defaultParseHtml","html","DOMParser","Error","parsed","parseFromString","body","textNodes","document","createTreeWalker","NodeFilter","SHOW_TEXT","n","nextNode","isWhiteSpace","isNotNearMarkup","nextSibling","parentNode","removeChild","parseHtml","window","serializer","Html","defaultBlock","rules","_extends","assign","target","arguments","source","prototype","hasOwnProperty","call","options","_options$toJSON","fragment","Array","from","deserializeElements","memo","original","_block","isVoid","json","schema","ret","Value","fromJSON","reduceMultipleBrs","markup","replace","e","console","reduceRedundantNewLineCharacters","fixHtmlCode","wrapperEl","createElement","innerHTML","fixParagraphs","child","p","forEach","attr","setAttribute","replaceWith","fixTables","tableArray","index","parent","nodesBefore","nodesAfter","allNodes","beforeEl","append","after","afterEl","emptyBlockCheck","parseNode","childArray","hasParagraphs","tables","remove","handleHtml","htmlToValue","valueToHtml"],"mappings":"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","sourcesContent":["import Html from 'slate-html-serializer';\nimport React from 'react';\nimport debug from 'debug';\nimport { object as toStyleObject } from 'to-style';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { serialization as imgSerialization } from './plugins/image';\nimport { serialization as mathSerialization } from './plugins/math';\nimport { serialization as mediaSerialization } from './plugins/media';\nimport { serialization as listSerialization } from './plugins/list';\nimport { serialization as tableSerialization } from './plugins/table';\nimport { serialization as responseAreaSerialization } from './plugins/respArea';\nimport { Mark, Value } from 'slate';\nimport { BLOCK_TAGS } from './block-tags';\n\nconst log = debug('@pie-lib:editable-html:serialization');\n\n/**\n * Tags to marks.\n *\n * @type {Object}\n */\n\nconst MARK_TAGS = {\n b: 'bold',\n em: 'italic',\n u: 'underline',\n s: 'strikethrough',\n code: 'code',\n strong: 'bold',\n blockquote: 'blockquote',\n h3: 'h3',\n sup: 'sup',\n sub: 'sub',\n};\n\nexport const parseStyleString = (s) => {\n const regex = /([\\w-]*)\\s*:\\s*([^;]*)/g;\n let match;\n const result = {};\n while ((match = regex.exec(s))) {\n result[match[1]] = match[2].trim();\n }\n return result;\n};\n\nexport const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const reactAttributes = (o) => toStyleObject(o, { camelize: true, addUnits: false });\n\nconst attributesToMap = (el) => (acc, attribute) => {\n const value = el.getAttribute(attribute);\n if (value) {\n if (attribute === 'style') {\n const styleString = el.getAttribute(attribute);\n const reactStyleObject = reactAttributes(parseStyleString(styleString));\n acc['style'] = reactStyleObject;\n } else {\n acc[attribute] = el.getAttribute(attribute);\n }\n }\n return acc;\n};\n\nconst attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style', 'align'];\n\n/**\n * Serializer rules.\n *\n * @type {Array}\n */\n\nconst blocks = {\n deserialize(el, next) {\n log('[blocks:deserialize] block: ', el);\n const block = BLOCK_TAGS[el.tagName.toLowerCase()];\n if (!block) return;\n log('[blocks:deserialize] block: ', block);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'block',\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'block') return;\n\n const jsonData = object.data.toJSON();\n\n log('[blocks:serialize] object: ', object, children);\n let key;\n\n for (key in BLOCK_TAGS) {\n if (BLOCK_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const INLINE_TAGS = {\n span: 'span',\n};\n\nconst inlines = {\n deserialize(el, next) {\n log('[inlines:deserialize] inline: ', el);\n const inlineTag = INLINE_TAGS[el.tagName.toLowerCase()];\n if (!inlineTag) return;\n log('[inlines:deserialize] inline: ', inlineTag);\n\n if (el.childNodes.length === 1) {\n const cn = el.childNodes[0];\n if (cn && cn.tagName && cn.tagName.toLowerCase() === inlineTag) {\n log('[we have a child node of the same]...');\n return;\n }\n }\n\n return {\n object: 'inline',\n type: inlineTag,\n /**\n * Here for rendering styles for all inline elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) },\n nodes: next(el.childNodes),\n };\n },\n serialize: (object, children) => {\n if (object.object !== 'inline') return;\n\n const jsonData = object.data.toJSON();\n\n log('[inlines:serialize] object: ', object, children);\n let key;\n\n for (key in INLINE_TAGS) {\n if (INLINE_TAGS[key] === object.type) {\n const Tag = key;\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n },\n};\n\nexport const extraCSSRulesOpts = {};\n\nconst STYLES_MAP = {\n h3: {\n fontSize: 'inherit',\n fontWeight: 'inherit',\n },\n blockquote: {\n background: '#f9f9f9',\n borderLeft: '5px solid #ccc',\n margin: '1.5em 10px',\n padding: '.5em 10px',\n },\n};\n\nconst reactToHTMLAttributesMap = {\n class: 'className',\n};\n\nconst marks = {\n deserialize(el, next) {\n const mark = MARK_TAGS[el.tagName.toLowerCase()];\n const elClasses = el.getAttribute('class') || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (!mark && !hasCSSRule) {\n return;\n }\n\n log('[deserialize] mark: ', mark);\n const attrs = attributes.reduce(attributesToMap(el), {});\n const data = isEmpty(attrs) ? undefined : { attributes: attrs };\n\n return {\n object: 'mark',\n type: hasCSSRule ? 'css' : mark,\n /**\n * Here for rendering styles for all elements\n */\n data,\n nodes: next(el.childNodes),\n };\n },\n serialize(object, children) {\n const jsonData = object.data?.toJSON() || {};\n const elClasses = jsonData.attributes?.class || '';\n const hasCSSRule = (extraCSSRulesOpts?.names || []).find((name) => elClasses?.includes(name));\n\n if (hasCSSRule) {\n const htmlAttrs = Object.keys(jsonData.attributes).reduce((obj, key) => {\n obj[reactToHTMLAttributesMap[key] || key] = jsonData.attributes[key];\n return obj;\n }, {});\n\n return <span {...htmlAttrs}>{children}</span>;\n }\n\n if (Mark.isMark(object)) {\n for (var key in MARK_TAGS) {\n if (MARK_TAGS[key] === object.type) {\n const Tag = key;\n const additionalStyles = STYLES_MAP[Tag];\n\n if (additionalStyles) {\n if (!jsonData.attributes) {\n jsonData.attributes = {};\n }\n\n jsonData.attributes.style = {\n ...jsonData.attributes.style,\n ...additionalStyles,\n };\n }\n\n return <Tag {...jsonData.attributes}>{children}</Tag>;\n }\n }\n }\n },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst findPreviousText = (el) => {\n if (el.nodeName === '#text') {\n return el;\n }\n\n if (el.previousSibling) {\n return findPreviousText(el.previousSibling);\n }\n\n return null;\n};\n\nexport const TEXT_RULE = {\n deserialize(el) {\n /**\n * This needs to be called on the dom element in order to merge the adjacent text nodes together\n * */\n el.normalize();\n\n if (el.tagName && el.tagName.toLowerCase() === 'br') {\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: '\\n',\n },\n ],\n };\n }\n\n if (el.nodeName === '#text') {\n if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;\n\n log('[text:deserialize] return text object..');\n return {\n object: 'text',\n leaves: [\n {\n object: 'leaf',\n text: el.nodeValue,\n },\n ],\n };\n }\n },\n\n serialize(obj, children) {\n if (obj.object === 'string') {\n return children.split('\\n').reduce((array, text, i) => {\n if (i !== 0) array.push(<br />);\n array.push(text);\n return array;\n }, []);\n }\n },\n};\n\nconst RULES = [\n listSerialization,\n mathSerialization,\n mediaSerialization,\n imgSerialization,\n tableSerialization,\n responseAreaSerialization,\n TEXT_RULE,\n inlines,\n blocks,\n marks,\n];\n\nfunction allWhitespace(node) {\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent);\n}\n\nfunction defaultParseHtml(html) {\n if (typeof DOMParser === 'undefined') {\n throw new Error(\n 'The native `DOMParser` global which the `Html` serializer uses by default is not present in this environment. You must supply the `options.parseHtml` function instead.',\n );\n }\n\n const parsed = new DOMParser().parseFromString(html, 'text/html');\n\n const { body } = parsed;\n var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n var n = textNodes.nextNode();\n\n while (n) {\n const isWhiteSpace = allWhitespace(n);\n const isNotNearMarkup =\n !MARK_TAGS[n.nextSibling?.tagName?.toLowerCase()] && !MARK_TAGS[n.previousSibling?.tagName?.toLowerCase()];\n\n if ((isWhiteSpace && isNotNearMarkup) || n.nodeValue === '\\u200B') {\n n.parentNode.removeChild(n);\n }\n n = textNodes.nextNode();\n }\n\n return body;\n}\n\n/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */\nconst parseHtml =\n typeof window === 'undefined'\n ? () => ({\n childNodes: [],\n })\n : defaultParseHtml;\n\nconst serializer = new Html({\n defaultBlock: 'div',\n rules: RULES,\n parseHtml,\n});\n\nconst _extends =\n Object.assign ||\n function(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n/**\n * This is needed in order to override the function that eventually leads\n * to the max iteration of 12, which in most cases it's not enough. The newer versions\n * have a different way to calculate this, but updating to a newer version of slate\n * requires a lot of work fixing other issues. So we just increase the rules by 1000,\n * which means a lot of iterations.\n * Below is the code that calculates the max iterations.\n * var max = schema.stack.plugins.length + schema.rules.length + 1;\n */\nserializer.deserialize = function deserialize(html) {\n const options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const _options$toJSON = options.toJSON;\n const toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n const defaultBlock = this.defaultBlock;\n const parseHtml = this.parseHtml;\n\n const fragment = parseHtml(html);\n const children = Array.from(fragment.childNodes);\n let nodes = this.deserializeElements(children);\n\n // COMPAT: ensure that all top-level inline nodes are wrapped into a block.\n nodes = nodes.reduce(function(memo, node, i, original) {\n if (node.object === 'block') {\n memo.push(node);\n return memo;\n }\n\n if (i > 0 && original[i - 1].object !== 'block') {\n const _block = memo[memo.length - 1];\n\n _block.nodes.push(node);\n return memo;\n }\n\n const block = _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [node],\n });\n\n memo.push(block);\n return memo;\n }, []);\n\n if (nodes.length === 0) {\n nodes = [\n _extends({ object: 'block', data: {}, isVoid: false }, defaultBlock, {\n nodes: [{ object: 'text', leaves: [{ object: 'leaf', text: '', marks: [] }] }],\n }),\n ];\n }\n\n const json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: nodes,\n },\n schema: {\n rules: [],\n },\n };\n\n let i;\n\n for (i = 0; i < 3000; i++) {\n json.schema.rules.push({\n match: { object: 'document' },\n nodes: [{ match: { object: 'block' } }],\n });\n }\n\n const ret = toJSON ? json : Value.fromJSON(json);\n\n if (ret) {\n return ret;\n }\n\n return null;\n};\n\nexport const reduceMultipleBrs = (markup) => {\n try {\n return markup.replace(/(<br\\s*\\/?>){3,}/gi, '<br>');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\nconst reduceRedundantNewLineCharacters = (markup) => {\n try {\n return markup.replace(/\\n/gi, '');\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't remove <br/> tags: \", e);\n }\n\n return markup;\n};\n\n/**\n * Makes sure that the html provided respects the schema\n * rules for the slate editor.\n * @param markup\n * @returns {string}\n */\nconst fixHtmlCode = (markup) => {\n const wrapperEl = document.createElement('div');\n\n wrapperEl.innerHTML = markup;\n\n /**\n * DIV elements that are at the same level as paragraphs\n * are replaced with P elements for normalizing purposes\n * @param child\n */\n const fixParagraphs = (child) => {\n const p = document.createElement('p');\n\n p.innerHTML = child.innerHTML;\n\n Array.from(child.attributes).forEach((attr) => {\n p.setAttribute(attr.name, attr.value);\n });\n child.replaceWith(p);\n };\n\n /**\n * @summary Makes sure that tables are placed in the root document.\n * @description This function removes the tables from the nodes that are\n * placed inside the root element and places them exactly near\n * the parent element.\n * @param tableArray\n */\n const fixTables = (tableArray) => {\n tableArray.forEach((el) => {\n const { index, child, parent } = el;\n const nodesBefore = [];\n const nodesAfter = [];\n const allNodes = Array.from(parent.childNodes);\n let i;\n\n for (i = 0; i < allNodes.length; i++) {\n const node = allNodes[i];\n\n if (i < index) {\n nodesBefore.push(node);\n } else if (i > index) {\n nodesAfter.push(node);\n }\n }\n\n // creating the element that is going to be placed instead of the parent\n const beforeEl = document.createElement(parent.nodeName);\n\n beforeEl.append(...nodesBefore);\n\n // replacing parent with the beforeElement\n parent.replaceWith(beforeEl);\n\n // adding the table right after the before element\n beforeEl.after(child);\n\n // creating the element that is going to be placed after the table\n const afterEl = document.createElement(parent.nodeName);\n\n afterEl.append(...nodesAfter);\n\n // adding the after element near the table\n child.after(afterEl);\n });\n };\n\n const emptyBlockCheck = (node) =>\n (node.nodeName === 'DIV' || node.nodeName === 'P' || node.nodeName === 'LI') && node.childNodes.length === 0;\n\n const parseNode = (el) => {\n const childArray = Array.from(el.childNodes);\n const hasParagraphs = childArray.find((child) => child.nodeName === 'P');\n const tables = [];\n\n childArray.forEach((child, index) => {\n // removing empty blocks\n if (emptyBlockCheck(child)) {\n child.remove();\n return;\n }\n\n if (hasParagraphs && child.nodeName === 'DIV') {\n fixParagraphs(child);\n }\n\n if (wrapperEl !== el && child.nodeName === 'TABLE') {\n // we don't need to fix tables in the root element\n tables.push({\n index,\n child,\n parent: el,\n });\n }\n\n parseNode(child);\n });\n\n if (tables.length) {\n fixTables(tables);\n }\n };\n\n parseNode(wrapperEl);\n\n return wrapperEl.innerHTML;\n};\n\nexport const handleHtml = (html) => fixHtmlCode(reduceRedundantNewLineCharacters(reduceMultipleBrs(html)));\n\nexport const htmlToValue = (html) => {\n try {\n return serializer.deserialize(handleHtml(html));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(\"Couldn't parse html: \", e);\n return {};\n }\n};\n\nexport const valueToHtml = (value) => serializer.serialize(value);\n\n/**\n *\n * <div><div>a</div></div> -> <div>a</div>\n *\n * <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>\n * <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>\n */\n"],"file":"serialization.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/editable-html",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.2.0-beta.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -10,10 +10,14 @@
|
|
|
10
10
|
"@material-ui/core": "^3.8.3",
|
|
11
11
|
"@material-ui/icons": "^3.0.2",
|
|
12
12
|
"@material-ui/styles": "^3.0.0-alpha.10",
|
|
13
|
-
"@pie-lib/
|
|
14
|
-
"@pie-lib/
|
|
15
|
-
"@pie-lib/
|
|
16
|
-
"@pie-lib/
|
|
13
|
+
"@pie-lib/config-ui": "latest",
|
|
14
|
+
"@pie-lib/drag": "latest",
|
|
15
|
+
"@pie-lib/icons": "latest",
|
|
16
|
+
"@pie-lib/math-input": "latest",
|
|
17
|
+
"@pie-lib/math-rendering": "latest",
|
|
18
|
+
"@pie-lib/math-toolbar": "latest",
|
|
19
|
+
"@pie-lib/render-ui": "latest",
|
|
20
|
+
"@pie-lib/tools": "latest",
|
|
17
21
|
"change-case": "^3.0.2",
|
|
18
22
|
"classnames": "^2.2.6",
|
|
19
23
|
"debug": "^4.1.1",
|
|
@@ -28,6 +32,7 @@
|
|
|
28
32
|
"slate-dev-environment": "^0.2.0",
|
|
29
33
|
"slate-edit-list": "^0.11.3",
|
|
30
34
|
"slate-edit-table": "^0.17.0",
|
|
35
|
+
"slate-hotkeys": "0.2.11",
|
|
31
36
|
"slate-html-serializer": "^0.6.12",
|
|
32
37
|
"slate-plain-serializer": "^0.5.26",
|
|
33
38
|
"slate-prop-types": "^0.4.38",
|
|
@@ -47,6 +52,6 @@
|
|
|
47
52
|
"publishConfig": {
|
|
48
53
|
"access": "public"
|
|
49
54
|
},
|
|
50
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453",
|
|
51
56
|
"scripts": {}
|
|
52
57
|
}
|