@openleaf-editor/core 0.1.0-beta.0 → 0.1.0-beta.2
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/dist/autolink.d.ts +12 -0
- package/dist/autolink.d.ts.map +1 -0
- package/dist/autolink.js +98 -0
- package/dist/autolink.js.map +1 -0
- package/dist/commands.d.ts +109 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +639 -10
- package/dist/commands.js.map +1 -1
- package/dist/css.d.ts +176 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +517 -0
- package/dist/css.js.map +1 -0
- package/dist/embed.d.ts +52 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +116 -0
- package/dist/embed.js.map +1 -0
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +104 -4
- package/dist/extensions.js.map +1 -1
- package/dist/formats.d.ts +44 -0
- package/dist/formats.d.ts.map +1 -0
- package/dist/formats.js +111 -0
- package/dist/formats.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/keymap.d.ts.map +1 -1
- package/dist/keymap.js +15 -3
- package/dist/keymap.js.map +1 -1
- package/dist/noneditable.d.ts +14 -0
- package/dist/noneditable.d.ts.map +1 -0
- package/dist/noneditable.js +93 -0
- package/dist/noneditable.js.map +1 -0
- package/dist/preserve.d.ts +53 -0
- package/dist/preserve.d.ts.map +1 -1
- package/dist/preserve.js +133 -4
- package/dist/preserve.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +331 -61
- package/dist/schema.js.map +1 -1
- package/dist/structure.d.ts +44 -0
- package/dist/structure.d.ts.map +1 -0
- package/dist/structure.js +379 -0
- package/dist/structure.js.map +1 -0
- package/dist/tables.d.ts +13 -0
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +224 -19
- package/dist/tables.js.map +1 -1
- package/dist/tokens.d.ts +28 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +68 -0
- package/dist/tokens.js.map +1 -0
- package/dist/visual-aids.d.ts +10 -0
- package/dist/visual-aids.d.ts.map +1 -0
- package/dist/visual-aids.js +61 -0
- package/dist/visual-aids.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honour `contenteditable="false"` on stored markup.
|
|
3
|
+
*
|
|
4
|
+
* The attribute already round-trips as carried residue. Without this plugin the
|
|
5
|
+
* browser will often still let a caret in, and ProseMirror will then "correct"
|
|
6
|
+
* the typing on the next transaction -- which looks like the editor eating
|
|
7
|
+
* keystrokes. Filtering those transactions, and marking the node in the view,
|
|
8
|
+
* is what makes a locked region actually locked.
|
|
9
|
+
*/
|
|
10
|
+
import type { Node as PMNode } from 'prosemirror-model';
|
|
11
|
+
import { Plugin } from 'prosemirror-state';
|
|
12
|
+
export declare function isNonEditableNode(node: PMNode): boolean;
|
|
13
|
+
export declare function nonEditablePlugin(): Plugin;
|
|
14
|
+
//# sourceMappingURL=noneditable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noneditable.d.ts","sourceRoot":"","sources":["../src/noneditable.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAa,MAAM,mBAAmB,CAAA;AAMrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIvD;AAoBD,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honour `contenteditable="false"` on stored markup.
|
|
3
|
+
*
|
|
4
|
+
* The attribute already round-trips as carried residue. Without this plugin the
|
|
5
|
+
* browser will often still let a caret in, and ProseMirror will then "correct"
|
|
6
|
+
* the typing on the next transaction -- which looks like the editor eating
|
|
7
|
+
* keystrokes. Filtering those transactions, and marking the node in the view,
|
|
8
|
+
* is what makes a locked region actually locked.
|
|
9
|
+
*/
|
|
10
|
+
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
11
|
+
import { Decoration, DecorationSet } from 'prosemirror-view';
|
|
12
|
+
import { CARRIED_ATTR } from './extensions.js';
|
|
13
|
+
const key = new PluginKey('openleaf-noneditable');
|
|
14
|
+
export function isNonEditableNode(node) {
|
|
15
|
+
const carried = node.attrs[CARRIED_ATTR];
|
|
16
|
+
const value = carried?.['contenteditable'];
|
|
17
|
+
return Boolean(value && value.toLowerCase() === 'false');
|
|
18
|
+
}
|
|
19
|
+
/** True when a change sits *inside* a locked node, not when the node itself is deleted. */
|
|
20
|
+
function editsLockedInterior(doc, start, end) {
|
|
21
|
+
// Clamped rather than trusted. A throw from here escapes `filterTransaction`
|
|
22
|
+
// and takes the whole transaction with it, so one bad range does not read as
|
|
23
|
+
// "this edit is not allowed" -- it reads as the editor ignoring the command.
|
|
24
|
+
const from = Math.max(0, Math.min(start, doc.content.size));
|
|
25
|
+
const to = Math.max(from, Math.min(end, doc.content.size));
|
|
26
|
+
let blocked = false;
|
|
27
|
+
doc.nodesBetween(from, to, (node, pos) => {
|
|
28
|
+
if (!isNonEditableNode(node))
|
|
29
|
+
return true;
|
|
30
|
+
const start = pos;
|
|
31
|
+
const end = pos + node.nodeSize;
|
|
32
|
+
if (from > start && to < end)
|
|
33
|
+
blocked = true;
|
|
34
|
+
return false;
|
|
35
|
+
});
|
|
36
|
+
return blocked;
|
|
37
|
+
}
|
|
38
|
+
export function nonEditablePlugin() {
|
|
39
|
+
return new Plugin({
|
|
40
|
+
key,
|
|
41
|
+
/**
|
|
42
|
+
* Refuse a transaction that edits the inside of a locked node.
|
|
43
|
+
*
|
|
44
|
+
* Each step's map reports positions in the document *that step* applied to,
|
|
45
|
+
* which for every step after the first is not `state.doc`. Reading the
|
|
46
|
+
* original document with those coordinates walks off the end of it as soon
|
|
47
|
+
* as a transaction has more than one step and the earlier ones grow the
|
|
48
|
+
* document -- `nodesBetween` then throws, the throw escapes here, and
|
|
49
|
+
* ProseMirror drops the transaction. The symptom was a toolbar button doing
|
|
50
|
+
* nothing at all: inserting a table column after inserting a row produces
|
|
51
|
+
* exactly that shape, and the error was swallowed by the toolbar's guard.
|
|
52
|
+
*
|
|
53
|
+
* So each range is mapped back through the steps before it first.
|
|
54
|
+
*/
|
|
55
|
+
filterTransaction(tr, state) {
|
|
56
|
+
if (!tr.docChanged)
|
|
57
|
+
return true;
|
|
58
|
+
let blocked = false;
|
|
59
|
+
for (let i = 0; i < tr.steps.length; i += 1) {
|
|
60
|
+
if (blocked)
|
|
61
|
+
break;
|
|
62
|
+
const step = tr.steps[i];
|
|
63
|
+
if (!step)
|
|
64
|
+
continue;
|
|
65
|
+
const back = tr.mapping.slice(0, i).invert();
|
|
66
|
+
step.getMap().forEach((start, end) => {
|
|
67
|
+
if (blocked)
|
|
68
|
+
return;
|
|
69
|
+
if (editsLockedInterior(state.doc, back.map(start, -1), back.map(end, 1))) {
|
|
70
|
+
blocked = true;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return !blocked;
|
|
75
|
+
},
|
|
76
|
+
props: {
|
|
77
|
+
decorations(state) {
|
|
78
|
+
const decorations = [];
|
|
79
|
+
state.doc.descendants((node, pos) => {
|
|
80
|
+
if (!isNonEditableNode(node))
|
|
81
|
+
return true;
|
|
82
|
+
decorations.push(Decoration.node(pos, pos + node.nodeSize, {
|
|
83
|
+
class: 'ol-noneditable',
|
|
84
|
+
contenteditable: 'false',
|
|
85
|
+
}));
|
|
86
|
+
return false;
|
|
87
|
+
});
|
|
88
|
+
return DecorationSet.create(state.doc, decorations);
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=noneditable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noneditable.js","sourceRoot":"","sources":["../src/noneditable.ts"],"names":[],"mappings":"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"}
|
package/dist/preserve.d.ts
CHANGED
|
@@ -27,6 +27,34 @@
|
|
|
27
27
|
* and is preserved intact.
|
|
28
28
|
*/
|
|
29
29
|
import type { NodeSpec } from 'prosemirror-model';
|
|
30
|
+
/**
|
|
31
|
+
* `<source>` and `<track>`: media children the schema stores as markup rather
|
|
32
|
+
* than as nodes, so they do not count as content when deciding what to keep.
|
|
33
|
+
*
|
|
34
|
+
* Lives here because this module owns the "keep it whole or claim it" decision,
|
|
35
|
+
* and `structure.ts` asks the same question when it reads a media element.
|
|
36
|
+
*/
|
|
37
|
+
export declare const MEDIA_FURNITURE_TAGS: ReadonlySet<string>;
|
|
38
|
+
/**
|
|
39
|
+
* True when a media element holds content its node cannot carry.
|
|
40
|
+
*
|
|
41
|
+
* Video and audio are atoms whose only modelled children are `<source>` and
|
|
42
|
+
* `<track>`, so fallback content -- "Download <a href=...>the video</a>", shown
|
|
43
|
+
* by a browser that cannot play the file -- has nowhere to live on the node.
|
|
44
|
+
*/
|
|
45
|
+
export declare function hasMediaFallback(el: Element): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Scrub markup before it is stored for preservation.
|
|
48
|
+
*
|
|
49
|
+
* Preserving an element verbatim means preserving its attributes verbatim, and
|
|
50
|
+
* `<div class="callout" onclick="steal()">` is not something an author needs
|
|
51
|
+
* kept. Works on a clone so the live parse tree is untouched.
|
|
52
|
+
*
|
|
53
|
+
* Exported because the table schema stores `<caption>` and `<colgroup>` the same
|
|
54
|
+
* way, for the same reason, and a second scrubber that drifted from this one
|
|
55
|
+
* would be a hole in exactly the code path that exists to close holes.
|
|
56
|
+
*/
|
|
57
|
+
export declare function scrub(el: Element): string;
|
|
30
58
|
/**
|
|
31
59
|
* True when this element can be unwrapped without losing information.
|
|
32
60
|
*
|
|
@@ -39,6 +67,31 @@ import type { NodeSpec } from 'prosemirror-model';
|
|
|
39
67
|
export declare function isLosslesslyUnwrappable(el: Element): boolean;
|
|
40
68
|
/** Run `fn` with preserved-node serialization targeting this Document. */
|
|
41
69
|
export declare function withSerializationDocument<T>(doc: Document, fn: () => T): T;
|
|
70
|
+
/**
|
|
71
|
+
* True while `serializeHtml` is running.
|
|
72
|
+
*
|
|
73
|
+
* A node whose `toDOM` needs to render differently for the editor than for the
|
|
74
|
+
* saved HTML has no other way to tell which one it is building. The table spec
|
|
75
|
+
* needs exactly that: a preserved `<caption>` must be `contenteditable="false"`
|
|
76
|
+
* on screen, because it sits inside the editable area but outside the node's
|
|
77
|
+
* `contentDOM`, and letting a caret into it means typing that ProseMirror will
|
|
78
|
+
* silently revert. That attribute must NOT reach the saved HTML, where it would
|
|
79
|
+
* be our editor scribbling on the author's markup.
|
|
80
|
+
*
|
|
81
|
+
* Stripping it afterwards was the other option and is worse: it cannot tell the
|
|
82
|
+
* attribute it just added from the same attribute in somebody's document -- the
|
|
83
|
+
* collision the preserved-element WeakSet above exists to avoid. Not emitting it
|
|
84
|
+
* at all has no such failure mode.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isSerializing(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* The Document that serialization should build into.
|
|
89
|
+
*
|
|
90
|
+
* Exported because schema.ts needs it for the same reason this file does: a node
|
|
91
|
+
* that builds a real element in `toDOM` has nowhere else to get a Document, since
|
|
92
|
+
* ProseMirror does not pass the one given to `serializeFragment` down to `toDOM`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function serializationTarget(): Document;
|
|
42
95
|
/** True when this element, or an ancestor, was rendered from preserved markup. */
|
|
43
96
|
export declare function isInsidePreserved(node: Element | null): boolean;
|
|
44
97
|
/**
|
package/dist/preserve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preserve.d.ts","sourceRoot":"","sources":["../src/preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"preserve.d.ts","sourceRoot":"","sources":["../src/preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AA8CjD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAgC,CAAA;AAErF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAWrD;AA+BD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAwBzC;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAkC5D;AAoBD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAE9C;AAwCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAK/D;AAeD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,QA8B1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QA8B3B,CAAA"}
|
package/dist/preserve.js
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* element carries an attribute we cannot represent, it becomes opaque
|
|
27
27
|
* and is preserved intact.
|
|
28
28
|
*/
|
|
29
|
+
import { isFullyModelledStyle, safeLang } from './css.js';
|
|
29
30
|
import { URL_ATTRIBUTES, isEventHandlerAttribute, isSafeUrl } from './url.js';
|
|
30
31
|
/**
|
|
31
32
|
* Elements that are never preserved, and whose contents are discarded with them.
|
|
@@ -48,7 +49,6 @@ import { URL_ATTRIBUTES, isEventHandlerAttribute, isSafeUrl } from './url.js';
|
|
|
48
49
|
const NEVER_PRESERVE = [
|
|
49
50
|
'script',
|
|
50
51
|
'style',
|
|
51
|
-
'iframe',
|
|
52
52
|
'frame',
|
|
53
53
|
'frameset',
|
|
54
54
|
'object',
|
|
@@ -68,14 +68,75 @@ const NEVER_PRESERVE = [
|
|
|
68
68
|
];
|
|
69
69
|
/** Parse rules that drop dangerous elements before any other rule sees them. */
|
|
70
70
|
const dropRules = NEVER_PRESERVE.map((tag) => ({ tag, ignore: true, priority: 100 }));
|
|
71
|
+
/**
|
|
72
|
+
* `<source>` and `<track>`: media children the schema stores as markup rather
|
|
73
|
+
* than as nodes, so they do not count as content when deciding what to keep.
|
|
74
|
+
*
|
|
75
|
+
* Lives here because this module owns the "keep it whole or claim it" decision,
|
|
76
|
+
* and `structure.ts` asks the same question when it reads a media element.
|
|
77
|
+
*/
|
|
78
|
+
export const MEDIA_FURNITURE_TAGS = new Set(['source', 'track']);
|
|
79
|
+
/**
|
|
80
|
+
* True when a media element holds content its node cannot carry.
|
|
81
|
+
*
|
|
82
|
+
* Video and audio are atoms whose only modelled children are `<source>` and
|
|
83
|
+
* `<track>`, so fallback content -- "Download <a href=...>the video</a>", shown
|
|
84
|
+
* by a browser that cannot play the file -- has nowhere to live on the node.
|
|
85
|
+
*/
|
|
86
|
+
export function hasMediaFallback(el) {
|
|
87
|
+
for (const child of Array.from(el.childNodes)) {
|
|
88
|
+
if (child.nodeType === 1) {
|
|
89
|
+
if (!MEDIA_FURNITURE_TAGS.has(child.nodeName.toLowerCase()))
|
|
90
|
+
return true;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Whitespace between the <source> children is layout, not fallback: the
|
|
94
|
+
// element still models cleanly and still round-trips.
|
|
95
|
+
if (child.nodeType === 3 && (child.textContent ?? '').trim() !== '')
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Media whose fallback content the node cannot hold, kept whole.
|
|
102
|
+
*
|
|
103
|
+
* Priority 45 sits below the schema's own rules (50) and above the drop rule
|
|
104
|
+
* (40): a video with a safe `src` is still claimed as a node first, and an
|
|
105
|
+
* unsafe iframe is still dropped rather than preserved, but a `<video>` carrying
|
|
106
|
+
* a download link is preserved instead of being deleted along with it.
|
|
107
|
+
*/
|
|
108
|
+
const preserveMediaWithFallback = ['video', 'audio'].map((tag) => ({
|
|
109
|
+
tag,
|
|
110
|
+
priority: 45,
|
|
111
|
+
getAttrs(dom) {
|
|
112
|
+
if (!hasMediaFallback(dom))
|
|
113
|
+
return false;
|
|
114
|
+
return { html: scrub(dom), tag: dom.nodeName.toLowerCase() };
|
|
115
|
+
},
|
|
116
|
+
}));
|
|
117
|
+
/**
|
|
118
|
+
* Media the schema declined. Priority 40 is below the schema's default (50),
|
|
119
|
+
* so an allowlisted iframe or a video with a safe `src` is claimed first;
|
|
120
|
+
* anything left is ignored rather than preserved as an atom. Preserving an
|
|
121
|
+
* arbitrary iframe would be a nested page the author never asked to keep.
|
|
122
|
+
*/
|
|
123
|
+
const dropDeclinedMedia = ['iframe', 'video', 'audio'].map((tag) => ({
|
|
124
|
+
tag,
|
|
125
|
+
ignore: true,
|
|
126
|
+
priority: 40,
|
|
127
|
+
}));
|
|
71
128
|
/**
|
|
72
129
|
* Scrub markup before it is stored for preservation.
|
|
73
130
|
*
|
|
74
131
|
* Preserving an element verbatim means preserving its attributes verbatim, and
|
|
75
132
|
* `<div class="callout" onclick="steal()">` is not something an author needs
|
|
76
133
|
* kept. Works on a clone so the live parse tree is untouched.
|
|
134
|
+
*
|
|
135
|
+
* Exported because the table schema stores `<caption>` and `<colgroup>` the same
|
|
136
|
+
* way, for the same reason, and a second scrubber that drifted from this one
|
|
137
|
+
* would be a hole in exactly the code path that exists to close holes.
|
|
77
138
|
*/
|
|
78
|
-
function scrub(el) {
|
|
139
|
+
export function scrub(el) {
|
|
79
140
|
const clone = el.cloneNode(true);
|
|
80
141
|
const visit = (node) => {
|
|
81
142
|
for (const child of Array.from(node.children)) {
|
|
@@ -131,9 +192,44 @@ const TRANSPARENT_CONTAINERS = new Set([
|
|
|
131
192
|
* preserving is invisible and permanent.
|
|
132
193
|
*/
|
|
133
194
|
export function isLosslesslyUnwrappable(el) {
|
|
134
|
-
|
|
195
|
+
const name = el.nodeName.toLowerCase();
|
|
196
|
+
if (!TRANSPARENT_CONTAINERS.has(name))
|
|
197
|
+
return false;
|
|
198
|
+
if (el.attributes.length === 0)
|
|
199
|
+
return true;
|
|
200
|
+
if (name !== 'span')
|
|
201
|
+
return false;
|
|
202
|
+
/*
|
|
203
|
+
* A `<span>` whose attributes are fully modelled as marks: colour, font, and
|
|
204
|
+
* `lang`. Without this, those runs become opaque atoms -- a grey card where a
|
|
205
|
+
* sentence used to be. Declining the catch-all lets the span unwrap so the
|
|
206
|
+
* mark rules can re-apply formatting on the text inside.
|
|
207
|
+
*
|
|
208
|
+
* Any other attribute, or a style the marks cannot fully express, and the
|
|
209
|
+
* element stays preserved exactly as it does today.
|
|
210
|
+
*
|
|
211
|
+
* ProseMirror matches mark style rules through the CSSOM. Under a CSP with
|
|
212
|
+
* no `unsafe-inline` in `style-src`, the browser leaves the attribute in the
|
|
213
|
+
* DOM and refuses to parse it, so unwrapping would destroy the formatting.
|
|
214
|
+
* An empty CSSOM is therefore a reason to leave the element to the
|
|
215
|
+
* preservation layer.
|
|
216
|
+
*/
|
|
217
|
+
for (const attr of Array.from(el.attributes)) {
|
|
218
|
+
if (attr.name === 'lang') {
|
|
219
|
+
if (safeLang(attr.value) === null)
|
|
220
|
+
return false;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (attr.name === 'style') {
|
|
224
|
+
if (el.style?.length === 0)
|
|
225
|
+
return false;
|
|
226
|
+
if (!isFullyModelledStyle(attr.value))
|
|
227
|
+
return false;
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
135
230
|
return false;
|
|
136
|
-
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
137
233
|
}
|
|
138
234
|
/** Rebuild a DOM element from stored markup. `<template>` is used because
|
|
139
235
|
* its parsing context permits otherwise-illegal fragments such as a bare
|
|
@@ -162,6 +258,35 @@ export function withSerializationDocument(doc, fn) {
|
|
|
162
258
|
serializationDocument = previous;
|
|
163
259
|
}
|
|
164
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* True while `serializeHtml` is running.
|
|
263
|
+
*
|
|
264
|
+
* A node whose `toDOM` needs to render differently for the editor than for the
|
|
265
|
+
* saved HTML has no other way to tell which one it is building. The table spec
|
|
266
|
+
* needs exactly that: a preserved `<caption>` must be `contenteditable="false"`
|
|
267
|
+
* on screen, because it sits inside the editable area but outside the node's
|
|
268
|
+
* `contentDOM`, and letting a caret into it means typing that ProseMirror will
|
|
269
|
+
* silently revert. That attribute must NOT reach the saved HTML, where it would
|
|
270
|
+
* be our editor scribbling on the author's markup.
|
|
271
|
+
*
|
|
272
|
+
* Stripping it afterwards was the other option and is worse: it cannot tell the
|
|
273
|
+
* attribute it just added from the same attribute in somebody's document -- the
|
|
274
|
+
* collision the preserved-element WeakSet above exists to avoid. Not emitting it
|
|
275
|
+
* at all has no such failure mode.
|
|
276
|
+
*/
|
|
277
|
+
export function isSerializing() {
|
|
278
|
+
return serializationDocument !== undefined;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The Document that serialization should build into.
|
|
282
|
+
*
|
|
283
|
+
* Exported because schema.ts needs it for the same reason this file does: a node
|
|
284
|
+
* that builds a real element in `toDOM` has nowhere else to get a Document, since
|
|
285
|
+
* ProseMirror does not pass the one given to `serializeFragment` down to `toDOM`.
|
|
286
|
+
*/
|
|
287
|
+
export function serializationTarget() {
|
|
288
|
+
return ownerDocument();
|
|
289
|
+
}
|
|
165
290
|
function ownerDocument() {
|
|
166
291
|
if (serializationDocument)
|
|
167
292
|
return serializationDocument;
|
|
@@ -231,6 +356,8 @@ export const unknownBlock = {
|
|
|
231
356
|
},
|
|
232
357
|
parseDOM: [
|
|
233
358
|
...dropRules,
|
|
359
|
+
...preserveMediaWithFallback,
|
|
360
|
+
...dropDeclinedMedia,
|
|
234
361
|
{
|
|
235
362
|
tag: '*',
|
|
236
363
|
// Lowest priority: every real rule in the schema gets first refusal.
|
|
@@ -266,6 +393,8 @@ export const unknownInline = {
|
|
|
266
393
|
},
|
|
267
394
|
parseDOM: [
|
|
268
395
|
...dropRules,
|
|
396
|
+
...preserveMediaWithFallback,
|
|
397
|
+
...dropDeclinedMedia,
|
|
269
398
|
{
|
|
270
399
|
tag: '*',
|
|
271
400
|
// Higher than unknownBlock's catch-all: inline gets first refusal so
|
package/dist/preserve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preserve.js","sourceRoot":"","sources":["../src/preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAE7E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,cAAc,GAAsB;IACxC,QAAQ;IACR,OAAO;IACP,
|
|
1
|
+
{"version":3,"file":"preserve.js","sourceRoot":"","sources":["../src/preserve.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAkC,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAiJxG,6DAA6D;AAC7D,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA4L9C,CAAA;AAED,2BAA2B;AAC3B,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAsN9C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,wBAAqD,CAAA"}
|