@pie-lib/editable-html 9.5.13 → 10.0.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 +0 -302
- package/lib/components.js +116 -0
- package/lib/components.js.map +1 -0
- package/lib/editor.js +418 -103
- package/lib/editor.js.map +1 -1
- package/lib/index.js +101 -155
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +320 -0
- package/lib/new-serialization.js.map +1 -0
- package/lib/old-serialization.js +330 -0
- package/lib/parse-html.js +1 -1
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +1 -1
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +21 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +67 -0
- package/lib/plugins/hotKeys/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +1 -6
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +70 -53
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +7 -9
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +83 -27
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +72 -33
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +23 -41
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +64 -100
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +86 -60
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +202 -132
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +17 -16
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +3 -3
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +21 -58
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +13 -15
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +87 -53
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +17 -20
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -1
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +381 -212
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +5 -6
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +55 -11
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +1 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +1 -2
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +253 -239
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +27 -2
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +1 -1
- package/lib/serialization.js.map +1 -1
- package/lib/slate-editor.js +302 -0
- package/lib/test-serializer.js +189 -0
- package/lib/test-serializer.js.map +1 -0
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -14
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +22 -20
- package/playground/image/index.jsx +12 -10
- package/playground/index.html +25 -23
- package/playground/mathquill/index.html +23 -20
- package/playground/mathquill/index.jsx +18 -22
- package/playground/prod-test/index.html +24 -20
- package/playground/prod-test/index.jsx +5 -3
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +3 -4
- package/playground/schema-override/index.html +21 -19
- package/playground/schema-override/index.jsx +13 -14
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +3 -4
- package/playground/serialization/index.html +22 -20
- package/playground/table-examples.html +5 -8
- package/playground/webpack.config.js +10 -10
- package/src/components.js +135 -0
- package/src/editor.jsx +478 -141
- package/src/index.jsx +71 -95
- package/src/new-serialization.jsx +291 -0
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +33 -34
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/hotKeys/index.js +54 -0
- package/src/plugins/image/alt-dialog.jsx +4 -5
- package/src/plugins/image/component.jsx +106 -89
- package/src/plugins/image/image-toolbar.jsx +27 -19
- package/src/plugins/image/index.jsx +75 -43
- package/src/plugins/image/insert-image-handler.js +62 -27
- package/src/plugins/index.jsx +23 -41
- package/src/plugins/list/index.jsx +70 -95
- package/src/plugins/math/index.jsx +102 -82
- package/src/plugins/media/index.jsx +159 -124
- package/src/plugins/media/media-dialog.js +98 -71
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +29 -30
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
- package/src/plugins/respArea/icons/index.jsx +11 -14
- package/src/plugins/respArea/index.jsx +92 -52
- package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
- package/src/plugins/respArea/utils.jsx +26 -35
- package/src/plugins/table/icons/index.jsx +17 -11
- package/src/plugins/table/index.jsx +288 -231
- package/src/plugins/table/table-toolbar.jsx +15 -11
- package/src/plugins/toolbar/default-toolbar.jsx +65 -19
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
- package/src/plugins/toolbar/index.jsx +2 -3
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +244 -221
- package/src/plugins/utils.js +21 -4
- package/src/serialization.jsx +32 -32
- package/src/test-serializer.js +139 -0
- package/src/test-serializer.js.rej +20 -0
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["log","debug","EditableHtml","props","value","done","html","valueToHtml","htmlParsed","parseDegrees","markup","onChange","onDone","editorRef","onEditingDone","v","htmlToValue","state","allowValidation","current","equals","setState","toolbarOpts","error","ref","rootRef","React","Component","PropTypes","func","isRequired","string","bool"],"sources":["../src/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Editor, { DEFAULT_PLUGINS, ALL_PLUGINS } from './editor';\nimport { htmlToValue, valueToHtml } from './new-serialization';\nimport { parseDegrees } from './parse-html';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html');\n/**\n * Export lower level Editor and serialization functions.\n */\nexport { htmlToValue, valueToHtml, Editor, DEFAULT_PLUGINS, ALL_PLUGINS };\n\n\nexport default class EditableHtml extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func,\n markup: PropTypes.string.isRequired,\n allowValidation: PropTypes.bool\n };\n\n static defaultProps = {\n onDone: () => {},\n allowValidation: false\n };\n\n constructor(props) {\n super(props);\n const v = htmlToValue(props.markup);\n this.state = {\n value: v\n };\n }\n\n // eslint-disable-next-line react/no-deprecated\n componentWillReceiveProps(props) {\n if (!props.allowValidation && props.markup === this.props.markup) {\n return;\n }\n\n const v = htmlToValue(props.markup);\n const current = htmlToValue(this.props.markup);\n\n if (v.equals && !v.equals(current)) {\n this.setState({ value: v });\n }\n }\n\n onChange = (value, done) => {\n const html = valueToHtml(value);\n const htmlParsed = parseDegrees(html);\n\n log('value as html: ', html);\n\n if (html !== this.props.markup) {\n this.props.onChange(htmlParsed);\n }\n\n if (done) {\n this.props.onDone(htmlParsed);\n }\n };\n\n finishEditing = () => {\n if (this.editorRef) {\n this.editorRef.props.onEditingDone();\n }\n };\n\n render() {\n const { value } = this.state;\n const { toolbarOpts, error } = this.props;\n\n if (toolbarOpts) {\n toolbarOpts.error = error;\n }\n\n const props = {\n ...this.props,\n markup: null,\n value,\n onChange: this.onChange,\n };\n\n return (\n <Editor\n onRef={ref => {\n if (ref) {\n this.rootRef = ref;\n }\n }}\n {...props}\n />\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,IAAAC,iBAAA,EAAM,wBAAN,CAAZ;AACA;AACA;AACA;;IAIqBC,Y;;;;;EAanB,sBAAYC,KAAZ,EAAmB;IAAA;;IAAA;IACjB,0BAAMA,KAAN;IADiB,6FAsBR,UAACC,KAAD,EAAQC,IAAR,EAAiB;MAC1B,IAAMC,IAAI,GAAG,IAAAC,6BAAA,EAAYH,KAAZ,CAAb;MACA,IAAMI,UAAU,GAAG,IAAAC,uBAAA,EAAaH,IAAb,CAAnB;MAEAN,GAAG,CAAC,iBAAD,EAAoBM,IAApB,CAAH;;MAEA,IAAIA,IAAI,KAAK,MAAKH,KAAL,CAAWO,MAAxB,EAAgC;QAC9B,MAAKP,KAAL,CAAWQ,QAAX,CAAoBH,UAApB;MACD;;MAED,IAAIH,IAAJ,EAAU;QACR,MAAKF,KAAL,CAAWS,MAAX,CAAkBJ,UAAlB;MACD;IACF,CAnCkB;IAAA,kGAqCH,YAAM;MACpB,IAAI,MAAKK,SAAT,EAAoB;QAClB,MAAKA,SAAL,CAAeV,KAAf,CAAqBW,aAArB;MACD;IACF,CAzCkB;IAEjB,IAAMC,CAAC,GAAG,IAAAC,6BAAA,EAAYb,KAAK,CAACO,MAAlB,CAAV;IACA,MAAKO,KAAL,GAAa;MACXb,KAAK,EAAEW;IADI,CAAb;IAHiB;EAMlB,C,CAED;;;;;WACA,mCAA0BZ,KAA1B,EAAiC;MAC/B,IAAI,CAACA,KAAK,CAACe,eAAP,IAA0Bf,KAAK,CAACO,MAAN,KAAiB,KAAKP,KAAL,CAAWO,MAA1D,EAAkE;QAChE;MACD;;MAED,IAAMK,CAAC,GAAG,IAAAC,6BAAA,EAAYb,KAAK,CAACO,MAAlB,CAAV;MACA,IAAMS,OAAO,GAAG,IAAAH,6BAAA,EAAY,KAAKb,KAAL,CAAWO,MAAvB,CAAhB;;MAEA,IAAIK,CAAC,CAACK,MAAF,IAAY,CAACL,CAAC,CAACK,MAAF,CAASD,OAAT,CAAjB,EAAoC;QAClC,KAAKE,QAAL,CAAc;UAAEjB,KAAK,EAAEW;QAAT,CAAd;MACD;IACF;;;WAuBD,kBAAS;MAAA;;MACP,IAAQX,KAAR,GAAkB,KAAKa,KAAvB,CAAQb,KAAR;MACA,kBAA+B,KAAKD,KAApC;MAAA,IAAQmB,WAAR,eAAQA,WAAR;MAAA,IAAqBC,KAArB,eAAqBA,KAArB;;MAEA,IAAID,WAAJ,EAAiB;QACfA,WAAW,CAACC,KAAZ,GAAoBA,KAApB;MACD;;MAED,IAAMpB,KAAK,mCACN,KAAKA,KADC;QAETO,MAAM,EAAE,IAFC;QAGTN,KAAK,EAALA,KAHS;QAITO,QAAQ,EAAE,KAAKA;MAJN,EAAX;;MAOA,oBACE,gCAAC,kBAAD;QACE,KAAK,EAAE,eAAAa,GAAG,EAAI;UACZ,IAAIA,GAAJ,EAAS;YACP,MAAI,CAACC,OAAL,GAAeD,GAAf;UACD;QACF;MALH,GAMMrB,KANN,EADF;IAUD;;;EAjFuCuB,iBAAA,CAAMC,S;;;iCAA3BzB,Y,eACA;EACjBS,QAAQ,EAAEiB,qBAAA,CAAUC,IAAV,CAAeC,UADR;EAEjBlB,MAAM,EAAEgB,qBAAA,CAAUC,IAFD;EAGjBnB,MAAM,EAAEkB,qBAAA,CAAUG,MAAV,CAAiBD,UAHR;EAIjBZ,eAAe,EAAEU,qBAAA,CAAUI;AAJV,C;iCADA9B,Y,kBAQG;EACpBU,MAAM,EAAE,kBAAM,CAAE,CADI;EAEpBM,eAAe,EAAE;AAFG,C"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.valueToHtml = exports.reactAttributes = exports.parseStyleString = exports.htmlToValue = exports.getBase64 = exports.TEXT_RULE = exports.BLOCK_TAGS = void 0;
|
|
9
|
+
|
|
10
|
+
var _testSerializer = _interopRequireDefault(require("./test-serializer"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
15
|
+
|
|
16
|
+
var _toStyle = require("to-style");
|
|
17
|
+
|
|
18
|
+
var _image = require("./plugins/image");
|
|
19
|
+
|
|
20
|
+
var _math = require("./plugins/math");
|
|
21
|
+
|
|
22
|
+
var _media = require("./plugins/media");
|
|
23
|
+
|
|
24
|
+
var _list = require("./plugins/list");
|
|
25
|
+
|
|
26
|
+
var _table = require("./plugins/table");
|
|
27
|
+
|
|
28
|
+
var _respArea = require("./plugins/respArea");
|
|
29
|
+
|
|
30
|
+
var _slate = require("slate");
|
|
31
|
+
|
|
32
|
+
var _slateHyperscript = require("slate-hyperscript");
|
|
33
|
+
|
|
34
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:serialization');
|
|
35
|
+
/**
|
|
36
|
+
* Tags to blocks.
|
|
37
|
+
*
|
|
38
|
+
* @type {Object}
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
var BLOCK_TAGS = {
|
|
42
|
+
div: 'div',
|
|
43
|
+
span: 'span',
|
|
44
|
+
p: 'paragraph',
|
|
45
|
+
blockquote: 'quote',
|
|
46
|
+
pre: 'code',
|
|
47
|
+
h1: 'heading-one',
|
|
48
|
+
h2: 'heading-two',
|
|
49
|
+
h3: 'heading-three',
|
|
50
|
+
h4: 'heading-four',
|
|
51
|
+
h5: 'heading-five',
|
|
52
|
+
h6: 'heading-six'
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Tags to marks.
|
|
56
|
+
*
|
|
57
|
+
* @type {Object}
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
exports.BLOCK_TAGS = BLOCK_TAGS;
|
|
61
|
+
var MARK_TAGS = {
|
|
62
|
+
b: 'bold',
|
|
63
|
+
em: 'italic',
|
|
64
|
+
u: 'underline',
|
|
65
|
+
s: 'strikethrough',
|
|
66
|
+
code: 'code',
|
|
67
|
+
strong: 'bold'
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
var parseStyleString = function parseStyleString(s) {
|
|
71
|
+
var regex = /([\w-]*)\s*:\s*([^;]*)/g;
|
|
72
|
+
var match;
|
|
73
|
+
var result = {};
|
|
74
|
+
|
|
75
|
+
while (match = regex.exec(s)) {
|
|
76
|
+
result[match[1]] = match[2].trim();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return result;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
exports.parseStyleString = parseStyleString;
|
|
83
|
+
|
|
84
|
+
var getBase64 = function getBase64(file) {
|
|
85
|
+
return new Promise(function (resolve, reject) {
|
|
86
|
+
var reader = new FileReader();
|
|
87
|
+
reader.readAsDataURL(file);
|
|
88
|
+
|
|
89
|
+
reader.onload = function () {
|
|
90
|
+
return resolve(reader.result);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
reader.onerror = function (error) {
|
|
94
|
+
return reject(error);
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
exports.getBase64 = getBase64;
|
|
100
|
+
|
|
101
|
+
var reactAttributes = function reactAttributes(o) {
|
|
102
|
+
return (0, _toStyle.object)(o, {
|
|
103
|
+
camelize: true,
|
|
104
|
+
addUnits: false
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
exports.reactAttributes = reactAttributes;
|
|
109
|
+
|
|
110
|
+
var attributesToMap = function attributesToMap(el) {
|
|
111
|
+
return function (acc, attribute) {
|
|
112
|
+
var value = el.getAttribute(attribute);
|
|
113
|
+
|
|
114
|
+
if (value) {
|
|
115
|
+
if (attribute === 'style') {
|
|
116
|
+
var styleString = el.getAttribute(attribute);
|
|
117
|
+
var reactStyleObject = reactAttributes(parseStyleString(styleString));
|
|
118
|
+
acc['style'] = reactStyleObject;
|
|
119
|
+
} else {
|
|
120
|
+
acc[attribute] = el.getAttribute(attribute);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return acc;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var attributes = ['border', 'cellpadding', 'cellspacing', 'class', 'style'];
|
|
129
|
+
/**
|
|
130
|
+
* Serializer rules.
|
|
131
|
+
*
|
|
132
|
+
* @type {Array}
|
|
133
|
+
*/
|
|
134
|
+
|
|
135
|
+
var blocks = {
|
|
136
|
+
deserialize: function deserialize(el, next) {
|
|
137
|
+
log('[blocks:deserialize] block: ', el);
|
|
138
|
+
var block = BLOCK_TAGS[el.tagName.toLowerCase()];
|
|
139
|
+
if (!block) return;
|
|
140
|
+
log('[blocks:deserialize] block: ', block);
|
|
141
|
+
|
|
142
|
+
if (el.childNodes.length === 1) {
|
|
143
|
+
var cn = el.childNodes[0];
|
|
144
|
+
|
|
145
|
+
if (cn && cn.tagName && cn.tagName.toLowerCase() === block) {
|
|
146
|
+
log('[we have a child node of the same]...');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
152
|
+
type: block,
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Here for rendering styles for all block elements
|
|
156
|
+
*/
|
|
157
|
+
data: {
|
|
158
|
+
attributes: attributes.reduce(attributesToMap(el), {})
|
|
159
|
+
}
|
|
160
|
+
}, next(el.childNodes));
|
|
161
|
+
},
|
|
162
|
+
serialize: function serialize(object, children) {
|
|
163
|
+
if (object.object !== 'block') return;
|
|
164
|
+
var jsonData = object.data.toJSON();
|
|
165
|
+
log('[blocks:serialize] object: ', object, children);
|
|
166
|
+
var key;
|
|
167
|
+
|
|
168
|
+
for (key in BLOCK_TAGS) {
|
|
169
|
+
if (BLOCK_TAGS[key] === object.type) {
|
|
170
|
+
var Tag = key;
|
|
171
|
+
return /*#__PURE__*/_react["default"].createElement(Tag, jsonData.attributes, children);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
var marks = {
|
|
177
|
+
deserialize: function deserialize(el, next) {
|
|
178
|
+
var mark = MARK_TAGS[el.tagName.toLowerCase()];
|
|
179
|
+
|
|
180
|
+
if (!mark) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
log('[deserialize] mark: ', mark);
|
|
185
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
186
|
+
type: mark
|
|
187
|
+
}, next(el.childNodes));
|
|
188
|
+
},
|
|
189
|
+
serialize: function serialize(object, children) {
|
|
190
|
+
/*if (Mark.isMark(object)) {
|
|
191
|
+
for (var key in MARK_TAGS) {
|
|
192
|
+
if (MARK_TAGS[key] === object.type) {
|
|
193
|
+
const Tag = key;
|
|
194
|
+
return <Tag>{children}</Tag>;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}*/
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
var findPreviousText = function findPreviousText(el) {
|
|
202
|
+
if (el.nodeName === '#text') {
|
|
203
|
+
return el;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (el.previousSibling) {
|
|
207
|
+
return findPreviousText(el.previousSibling);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return null;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
var TEXT_RULE = {
|
|
214
|
+
deserialize: function deserialize(el) {
|
|
215
|
+
/**
|
|
216
|
+
* This needs to be called on the dom element in order to merge the adjacent text nodes together
|
|
217
|
+
* */
|
|
218
|
+
el.normalize();
|
|
219
|
+
|
|
220
|
+
if (el.tagName && el.tagName.toLowerCase() === 'br') {
|
|
221
|
+
return (0, _slateHyperscript.jsx)('text', {});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
if (el.nodeName === '#text') {
|
|
225
|
+
if (el.nodeValue && el.nodeValue.match(/<!--.*?-->/)) return;
|
|
226
|
+
log('[text:deserialize] return text object..');
|
|
227
|
+
return (0, _slateHyperscript.jsx)('text', {}, el.nodeValue);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
serialize: function serialize(obj, children) {
|
|
231
|
+
if (obj.object === 'string') {
|
|
232
|
+
return children.split('\n').reduce(function (array, text, i) {
|
|
233
|
+
if (i !== 0) array.push( /*#__PURE__*/_react["default"].createElement("br", null));
|
|
234
|
+
array.push(text);
|
|
235
|
+
return array;
|
|
236
|
+
}, []);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
exports.TEXT_RULE = TEXT_RULE;
|
|
241
|
+
var RULES = [_list.serialization, _math.serialization, _media.serialization, _image.serialization, _table.serialization, _respArea.serialization, TEXT_RULE, blocks, marks];
|
|
242
|
+
|
|
243
|
+
function allWhitespace(node) {
|
|
244
|
+
// Use ECMA-262 Edition 3 String and RegExp features
|
|
245
|
+
return !/[^\t\n\r ]/.test(node.textContent);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function defaultParseHtml(html) {
|
|
249
|
+
if (typeof DOMParser === 'undefined') {
|
|
250
|
+
throw new Error('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.');
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
var parsed = new DOMParser().parseFromString(html, 'text/html');
|
|
254
|
+
var body = parsed.body;
|
|
255
|
+
var textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);
|
|
256
|
+
var n = textNodes.nextNode();
|
|
257
|
+
|
|
258
|
+
while (n) {
|
|
259
|
+
if (allWhitespace(n) || n.nodeValue === "\u200B") {
|
|
260
|
+
n.parentNode.removeChild(n);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
n = textNodes.nextNode();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return body;
|
|
267
|
+
}
|
|
268
|
+
/** If this lib is used on the server side, we need to bypass using the DOMParser - just put in a stub. */
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
var parseHtml = typeof window === 'undefined' ? function () {
|
|
272
|
+
return {
|
|
273
|
+
childNodes: []
|
|
274
|
+
};
|
|
275
|
+
} : defaultParseHtml;
|
|
276
|
+
var serializer = new _testSerializer["default"]({
|
|
277
|
+
defaultBlock: 'div',
|
|
278
|
+
rules: RULES,
|
|
279
|
+
parseHtml: parseHtml
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
var _extends = Object.assign || function (target) {
|
|
283
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
284
|
+
var source = arguments[i];
|
|
285
|
+
|
|
286
|
+
for (var key in source) {
|
|
287
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
288
|
+
target[key] = source[key];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return target;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
var htmlToValue = function htmlToValue(html) {
|
|
297
|
+
try {
|
|
298
|
+
return serializer.deserialize(html);
|
|
299
|
+
} catch (e) {
|
|
300
|
+
console.log("Couldn't parse html: ", e);
|
|
301
|
+
return {};
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
exports.htmlToValue = htmlToValue;
|
|
306
|
+
|
|
307
|
+
var valueToHtml = function valueToHtml(value) {
|
|
308
|
+
return serializer.serialize(value);
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
*
|
|
312
|
+
* <div><div>a</div></div> -> <div>a</div>
|
|
313
|
+
*
|
|
314
|
+
* <div><div>a</div><div>b</div></div> -> <div>a</div><div>b</div>
|
|
315
|
+
* <div><div>a</div>4444<div>b</div></div> -> <div>a</div>4444<div>b</div>
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
exports.valueToHtml = valueToHtml;
|
|
320
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIkJMT0NLX1RBR1MiLCJkaXYiLCJzcGFuIiwicCIsImJsb2NrcXVvdGUiLCJwcmUiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJNQVJLX1RBR1MiLCJiIiwiZW0iLCJ1IiwicyIsImNvZGUiLCJzdHJvbmciLCJwYXJzZVN0eWxlU3RyaW5nIiwicmVnZXgiLCJtYXRjaCIsInJlc3VsdCIsImV4ZWMiLCJ0cmltIiwiZ2V0QmFzZTY0IiwiZmlsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0RhdGFVUkwiLCJvbmxvYWQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFjdEF0dHJpYnV0ZXMiLCJvIiwidG9TdHlsZU9iamVjdCIsImNhbWVsaXplIiwiYWRkVW5pdHMiLCJhdHRyaWJ1dGVzVG9NYXAiLCJlbCIsImFjYyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiZ2V0QXR0cmlidXRlIiwic3R5bGVTdHJpbmciLCJyZWFjdFN0eWxlT2JqZWN0IiwiYXR0cmlidXRlcyIsImJsb2NrcyIsImRlc2VyaWFsaXplIiwibmV4dCIsImJsb2NrIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNuIiwianN4IiwidHlwZSIsImRhdGEiLCJyZWR1Y2UiLCJzZXJpYWxpemUiLCJvYmplY3QiLCJjaGlsZHJlbiIsImpzb25EYXRhIiwidG9KU09OIiwia2V5IiwiVGFnIiwibWFya3MiLCJtYXJrIiwiZmluZFByZXZpb3VzVGV4dCIsIm5vZGVOYW1lIiwicHJldmlvdXNTaWJsaW5nIiwiVEVYVF9SVUxFIiwibm9ybWFsaXplIiwibm9kZVZhbHVlIiwib2JqIiwic3BsaXQiLCJhcnJheSIsInRleHQiLCJpIiwicHVzaCIsIlJVTEVTIiwibGlzdFNlcmlhbGl6YXRpb24iLCJtYXRoU2VyaWFsaXphdGlvbiIsIm1lZGlhU2VyaWFsaXphdGlvbiIsImltZ1NlcmlhbGl6YXRpb24iLCJ0YWJsZVNlcmlhbGl6YXRpb24iLCJyZXNwb25zZUFyZWFTZXJpYWxpemF0aW9uIiwiYWxsV2hpdGVzcGFjZSIsIm5vZGUiLCJ0ZXN0IiwidGV4dENvbnRlbnQiLCJkZWZhdWx0UGFyc2VIdG1sIiwiaHRtbCIsIkRPTVBhcnNlciIsIkVycm9yIiwicGFyc2VkIiwicGFyc2VGcm9tU3RyaW5nIiwiYm9keSIsInRleHROb2RlcyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJuIiwibmV4dE5vZGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJwYXJzZUh0bWwiLCJ3aW5kb3ciLCJzZXJpYWxpemVyIiwiVGVzdFNlcmlhbGl6ZXIiLCJkZWZhdWx0QmxvY2siLCJydWxlcyIsIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwidGFyZ2V0IiwiYXJndW1lbnRzIiwic291cmNlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaHRtbFRvVmFsdWUiLCJlIiwiY29uc29sZSIsInZhbHVlVG9IdG1sIl0sInNvdXJjZXMiOlsiLi4vc3JjL25ldy1zZXJpYWxpemF0aW9uLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFNlcmlhbGl6ZXIgZnJvbSAnLi90ZXN0LXNlcmlhbGl6ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBvYmplY3QgYXMgdG9TdHlsZU9iamVjdCB9IGZyb20gJ3RvLXN0eWxlJztcblxuaW1wb3J0IHsgc2VyaWFsaXphdGlvbiBhcyBpbWdTZXJpYWxpemF0aW9uIH0gZnJvbSAnLi9wbHVnaW5zL2ltYWdlJztcbmltcG9ydCB7IHNlcmlhbGl6YXRpb24gYXMgbWF0aFNlcmlhbGl6YXRpb24gfSBmcm9tICcuL3BsdWdpbnMvbWF0aCc7XG5pbXBvcnQgeyBzZXJpYWxpemF0aW9uIGFzIG1lZGlhU2VyaWFsaXphdGlvbiB9IGZyb20gJy4vcGx1Z2lucy9tZWRpYSc7XG5pbXBvcnQgeyBzZXJpYWxpemF0aW9uIGFzIGxpc3RTZXJpYWxpemF0aW9uIH0gZnJvbSAnLi9wbHVnaW5zL2xpc3QnO1xuaW1wb3J0IHsgc2VyaWFsaXphdGlvbiBhcyB0YWJsZVNlcmlhbGl6YXRpb24gfSBmcm9tICcuL3BsdWdpbnMvdGFibGUnO1xuaW1wb3J0IHsgc2VyaWFsaXphdGlvbiBhcyByZXNwb25zZUFyZWFTZXJpYWxpemF0aW9uIH0gZnJvbSAnLi9wbHVnaW5zL3Jlc3BBcmVhJztcbmltcG9ydCB7IE1hcmssIFZhbHVlIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsganN4IH0gZnJvbSBcInNsYXRlLWh5cGVyc2NyaXB0XCI7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnNlcmlhbGl6YXRpb24nKTtcblxuLyoqXG4gKiBUYWdzIHRvIGJsb2Nrcy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbmV4cG9ydCBjb25zdCBCTE9DS19UQUdTID0ge1xuICBkaXY6ICdkaXYnLFxuICBzcGFuOiAnc3BhbicsXG4gIHA6ICdwYXJhZ3JhcGgnLFxuICBibG9ja3F1b3RlOiAncXVvdGUnLFxuICBwcmU6ICdjb2RlJyxcbiAgaDE6ICdoZWFkaW5nLW9uZScsXG4gIGgyOiAnaGVhZGluZy10d28nLFxuICBoMzogJ2hlYWRpbmctdGhyZWUnLFxuICBoNDogJ2hlYWRpbmctZm91cicsXG4gIGg1OiAnaGVhZGluZy1maXZlJyxcbiAgaDY6ICdoZWFkaW5nLXNpeCdcbn07XG5cbi8qKlxuICogVGFncyB0byBtYXJrcy5cbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbmNvbnN0IE1BUktfVEFHUyA9IHtcbiAgYjogJ2JvbGQnLFxuICBlbTogJ2l0YWxpYycsXG4gIHU6ICd1bmRlcmxpbmUnLFxuICBzOiAnc3RyaWtldGhyb3VnaCcsXG4gIGNvZGU6ICdjb2RlJyxcbiAgc3Ryb25nOiAnYm9sZCdcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVN0eWxlU3RyaW5nID0gcyA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gLyhbXFx3LV0qKVxccyo6XFxzKihbXjtdKikvZztcbiAgbGV0IG1hdGNoO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMocykpKSB7XG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IG1hdGNoWzJdLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhc2U2NCA9IGZpbGUgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFjdEF0dHJpYnV0ZXMgPSBvID0+IHRvU3R5bGVPYmplY3QobywgeyBjYW1lbGl6ZTogdHJ1ZSwgYWRkVW5pdHM6IGZhbHNlIH0pO1xuXG5jb25zdCBhdHRyaWJ1dGVzVG9NYXAgPSBlbCA9PiAoYWNjLCBhdHRyaWJ1dGUpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3N0eWxlJykge1xuICAgICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGNvbnN0IHJlYWN0U3R5bGVPYmplY3QgPSByZWFjdEF0dHJpYnV0ZXMocGFyc2VTdHlsZVN0cmluZyhzdHlsZVN0cmluZykpO1xuICAgICAgYWNjWydzdHlsZSddID0gcmVhY3RTdHlsZU9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2F0dHJpYnV0ZV0gPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFjYztcbn07XG5cbmNvbnN0IGF0dHJpYnV0ZXMgPSBbJ2JvcmRlcicsICdjZWxscGFkZGluZycsICdjZWxsc3BhY2luZycsICdjbGFzcycsICdzdHlsZSddO1xuXG4vKipcbiAqIFNlcmlhbGl6ZXIgcnVsZXMuXG4gKlxuICogQHR5cGUge0FycmF5fVxuICovXG5cbmNvbnN0IGJsb2NrcyA9IHtcbiAgZGVzZXJpYWxpemUoZWwsIG5leHQpIHtcbiAgICBsb2coJ1tibG9ja3M6ZGVzZXJpYWxpemVdIGJsb2NrOiAnLCBlbCk7XG4gICAgY29uc3QgYmxvY2sgPSBCTE9DS19UQUdTW2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFibG9jaykgcmV0dXJuO1xuICAgIGxvZygnW2Jsb2NrczpkZXNlcmlhbGl6ZV0gYmxvY2s6ICcsIGJsb2NrKTtcblxuICAgIGlmIChlbC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY24gPSBlbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgaWYgKGNuICYmIGNuLnRhZ05hbWUgJiYgY24udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBibG9jaykge1xuICAgICAgICBsb2coJ1t3ZSBoYXZlIGEgY2hpbGQgbm9kZSBvZiB0aGUgc2FtZV0uLi4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqc3goXG4gICAgICAnZWxlbWVudCcsXG4gICAgICB7XG4gICAgICAgIHR5cGU6IGJsb2NrLFxuICAgICAgICAvKipcbiAgICAgICAgICogSGVyZSBmb3IgcmVuZGVyaW5nIHN0eWxlcyBmb3IgYWxsIGJsb2NrIGVsZW1lbnRzXG4gICAgICAgICAqL1xuICAgICAgICBkYXRhOiB7IGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMucmVkdWNlKGF0dHJpYnV0ZXNUb01hcChlbCksIHt9KSB9XG4gICAgICB9LFxuICAgICAgbmV4dChlbC5jaGlsZE5vZGVzKVxuICAgICk7XG4gIH0sXG4gIHNlcmlhbGl6ZTogKG9iamVjdCwgY2hpbGRyZW4pID0+IHtcbiAgICBpZiAob2JqZWN0Lm9iamVjdCAhPT0gJ2Jsb2NrJykgcmV0dXJuO1xuXG4gICAgY29uc3QganNvbkRhdGEgPSBvYmplY3QuZGF0YS50b0pTT04oKTtcblxuICAgIGxvZygnW2Jsb2NrczpzZXJpYWxpemVdIG9iamVjdDogJywgb2JqZWN0LCBjaGlsZHJlbik7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoa2V5IGluIEJMT0NLX1RBR1MpIHtcbiAgICAgIGlmIChCTE9DS19UQUdTW2tleV0gPT09IG9iamVjdC50eXBlKSB7XG4gICAgICAgIGNvbnN0IFRhZyA9IGtleTtcblxuICAgICAgICByZXR1cm4gPFRhZyB7Li4uanNvbkRhdGEuYXR0cmlidXRlc30+e2NoaWxkcmVufTwvVGFnPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IG1hcmtzID0ge1xuICBkZXNlcmlhbGl6ZShlbCwgbmV4dCkge1xuICAgIGNvbnN0IG1hcmsgPSBNQVJLX1RBR1NbZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW1hcmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nKCdbZGVzZXJpYWxpemVdIG1hcms6ICcsIG1hcmspO1xuXG4gICAgcmV0dXJuIGpzeCgnZWxlbWVudCcsIHsgdHlwZTogbWFyayB9LCBuZXh0KGVsLmNoaWxkTm9kZXMpKTtcbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCwgY2hpbGRyZW4pIHtcbiAgICAvKmlmIChNYXJrLmlzTWFyayhvYmplY3QpKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gTUFSS19UQUdTKSB7XG4gICAgICAgIGlmIChNQVJLX1RBR1Nba2V5XSA9PT0gb2JqZWN0LnR5cGUpIHtcbiAgICAgICAgICBjb25zdCBUYWcgPSBrZXk7XG4gICAgICAgICAgcmV0dXJuIDxUYWc+e2NoaWxkcmVufTwvVGFnPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0qL1xuICB9XG59O1xuXG5jb25zdCBmaW5kUHJldmlvdXNUZXh0ID0gZWwgPT4ge1xuICBpZiAoZWwubm9kZU5hbWUgPT09ICcjdGV4dCcpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBpZiAoZWwucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGZpbmRQcmV2aW91c1RleHQoZWwucHJldmlvdXNTaWJsaW5nKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IFRFWFRfUlVMRSA9IHtcbiAgZGVzZXJpYWxpemUoZWwpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUgZG9tIGVsZW1lbnQgaW4gb3JkZXIgdG8gbWVyZ2UgdGhlIGFkamFjZW50IHRleHQgbm9kZXMgdG9nZXRoZXJcbiAgICAgKiAqL1xuICAgIGVsLm5vcm1hbGl6ZSgpO1xuXG4gICAgaWYgKGVsLnRhZ05hbWUgJiYgZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYnInKSB7XG4gICAgICByZXR1cm4ganN4KCd0ZXh0Jywge30pO1xuICAgIH1cblxuICAgIGlmIChlbC5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKGVsLm5vZGVWYWx1ZSAmJiBlbC5ub2RlVmFsdWUubWF0Y2goLzwhLS0uKj8tLT4vKSkgcmV0dXJuO1xuXG4gICAgICBsb2coJ1t0ZXh0OmRlc2VyaWFsaXplXSByZXR1cm4gdGV4dCBvYmplY3QuLicpO1xuICAgICAgcmV0dXJuIGpzeCgndGV4dCcsIHt9LCBlbC5ub2RlVmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBzZXJpYWxpemUob2JqLCBjaGlsZHJlbikge1xuICAgIGlmIChvYmoub2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuLnNwbGl0KCdcXG4nKS5yZWR1Y2UoKGFycmF5LCB0ZXh0LCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSAwKSBhcnJheS5wdXNoKDxiciAvPik7XG4gICAgICAgIGFycmF5LnB1c2godGV4dCk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH0sIFtdKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IFJVTEVTID0gW1xuICBsaXN0U2VyaWFsaXphdGlvbixcbiAgbWF0aFNlcmlhbGl6YXRpb24sXG4gIG1lZGlhU2VyaWFsaXphdGlvbixcbiAgaW1nU2VyaWFsaXphdGlvbixcbiAgdGFibGVTZXJpYWxpemF0aW9uLFxuICByZXNwb25zZUFyZWFTZXJpYWxpemF0aW9uLFxuICBURVhUX1JVTEUsXG4gIGJsb2NrcyxcbiAgbWFya3Ncbl07XG5cbmZ1bmN0aW9uIGFsbFdoaXRlc3BhY2Uobm9kZSkge1xuICAvLyBVc2UgRUNNQS0yNjIgRWRpdGlvbiAzIFN0cmluZyBhbmQgUmVnRXhwIGZlYXR1cmVzXG4gIHJldHVybiAhL1teXFx0XFxuXFxyIF0vLnRlc3Qobm9kZS50ZXh0Q29udGVudCk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQYXJzZUh0bWwoaHRtbCkge1xuICBpZiAodHlwZW9mIERPTVBhcnNlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnVGhlIG5hdGl2ZSBgRE9NUGFyc2VyYCBnbG9iYWwgd2hpY2ggdGhlIGBIdG1sYCBzZXJpYWxpemVyIHVzZXMgYnkgZGVmYXVsdCBpcyBub3QgcHJlc2VudCBpbiB0aGlzIGVudmlyb25tZW50LiBZb3UgbXVzdCBzdXBwbHkgdGhlIGBvcHRpb25zLnBhcnNlSHRtbGAgZnVuY3Rpb24gaW5zdGVhZC4nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuXG4gIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VkO1xuICBjb25zdCB0ZXh0Tm9kZXMgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGJvZHksIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsLCBudWxsKTtcbiAgbGV0IG4gPSB0ZXh0Tm9kZXMubmV4dE5vZGUoKTtcblxuICB3aGlsZSAobikge1xuICAgIGlmIChhbGxXaGl0ZXNwYWNlKG4pIHx8IG4ubm9kZVZhbHVlID09PSAnXFx1MjAwQicpIHtcbiAgICAgIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTtcbiAgICB9XG4gICAgbiA9IHRleHROb2Rlcy5uZXh0Tm9kZSgpO1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbi8qKiBJZiB0aGlzIGxpYiBpcyB1c2VkIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgd2UgbmVlZCB0byBieXBhc3MgdXNpbmcgdGhlIERPTVBhcnNlciAtIGp1c3QgcHV0IGluIGEgc3R1Yi4gKi9cbmNvbnN0IHBhcnNlSHRtbCA9XG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnXG4gICAgPyAoKSA9PiAoe1xuICAgICAgICBjaGlsZE5vZGVzOiBbXVxuICAgICAgfSlcbiAgICA6IGRlZmF1bHRQYXJzZUh0bWw7XG5cbmNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgVGVzdFNlcmlhbGl6ZXIoe1xuICBkZWZhdWx0QmxvY2s6ICdkaXYnLFxuICBydWxlczogUlVMRVMsXG4gIHBhcnNlSHRtbFxufSk7XG5cbmNvbnN0IF9leHRlbmRzID1cbiAgT2JqZWN0LmFzc2lnbiB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG5leHBvcnQgY29uc3QgaHRtbFRvVmFsdWUgPSBodG1sID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShodG1sKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKFwiQ291bGRuJ3QgcGFyc2UgaHRtbDogXCIsIGUpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlVG9IdG1sID0gdmFsdWUgPT4gc2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpO1xuXG4vKipcbiAqXG4gKiA8ZGl2PjxkaXY+YTwvZGl2PjwvZGl2PiAtPiA8ZGl2PmE8L2Rpdj5cbiAqXG4gKiA8ZGl2PjxkaXY+YTwvZGl2PjxkaXY+YjwvZGl2PjwvZGl2PiAtPiA8ZGl2PmE8L2Rpdj48ZGl2PmI8L2Rpdj5cbiAqIDxkaXY+PGRpdj5hPC9kaXY+NDQ0NDxkaXY+YjwvZGl2PjwvZGl2PiAtPiA8ZGl2PmE8L2Rpdj40NDQ0PGRpdj5iPC9kaXY+XG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBTUEsR0FBRyxHQUFHLElBQUFDLGlCQUFBLEVBQU0sc0NBQU4sQ0FBWjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sSUFBTUMsVUFBVSxHQUFHO0VBQ3hCQyxHQUFHLEVBQUUsS0FEbUI7RUFFeEJDLElBQUksRUFBRSxNQUZrQjtFQUd4QkMsQ0FBQyxFQUFFLFdBSHFCO0VBSXhCQyxVQUFVLEVBQUUsT0FKWTtFQUt4QkMsR0FBRyxFQUFFLE1BTG1CO0VBTXhCQyxFQUFFLEVBQUUsYUFOb0I7RUFPeEJDLEVBQUUsRUFBRSxhQVBvQjtFQVF4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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-serialization.js","names":["log","debug","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","toStyleObject","camelize","addUnits","attributesToMap","el","acc","attribute","value","getAttribute","styleString","reactStyleObject","attributes","blocks","deserialize","next","block","tagName","toLowerCase","childNodes","length","cn","jsx","type","data","reduce","serialize","object","children","jsonData","toJSON","key","Tag","marks","mark","findPreviousText","nodeName","previousSibling","TEXT_RULE","normalize","nodeValue","obj","split","array","text","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","TestSerializer","defaultBlock","rules","_extends","Object","assign","target","arguments","source","prototype","hasOwnProperty","call","htmlToValue","e","console","valueToHtml"],"sources":["../src/new-serialization.jsx"],"sourcesContent":["import TestSerializer from './test-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';\nimport { jsx } from \"slate-hyperscript\";\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 jsx(\n 'element',\n {\n type: block,\n /**\n * Here for rendering styles for all block elements\n */\n data: { attributes: attributes.reduce(attributesToMap(el), {}) }\n },\n 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) {\n return;\n }\n log('[deserialize] mark: ', mark);\n\n return jsx('element', { type: mark }, next(el.childNodes));\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\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 jsx('text', {}, '\\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 jsx('text', {}, el.nodeValue);\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 const textNodes = document.createTreeWalker(body, NodeFilter.SHOW_TEXT, null, null);\n let 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 TestSerializer({\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\nexport const htmlToValue = html => {\n try {\n return serializer.deserialize(html);\n } catch (e) {\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"],"mappings":"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"}
|