@openleaf-editor/core 0.1.0-beta.1 → 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.
Files changed (58) hide show
  1. package/dist/autolink.d.ts +12 -0
  2. package/dist/autolink.d.ts.map +1 -0
  3. package/dist/autolink.js +98 -0
  4. package/dist/autolink.js.map +1 -0
  5. package/dist/commands.d.ts +69 -2
  6. package/dist/commands.d.ts.map +1 -1
  7. package/dist/commands.js +464 -18
  8. package/dist/commands.js.map +1 -1
  9. package/dist/css.d.ts +61 -9
  10. package/dist/css.d.ts.map +1 -1
  11. package/dist/css.js +315 -13
  12. package/dist/css.js.map +1 -1
  13. package/dist/embed.d.ts +52 -0
  14. package/dist/embed.d.ts.map +1 -0
  15. package/dist/embed.js +116 -0
  16. package/dist/embed.js.map +1 -0
  17. package/dist/extensions.d.ts.map +1 -1
  18. package/dist/extensions.js +22 -15
  19. package/dist/extensions.js.map +1 -1
  20. package/dist/formats.d.ts +44 -0
  21. package/dist/formats.d.ts.map +1 -0
  22. package/dist/formats.js +111 -0
  23. package/dist/formats.js.map +1 -0
  24. package/dist/index.d.ts +9 -3
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +14 -6
  27. package/dist/index.js.map +1 -1
  28. package/dist/keymap.d.ts.map +1 -1
  29. package/dist/keymap.js +6 -3
  30. package/dist/keymap.js.map +1 -1
  31. package/dist/noneditable.d.ts +14 -0
  32. package/dist/noneditable.d.ts.map +1 -0
  33. package/dist/noneditable.js +93 -0
  34. package/dist/noneditable.js.map +1 -0
  35. package/dist/preserve.d.ts +45 -0
  36. package/dist/preserve.d.ts.map +1 -1
  37. package/dist/preserve.js +113 -34
  38. package/dist/preserve.js.map +1 -1
  39. package/dist/schema.d.ts.map +1 -1
  40. package/dist/schema.js +211 -60
  41. package/dist/schema.js.map +1 -1
  42. package/dist/structure.d.ts +44 -0
  43. package/dist/structure.d.ts.map +1 -0
  44. package/dist/structure.js +379 -0
  45. package/dist/structure.js.map +1 -0
  46. package/dist/tables.d.ts +13 -0
  47. package/dist/tables.d.ts.map +1 -1
  48. package/dist/tables.js +224 -19
  49. package/dist/tables.js.map +1 -1
  50. package/dist/tokens.d.ts +28 -0
  51. package/dist/tokens.d.ts.map +1 -0
  52. package/dist/tokens.js +68 -0
  53. package/dist/tokens.js.map +1 -0
  54. package/dist/visual-aids.d.ts +10 -0
  55. package/dist/visual-aids.d.ts.map +1 -0
  56. package/dist/visual-aids.js +61 -0
  57. package/dist/visual-aids.js.map +1 -0
  58. package/package.json +3 -2
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Structural nodes that belong in the base schema for the same reason tables
3
+ * do: without them, stored `<details>`, `<figure>` and a page break become
4
+ * opaque preserved atoms -- faithful, and uneditable.
5
+ *
6
+ * The editing chrome (dialogs, character map, resize handles) lives in
7
+ * `@openleaf-editor/plugins-insert`. What is here is the storage format.
8
+ */
9
+ import { safeAllowList, safeEmbedSrc } from './embed.js';
10
+ import { IMAGE_ALIGN_CLASS, IMAGE_ALIGN_CLASSES, imageAlignFromClass, safeClassList, safeId } from './tokens.js';
11
+ import { MEDIA_FURNITURE_TAGS, hasMediaFallback, scrub, serializationTarget, } from './preserve.js';
12
+ import { isSafeUrl } from './url.js';
13
+ function boolAttr(el, name) {
14
+ return el.hasAttribute(name);
15
+ }
16
+ function dimension(el, name) {
17
+ const value = el.getAttribute(name);
18
+ if (!value)
19
+ return null;
20
+ return /^\d+(?:\.\d+)?%?$/.test(value) ? value : null;
21
+ }
22
+ /**
23
+ * The `<source>`/`<track>` children of a media element, as scrubbed markup.
24
+ *
25
+ * Furniture rather than nodes for the same reason a table's `<colgroup>` is:
26
+ * authors never type into them, and a content expression for something nobody
27
+ * edits buys nothing. Storing them at all is what keeps
28
+ * `<video><source src="clip.webm"></video>` -- which has no `src` of its own --
29
+ * a real editable node. Without it the schema declined the element and the
30
+ * preservation layer's drop rule then deleted the whole thing.
31
+ */
32
+ function readMediaFurniture(el) {
33
+ let html = '';
34
+ for (const child of Array.from(el.children)) {
35
+ if (!MEDIA_FURNITURE_TAGS.has(child.nodeName.toLowerCase()))
36
+ continue;
37
+ // Dropped whole rather than scrubbed down to `<source>`: `scrub` would strip
38
+ // the unsafe address and leave an element that plays nothing and says
39
+ // nothing. A media element left with no usable source is then declined.
40
+ if (!isSafeUrl(child.getAttribute('src')))
41
+ continue;
42
+ html += scrub(child);
43
+ }
44
+ return html || null;
45
+ }
46
+ /**
47
+ * Rebuild stored furniture and append it to the element being serialized.
48
+ *
49
+ * `<template>` is the parsing context because a bare `<source>` is illegal
50
+ * inside a `<div>` and would be silently discarded there -- the same reason the
51
+ * preservation layer uses one.
52
+ */
53
+ function appendMediaFurniture(host, html, doc) {
54
+ const tpl = doc.createElement('template');
55
+ tpl.innerHTML = html;
56
+ for (const child of Array.from(tpl.content.children)) {
57
+ if (!MEDIA_FURNITURE_TAGS.has(child.nodeName.toLowerCase()))
58
+ continue;
59
+ // Scrubbed on the way out too. Furniture read from a parse has already been
60
+ // through `readMediaFurniture`, but a string written by a command or a
61
+ // dialog has not, and `<source src="x" onerror="...">` must not be stored.
62
+ const clean = doc.createElement('template');
63
+ clean.innerHTML = scrub(child);
64
+ const el = clean.content.firstElementChild;
65
+ if (el)
66
+ host.appendChild(el);
67
+ }
68
+ }
69
+ function mediaAttrs(el) {
70
+ // Fallback content has nowhere to live on an atom. Declining hands the element
71
+ // to the preservation layer, which keeps it whole -- see the priority-45 rule
72
+ // in preserve.ts.
73
+ if (hasMediaFallback(el))
74
+ return false;
75
+ const src = el.getAttribute('src');
76
+ if (src !== null && !isSafeUrl(src))
77
+ return false;
78
+ const furniture = readMediaFurniture(el);
79
+ // One or the other. A player with neither has nothing to play.
80
+ if (src === null && furniture === null)
81
+ return false;
82
+ return {
83
+ src,
84
+ furniture,
85
+ title: el.getAttribute('title'),
86
+ controls: boolAttr(el, 'controls'),
87
+ width: dimension(el, 'width'),
88
+ height: dimension(el, 'height'),
89
+ };
90
+ }
91
+ /**
92
+ * Serialize a media element, splicing its furniture back in as children.
93
+ *
94
+ * A real element rather than a spec array whenever there is furniture: an array
95
+ * cannot carry raw markup, and the `<source>` children have to be appended.
96
+ */
97
+ function mediaToDOM(tag, attrs, furniture) {
98
+ if (!furniture)
99
+ return [tag, attrs];
100
+ const doc = serializationTarget();
101
+ const el = doc.createElement(tag);
102
+ for (const [name, value] of Object.entries(attrs))
103
+ el.setAttribute(name, value);
104
+ appendMediaFurniture(el, furniture, doc);
105
+ return el;
106
+ }
107
+ /**
108
+ * `<video>` and `<audio>`. `controls` defaults to on: an inserted player
109
+ * without controls is a rectangle that cannot be played from the keyboard,
110
+ * and authors rarely go back to add them.
111
+ */
112
+ export const video = {
113
+ group: 'block',
114
+ atom: true,
115
+ selectable: true,
116
+ draggable: true,
117
+ attrs: {
118
+ // Optional: source-only media carries its addresses in `furniture` instead.
119
+ src: { default: null },
120
+ furniture: { default: null },
121
+ title: { default: null },
122
+ controls: { default: false },
123
+ width: { default: null },
124
+ height: { default: null },
125
+ poster: { default: null },
126
+ },
127
+ parseDOM: [
128
+ {
129
+ tag: 'video',
130
+ getAttrs(dom) {
131
+ const el = dom;
132
+ const base = mediaAttrs(el);
133
+ if (!base)
134
+ return false;
135
+ const poster = el.getAttribute('poster');
136
+ return {
137
+ ...base,
138
+ poster: poster && isSafeUrl(poster) ? poster : null,
139
+ };
140
+ },
141
+ },
142
+ ],
143
+ toDOM(node) {
144
+ const { src, title, controls, width, height, poster, furniture } = node.attrs;
145
+ const attrs = {};
146
+ if (src !== null)
147
+ attrs['src'] = src;
148
+ if (title !== null)
149
+ attrs['title'] = title;
150
+ if (controls)
151
+ attrs['controls'] = '';
152
+ if (width !== null)
153
+ attrs['width'] = width;
154
+ if (height !== null)
155
+ attrs['height'] = height;
156
+ if (poster !== null)
157
+ attrs['poster'] = poster;
158
+ return mediaToDOM('video', attrs, furniture);
159
+ },
160
+ };
161
+ export const audio = {
162
+ group: 'block',
163
+ atom: true,
164
+ selectable: true,
165
+ draggable: true,
166
+ attrs: {
167
+ src: { default: null },
168
+ furniture: { default: null },
169
+ title: { default: null },
170
+ controls: { default: false },
171
+ },
172
+ parseDOM: [
173
+ {
174
+ tag: 'audio',
175
+ getAttrs(dom) {
176
+ const base = mediaAttrs(dom);
177
+ if (!base)
178
+ return false;
179
+ // Audio has no intrinsic box, so the dimensions mediaAttrs read are not
180
+ // part of this node's shape.
181
+ const { width: _width, height: _height, ...rest } = base;
182
+ return rest;
183
+ },
184
+ },
185
+ ],
186
+ toDOM(node) {
187
+ const { src, title, controls, furniture } = node.attrs;
188
+ const attrs = {};
189
+ if (src !== null)
190
+ attrs['src'] = src;
191
+ if (title !== null)
192
+ attrs['title'] = title;
193
+ if (controls)
194
+ attrs['controls'] = '';
195
+ return mediaToDOM('audio', attrs, furniture);
196
+ },
197
+ };
198
+ /**
199
+ * An allowlisted embed. Unsafe iframes are ignored by a sibling parse rule in
200
+ * preserve.ts rather than preserved: an iframe is a nested page, not an
201
+ * author's callout div.
202
+ */
203
+ export const iframe = {
204
+ group: 'block',
205
+ atom: true,
206
+ selectable: true,
207
+ draggable: true,
208
+ attrs: {
209
+ src: {},
210
+ title: { default: null },
211
+ width: { default: null },
212
+ height: { default: null },
213
+ allow: { default: null },
214
+ allowfullscreen: { default: true },
215
+ },
216
+ parseDOM: [
217
+ {
218
+ tag: 'iframe',
219
+ getAttrs(dom) {
220
+ const el = dom;
221
+ const src = safeEmbedSrc(el.getAttribute('src'));
222
+ if (!src)
223
+ return false;
224
+ return {
225
+ src,
226
+ title: el.getAttribute('title'),
227
+ width: dimension(el, 'width'),
228
+ height: dimension(el, 'height'),
229
+ allow: safeAllowList(el.getAttribute('allow')),
230
+ allowfullscreen: el.hasAttribute('allowfullscreen'),
231
+ };
232
+ },
233
+ },
234
+ ],
235
+ toDOM(node) {
236
+ const { src, title, width, height, allow, allowfullscreen } = node.attrs;
237
+ const attrs = { src: src };
238
+ if (title !== null)
239
+ attrs['title'] = title;
240
+ if (width !== null)
241
+ attrs['width'] = width;
242
+ if (height !== null)
243
+ attrs['height'] = height;
244
+ if (allow !== null)
245
+ attrs['allow'] = allow;
246
+ if (allowfullscreen)
247
+ attrs['allowfullscreen'] = '';
248
+ return ['iframe', attrs];
249
+ },
250
+ };
251
+ export const details = {
252
+ group: 'block',
253
+ content: 'summary block+',
254
+ defining: true,
255
+ isolating: true,
256
+ attrs: { open: { default: false } },
257
+ parseDOM: [
258
+ {
259
+ tag: 'details',
260
+ getAttrs: (dom) => ({ open: dom.hasAttribute('open') }),
261
+ },
262
+ ],
263
+ toDOM(node) {
264
+ return node.attrs['open'] ? ['details', { open: '' }, 0] : ['details', 0];
265
+ },
266
+ };
267
+ export const summary = {
268
+ content: 'inline*',
269
+ defining: true,
270
+ parseDOM: [{ tag: 'summary' }],
271
+ toDOM: () => ['summary', 0],
272
+ };
273
+ /**
274
+ * A captioned image. Figures that contain anything other than an image and an
275
+ * optional caption are left to the preservation layer: claiming them here
276
+ * would flatten a complex figure into a shape it cannot round-trip.
277
+ */
278
+ export const figure = {
279
+ group: 'block',
280
+ content: 'inline+',
281
+ isolating: true,
282
+ parseDOM: [
283
+ {
284
+ tag: 'figure',
285
+ getAttrs(dom) {
286
+ const el = dom;
287
+ const children = Array.from(el.children).filter((child) => child.nodeName !== 'FIGCAPTION');
288
+ if (children.length !== 1 || children[0]?.nodeName !== 'IMG')
289
+ return false;
290
+ return {};
291
+ },
292
+ },
293
+ ],
294
+ toDOM: () => ['figure', 0],
295
+ };
296
+ export const figcaption = {
297
+ inline: true,
298
+ group: 'inline',
299
+ content: 'inline*',
300
+ parseDOM: [{ tag: 'figcaption' }],
301
+ toDOM: () => ['figcaption', 0],
302
+ };
303
+ export const page_break = {
304
+ group: 'block',
305
+ atom: true,
306
+ selectable: true,
307
+ parseDOM: [
308
+ { tag: 'div[data-pagebreak]' },
309
+ { tag: 'div.ol-pagebreak' },
310
+ { tag: 'hr.ol-pagebreak' },
311
+ ],
312
+ toDOM: () => ['hr', { class: 'ol-pagebreak' }],
313
+ };
314
+ /**
315
+ * An empty named destination: `<a id="section"></a>`.
316
+ *
317
+ * A link with both `href` and `id` is a mark, not this node. This exists for
318
+ * the jump target that has no text of its own, which is what TinyMCE's
319
+ * anchor plugin inserts and what a decade of CMS content already contains.
320
+ */
321
+ export const named_anchor = {
322
+ inline: true,
323
+ group: 'inline',
324
+ atom: true,
325
+ selectable: true,
326
+ attrs: { id: {} },
327
+ parseDOM: [
328
+ {
329
+ tag: 'a[id]',
330
+ getAttrs(dom) {
331
+ const el = dom;
332
+ if (el.hasAttribute('href'))
333
+ return false;
334
+ const id = safeId(el.getAttribute('id'));
335
+ if (!id)
336
+ return false;
337
+ return { id };
338
+ },
339
+ },
340
+ ],
341
+ toDOM: (node) => ['a', { id: node.attrs['id'] }],
342
+ };
343
+ /** Image attributes shared by parse and commands. */
344
+ export function imageParseAttrs(el) {
345
+ if (!isSafeUrl(el.getAttribute('src')))
346
+ return false;
347
+ const className = el.getAttribute('class');
348
+ return {
349
+ src: el.getAttribute('src'),
350
+ alt: el.getAttribute('alt'),
351
+ title: el.getAttribute('title'),
352
+ width: el.getAttribute('width'),
353
+ height: el.getAttribute('height'),
354
+ align: imageAlignFromClass(className),
355
+ className: safeClassList(className, IMAGE_ALIGN_CLASSES),
356
+ };
357
+ }
358
+ export function imageDomAttrs(attrs) {
359
+ const out = { src: attrs.src };
360
+ if (attrs.alt !== null && attrs.alt !== undefined)
361
+ out['alt'] = attrs.alt;
362
+ if (attrs.title !== null && attrs.title !== undefined)
363
+ out['title'] = attrs.title;
364
+ if (attrs.width !== null && attrs.width !== undefined)
365
+ out['width'] = attrs.width;
366
+ if (attrs.height !== null && attrs.height !== undefined)
367
+ out['height'] = attrs.height;
368
+ const classes = [];
369
+ const align = attrs.align;
370
+ if (align)
371
+ classes.push(IMAGE_ALIGN_CLASS[align]);
372
+ if (typeof attrs.className === 'string' && attrs.className !== '') {
373
+ classes.push(attrs.className);
374
+ }
375
+ if (classes.length > 0)
376
+ out['class'] = classes.join(' ');
377
+ return out;
378
+ }
379
+ //# sourceMappingURL=structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
package/dist/tables.d.ts CHANGED
@@ -36,6 +36,19 @@
36
36
  * a navigable table into a grid of unrelated values.
37
37
  */
38
38
  import type { NodeSpec } from 'prosemirror-model';
39
+ /**
40
+ * The one validator for a table style declaration, on the way in or out.
41
+ *
42
+ * Exported because the property dialogs in `@openleaf-editor/plugins-table`
43
+ * write node attributes directly, which does not go through any parse rule. A
44
+ * dialog with its own idea of an acceptable padding would drift from this one,
45
+ * and `padding: 0;position:fixed;inset:0` is what that drift looks like: the
46
+ * value becomes two more declarations when the style attribute is serialized.
47
+ *
48
+ * Returns null for a property this schema does not model, so an unrecognised
49
+ * name is dropped rather than trusted.
50
+ */
51
+ export declare function safeTableStyleValue(property: string, value: string | undefined): string | null;
39
52
  export declare const table: NodeSpec;
40
53
  export declare const table_row: NodeSpec;
41
54
  export declare const table_cell: NodeSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AA2EjD,eAAO,MAAM,KAAK,EAAE,QA0CnB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,QAQvB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,QAOxB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAO1B,CAAA"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AA+ChE;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAM9F;AA+KD,eAAO,MAAM,KAAK,EAAE,QA0EnB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,QAmBvB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,QAOxB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAO1B,CAAA"}