diff --git a/docs/design/spreadsheet-editing.md b/docs/design/spreadsheet-editing.md index ae803ec97..9258c857c 100644 --- a/docs/design/spreadsheet-editing.md +++ b/docs/design/spreadsheet-editing.md @@ -554,38 +554,23 @@ Each step ships on its own. "Both" means `.ods` and `.xlsx`. ## Low-hanging fruit -Ordered by value over cost; all in step 0 or 1. - -- **XLSX save** — the docx save with three path names changed. -- **ODS number sync** — `office:value` beside the text, a few lines in - `text_set_content`'s successor. -- **`fullCalcOnLoad`** — one attribute, and the file stops lying after an - edit. -- **Lock classes + refusal event** — the feedback the mode needs, cheap to - emit, and the read-side view gains a marker for formula cells. The callback - is three assignments on each host, and the same channel then carries the - dirty flag the save button needs. -- **`SheetCell::value()`** — a missing read accessor; the sort script and any - binding user wants it regardless of editing. -- **The `contenteditable` gate** — one condition, removes 594 attributes from - a reference `.ods` and a layout difference between the two modes. +**All landed**, in steps 0 to 2: the xlsx save, the ods number sync, +`fullCalcOnLoad`, the lock classes and the refusal event, +`SheetCell::value()`, and the `contenteditable` gate. ## Complications to budget for -- **ODS repeat splitting is the write primitive**, and the run index was built - to be written once. Design the insert before step 2, and keep ids - append-only (`editing.md` decision 4). -- **XLSX shared strings**: converting to `inlineStr` is self-contained but the - cell's registry subtree points into `sharedStrings.xml` — it must be - rebuilt, not patched. Verify with the oracle that a workbook mixing - `inlineStr` and shared cells round-trips. +- **ODS repeat splitting is the write primitive**: **done** in step 2 — a + write cuts the run and claims the cell, and ids stay append-only + (`editing.md` decision 4). +- **XLSX shared strings**: **done** in step 2 — a written string goes inline + (`t="inlineStr"`) and the cell's registry subtree is rebuilt rather than + patched, so a workbook mixing inline and shared cells is what a save leaves. - **Stale formula results in the file** for `.ods`: **answered** in step 3.4 — the result is dropped rather than left wrong. Until step 4 there is no way to write a correct one, so such a cell renders empty here. -- **Row reflow after a commit**: the spill/clip geometry is computed at - translate time from the neighbours; the browser has to redo it for the - edited row. Without it an edit into a blank cell shows the left neighbour's - overflow painting across the new text. +- **Row reflow after a commit**: **done** — `odr.sheet.reflow(row)` redoes the + spill/clip geometry the translate computed from the neighbours. - **Sheets past the cut** (`spreadsheet_limit`, `spreadsheet_cell_limit`) are not in the page and cannot be edited; the mode should say so where a view reports a `sheet_cut`. @@ -595,25 +580,23 @@ Ordered by value over cost; all in step 0 or 1. `enable()` refuses on the document attribute rather than after typing. - **Decimal separator and locale** are read nowhere; a german user typing `1,5` gets a string in step 1. -- **A1 anchors every shape** (`anchors_shapes`): the commit patch must keep - the shape nodes and replace only the text. -- **Sort and edit together**: sorting reorders `