@pie-lib/editable-html-tip-tap 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +32 -0
- package/CHANGELOG.md +2280 -0
- package/lib/__tests__/editor.test.js +470 -0
- package/lib/__tests__/serialization.test.js +246 -0
- package/lib/__tests__/utils.js +106 -0
- package/lib/block-tags.js +25 -0
- package/lib/constants.js +16 -0
- package/lib/editor.js +1356 -0
- package/lib/extensions/MediaView.js +112 -0
- package/lib/extensions/characters.js +65 -0
- package/lib/extensions/component.js +325 -0
- package/lib/extensions/css.js +252 -0
- package/lib/extensions/custom-toolbar-wrapper.js +124 -0
- package/lib/extensions/image.js +106 -0
- package/lib/extensions/math.js +330 -0
- package/lib/extensions/media.js +276 -0
- package/lib/extensions/responseArea.js +278 -0
- package/lib/index.js +1213 -0
- package/lib/old-index.js +269 -0
- package/lib/parse-html.js +16 -0
- package/lib/plugins/characters/custom-popper.js +73 -0
- package/lib/plugins/characters/index.js +305 -0
- package/lib/plugins/characters/utils.js +381 -0
- package/lib/plugins/css/icons/index.js +37 -0
- package/lib/plugins/css/index.js +390 -0
- package/lib/plugins/customPlugin/index.js +114 -0
- package/lib/plugins/html/icons/index.js +38 -0
- package/lib/plugins/html/index.js +81 -0
- package/lib/plugins/image/__tests__/component.test.js +51 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
- package/lib/plugins/image/__tests__/index.test.js +98 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
- package/lib/plugins/image/__tests__/mock-change.js +25 -0
- package/lib/plugins/image/alt-dialog.js +129 -0
- package/lib/plugins/image/component.js +419 -0
- package/lib/plugins/image/image-toolbar.js +177 -0
- package/lib/plugins/image/index.js +263 -0
- package/lib/plugins/image/insert-image-handler.js +117 -0
- package/lib/plugins/index.js +413 -0
- package/lib/plugins/list/__tests__/index.test.js +79 -0
- package/lib/plugins/list/index.js +334 -0
- package/lib/plugins/math/__tests__/index.test.js +300 -0
- package/lib/plugins/math/index.js +454 -0
- package/lib/plugins/media/__tests__/index.test.js +71 -0
- package/lib/plugins/media/index.js +387 -0
- package/lib/plugins/media/media-dialog.js +709 -0
- package/lib/plugins/media/media-toolbar.js +101 -0
- package/lib/plugins/media/media-wrapper.js +93 -0
- package/lib/plugins/rendering/index.js +46 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
- package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
- package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
- package/lib/plugins/respArea/icons/index.js +95 -0
- package/lib/plugins/respArea/index.js +341 -0
- package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
- package/lib/plugins/respArea/math-templated/index.js +130 -0
- package/lib/plugins/respArea/utils.js +125 -0
- package/lib/plugins/table/CustomTablePlugin.js +133 -0
- package/lib/plugins/table/__tests__/index.test.js +442 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
- package/lib/plugins/table/icons/index.js +69 -0
- package/lib/plugins/table/index.js +483 -0
- package/lib/plugins/table/table-toolbar.js +187 -0
- package/lib/plugins/textAlign/icons/index.js +194 -0
- package/lib/plugins/textAlign/index.js +34 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
- package/lib/plugins/toolbar/default-toolbar.js +229 -0
- package/lib/plugins/toolbar/done-button.js +53 -0
- package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
- package/lib/plugins/toolbar/index.js +34 -0
- package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
- package/lib/plugins/toolbar/toolbar.js +376 -0
- package/lib/plugins/utils.js +62 -0
- package/lib/serialization.js +677 -0
- package/lib/shared/alert-dialog.js +75 -0
- package/lib/theme.js +9 -0
- package/package.json +69 -0
- 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 +1197 -0
- package/src/extensions/characters.js +46 -0
- package/src/extensions/component.jsx +294 -0
- package/src/extensions/css.js +217 -0
- package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
- package/src/extensions/image.js +55 -0
- package/src/extensions/math.js +259 -0
- package/src/extensions/media.js +182 -0
- package/src/extensions/responseArea.js +205 -0
- package/src/index.jsx +1462 -0
- package/src/old-index.jsx +162 -0
- package/src/parse-html.js +8 -0
- package/src/plugins/README.md +27 -0
- package/src/plugins/characters/custom-popper.js +48 -0
- package/src/plugins/characters/index.jsx +284 -0
- package/src/plugins/characters/utils.js +447 -0
- package/src/plugins/css/icons/index.jsx +17 -0
- package/src/plugins/css/index.jsx +340 -0
- package/src/plugins/customPlugin/index.jsx +85 -0
- package/src/plugins/html/icons/index.jsx +19 -0
- package/src/plugins/html/index.jsx +72 -0
- 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/alt-dialog.jsx +82 -0
- package/src/plugins/image/component.jsx +343 -0
- package/src/plugins/image/image-toolbar.jsx +100 -0
- package/src/plugins/image/index.jsx +227 -0
- package/src/plugins/image/insert-image-handler.js +79 -0
- package/src/plugins/index.jsx +377 -0
- package/src/plugins/list/__tests__/index.test.js +54 -0
- package/src/plugins/list/index.jsx +305 -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 +379 -0
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/media/index.jsx +325 -0
- package/src/plugins/media/media-dialog.js +624 -0
- package/src/plugins/media/media-toolbar.jsx +56 -0
- package/src/plugins/media/media-wrapper.jsx +43 -0
- package/src/plugins/rendering/index.js +31 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
- package/src/plugins/respArea/icons/index.jsx +71 -0
- package/src/plugins/respArea/index.jsx +299 -0
- package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
- package/src/plugins/respArea/math-templated/index.jsx +104 -0
- package/src/plugins/respArea/utils.jsx +90 -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/icons/index.jsx +53 -0
- package/src/plugins/table/index.jsx +427 -0
- package/src/plugins/table/table-toolbar.jsx +136 -0
- package/src/plugins/textAlign/icons/index.jsx +114 -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 +206 -0
- package/src/plugins/toolbar/done-button.jsx +38 -0
- package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
- package/src/plugins/toolbar/index.jsx +23 -0
- package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
- package/src/plugins/toolbar/toolbar.jsx +338 -0
- package/src/plugins/utils.js +31 -0
- package/src/serialization.jsx +621 -0
- package/src/theme.js +1 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.ZeroWidthSpaceHandlingPlugin = exports.MathNodeView = exports.MathNode = exports.EnsureTextAfterMathPlugin = void 0;
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _core = require("@tiptap/core");
|
|
19
|
+
|
|
20
|
+
var _react2 = require("@tiptap/react");
|
|
21
|
+
|
|
22
|
+
var _prosemirrorState = require("prosemirror-state");
|
|
23
|
+
|
|
24
|
+
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
25
|
+
|
|
26
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
27
|
+
|
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
|
+
|
|
30
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
|
+
|
|
32
|
+
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; }
|
|
33
|
+
|
|
34
|
+
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; }
|
|
35
|
+
|
|
36
|
+
var ensureTextAfterMathPluginKey = new _prosemirrorState.PluginKey('ensureTextAfterMath');
|
|
37
|
+
|
|
38
|
+
var EnsureTextAfterMathPlugin = function EnsureTextAfterMathPlugin(mathNodeName) {
|
|
39
|
+
return new _prosemirrorState.Plugin({
|
|
40
|
+
key: ensureTextAfterMathPluginKey,
|
|
41
|
+
appendTransaction: function appendTransaction(transactions, oldState, newState) {
|
|
42
|
+
// Only act when the doc actually changed
|
|
43
|
+
if (!transactions.some(function (tr) {
|
|
44
|
+
return tr.docChanged;
|
|
45
|
+
})) return null;
|
|
46
|
+
var tr = newState.tr;
|
|
47
|
+
var changed = false;
|
|
48
|
+
newState.doc.descendants(function (node, pos) {
|
|
49
|
+
if (node.type.name === mathNodeName) {
|
|
50
|
+
var nextPos = pos + node.nodeSize;
|
|
51
|
+
var nextNode = newState.doc.nodeAt(nextPos); // If there's no node after, or the next node isn't text, insert a space
|
|
52
|
+
|
|
53
|
+
if (!nextNode || nextNode.type.name !== 'text') {
|
|
54
|
+
tr.insert(nextPos, newState.schema.text("\u200B"));
|
|
55
|
+
changed = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return changed ? tr : null;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.EnsureTextAfterMathPlugin = EnsureTextAfterMathPlugin;
|
|
65
|
+
var ZeroWidthSpaceHandlingPlugin = new _prosemirrorState.Plugin({
|
|
66
|
+
key: new _prosemirrorState.PluginKey('zeroWidthSpaceHandling'),
|
|
67
|
+
props: {
|
|
68
|
+
handleKeyDown: function handleKeyDown(view, event) {
|
|
69
|
+
var state = view.state,
|
|
70
|
+
dispatch = view.dispatch;
|
|
71
|
+
var selection = state.selection,
|
|
72
|
+
doc = state.doc;
|
|
73
|
+
var from = selection.from,
|
|
74
|
+
empty = selection.empty;
|
|
75
|
+
|
|
76
|
+
if (empty && event.key === 'Backspace' && from > 0) {
|
|
77
|
+
var prevChar = doc.textBetween(from - 1, from, "\uFFFC", "\uFFFC");
|
|
78
|
+
|
|
79
|
+
if (prevChar === "\u200B") {
|
|
80
|
+
var tr = state.tr["delete"](from - 2, from);
|
|
81
|
+
dispatch(tr);
|
|
82
|
+
return true; // handled
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (empty && event.key === 'ArrowLeft' && from > 0) {
|
|
87
|
+
var _prevChar = doc.textBetween(from - 1, from, "\uFFFC", "\uFFFC"); // If the previous character is the zero-width space...
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
if (_prevChar === "\u200B") {
|
|
91
|
+
var posBefore = from - 1;
|
|
92
|
+
var resolved = state.doc.resolve(posBefore - 1); // look just before the zwsp
|
|
93
|
+
|
|
94
|
+
var maybeNode = resolved.nodeAfter || resolved.nodeBefore; // Check if there's an inline selectable node (e.g., your math node)
|
|
95
|
+
|
|
96
|
+
if (maybeNode) {
|
|
97
|
+
var nodePos = posBefore - maybeNode.nodeSize;
|
|
98
|
+
var nodeResolved = state.doc.resolve(nodePos);
|
|
99
|
+
|
|
100
|
+
var _tr = state.tr.setSelection(_prosemirrorState.NodeSelection.create(state.doc, nodeResolved.pos));
|
|
101
|
+
|
|
102
|
+
dispatch(_tr);
|
|
103
|
+
return true;
|
|
104
|
+
} else {
|
|
105
|
+
// Just move the text cursor before the zwsp
|
|
106
|
+
var _tr2 = state.tr.setSelection(_prosemirrorState.TextSelection.create(state.doc, from - 2));
|
|
107
|
+
|
|
108
|
+
dispatch(_tr2);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
exports.ZeroWidthSpaceHandlingPlugin = ZeroWidthSpaceHandlingPlugin;
|
|
119
|
+
|
|
120
|
+
var MathNode = _core.Node.create({
|
|
121
|
+
name: 'math',
|
|
122
|
+
group: 'inline',
|
|
123
|
+
inline: true,
|
|
124
|
+
atom: true,
|
|
125
|
+
addAttributes: function addAttributes() {
|
|
126
|
+
return {
|
|
127
|
+
latex: {
|
|
128
|
+
"default": ''
|
|
129
|
+
},
|
|
130
|
+
wrapper: {
|
|
131
|
+
"default": null
|
|
132
|
+
},
|
|
133
|
+
html: {
|
|
134
|
+
"default": null
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
addProseMirrorPlugins: function addProseMirrorPlugins() {
|
|
139
|
+
return [EnsureTextAfterMathPlugin(this.name), ZeroWidthSpaceHandlingPlugin];
|
|
140
|
+
},
|
|
141
|
+
parseHTML: function parseHTML() {
|
|
142
|
+
return [{
|
|
143
|
+
tag: 'span[data-latex]',
|
|
144
|
+
getAttrs: function getAttrs(el) {
|
|
145
|
+
return {
|
|
146
|
+
latex: el.getAttribute('data-raw') || el.textContent
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
tag: 'span[data-type="mathml"]',
|
|
151
|
+
getAttrs: function getAttrs(el) {
|
|
152
|
+
return {
|
|
153
|
+
html: el.innerHTML
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}];
|
|
157
|
+
},
|
|
158
|
+
addCommands: function addCommands() {
|
|
159
|
+
var _this = this;
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
insertMath: function insertMath() {
|
|
163
|
+
var latex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
164
|
+
return function (_ref) {
|
|
165
|
+
var _node$type;
|
|
166
|
+
|
|
167
|
+
var tr = _ref.tr,
|
|
168
|
+
editor = _ref.editor,
|
|
169
|
+
dispatch = _ref.dispatch;
|
|
170
|
+
// 2) Now the editor.view.state reflects the insertion
|
|
171
|
+
var state = editor.view.state;
|
|
172
|
+
var node = state.schema.nodes.math.create({
|
|
173
|
+
latex: latex
|
|
174
|
+
});
|
|
175
|
+
var selection = state.selection; // The inserted node is typically just before the cursor
|
|
176
|
+
|
|
177
|
+
var pos = selection.$from.pos;
|
|
178
|
+
tr.insert(pos, node);
|
|
179
|
+
|
|
180
|
+
if ((node === null || node === void 0 ? void 0 : (_node$type = node.type) === null || _node$type === void 0 ? void 0 : _node$type.name) === _this.name) {
|
|
181
|
+
// Create a NodeSelection from the current doc
|
|
182
|
+
var sel = _prosemirrorState.NodeSelection.create(tr.doc, selection.$from.pos); // Build a fresh transaction from the current state and set the selection
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
tr.setSelection(sel);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
dispatch(tr);
|
|
189
|
+
return true;
|
|
190
|
+
};
|
|
191
|
+
} // insertMath: (latex = '') => ({ commands }) => {
|
|
192
|
+
// return commands.insertContent({
|
|
193
|
+
// type: this.name,
|
|
194
|
+
// attrs: { latex },
|
|
195
|
+
// });
|
|
196
|
+
// },
|
|
197
|
+
|
|
198
|
+
};
|
|
199
|
+
},
|
|
200
|
+
renderHTML: function renderHTML(_ref2) {
|
|
201
|
+
var HTMLAttributes = _ref2.HTMLAttributes;
|
|
202
|
+
|
|
203
|
+
if (HTMLAttributes.html) {
|
|
204
|
+
return ['span', {
|
|
205
|
+
'data-type': 'mathml',
|
|
206
|
+
dangerouslySetInnerHTML: {
|
|
207
|
+
__html: HTMLAttributes.html
|
|
208
|
+
}
|
|
209
|
+
}];
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return ['span', {
|
|
213
|
+
'data-latex': '',
|
|
214
|
+
'data-raw': HTMLAttributes.latex
|
|
215
|
+
}, (0, _mathRendering.wrapMath)(HTMLAttributes.latex, HTMLAttributes.wrapper)];
|
|
216
|
+
},
|
|
217
|
+
addNodeView: function addNodeView() {
|
|
218
|
+
var _this2 = this;
|
|
219
|
+
|
|
220
|
+
return (0, _react2.ReactNodeViewRenderer)(function (props) {
|
|
221
|
+
return /*#__PURE__*/_react["default"].createElement(MathNodeView, _objectSpread(_objectSpread({}, props), {}, {
|
|
222
|
+
options: _this2.options
|
|
223
|
+
}));
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
exports.MathNode = MathNode;
|
|
229
|
+
|
|
230
|
+
var MathNodeView = function MathNodeView(props) {
|
|
231
|
+
var node = props.node,
|
|
232
|
+
updateAttributes = props.updateAttributes,
|
|
233
|
+
editor = props.editor,
|
|
234
|
+
selected = props.selected,
|
|
235
|
+
options = props.options;
|
|
236
|
+
|
|
237
|
+
var _useState = (0, _react.useState)(selected),
|
|
238
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
239
|
+
showToolbar = _useState2[0],
|
|
240
|
+
setShowToolbar = _useState2[1];
|
|
241
|
+
|
|
242
|
+
var toolbarRef = (0, _react.useRef)(null);
|
|
243
|
+
var latex = node.attrs.latex || '';
|
|
244
|
+
(0, _react.useEffect)(function () {
|
|
245
|
+
if (selected) {
|
|
246
|
+
setShowToolbar(true);
|
|
247
|
+
}
|
|
248
|
+
}, [selected]);
|
|
249
|
+
(0, _react.useEffect)(function () {
|
|
250
|
+
editor._toolbarOpened = !!showToolbar;
|
|
251
|
+
}, [showToolbar]);
|
|
252
|
+
(0, _react.useEffect)(function () {
|
|
253
|
+
var handleClickOutside = function handleClickOutside(event) {
|
|
254
|
+
if (toolbarRef.current && !toolbarRef.current.contains(event.target) && !event.target.closest('[data-inline-node]')) {
|
|
255
|
+
setShowToolbar(false);
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
if (showToolbar) {
|
|
260
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
261
|
+
} else {
|
|
262
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return function () {
|
|
266
|
+
return document.removeEventListener('mousedown', handleClickOutside);
|
|
267
|
+
};
|
|
268
|
+
}, [showToolbar]);
|
|
269
|
+
|
|
270
|
+
var handleChange = function handleChange(newLatex) {
|
|
271
|
+
updateAttributes({
|
|
272
|
+
latex: newLatex
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
var handleDone = function handleDone(newLatex) {
|
|
277
|
+
updateAttributes({
|
|
278
|
+
latex: newLatex
|
|
279
|
+
});
|
|
280
|
+
setShowToolbar(false);
|
|
281
|
+
editor._toolbarOpened = false;
|
|
282
|
+
var _editor$state = editor.state,
|
|
283
|
+
selection = _editor$state.selection,
|
|
284
|
+
tr = _editor$state.tr,
|
|
285
|
+
doc = _editor$state.doc;
|
|
286
|
+
|
|
287
|
+
var sel = _prosemirrorState.TextSelection.create(doc, selection.from + 1); // Build a fresh transaction from the current state and set the selection
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
tr.setSelection(sel);
|
|
291
|
+
editor.view.dispatch(tr);
|
|
292
|
+
editor.commands.focus();
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
|
|
296
|
+
className: "math-node",
|
|
297
|
+
style: {
|
|
298
|
+
display: 'inline-flex',
|
|
299
|
+
cursor: 'pointer',
|
|
300
|
+
margin: '0 4px'
|
|
301
|
+
},
|
|
302
|
+
"data-selected": selected
|
|
303
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
304
|
+
onClick: function onClick() {
|
|
305
|
+
return setShowToolbar(true);
|
|
306
|
+
},
|
|
307
|
+
contentEditable: false
|
|
308
|
+
}, /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, {
|
|
309
|
+
latex: latex
|
|
310
|
+
})), showToolbar && /*#__PURE__*/_react["default"].createElement("div", {
|
|
311
|
+
ref: toolbarRef,
|
|
312
|
+
style: {
|
|
313
|
+
position: 'absolute',
|
|
314
|
+
top: '100%',
|
|
315
|
+
left: 0,
|
|
316
|
+
zIndex: 20,
|
|
317
|
+
background: 'var(--editable-html-toolbar-bg, #efefef)',
|
|
318
|
+
boxShadow: '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)'
|
|
319
|
+
}
|
|
320
|
+
}, /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
|
|
321
|
+
latex: latex,
|
|
322
|
+
autoFocus: true,
|
|
323
|
+
onChange: handleChange,
|
|
324
|
+
onDone: handleDone,
|
|
325
|
+
keypadMode: "basic"
|
|
326
|
+
})));
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
exports.MathNodeView = MathNodeView;
|
|
330
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL21hdGguanMiXSwibmFtZXMiOlsiZW5zdXJlVGV4dEFmdGVyTWF0aFBsdWdpbktleSIsIlBsdWdpbktleSIsIkVuc3VyZVRleHRBZnRlck1hdGhQbHVnaW4iLCJtYXRoTm9kZU5hbWUiLCJQbHVnaW4iLCJrZXkiLCJhcHBlbmRUcmFuc2FjdGlvbiIsInRyYW5zYWN0aW9ucyIsIm9sZFN0YXRlIiwibmV3U3RhdGUiLCJzb21lIiwidHIiLCJkb2NDaGFuZ2VkIiwiY2hhbmdlZCIsImRvYyIsImRlc2NlbmRhbnRzIiwibm9kZSIsInBvcyIsInR5cGUiLCJuYW1lIiwibmV4dFBvcyIsIm5vZGVTaXplIiwibmV4dE5vZGUiLCJub2RlQXQiLCJpbnNlcnQiLCJzY2hlbWEiLCJ0ZXh0IiwiWmVyb1dpZHRoU3BhY2VIYW5kbGluZ1BsdWdpbiIsInByb3BzIiwiaGFuZGxlS2V5RG93biIsInZpZXciLCJldmVudCIsInN0YXRlIiwiZGlzcGF0Y2giLCJzZWxlY3Rpb24iLCJmcm9tIiwiZW1wdHkiLCJwcmV2Q2hhciIsInRleHRCZXR3ZWVuIiwicG9zQmVmb3JlIiwicmVzb2x2ZWQiLCJyZXNvbHZlIiwibWF5YmVOb2RlIiwibm9kZUFmdGVyIiwibm9kZUJlZm9yZSIsIm5vZGVQb3MiLCJub2RlUmVzb2x2ZWQiLCJzZXRTZWxlY3Rpb24iLCJOb2RlU2VsZWN0aW9uIiwiY3JlYXRlIiwiVGV4dFNlbGVjdGlvbiIsIk1hdGhOb2RlIiwiTm9kZSIsImdyb3VwIiwiaW5saW5lIiwiYXRvbSIsImFkZEF0dHJpYnV0ZXMiLCJsYXRleCIsIndyYXBwZXIiLCJodG1sIiwiYWRkUHJvc2VNaXJyb3JQbHVnaW5zIiwicGFyc2VIVE1MIiwidGFnIiwiZ2V0QXR0cnMiLCJlbCIsImdldEF0dHJpYnV0ZSIsInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiYWRkQ29tbWFuZHMiLCJpbnNlcnRNYXRoIiwiZWRpdG9yIiwibm9kZXMiLCJtYXRoIiwiJGZyb20iLCJzZWwiLCJyZW5kZXJIVE1MIiwiSFRNTEF0dHJpYnV0ZXMiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImFkZE5vZGVWaWV3Iiwib3B0aW9ucyIsIk1hdGhOb2RlVmlldyIsInVwZGF0ZUF0dHJpYnV0ZXMiLCJzZWxlY3RlZCIsInNob3dUb29sYmFyIiwic2V0U2hvd1Rvb2xiYXIiLCJ0b29sYmFyUmVmIiwiYXR0cnMiLCJfdG9vbGJhck9wZW5lZCIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImNsb3Nlc3QiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlQ2hhbmdlIiwibmV3TGF0ZXgiLCJoYW5kbGVEb25lIiwiY29tbWFuZHMiLCJmb2N1cyIsImRpc3BsYXkiLCJjdXJzb3IiLCJtYXJnaW4iLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJ6SW5kZXgiLCJiYWNrZ3JvdW5kIiwiYm94U2hhZG93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQU1BLDRCQUE0QixHQUFHLElBQUlDLDJCQUFKLENBQWMscUJBQWQsQ0FBckM7O0FBRU8sSUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDQyxZQUFEO0FBQUEsU0FDdkMsSUFBSUMsd0JBQUosQ0FBVztBQUNUQyxJQUFBQSxHQUFHLEVBQUVMLDRCQURJO0FBRVRNLElBQUFBLGlCQUFpQixFQUFFLDJCQUFDQyxZQUFELEVBQWVDLFFBQWYsRUFBeUJDLFFBQXpCLEVBQXNDO0FBQ3ZEO0FBQ0EsVUFBSSxDQUFDRixZQUFZLENBQUNHLElBQWIsQ0FBa0IsVUFBQ0MsRUFBRDtBQUFBLGVBQVFBLEVBQUUsQ0FBQ0MsVUFBWDtBQUFBLE9BQWxCLENBQUwsRUFBK0MsT0FBTyxJQUFQO0FBRS9DLFVBQU1ELEVBQUUsR0FB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Q0FMUDtBQU1MQyxNQUFBQSxTQUFTLEVBQ1A7QUFQRztBQUZULGtCQVlFLGdDQUFDLHdCQUFEO0FBQWEsSUFBQSxLQUFLLEVBQUVyRCxLQUFwQjtBQUEyQixJQUFBLFNBQVMsTUFBcEM7QUFBcUMsSUFBQSxRQUFRLEVBQUV3QyxZQUEvQztBQUE2RCxJQUFBLE1BQU0sRUFBRUUsVUFBckU7QUFBaUYsSUFBQSxVQUFVLEVBQUM7QUFBNUYsSUFaRixDQWRKLENBREY7QUFnQ0QsQ0F4Rk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uLCBOb2RlLCBtZXJnZUF0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgTm9kZVZpZXdXcmFwcGVyLCBSZWFjdFJlbmRlcmVyLCBSZWFjdE5vZGVWaWV3UmVuZGVyZXIgfSBmcm9tICdAdGlwdGFwL3JlYWN0JztcbmltcG9ydCB7IFBsdWdpbiwgUGx1Z2luS2V5LCBOb2RlU2VsZWN0aW9uLCBUZXh0U2VsZWN0aW9uIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHsgTWF0aFByZXZpZXcsIE1hdGhUb29sYmFyIH0gZnJvbSAnQHBpZS1saWIvbWF0aC10b29sYmFyJztcbmltcG9ydCB7IHdyYXBNYXRoLCBtbWxUb0xhdGV4LCByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuXG5jb25zdCBlbnN1cmVUZXh0QWZ0ZXJNYXRoUGx1Z2luS2V5ID0gbmV3IFBsdWdpbktleSgnZW5zdXJlVGV4dEFmdGVyTWF0aCcpO1xuXG5leHBvcnQgY29uc3QgRW5zdXJlVGV4dEFmdGVyTWF0aFBsdWdpbiA9IChtYXRoTm9kZU5hbWUpID0+XG4gIG5ldyBQbHVnaW4oe1xuICAgIGtleTogZW5zdXJlVGV4dEFmdGVyTWF0aFBsdWdpbktleSxcbiAgICBhcHBlbmRUcmFuc2FjdGlvbjogKHRyYW5zYWN0aW9ucywgb2xkU3RhdGUsIG5ld1N0YXRlKSA9PiB7XG4gICAgICAvLyBPbmx5IGFjdCB3aGVuIHRoZSBkb2MgYWN0dWFsbHkgY2hhbmdlZFxuICAgICAgaWYgKCF0cmFuc2FjdGlvbnMuc29tZSgodHIpID0+IHRyLmRvY0NoYW5nZWQpKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgdHIgPSBuZXdTdGF0ZS50cjtcbiAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgIG5ld1N0YXRlLmRvYy5kZXNjZW5kYW50cygobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgIGlmIChub2RlLnR5cGUubmFtZSA9PT0gbWF0aE5vZGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHBvcyArIG5vZGUubm9kZVNpemU7XG4gICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBuZXdTdGF0ZS5kb2Mubm9kZUF0KG5leHRQb3MpO1xuXG4gICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBub2RlIGFmdGVyLCBvciB0aGUgbmV4dCBub2RlIGlzbid0IHRleHQsIGluc2VydCBhIHNwYWNlXG4gICAgICAgICAgaWYgKCFuZXh0Tm9kZSB8fCBuZXh0Tm9kZS50eXBlLm5hbWUgIT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgdHIuaW5zZXJ0KG5leHRQb3MsIG5ld1N0YXRlLnNjaGVtYS50ZXh0KCdcXHUyMDBiJykpO1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNoYW5nZWQgPyB0ciA6IG51bGw7XG4gICAgfSxcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBaZXJvV2lkdGhTcGFjZUhhbmRsaW5nUGx1Z2luID0gbmV3IFBsdWdpbih7XG4gIGtleTogbmV3IFBsdWdpbktleSgnemVyb1dpZHRoU3BhY2VIYW5kbGluZycpLFxuICBwcm9wczoge1xuICAgIGhhbmRsZUtleURvd24odmlldywgZXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgc3RhdGUsIGRpc3BhdGNoIH0gPSB2aWV3O1xuICAgICAgY29uc3QgeyBzZWxlY3Rpb24sIGRvYyB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7IGZyb20sIGVtcHR5IH0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmIChlbXB0eSAmJiBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmIGZyb20gPiAwKSB7XG4gICAgICAgIGNvbnN0IHByZXZDaGFyID0gZG9jLnRleHRCZXR3ZWVuKGZyb20gLSAxLCBmcm9tLCAnXFx1RkZGQycsICdcXHVGRkZDJyk7XG4gICAgICAgIGlmIChwcmV2Q2hhciA9PT0gJ1xcdTIwMGInKSB7XG4gICAgICAgICAgY29uc3QgdHIgPSBzdGF0ZS50ci5kZWxldGUoZnJvbSAtIDIsIGZyb20pO1xuICAgICAgICAgIGRpc3BhdGNoKHRyKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gaGFuZGxlZFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbXB0eSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnICYmIGZyb20gPiAwKSB7XG4gICAgICAgIGNvbnN0IHByZXZDaGFyID0gZG9jLnRleHRCZXR3ZWVuKGZyb20gLSAxLCBmcm9tLCAnXFx1RkZGQycsICdcXHVGRkZDJyk7XG4gICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgdGhlIHplcm8td2lkdGggc3BhY2UuLi5cbiAgICAgICAgaWYgKHByZXZDaGFyID09PSAnXFx1MjAwYicpIHtcbiAgICAgICAgICBjb25zdCBwb3NCZWZvcmUgPSBmcm9tIC0gMTtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHN0YXRlLmRvYy5yZXNvbHZlKHBvc0JlZm9yZSAtIDEpOyAvLyBsb29rIGp1c3QgYmVmb3JlIHRoZSB6d3NwXG4gICAgICAgICAgY29uc3QgbWF5YmVOb2RlID0gcmVzb2x2ZWQubm9kZUFmdGVyIHx8IHJlc29sdmVkLm5vZGVCZWZvcmU7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGlubGluZSBzZWxlY3RhYmxlIG5vZGUgKGUuZy4sIHlvdXIgbWF0aCBub2RlKVxuICAgICAgICAgIGlmIChtYXliZU5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVQb3MgPSBwb3NCZWZvcmUgLSBtYXliZU5vZGUubm9kZVNpemU7XG4gICAgICAgICAgICBjb25zdCBub2RlUmVzb2x2ZWQgPSBzdGF0ZS5kb2MucmVzb2x2ZShub2RlUG9zKTtcbiAgICAgICAgICAgIGNvbnN0IHRyID0gc3RhdGUudHIuc2V0U2VsZWN0aW9uKE5vZGVTZWxlY3Rpb24uY3JlYXRlKHN0YXRlLmRvYywgbm9kZVJlc29sdmVkLnBvcykpO1xuICAgICAgICAgICAgZGlzcGF0Y2godHIpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEp1c3QgbW92ZSB0aGUgdGV4dCBjdXJzb3IgYmVmb3JlIHRoZSB6d3NwXG4gICAgICAgICAgICBjb25zdCB0ciA9IHN0YXRlLnRyLnNldFNlbGVjdGlvbihUZXh0U2VsZWN0aW9uLmNyZWF0ZShzdGF0ZS5kb2MsIGZyb20gLSAyKSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh0cik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IE1hdGhOb2RlID0gTm9kZS5jcmVhdGUoe1xuICBuYW1lOiAnbWF0aCcsXG4gIGdyb3VwOiAnaW5saW5lJyxcbiAgaW5saW5lOiB0cnVlLFxuICBhdG9tOiB0cnVlLFxuXG4gIGFkZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdGV4OiB7IGRlZmF1bHQ6ICcnIH0sXG4gICAgICB3cmFwcGVyOiB7IGRlZmF1bHQ6IG51bGwgfSxcbiAgICAgIGh0bWw6IHsgZGVmYXVsdDogbnVsbCB9LFxuICAgIH07XG4gIH0sXG5cbiAgYWRkUHJvc2VNaXJyb3JQbHVnaW5zKCkge1xuICAgIHJldHVybiBbRW5zdXJlVGV4dEFmdGVyTWF0aFBsdWdpbih0aGlzLm5hbWUpLCBaZXJvV2lkdGhTcGFjZUhhbmRsaW5nUGx1Z2luXTtcbiAgfSxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGFnOiAnc3BhbltkYXRhLWxhdGV4XScsXG4gICAgICAgIGdldEF0dHJzOiAoZWwpID0+ICh7XG4gICAgICAgICAgbGF0ZXg6IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yYXcnKSB8fCBlbC50ZXh0Q29udGVudCxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0YWc6ICdzcGFuW2RhdGEtdHlwZT1cIm1hdGhtbFwiXScsXG4gICAgICAgIGdldEF0dHJzOiAoZWwpID0+ICh7XG4gICAgICAgICAgaHRtbDogZWwuaW5uZXJIVE1MLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zZXJ0TWF0aDogKGxhdGV4ID0gJycpID0+ICh7IHRyLCBlZGl0b3IsIGRpc3BhdGNoIH0pID0+IHtcbiAgICAgICAgLy8gMikgTm93IHRoZSBlZGl0b3Iudmlldy5zdGF0ZSByZWZsZWN0cyB0aGUgaW5zZXJ0aW9uXG4gICAgICAgIGNvbnN0IHsgc3RhdGUgfSA9IGVkaXRvci52aWV3O1xuICAgICAgICBjb25zdCBub2RlID0gc3RhdGUuc2NoZW1hLm5vZGVzLm1hdGguY3JlYXRlKHtcbiAgICAgICAgICBsYXRleCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBzdGF0ZTtcblxuICAgICAgICAvLyBUaGUgaW5zZXJ0ZWQgbm9kZSBpcyB0eXBpY2FsbHkganVzdCBiZWZvcmUgdGhlIGN1cnNvclxuICAgICAgICBjb25zdCBwb3MgPSBzZWxlY3Rpb24uJGZyb20ucG9zO1xuXG4gICAgICAgIHRyLmluc2VydChwb3MsIG5vZGUpO1xuXG4gICAgICAgIGlmIChub2RlPy50eXBlPy5uYW1lID09PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBOb2RlU2VsZWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgZG9jXG4gICAgICAgICAgY29uc3Qgc2VsID0gTm9kZVNlbGVjdGlvbi5jcmVhdGUodHIuZG9jLCBzZWxlY3Rpb24uJGZyb20ucG9zKTtcblxuICAgICAgICAgIC8vIEJ1aWxkIGEgZnJlc2ggdHJhbnNhY3Rpb24gZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgc2V0IHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICB0ci5zZXRTZWxlY3Rpb24oc2VsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BhdGNoKHRyKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBpbnNlcnRNYXRoOiAobGF0ZXggPSAnJykgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgLy8gICByZXR1cm4gY29tbWFuZHMuaW5zZXJ0Q29udGVudCh7XG4gICAgICAvLyAgICAgdHlwZTogdGhpcy5uYW1lLFxuICAgICAgLy8gICAgIGF0dHJzOiB7IGxhdGV4IH0sXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gfSxcbiAgICB9O1xuICB9LFxuXG4gIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XG4gICAgaWYgKEhUTUxBdHRyaWJ1dGVzLmh0bWwpIHtcbiAgICAgIHJldHVybiBbJ3NwYW4nLCB7ICdkYXRhLXR5cGUnOiAnbWF0aG1sJywgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBIVE1MQXR0cmlidXRlcy5odG1sIH0gfV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICdzcGFuJyxcbiAgICAgIHsgJ2RhdGEtbGF0ZXgnOiAnJywgJ2RhdGEtcmF3JzogSFRNTEF0dHJpYnV0ZXMubGF0ZXggfSxcbiAgICAgIHdyYXBNYXRoKEhUTUxBdHRyaWJ1dGVzLmxhdGV4LCBIVE1MQXR0cmlidXRlcy53cmFwcGVyKSxcbiAgICBdO1xuICB9LFxuXG4gIGFkZE5vZGVWaWV3KCkge1xuICAgIHJldHVybiBSZWFjdE5vZGVWaWV3UmVuZGVyZXIoKHByb3BzKSA9PiA8TWF0aE5vZGVWaWV3IHsuLi57IC4uLnByb3BzLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMgfX0gLz4pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBNYXRoTm9kZVZpZXcgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBub2RlLCB1cGRhdGVBdHRyaWJ1dGVzLCBlZGl0b3IsIHNlbGVjdGVkLCBvcHRpb25zIH0gPSBwcm9wcztcbiAgY29uc3QgW3Nob3dUb29sYmFyLCBzZXRTaG93VG9vbGJhcl0gPSB1c2VTdGF0ZShzZWxlY3RlZCk7XG4gIGNvbnN0IHRvb2xiYXJSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgY29uc3QgbGF0ZXggPSBub2RlLmF0dHJzLmxhdGV4IHx8ICcnO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBzZXRTaG93VG9vbGJhcih0cnVlKTtcbiAgICB9XG4gIH0sIFtzZWxlY3RlZF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZWRpdG9yLl90b29sYmFyT3BlbmVkID0gISFzaG93VG9vbGJhcjtcbiAgfSwgW3Nob3dUb29sYmFyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdG9vbGJhclJlZi5jdXJyZW50ICYmXG4gICAgICAgICF0b29sYmFyUmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAhZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWlubGluZS1ub2RlXScpXG4gICAgICApIHtcbiAgICAgICAgc2V0U2hvd1Rvb2xiYXIoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc2hvd1Rvb2xiYXIpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtzaG93VG9vbGJhcl0pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChuZXdMYXRleCkgPT4ge1xuICAgIHVwZGF0ZUF0dHJpYnV0ZXMoeyBsYXRleDogbmV3TGF0ZXggfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRG9uZSA9IChuZXdMYXRleCkgPT4ge1xuICAgIHVwZGF0ZUF0dHJpYnV0ZXMoeyBsYXRleDogbmV3TGF0ZXggfSk7XG4gICAgc2V0U2hvd1Rvb2xiYXIoZmFsc2UpO1xuXG4gICAgZWRpdG9yLl90b29sYmFyT3BlbmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IHNlbGVjdGlvbiwgdHIsIGRvYyB9ID0gZWRpdG9yLnN0YXRlO1xuICAgIGNvbnN0IHNlbCA9IFRleHRTZWxlY3Rpb24uY3JlYXRlKGRvYywgc2VsZWN0aW9uLmZyb20gKyAxKTtcblxuICAgIC8vIEJ1aWxkIGEgZnJlc2ggdHJhbnNhY3Rpb24gZnJvbSB0aGUgY3VycmVudCBzdGF0ZSBhbmQgc2V0IHRoZSBzZWxlY3Rpb25cbiAgICB0ci5zZXRTZWxlY3Rpb24oc2VsKTtcbiAgICBlZGl0b3Iudmlldy5kaXNwYXRjaCh0cik7XG4gICAgZWRpdG9yLmNvbW1hbmRzLmZvY3VzKCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Tm9kZVZpZXdXcmFwcGVyXG4gICAgICBjbGFzc05hbWU9XCJtYXRoLW5vZGVcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgIG1hcmdpbjogJzAgNHB4JyxcbiAgICAgIH19XG4gICAgICBkYXRhLXNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICA+XG4gICAgICA8ZGl2IG9uQ2xpY2s9eygpID0+IHNldFNob3dUb29sYmFyKHRydWUpfSBjb250ZW50RWRpdGFibGU9e2ZhbHNlfT5cbiAgICAgICAgPE1hdGhQcmV2aWV3IGxhdGV4PXtsYXRleH0gLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7c2hvd1Rvb2xiYXIgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXt0b29sYmFyUmVmfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHpJbmRleDogMjAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZWRpdGFibGUtaHRtbC10b29sYmFyLWJnLCAjZWZlZmVmKScsXG4gICAgICAgICAgICBib3hTaGFkb3c6XG4gICAgICAgICAgICAgICcwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPE1hdGhUb29sYmFyIGxhdGV4PXtsYXRleH0gYXV0b0ZvY3VzIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IG9uRG9uZT17aGFuZGxlRG9uZX0ga2V5cGFkTW9kZT1cImJhc2ljXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvTm9kZVZpZXdXcmFwcGVyPlxuICApO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.Media = void 0;
|
|
11
|
+
exports["default"] = MediaNodeView;
|
|
12
|
+
exports.insertDialog = void 0;
|
|
13
|
+
|
|
14
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
15
|
+
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
|
+
|
|
18
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
+
|
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
+
|
|
22
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
23
|
+
|
|
24
|
+
var _core = require("@tiptap/core");
|
|
25
|
+
|
|
26
|
+
var _react2 = require("@tiptap/react");
|
|
27
|
+
|
|
28
|
+
var _mediaDialog = _interopRequireDefault(require("../plugins/media/media-dialog"));
|
|
29
|
+
|
|
30
|
+
var _mediaToolbar = _interopRequireDefault(require("../plugins/media/media-toolbar"));
|
|
31
|
+
|
|
32
|
+
var _excluded = ["type", "callback", "options"];
|
|
33
|
+
|
|
34
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
|
+
|
|
36
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
37
|
+
|
|
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 Media = _core.Node.create({
|
|
43
|
+
name: 'media',
|
|
44
|
+
group: 'inline',
|
|
45
|
+
inline: true,
|
|
46
|
+
atom: true,
|
|
47
|
+
addAttributes: function addAttributes() {
|
|
48
|
+
return {
|
|
49
|
+
type: {
|
|
50
|
+
"default": 'video'
|
|
51
|
+
},
|
|
52
|
+
src: {
|
|
53
|
+
"default": null
|
|
54
|
+
},
|
|
55
|
+
width: {
|
|
56
|
+
"default": null
|
|
57
|
+
},
|
|
58
|
+
height: {
|
|
59
|
+
"default": null
|
|
60
|
+
},
|
|
61
|
+
title: {
|
|
62
|
+
"default": null
|
|
63
|
+
},
|
|
64
|
+
starts: {
|
|
65
|
+
"default": null
|
|
66
|
+
},
|
|
67
|
+
ends: {
|
|
68
|
+
"default": null
|
|
69
|
+
},
|
|
70
|
+
editing: {
|
|
71
|
+
"default": false
|
|
72
|
+
},
|
|
73
|
+
tag: {
|
|
74
|
+
"default": 'iframe'
|
|
75
|
+
},
|
|
76
|
+
// 'iframe' or 'audio'
|
|
77
|
+
url: {
|
|
78
|
+
"default": null
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
parseHTML: function parseHTML() {
|
|
83
|
+
return [{
|
|
84
|
+
tag: 'iframe[data-type="video"]',
|
|
85
|
+
getAttrs: function getAttrs(el) {
|
|
86
|
+
return {
|
|
87
|
+
type: 'video',
|
|
88
|
+
tag: 'iframe',
|
|
89
|
+
src: el.getAttribute('src'),
|
|
90
|
+
width: el.getAttribute('width'),
|
|
91
|
+
height: el.getAttribute('height'),
|
|
92
|
+
title: el.dataset.title,
|
|
93
|
+
starts: el.dataset.starts,
|
|
94
|
+
ends: el.dataset.ends,
|
|
95
|
+
url: el.dataset.url
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}, {
|
|
99
|
+
tag: 'audio',
|
|
100
|
+
getAttrs: function getAttrs(el) {
|
|
101
|
+
var _el$querySelector;
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
type: 'audio',
|
|
105
|
+
tag: 'audio',
|
|
106
|
+
src: (_el$querySelector = el.querySelector('source')) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.getAttribute('src')
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}];
|
|
110
|
+
},
|
|
111
|
+
renderHTML: function renderHTML(_ref) {
|
|
112
|
+
var HTMLAttributes = _ref.HTMLAttributes;
|
|
113
|
+
var tag = HTMLAttributes.tag,
|
|
114
|
+
src = HTMLAttributes.src,
|
|
115
|
+
width = HTMLAttributes.width,
|
|
116
|
+
height = HTMLAttributes.height;
|
|
117
|
+
|
|
118
|
+
if (tag === 'audio') {
|
|
119
|
+
return ['audio', {
|
|
120
|
+
controls: 'controls',
|
|
121
|
+
controlsList: 'nodownload'
|
|
122
|
+
}, ['source', {
|
|
123
|
+
src: src,
|
|
124
|
+
type: 'audio/mp3'
|
|
125
|
+
}]];
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return ['iframe', (0, _core.mergeAttributes)({
|
|
129
|
+
'data-type': 'video',
|
|
130
|
+
frameborder: '0',
|
|
131
|
+
allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',
|
|
132
|
+
allowfullscreen: '',
|
|
133
|
+
src: src
|
|
134
|
+
}, width ? {
|
|
135
|
+
width: width
|
|
136
|
+
} : {}, height ? {
|
|
137
|
+
height: height
|
|
138
|
+
} : {})];
|
|
139
|
+
},
|
|
140
|
+
addCommands: function addCommands() {
|
|
141
|
+
var _this = this;
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
insertMedia: function insertMedia(attrs) {
|
|
145
|
+
return function (_ref2) {
|
|
146
|
+
var commands = _ref2.commands;
|
|
147
|
+
return commands.insertContent({
|
|
148
|
+
type: _this.name,
|
|
149
|
+
attrs: attrs
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
updateMedia: function updateMedia(attrs) {
|
|
154
|
+
return function (_ref3) {
|
|
155
|
+
var commands = _ref3.commands;
|
|
156
|
+
return commands.updateAttributes(_this.name, attrs);
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
},
|
|
161
|
+
addNodeView: function addNodeView() {
|
|
162
|
+
var _this2 = this;
|
|
163
|
+
|
|
164
|
+
return (0, _react2.ReactNodeViewRenderer)(function (props) {
|
|
165
|
+
return /*#__PURE__*/_react["default"].createElement(MediaNodeView, _objectSpread(_objectSpread({}, props), {}, {
|
|
166
|
+
options: _this2.options
|
|
167
|
+
}));
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
exports.Media = Media;
|
|
173
|
+
|
|
174
|
+
var removeDialogs = function removeDialogs() {
|
|
175
|
+
var prevDialogs = document.querySelectorAll('.insert-media-dialog');
|
|
176
|
+
prevDialogs.forEach(function (s) {
|
|
177
|
+
return s.remove();
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
var insertDialog = function insertDialog(props) {
|
|
182
|
+
var newEl = document.createElement('div');
|
|
183
|
+
var type = props.type,
|
|
184
|
+
callback = props.callback,
|
|
185
|
+
options = props.options,
|
|
186
|
+
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
187
|
+
var initialBodyOverflow = document.body.style.overflow;
|
|
188
|
+
removeDialogs();
|
|
189
|
+
newEl.className = 'insert-media-dialog';
|
|
190
|
+
document.body.style.overflow = 'hidden';
|
|
191
|
+
|
|
192
|
+
var handleClose = function handleClose(val, data) {
|
|
193
|
+
callback(val, data);
|
|
194
|
+
newEl.remove();
|
|
195
|
+
document.body.style.overflow = initialBodyOverflow;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
var el = /*#__PURE__*/_react["default"].createElement(_mediaDialog["default"], (0, _extends2["default"])({}, rest, {
|
|
199
|
+
uploadSoundSupport: options.uploadSoundSupport,
|
|
200
|
+
type: type,
|
|
201
|
+
disablePortal: true,
|
|
202
|
+
open: true,
|
|
203
|
+
handleClose: handleClose
|
|
204
|
+
}));
|
|
205
|
+
|
|
206
|
+
_reactDom["default"].render(el, newEl);
|
|
207
|
+
|
|
208
|
+
document.body.appendChild(newEl);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
exports.insertDialog = insertDialog;
|
|
212
|
+
|
|
213
|
+
function MediaNodeView(_ref4) {
|
|
214
|
+
var editor = _ref4.editor,
|
|
215
|
+
node = _ref4.node,
|
|
216
|
+
updateAttributes = _ref4.updateAttributes,
|
|
217
|
+
deleteNode = _ref4.deleteNode,
|
|
218
|
+
options = _ref4.options;
|
|
219
|
+
var _node$attrs = node.attrs,
|
|
220
|
+
type = _node$attrs.type,
|
|
221
|
+
src = _node$attrs.src,
|
|
222
|
+
width = _node$attrs.width,
|
|
223
|
+
height = _node$attrs.height,
|
|
224
|
+
tag = _node$attrs.tag;
|
|
225
|
+
|
|
226
|
+
var handleEdit = function handleEdit() {
|
|
227
|
+
insertDialog(_objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
228
|
+
edit: true,
|
|
229
|
+
callback: function callback(val, data) {
|
|
230
|
+
if (val) {
|
|
231
|
+
updateAttributes(data);
|
|
232
|
+
} else {
|
|
233
|
+
deleteNode();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
editor.chain().focus().run();
|
|
237
|
+
}
|
|
238
|
+
}));
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
(0, _react.useEffect)(function () {
|
|
242
|
+
insertDialog(_objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
243
|
+
options: options,
|
|
244
|
+
edit: true,
|
|
245
|
+
callback: function callback(val, data) {
|
|
246
|
+
if (val) {
|
|
247
|
+
updateAttributes(data);
|
|
248
|
+
} else {
|
|
249
|
+
deleteNode();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
editor.chain().focus().run();
|
|
253
|
+
}
|
|
254
|
+
}));
|
|
255
|
+
}, []);
|
|
256
|
+
return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
|
|
257
|
+
"data-type": type,
|
|
258
|
+
style: {
|
|
259
|
+
width: width,
|
|
260
|
+
height: height
|
|
261
|
+
}
|
|
262
|
+
}, tag === 'audio' ? /*#__PURE__*/_react["default"].createElement("audio", {
|
|
263
|
+
controls: true,
|
|
264
|
+
controlsList: "nodownload"
|
|
265
|
+
}, /*#__PURE__*/_react["default"].createElement("source", {
|
|
266
|
+
src: src
|
|
267
|
+
})) : /*#__PURE__*/_react["default"].createElement("iframe", {
|
|
268
|
+
src: src,
|
|
269
|
+
allowFullScreen: true,
|
|
270
|
+
frameBorder: "0"
|
|
271
|
+
}), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
|
|
272
|
+
onEdit: handleEdit,
|
|
273
|
+
onRemove: deleteNode
|
|
274
|
+
}));
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL21lZGlhLmpzIl0sIm5hbWVzIjpbIk1lZGlhIiwiTm9kZSIsImNyZWF0ZSIsIm5hbWUiLCJncm91cCIsImlubGluZSIsImF0b20iLCJhZGRBdHRyaWJ1dGVzIiwidHlwZSIsInNyYyIsIndpZHRoIiwiaGVpZ2h0IiwidGl0bGUiLCJzdGFydHMiLCJlbmRzIiwiZWRpdGluZyIsInRhZyIsInVybCIsInBhcnNlSFRNTCIsImdldEF0dHJzIiwiZWwiLCJnZXRBdHRyaWJ1dGUiLCJkYXRhc2V0IiwicXVlcnlTZWxlY3RvciIsInJlbmRlckhUTUwiLCJIVE1MQXR0cmlidXRlcyIsImNvbnRyb2xzIiwiY29udHJvbHNMaXN0IiwiZnJhbWVib3JkZXIiLCJhbGxvdyIsImFsbG93ZnVsbHNjcmVlbiIsImFkZENvbW1hbmRzIiwiaW5zZXJ0TWVkaWEiLCJhdHRycyIsImNvbW1hbmRzIiwiaW5zZXJ0Q29udGVudCIsInVwZGF0ZU1lZGlhIiwidXBkYXRlQXR0cmlidXRlcyIsImFkZE5vZGVWaWV3IiwicHJvcHMiLCJvcHRpb25zIiwicmVtb3ZlRGlhbG9ncyIsInByZXZEaWFsb2dzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsInMiLCJyZW1vdmUiLCJpbnNlcnREaWFsb2ciLCJuZXdFbCIsImNyZWF0ZUVsZW1lbnQiLCJjYWxsYmFjayIsInJlc3QiLCJpbml0aWFsQm9keU92ZXJmbG93IiwiYm9keSIsInN0eWxlIiwib3ZlcmZsb3ciLCJjbGFzc05hbWUiLCJoYW5kbGVDbG9zZSIsInZhbCIsImRhdGEiLCJ1cGxvYWRTb3VuZFN1cHBvcnQiLCJSZWFjdERPTSIsInJlbmRlciIsImFwcGVuZENoaWxkIiwiTWVkaWFOb2RlVmlldyIsImVkaXRvciIsIm5vZGUiLCJkZWxldGVOb2RlIiwiaGFuZGxlRWRpdCIsImVkaXQiLCJjaGFpbiIsImZvY3VzIiwicnVuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7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LElBQUEsR0FBRyxFQUFFQSxHQUFiO0FBQWtCLElBQUEsZUFBZSxNQUFqQztBQUFrQyxJQUFBLFdBQVcsRUFBQztBQUE5QyxJQU5KLGVBU0UsZ0NBQUMsd0JBQUQ7QUFBYyxJQUFBLE1BQU0sRUFBRTRELFVBQXRCO0FBQWtDLElBQUEsUUFBUSxFQUFFRDtBQUE1QyxJQVRGLENBREY7QUFhRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IG1lcmdlQXR0cmlidXRlcywgTm9kZSB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBOb2RlVmlld1dyYXBwZXIsIFJlYWN0Tm9kZVZpZXdSZW5kZXJlciB9IGZyb20gJ0B0aXB0YXAvcmVhY3QnO1xuaW1wb3J0IE1lZGlhRGlhbG9nIGZyb20gJy4uL3BsdWdpbnMvbWVkaWEvbWVkaWEtZGlhbG9nJztcbmltcG9ydCBNZWRpYVRvb2xiYXIgZnJvbSAnLi4vcGx1Z2lucy9tZWRpYS9tZWRpYS10b29sYmFyJztcblxuZXhwb3J0IGNvbnN0IE1lZGlhID0gTm9kZS5jcmVhdGUoe1xuICBuYW1lOiAnbWVkaWEnLFxuICBncm91cDogJ2lubGluZScsXG4gIGlubGluZTogdHJ1ZSxcbiAgYXRvbTogdHJ1ZSxcblxuICBhZGRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB7IGRlZmF1bHQ6ICd2aWRlbycgfSxcbiAgICAgIHNyYzogeyBkZWZhdWx0OiBudWxsIH0sXG4gICAgICB3aWR0aDogeyBkZWZhdWx0OiBudWxsIH0sXG4gICAgICBoZWlnaHQ6IHsgZGVmYXVsdDogbnVsbCB9LFxuICAgICAgdGl0bGU6IHsgZGVmYXVsdDogbnVsbCB9LFxuICAgICAgc3RhcnRzOiB7IGRlZmF1bHQ6IG51bGwgfSxcbiAgICAgIGVuZHM6IHsgZGVmYXVsdDogbnVsbCB9LFxuICAgICAgZWRpdGluZzogeyBkZWZhdWx0OiBmYWxzZSB9LFxuICAgICAgdGFnOiB7IGRlZmF1bHQ6ICdpZnJhbWUnIH0sIC8vICdpZnJhbWUnIG9yICdhdWRpbydcbiAgICAgIHVybDogeyBkZWZhdWx0OiBudWxsIH0sXG4gICAgfTtcbiAgfSxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGFnOiAnaWZyYW1lW2RhdGEtdHlwZT1cInZpZGVvXCJdJyxcbiAgICAgICAgZ2V0QXR0cnM6IChlbCkgPT4gKHtcbiAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgIHRhZzogJ2lmcmFtZScsXG4gICAgICAgICAgc3JjOiBlbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgICAgIHdpZHRoOiBlbC5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksXG4gICAgICAgICAgaGVpZ2h0OiBlbC5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpLFxuICAgICAgICAgIHRpdGxlOiBlbC5kYXRhc2V0LnRpdGxlLFxuICAgICAgICAgIHN0YXJ0czogZWwuZGF0YXNldC5zdGFydHMsXG4gICAgICAgICAgZW5kczogZWwuZGF0YXNldC5lbmRzLFxuICAgICAgICAgIHVybDogZWwuZGF0YXNldC51cmwsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGFnOiAnYXVkaW8nLFxuICAgICAgICBnZXRBdHRyczogKGVsKSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICdhdWRpbycsXG4gICAgICAgICAgdGFnOiAnYXVkaW8nLFxuICAgICAgICAgIHNyYzogZWwucXVlcnlTZWxlY3Rvcignc291cmNlJyk/LmdldEF0dHJpYnV0ZSgnc3JjJyksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICBdO1xuICB9LFxuXG4gIHJlbmRlckhUTUwoeyBIVE1MQXR0cmlidXRlcyB9KSB7XG4gICAgY29uc3QgeyB0YWcsIHNyYywgd2lkdGgsIGhlaWdodCB9ID0gSFRNTEF0dHJpYnV0ZXM7XG5cbiAgICBpZiAodGFnID09PSAnYXVkaW8nKSB7XG4gICAgICByZXR1cm4gWydhdWRpbycsIHsgY29udHJvbHM6ICdjb250cm9scycsIGNvbnRyb2xzTGlzdDogJ25vZG93bmxvYWQnIH0sIFsnc291cmNlJywgeyBzcmMsIHR5cGU6ICdhdWRpby9tcDMnIH1dXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgJ2lmcmFtZScsXG4gICAgICBtZXJnZUF0dHJpYnV0ZXMoXG4gICAgICAgIHtcbiAgICAgICAgICAnZGF0YS10eXBlJzogJ3ZpZGVvJyxcbiAgICAgICAgICBmcmFtZWJvcmRlcjogJzAnLFxuICAgICAgICAgIGFsbG93OiAnYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZScsXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuOiAnJyxcbiAgICAgICAgICBzcmMsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoID8geyB3aWR0aCB9IDoge30sXG4gICAgICAgIGhlaWdodCA/IHsgaGVpZ2h0IH0gOiB7fSxcbiAgICAgICksXG4gICAgXTtcbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zZXJ0TWVkaWE6IChhdHRycykgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZHMuaW5zZXJ0Q29udGVudCh7IHR5cGU6IHRoaXMubmFtZSwgYXR0cnMgfSk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlTWVkaWE6IChhdHRycykgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZHMudXBkYXRlQXR0cmlidXRlcyh0aGlzLm5hbWUsIGF0dHJzKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcblxuICBhZGROb2RlVmlldygpIHtcbiAgICByZXR1cm4gUmVhY3ROb2RlVmlld1JlbmRlcmVyKChwcm9wcykgPT4gPE1lZGlhTm9kZVZpZXcgey4uLnsgLi4ucHJvcHMsIG9wdGlvbnM6IHRoaXMub3B0aW9ucyB9fSAvPik7XG4gIH0sXG59KTtcblxuY29uc3QgcmVtb3ZlRGlhbG9ncyA9ICgpID0+IHtcbiAgY29uc3QgcHJldkRpYWxvZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zZXJ0LW1lZGlhLWRpYWxvZycpO1xuXG4gIHByZXZEaWFsb2dzLmZvckVhY2goKHMpID0+IHMucmVtb3ZlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydERpYWxvZyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBuZXdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb25zdCB7IHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3QgaW5pdGlhbEJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG5cbiAgcmVtb3ZlRGlhbG9ncygpO1xuXG4gIG5ld0VsLmNsYXNzTmFtZSA9ICdpbnNlcnQtbWVkaWEtZGlhbG9nJztcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHZhbCwgZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbCwgZGF0YSk7XG4gICAgbmV3RWwucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IGluaXRpYWxCb2R5T3ZlcmZsb3c7XG4gIH07XG5cbiAgY29uc3QgZWwgPSAoXG4gICAgPE1lZGlhRGlhbG9nXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17b3B0aW9ucy51cGxvYWRTb3VuZFN1cHBvcnR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGlzYWJsZVBvcnRhbD17dHJ1ZX1cbiAgICAgIG9wZW49e3RydWV9XG4gICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgLz5cbiAgKTtcblxuICBSZWFjdERPTS5yZW5kZXIoZWwsIG5ld0VsKTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld0VsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lZGlhTm9kZVZpZXcoeyBlZGl0b3IsIG5vZGUsIHVwZGF0ZUF0dHJpYnV0ZXMsIGRlbGV0ZU5vZGUsIG9wdGlvbnMgfSkge1xuICBjb25zdCB7IHR5cGUsIHNyYywgd2lkdGgsIGhlaWdodCwgdGFnIH0gPSBub2RlLmF0dHJzO1xuXG4gIGNvbnN0IGhhbmRsZUVkaXQgPSAoKSA9PiB7XG4gICAgaW5zZXJ0RGlhbG9nKHtcbiAgICAgIC4uLm5vZGUuYXR0cnMsXG4gICAgICBlZGl0OiB0cnVlLFxuICAgICAgY2FsbGJhY2s6ICh2YWwsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlTm9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5ydW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbnNlcnREaWFsb2coe1xuICAgICAgLi4ubm9kZS5hdHRycyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBlZGl0OiB0cnVlLFxuICAgICAgY2FsbGJhY2s6ICh2YWwsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlTm9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5ydW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxOb2RlVmlld1dyYXBwZXIgZGF0YS10eXBlPXt0eXBlfSBzdHlsZT17eyB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAge3RhZyA9PT0gJ2F1ZGlvJyA/IChcbiAgICAgICAgPGF1ZGlvIGNvbnRyb2xzIGNvbnRyb2xzTGlzdD1cIm5vZG93bmxvYWRcIj5cbiAgICAgICAgICA8c291cmNlIHNyYz17c3JjfSAvPlxuICAgICAgICA8L2F1ZGlvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGlmcmFtZSBzcmM9e3NyY30gYWxsb3dGdWxsU2NyZWVuIGZyYW1lQm9yZGVyPVwiMFwiIC8+XG4gICAgICApfVxuXG4gICAgICA8TWVkaWFUb29sYmFyIG9uRWRpdD17aGFuZGxlRWRpdH0gb25SZW1vdmU9e2RlbGV0ZU5vZGV9IC8+XG4gICAgPC9Ob2RlVmlld1dyYXBwZXI+XG4gICk7XG59XG4iXX0=
|