@openleaf-editor/core 0.1.0-beta.2 → 0.1.0-beta.3

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 (95) hide show
  1. package/README.md +115 -0
  2. package/dist/autolink.d.ts.map +1 -1
  3. package/dist/autolink.js +45 -7
  4. package/dist/autolink.js.map +1 -1
  5. package/dist/command-helpers.d.ts +8 -0
  6. package/dist/command-helpers.d.ts.map +1 -0
  7. package/dist/command-helpers.js +36 -0
  8. package/dist/command-helpers.js.map +1 -0
  9. package/dist/commands.d.ts +15 -61
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +295 -343
  12. package/dist/commands.js.map +1 -1
  13. package/dist/css.d.ts +1 -175
  14. package/dist/css.d.ts.map +1 -1
  15. package/dist/css.js +1 -516
  16. package/dist/css.js.map +1 -1
  17. package/dist/disclosure.d.ts +21 -0
  18. package/dist/disclosure.d.ts.map +1 -0
  19. package/dist/disclosure.js +144 -0
  20. package/dist/disclosure.js.map +1 -0
  21. package/dist/elements.d.ts +2 -0
  22. package/dist/elements.d.ts.map +1 -0
  23. package/dist/elements.js +2 -0
  24. package/dist/elements.js.map +1 -0
  25. package/dist/embed.d.ts +1 -51
  26. package/dist/embed.d.ts.map +1 -1
  27. package/dist/embed.js +1 -115
  28. package/dist/embed.js.map +1 -1
  29. package/dist/errors.d.ts +38 -0
  30. package/dist/errors.d.ts.map +1 -0
  31. package/dist/errors.js +40 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/extensions.d.ts +46 -5
  34. package/dist/extensions.d.ts.map +1 -1
  35. package/dist/extensions.js +272 -52
  36. package/dist/extensions.js.map +1 -1
  37. package/dist/formats.d.ts.map +1 -1
  38. package/dist/formats.js +19 -7
  39. package/dist/formats.js.map +1 -1
  40. package/dist/html.d.ts +32 -2
  41. package/dist/html.d.ts.map +1 -1
  42. package/dist/html.js +185 -31
  43. package/dist/html.js.map +1 -1
  44. package/dist/index.d.ts +21 -6
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +32 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/insert-commands.d.ts +172 -0
  49. package/dist/insert-commands.d.ts.map +1 -0
  50. package/dist/insert-commands.js +560 -0
  51. package/dist/insert-commands.js.map +1 -0
  52. package/dist/isolating-selection.d.ts +41 -0
  53. package/dist/isolating-selection.d.ts.map +1 -0
  54. package/dist/isolating-selection.js +162 -0
  55. package/dist/isolating-selection.js.map +1 -0
  56. package/dist/noneditable.d.ts.map +1 -1
  57. package/dist/noneditable.js +18 -4
  58. package/dist/noneditable.js.map +1 -1
  59. package/dist/plugins.d.ts +20 -2
  60. package/dist/plugins.d.ts.map +1 -1
  61. package/dist/plugins.js +27 -2
  62. package/dist/plugins.js.map +1 -1
  63. package/dist/preserve.d.ts +48 -17
  64. package/dist/preserve.d.ts.map +1 -1
  65. package/dist/preserve.js +214 -43
  66. package/dist/preserve.js.map +1 -1
  67. package/dist/schema.d.ts +15 -0
  68. package/dist/schema.d.ts.map +1 -1
  69. package/dist/schema.js +157 -28
  70. package/dist/schema.js.map +1 -1
  71. package/dist/structure.d.ts +32 -0
  72. package/dist/structure.d.ts.map +1 -1
  73. package/dist/structure.js +53 -10
  74. package/dist/structure.js.map +1 -1
  75. package/dist/tables.d.ts +47 -1
  76. package/dist/tables.d.ts.map +1 -1
  77. package/dist/tables.js +417 -40
  78. package/dist/tables.js.map +1 -1
  79. package/dist/testing.d.ts +3 -0
  80. package/dist/testing.d.ts.map +1 -0
  81. package/dist/testing.js +3 -0
  82. package/dist/testing.js.map +1 -0
  83. package/dist/tokens.d.ts +8 -0
  84. package/dist/tokens.d.ts.map +1 -1
  85. package/dist/tokens.js +54 -6
  86. package/dist/tokens.js.map +1 -1
  87. package/dist/url.d.ts +1 -25
  88. package/dist/url.d.ts.map +1 -1
  89. package/dist/url.js +1 -77
  90. package/dist/url.js.map +1 -1
  91. package/dist/visual-aids.d.ts +11 -1
  92. package/dist/visual-aids.d.ts.map +1 -1
  93. package/dist/visual-aids.js +124 -36
  94. package/dist/visual-aids.js.map +1 -1
  95. package/package.json +15 -1
package/dist/tables.js CHANGED
@@ -35,8 +35,10 @@
35
35
  * is what tells a screen reader which cells a header governs. Dropping it turns
36
36
  * a navigable table into a grid of unrelated values.
37
37
  */
38
+ import { DOMSerializer } from 'prosemirror-model';
39
+ import { Plugin, PluginKey } from 'prosemirror-state';
38
40
  import { applyStyleAttribute, parseDeclarations, safeColor, serializeDeclarations, } from './css.js';
39
- import { isSerializing, scrub, serializationTarget } from './preserve.js';
41
+ import { scrub, serializationTarget } from './preserve.js';
40
42
  /** Presentational attributes legacy CMS content puts on `<table>`. */
41
43
  const TABLE_LEGACY_ATTRS = ['border', 'cellpadding', 'cellspacing', 'width', 'align', 'summary', 'class'];
42
44
  /** Attributes legacy content puts on cells, plus the accessibility-critical ones. */
@@ -97,19 +99,92 @@ function safeStyleValue(property, value) {
97
99
  }
98
100
  function readStyle(el, properties) {
99
101
  const declarations = parseDeclarations(el.getAttribute('style'));
102
+ const bgcolor = safeColor(el.getAttribute('bgcolor'));
100
103
  const out = new Map();
101
104
  for (const name of properties) {
102
105
  const safe = safeStyleValue(name, declarations.get(name));
103
- if (safe)
104
- out.set(name, safe);
105
- }
106
- if (!out.has('background-color')) {
107
- const bg = safeColor(el.getAttribute('bgcolor'));
108
- if (bg)
109
- out.set('background-color', bg);
106
+ /*
107
+ * `bgcolor` is the legacy spelling of `background-color`, read only when
108
+ * the declaration itself is absent.
109
+ *
110
+ * Resolved INSIDE the loop so that the result is in `properties` order
111
+ * whichever spelling it came from. Filling it in afterwards -- which is
112
+ * what this did -- appended the background last when it came from the
113
+ * attribute and emitted it first when it came from the declaration. A cell
114
+ * carrying both a `bgcolor` and a `padding` therefore serialized in one
115
+ * order on the first save and the other on the second: the round trip was
116
+ * not a fixed point, so the markup churned on every save, forever, with a
117
+ * real diff each time and nothing to show for it.
118
+ */
119
+ const value = safe ?? (name === 'background-color' ? bgcolor : null);
120
+ if (value)
121
+ out.set(name, value);
110
122
  }
111
123
  return serializeDeclarations(out);
112
124
  }
125
+ /**
126
+ * Remove from a node's carried residue every declaration the node itself
127
+ * consumed, and nothing else.
128
+ *
129
+ * The counterpart to `readStyle`. Because `style` is always carried verbatim
130
+ * (see extensions.ts for why a composite attribute cannot be "claimed" by a
131
+ * spec), a cell that stored `background-color:red;border:1px solid red` holds
132
+ * the whole string in residue and the background in its own attribute. Emitting
133
+ * both would write the background twice.
134
+ *
135
+ * The test is `safeTableStyleValue(...) !== null`, not "is this property in the
136
+ * list", and the difference is the point: `readStyle` drops a value it cannot
137
+ * validate, so `width:calc(100% - 3px)` never reached the node's attribute and
138
+ * must therefore stay in the residue. Matching on the property name alone would
139
+ * delete it from both places and lose it.
140
+ *
141
+ * `bgcolor` and `vertical-align` go for the same reason one level up: both are
142
+ * folded into a modelled attribute on the way in, so leaving the original in the
143
+ * residue emits two spellings of one fact -- which is the state `<td bgcolor>`
144
+ * was actually in, coming back as `style="background-color:#f00" bgcolor="#f00"`.
145
+ * This is the trade `scrubModelledStyle` already makes for `<p align="center">`:
146
+ * stored content converges on the spelling that is still valid HTML.
147
+ */
148
+ function scrubTableStyle(properties, cell) {
149
+ return (carried) => {
150
+ const style = carried['style'];
151
+ if (style !== undefined) {
152
+ const declarations = parseDeclarations(style);
153
+ const before = declarations.size;
154
+ for (const name of properties) {
155
+ const value = declarations.get(name);
156
+ if (value !== undefined && safeTableStyleValue(name, value) !== null) {
157
+ declarations.delete(name);
158
+ }
159
+ }
160
+ if (cell) {
161
+ const valign = declarations.get('vertical-align');
162
+ if (valign !== undefined && safeVAlign(valign) !== null) {
163
+ declarations.delete('vertical-align');
164
+ }
165
+ }
166
+ // Nothing consumed means nothing to rewrite: leave the author's spelling
167
+ // alone, for the same reason `scrubModelledStyle` does.
168
+ if (declarations.size !== before) {
169
+ const rest = serializeDeclarations(declarations);
170
+ if (rest !== null)
171
+ carried['style'] = rest;
172
+ else
173
+ delete carried['style'];
174
+ }
175
+ }
176
+ const bgcolor = carried['bgcolor'];
177
+ if (bgcolor !== undefined && safeColor(bgcolor) !== null)
178
+ delete carried['bgcolor'];
179
+ };
180
+ }
181
+ /** The residue scrubs for the table node types, keyed by schema node name. */
182
+ export const CARRIED_STYLE_SCRUBS = {
183
+ table: scrubTableStyle(TABLE_STYLE_PROPS, false),
184
+ table_row: scrubTableStyle(ROW_STYLE_PROPS, false),
185
+ table_cell: scrubTableStyle(CELL_STYLE_PROPS, true),
186
+ table_header: scrubTableStyle(CELL_STYLE_PROPS, true),
187
+ };
113
188
  function readAttrs(el, names) {
114
189
  const out = {};
115
190
  for (const name of names)
@@ -127,19 +202,131 @@ function writeAttrs(attrs, names) {
127
202
  }
128
203
  const legacyDefaults = (names) => Object.fromEntries(names.map((name) => [name, { default: null }]));
129
204
  /**
130
- * Parse `colwidth` from an inline width style or attribute.
205
+ * Bounds for the cell span attributes, and why a parser has to impose them.
131
206
  *
132
- * `prosemirror-tables` stores column widths as an array of numbers on the cell
133
- * that starts the column, which is how its resizing plugin reads them.
207
+ * Both consumers of `colspan` scale linearly in it. `TableMap.get` allocates and
208
+ * fills `width * height` map cells, and `updateColumnsOnResize` -- installed for
209
+ * every table node view by `columnResizing()` in `plugins-table` -- appends one
210
+ * real `<col>` element per column. So a single stored `<td colspan="5000000">`
211
+ * was five million DOM elements built synchronously on first render, and a table
212
+ * asked to lay out half a billion pixels wide. That is a hung tab from a
213
+ * fifty-byte attribute, reachable through every entry point into the schema:
214
+ * `element.value`, `parseHtml`, a paste, an import, or content stored before this
215
+ * bound existed.
216
+ *
217
+ * Negative values were worse than large ones. `|| 1` catches `NaN` and `0` and
218
+ * nothing else, so `colspan="-5"` landed verbatim and `computeMap` then did
219
+ * `mapPos += colspan` with a negative operand, walking its write cursor backwards
220
+ * through the map it was filling.
221
+ *
222
+ * The numbers are HTML's own limits, so nothing an author could have written in a
223
+ * document is lost: a browser parsing the same markup clamps it identically.
224
+ *
225
+ * Clamping here rather than defending in the consumers is deliberate. The
226
+ * commands in `plugins-table`, the property dialogs, `fixTables` and the resize
227
+ * node view all read `node.attrs.colspan` directly, and every one of them would
228
+ * otherwise need a bound of its own.
134
229
  */
135
- function readColwidth(el) {
136
- const widthAttr = el.getAttribute('data-colwidth');
137
- if (widthAttr) {
138
- const parsed = widthAttr.split(',').map((n) => Number.parseInt(n, 10));
139
- if (parsed.every((n) => Number.isFinite(n)))
140
- return parsed;
230
+ const MAX_COLSPAN = 1000;
231
+ const MAX_ROWSPAN = 65534;
232
+ /**
233
+ * The cumulative bound, and why the per-cell one is not enough on its own.
234
+ *
235
+ * `MAX_COLSPAN` bounds one attribute. It does not bound their sum, and both
236
+ * consumers scale in the sum: a row of 5,000 `<td colspan="1000">` cells is
237
+ * about 125 KB of input and produces a five-million-column table -- measured,
238
+ * not estimated -- which is the same hung tab the per-cell clamp exists to
239
+ * prevent, reached by addition instead of by one large number.
240
+ *
241
+ * So a row gets a total as well, and each cell is clamped against what the row
242
+ * has left. A cell arriving with nothing left still claims one column rather
243
+ * than being dropped: losing a cell silently changes the document, and one
244
+ * column each is already harmless. That puts the worst case at
245
+ * `max(cells in the row, MAX_TABLE_COLUMNS)` columns -- linear in the input,
246
+ * because 5,000 cells cost 5,000 tags to write. Removing the amplification is
247
+ * the property that matters; a wide table is only ever as wide as its markup.
248
+ */
249
+ const MAX_TABLE_COLUMNS = 1000;
250
+ /**
251
+ * A column wider than this is not a layout.
252
+ *
253
+ * `updateColumnsOnResize` writes each entry straight into `col.style.width`, and
254
+ * sums them into the table's `minWidth`.
255
+ */
256
+ const MAX_COLWIDTH = 10000;
257
+ /**
258
+ * A span attribute, clamped to what HTML itself allows.
259
+ *
260
+ * `rowspan="0"` means "to the end of the section" in HTML, but
261
+ * `prosemirror-tables` requires at least 1 and the schema default is 1, so it
262
+ * normalizes up rather than being carried as a zero the cell map cannot use.
263
+ */
264
+ function readSpan(el, name, max) {
265
+ const parsed = Number.parseInt(el.getAttribute(name) ?? '1', 10);
266
+ if (!Number.isFinite(parsed) || parsed < 1)
267
+ return 1;
268
+ return Math.min(parsed, max);
269
+ }
270
+ /**
271
+ * Every cell in a row, clamped against the row's cumulative column budget.
272
+ *
273
+ * Computed once per row and memoised rather than per cell against its preceding
274
+ * siblings, which would be quadratic in exactly the row built to be wide. Keyed
275
+ * by element, so the answer does not depend on the order ProseMirror happens to
276
+ * visit the cells in, and recomputing it for the same row is a lookup.
277
+ */
278
+ const rowBudgets = new WeakMap();
279
+ /** Whether this element is a cell, so a stray child cannot spend the budget. */
280
+ function isCell(el) {
281
+ const name = el.nodeName.toLowerCase();
282
+ return name === 'td' || name === 'th';
283
+ }
284
+ function budgetedColspan(el) {
285
+ const row = el.parentElement;
286
+ if (row === null)
287
+ return readSpan(el, 'colspan', MAX_COLSPAN);
288
+ let budget = rowBudgets.get(row);
289
+ if (budget === undefined) {
290
+ budget = new Map();
291
+ let used = 0;
292
+ for (const cell of Array.from(row.children)) {
293
+ if (!isCell(cell))
294
+ continue;
295
+ const asked = readSpan(cell, 'colspan', MAX_COLSPAN);
296
+ // At least one: see the note on MAX_TABLE_COLUMNS about not dropping cells.
297
+ const granted = Math.max(1, Math.min(asked, MAX_TABLE_COLUMNS - used));
298
+ budget.set(cell, granted);
299
+ used += granted;
300
+ }
301
+ rowBudgets.set(row, budget);
141
302
  }
142
- return null;
303
+ return budget.get(el) ?? readSpan(el, 'colspan', MAX_COLSPAN);
304
+ }
305
+ /**
306
+ * Parse `colwidth` from the attribute the serializer writes.
307
+ *
308
+ * `prosemirror-tables` stores column widths as an array of numbers on the cell
309
+ * that starts the column, which is how its resizing plugin reads them -- one
310
+ * entry per column the cell covers, which is the invariant the commands in
311
+ * `plugins-table` already document and rely on.
312
+ *
313
+ * The digits-only test and the length check are `prosemirror-tables`' own rules
314
+ * for the same attribute, adopted rather than reinvented. They are stricter than
315
+ * the `Number.isFinite` test they replace in the two ways that matter: a negative
316
+ * width no longer survives to be written into `col.style.width`, and an array
317
+ * that does not match `colspan` is rejected instead of being indexed past its
318
+ * end. The ceiling is ours, for the same reason the span bounds exist.
319
+ */
320
+ function readColwidth(el, colspan) {
321
+ const attr = el.getAttribute('data-colwidth');
322
+ if (!attr || !/^\d+(,\d+)*$/.test(attr))
323
+ return null;
324
+ const parsed = attr.split(',').map((n) => Number.parseInt(n, 10));
325
+ if (parsed.length !== colspan)
326
+ return null;
327
+ if (parsed.some((n) => n < 1 || n > MAX_COLWIDTH))
328
+ return null;
329
+ return parsed;
143
330
  }
144
331
  const cellAttrs = {
145
332
  // These three names are required by prosemirror-tables.
@@ -151,10 +338,15 @@ const cellAttrs = {
151
338
  };
152
339
  function cellGetAttrs(dom) {
153
340
  const el = dom;
341
+ // Against the row's remaining budget, not just the per-cell ceiling: the sum
342
+ // is what both consumers actually scale in. See MAX_TABLE_COLUMNS.
343
+ const colspan = budgetedColspan(el);
154
344
  const attrs = {
155
- colspan: Number.parseInt(el.getAttribute('colspan') ?? '1', 10) || 1,
156
- rowspan: Number.parseInt(el.getAttribute('rowspan') ?? '1', 10) || 1,
157
- colwidth: readColwidth(el),
345
+ colspan,
346
+ rowspan: readSpan(el, 'rowspan', MAX_ROWSPAN),
347
+ // Read against the clamped colspan, not the attribute: the array has to
348
+ // match the number of columns the cell actually claims.
349
+ colwidth: readColwidth(el, colspan),
158
350
  ...readAttrs(el, CELL_LEGACY_ATTRS),
159
351
  style: readStyle(el, CELL_STYLE_PROPS),
160
352
  };
@@ -225,13 +417,28 @@ function cellToDOM(tag) {
225
417
  * is to hand markup back unmodified.
226
418
  */
227
419
  const FURNITURE_TAGS = new Set(['caption', 'colgroup', 'col']);
420
+ /**
421
+ * Drop `contenteditable` from furniture before it is stored as a node attr.
422
+ *
423
+ * The editor stamps `contenteditable="false"` on a live caption so a caret
424
+ * cannot enter it. That marker is not author content. Clipboard HTML used to
425
+ * carry it (DOMSerializer does not run inside `serializeHtml`), parse then
426
+ * kept it via `scrub`, and from then on it was in the document permanently.
427
+ * Stripping here is how already-contaminated markup, and any future serializer
428
+ * hole, cannot persist it.
429
+ */
430
+ function dropFurnitureInertMarker(el) {
431
+ el.removeAttribute('contenteditable');
432
+ }
228
433
  /** Serialized direct children of `el` matching `tags`, in document order. */
229
434
  function readFurniture(el, tags) {
230
435
  let html = '';
231
436
  for (const child of Array.from(el.children)) {
232
437
  if (!tags.includes(child.nodeName.toLowerCase()))
233
438
  continue;
234
- html += scrub(child);
439
+ const clone = child.cloneNode(true);
440
+ dropFurnitureInertMarker(clone);
441
+ html += scrub(clone);
235
442
  // HTML permits exactly one caption; a second is somebody else's bug and
236
443
  // concatenating it would render two. Take the first and stop.
237
444
  if (child.nodeName.toLowerCase() === 'caption')
@@ -246,20 +453,103 @@ function readFurniture(el, tags) {
246
453
  * illegal inside a `<div>` and would be silently discarded there -- the same
247
454
  * reason the preservation layer uses one.
248
455
  */
249
- function appendFurniture(table, html, doc, inert) {
456
+ function appendFurniture(table, html, doc) {
250
457
  const tpl = doc.createElement('template');
251
458
  tpl.innerHTML = html;
252
459
  for (const child of Array.from(tpl.content.children)) {
253
460
  if (!FURNITURE_TAGS.has(child.nodeName.toLowerCase()))
254
461
  continue;
255
- // Editor only. A caption sits inside the editable area but outside the
256
- // node's contentDOM, so without this a caret can enter text ProseMirror
257
- // will discard on its next redraw.
258
- if (inert)
259
- child.setAttribute('contenteditable', 'false');
462
+ // Never stamp `contenteditable` here. `toDOM` is shared by the editor, by
463
+ // `serializeHtml`, and by clipboard serialization (`DOMSerializer` is
464
+ // called with no `withSerializationDocument` wrap). Emitting the inert
465
+ // marker for "not serializeHtml" leaked it into clipboard HTML, then into
466
+ // stored content on paste. The editor applies the marker in a node view
467
+ // (`tableCaptionNodeView`) that serializers never run.
260
468
  table.appendChild(child);
261
469
  }
262
470
  }
471
+ /**
472
+ * `<thead>` and `<tfoot>`: recorded as row COUNTS, restored on serialization.
473
+ *
474
+ * The wrappers were skipped on parse and never written back, so every save
475
+ * flattened a grouped table into one undifferentiated `<tbody>`. That is not a
476
+ * cosmetic loss. `<thead>` is what makes a header repeat at the top of each page
477
+ * when a long table is printed, it is the hook `position: sticky` header CSS and
478
+ * every `thead th` selector in a site's stylesheet attach to, and it is the
479
+ * structural cue that tells assistive technology which rows label the data.
480
+ * Opening and saving an inherited document changed how the page rendered and
481
+ * printed, in a way nothing in the editor showed.
482
+ *
483
+ * A count rather than a wrapper node, for the reason spelled out above
484
+ * `readFurniture`: `prosemirror-tables` computes its cell map with
485
+ * `height = table.childCount` and reads `table.child(row)` as a row, so a
486
+ * `thead` node between the table and its rows would shift every coordinate the
487
+ * library derives and break cell selection, column resizing and the row and
488
+ * column commands. The rows stay direct children; only the knowledge of where
489
+ * the groups were is stored beside them.
490
+ *
491
+ * Counted from the ends and only from the ends. A `<tfoot>` written before its
492
+ * `<tbody>` -- required by HTML 4, still common in old content -- leaves rows
493
+ * that are not trailing, so no footer is recorded and that table keeps today's
494
+ * behaviour. The alternative is taking the last N rows regardless and moving
495
+ * somebody's data into a `<tfoot>` it never belonged to, which is worse than the
496
+ * loss it would be fixing.
497
+ */
498
+ const tableSectionRows = new WeakMap();
499
+ /**
500
+ * Row counts for a `<table>` element this module rendered, or undefined.
501
+ *
502
+ * The serialization pass in html.ts needs to know how many of a table's rows
503
+ * came out of a `<thead>`, and `toDOM` cannot tell it in the output: ProseMirror
504
+ * allows exactly one `contentDOM`, so rows cannot flow into two sections. The
505
+ * count therefore travels beside the DOM rather than inside it.
506
+ *
507
+ * Out of band for the same reason `preservedElements` is (see preserve.ts): a
508
+ * `data-` attribute stripped after the fact cannot distinguish the attribute
509
+ * this code just added from the identical attribute in a customer's document,
510
+ * and deleting theirs is a worse bug than the one being fixed. A WeakMap cannot
511
+ * collide with content and needs no cleanup pass.
512
+ */
513
+ export function tableSectionRowCounts(el) {
514
+ return tableSectionRows.get(el);
515
+ }
516
+ /**
517
+ * Count the rows a table's own `<thead>` and `<tfoot>` contribute.
518
+ *
519
+ * Direct children only, at both levels. `querySelectorAll` would attribute a
520
+ * nested table's header to the outer table and lift the wrong rows on the way
521
+ * out -- a nested table is the case where being off by a row is silent and
522
+ * permanent.
523
+ *
524
+ * The rows are walked in the order the parser will see them, because that is the
525
+ * order they will be in on the node. A `<thead>` that is not first, or a
526
+ * `<tfoot>` that is not last, contributes nothing: the counts describe a leading
527
+ * and a trailing run, and anything else cannot be expressed as one.
528
+ */
529
+ function readSectionRows(el) {
530
+ const owners = [];
531
+ for (const child of Array.from(el.children)) {
532
+ const name = child.nodeName.toLowerCase();
533
+ if (name === 'tr') {
534
+ owners.push('tbody');
535
+ continue;
536
+ }
537
+ if (name !== 'thead' && name !== 'tbody' && name !== 'tfoot')
538
+ continue;
539
+ for (const row of Array.from(child.children)) {
540
+ if (row.nodeName.toLowerCase() === 'tr')
541
+ owners.push(name);
542
+ }
543
+ }
544
+ let header = 0;
545
+ while (header < owners.length && owners[header] === 'thead')
546
+ header += 1;
547
+ let footer = 0;
548
+ while (footer < owners.length - header && owners[owners.length - 1 - footer] === 'tfoot') {
549
+ footer += 1;
550
+ }
551
+ return { header, footer };
552
+ }
263
553
  export const table = {
264
554
  content: 'table_row+',
265
555
  tableRole: 'table',
@@ -269,17 +559,24 @@ export const table = {
269
559
  ...legacyDefaults(TABLE_LEGACY_ATTRS),
270
560
  caption: { default: null },
271
561
  colgroup: { default: null },
562
+ headerRows: { default: 0 },
563
+ footerRows: { default: 0 },
272
564
  style: { default: null },
273
565
  },
274
566
  parseDOM: [
275
567
  {
276
568
  tag: 'table',
277
- getAttrs: (dom) => ({
278
- ...readAttrs(dom, TABLE_LEGACY_ATTRS),
279
- caption: readFurniture(dom, ['caption']),
280
- colgroup: readFurniture(dom, ['colgroup', 'col']),
281
- style: readStyle(dom, TABLE_STYLE_PROPS),
282
- }),
569
+ getAttrs: (dom) => {
570
+ const sections = readSectionRows(dom);
571
+ return {
572
+ ...readAttrs(dom, TABLE_LEGACY_ATTRS),
573
+ caption: readFurniture(dom, ['caption']),
574
+ colgroup: readFurniture(dom, ['colgroup', 'col']),
575
+ headerRows: sections.header,
576
+ footerRows: sections.footer,
577
+ style: readStyle(dom, TABLE_STYLE_PROPS),
578
+ };
579
+ },
283
580
  },
284
581
  /*
285
582
  * `tbody`, `thead` and `tfoot` are SKIPPED rather than ignored: the wrapper
@@ -289,6 +586,12 @@ export const table = {
289
586
  * These rules also have to exist because the preservation layer's catch-all
290
587
  * would otherwise claim a `<tbody>` as unrecognised markup and produce an
291
588
  * opaque atom that `table_row+` refuses to accept.
589
+ *
590
+ * Skipping loses which group each row was in, which is why `headerRows` and
591
+ * `footerRows` are counted separately in `getAttrs` and put back on the way
592
+ * out. Attributes ON the wrapper -- a `<thead class="sticky">` -- are still
593
+ * dropped; recording the grouping is the fidelity win worth having, and a
594
+ * second residue channel for an element that is not a node is not.
292
595
  */
293
596
  { tag: 'tbody', skip: true },
294
597
  { tag: 'thead', skip: true },
@@ -301,18 +604,31 @@ export const table = {
301
604
  * them the preservation layer's catch-all claims a `<caption>` as an
302
605
  * unrecognised block, and `table_row+` refuses to accept it, so the caption
303
606
  * is dropped a second way by a different mechanism.
607
+ *
608
+ * They are scoped with `context: 'table/'`. `DOMParser.fromSchema` flattens
609
+ * every spec's parse rules into one list; a rule declared on `table` is
610
+ * otherwise global. Unscoped `ignore` also fired for an orphaned
611
+ * `<caption>` or `<col>` -- a fragment, a partial paste, a leftover after
612
+ * the table was deleted -- and `ignore` takes the element's text with it.
613
+ * Outside a table the preservation layer keeps the markup instead.
304
614
  */
305
- { tag: 'colgroup', ignore: true },
306
- { tag: 'col', ignore: true },
307
- { tag: 'caption', ignore: true },
615
+ { tag: 'colgroup', ignore: true, context: 'table/' },
616
+ { tag: 'col', ignore: true, context: 'table/' },
617
+ { tag: 'caption', ignore: true, context: 'table/' },
308
618
  ],
309
619
  toDOM(node) {
310
620
  const attrs = writeAttrs(node.attrs, TABLE_LEGACY_ATTRS);
311
621
  const caption = node.attrs['caption'];
312
622
  const colgroup = node.attrs['colgroup'];
313
623
  const style = node.attrs['style'];
314
- if (!caption && !colgroup && !style)
624
+ const header = node.attrs['headerRows'] || 0;
625
+ const footer = node.attrs['footerRows'] || 0;
626
+ // A table with sections has to take the element path even when it has no
627
+ // furniture: the row counts are keyed by the element, and the array path
628
+ // never produces one to key them by.
629
+ if (!caption && !colgroup && !style && !header && !footer) {
315
630
  return ['table', attrs, ['tbody', 0]];
631
+ }
316
632
  /*
317
633
  * Furniture forces a real element rather than an output-spec array, because
318
634
  * an array cannot express "these children, then the content hole inside a
@@ -329,14 +645,75 @@ export const table = {
329
645
  // Emitting them in any other order produces markup browsers reshuffle, which
330
646
  // would make the round-trip lossy again by a subtler route.
331
647
  if (caption)
332
- appendFurniture(table, caption, doc, !isSerializing());
648
+ appendFurniture(table, caption, doc);
333
649
  if (colgroup)
334
- appendFurniture(table, colgroup, doc, false);
650
+ appendFurniture(table, colgroup, doc);
335
651
  const tbody = doc.createElement('tbody');
336
652
  table.appendChild(tbody);
653
+ /*
654
+ * Every row goes into the one `<tbody>`, including the header rows, and the
655
+ * split back into `<thead>`/`<tfoot>` happens after serialization in
656
+ * html.ts. It cannot happen here: a node has exactly one `contentDOM`, so
657
+ * there is no output spec that means "the first two rows here, the rest
658
+ * there". This is also why the editor shows a grouped table as one body --
659
+ * the grouping survives the save, it just is not visible while typing.
660
+ */
661
+ if (header || footer)
662
+ tableSectionRows.set(table, { header, footer });
337
663
  return { dom: table, contentDOM: tbody };
338
664
  },
339
665
  };
666
+ /**
667
+ * Editor-only table node view: same DOM as `toDOM`, plus `contenteditable="false"`
668
+ * on a preserved caption.
669
+ *
670
+ * A caption sits inside the editable area but outside the node's `contentDOM`,
671
+ * so without the marker a caret can enter text ProseMirror will discard on its
672
+ * next redraw. Serializers (`serializeHtml`, clipboard `DOMSerializer`) never
673
+ * consult node views, so the marker cannot reach stored or clipboard HTML.
674
+ *
675
+ * `@openleaf-editor/plugins-table` replaces this with `CaptionedTableView`, which
676
+ * stamps the same attribute on the caption it rebuilds. Until that bundle loads,
677
+ * this is the view the core editor uses.
678
+ */
679
+ export function tableCaptionNodeView(node) {
680
+ const spec = node.type.spec.toDOM(node);
681
+ const rendered = Array.isArray(spec)
682
+ ? DOMSerializer.renderSpec(document, spec)
683
+ : spec;
684
+ const root = rendered.dom;
685
+ if (root instanceof Element) {
686
+ const first = root.firstElementChild;
687
+ if (first && first.nodeName === 'CAPTION')
688
+ first.setAttribute('contenteditable', 'false');
689
+ }
690
+ const view = { dom: rendered.dom };
691
+ if (rendered.contentDOM)
692
+ view.contentDOM = rendered.contentDOM;
693
+ return view;
694
+ }
695
+ const captionViewKey = new PluginKey('openleaf-table-caption-view');
696
+ /**
697
+ * Registers `tableCaptionNodeView` for editors that have not loaded
698
+ * `@openleaf-editor/plugins-table`.
699
+ *
700
+ * Must sit *before* that bundle's plugins in the editor stack.
701
+ * `EditorView.someProp` walks plugins from the end, so `columnResizing`'s
702
+ * `CaptionedTableView` still wins when both are present. Putting this view
703
+ * later is how it once shadowed column resize.
704
+ */
705
+ export function tableCaptionPlugin() {
706
+ return new Plugin({
707
+ key: captionViewKey,
708
+ props: {
709
+ nodeViews: {
710
+ table(node) {
711
+ return tableCaptionNodeView(node);
712
+ },
713
+ },
714
+ },
715
+ });
716
+ }
340
717
  export const table_row = {
341
718
  content: '(table_cell | table_header)*',
342
719
  tableRole: 'row',
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Test-only registry controls. Import from `@openleaf-editor/core/testing`. */
2
+ export { clearSchemaExtensions } from './extensions.js';
3
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Test-only registry controls. Import from `@openleaf-editor/core/testing`. */
2
+ export { clearSchemaExtensions } from './extensions.js';
3
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}