mirror of
https://github.com/storytold/designcraft.git
synced 2026-11-14 22:35:26 +00:00
* Tables: commands given a table id run with nothing in a table selected Table commands whose params list `story?` and `table?` (table.insertRow, table.deleteColumn, table.options, the Convert Rows commands and the others) were refused with "place the insertion point in a table" when the call named the table but the selection was not in one. A call that passes `table` now acts on that table whatever is selected. A table that is not in the document, or not in the given `story`, is refused, and a `story` that is not a non-negative integer is an error. The menus are unchanged: with nothing in a table selected, the table items stay disabled, and calls that name no table are still refused. * Tables: a bad story is refused whether or not a table is selected A call that names a table with a story that is not a non-negative integer (a string, a negative number, a fraction or null) was refused only when nothing in a table was selected. With a table selected, the command ignored the story and acted on the named table. Both paths now read story with one helper and refuse it the same way. * Tables: an edit to a named table keeps a caret in footnote text With the caret in footnote text, a table command that names a table runs, and the edit cleared the caret's footnote address, so the next typing went into the story. clamp_selection now leaves footnote addresses alone, as in_cell does.
33 lines
1.2 KiB
Rust
33 lines
1.2 KiB
Rust
//! Table menu: create, convert, insert/delete rows and columns, merge, cell/row/column options,
|
|
//! table options and cell selection.
|
|
//!
|
|
//! Commands target the table at the text selection (a caret in a cell or next to a table anchor),
|
|
//! the selected cells, or an explicit `{story, table}`; `rows: [a, b]` / `cols: [a, b]` (or `row` /
|
|
//! `col`) narrow the cell range (default: the selected cells, else the caret's cell, else the
|
|
//! whole table).
|
|
|
|
use designcraft_compose as compose;
|
|
use designcraft_doc::story::floor_char_boundary;
|
|
use designcraft_doc::{
|
|
AltFills, CellAddr, CellRange, CellStroke, Document, RowHeightMode, RowKind, Selection, StoryId, StrokeType, Table, TableSel, TextSel,
|
|
VerticalJustification,
|
|
};
|
|
use serde_json::{Value, json};
|
|
|
|
use super::{CommandSpec, bad, cmd, f64_or, has_doc, has_text, ok, str_param, table_story};
|
|
use crate::{Result, Session};
|
|
|
|
mod cell;
|
|
mod content;
|
|
mod options;
|
|
mod registry;
|
|
mod selection;
|
|
mod sizing;
|
|
mod structure;
|
|
mod styles;
|
|
mod target;
|
|
|
|
pub use registry::specs;
|
|
pub(crate) use selection::{one_selected_cell_to_text, step_cell};
|
|
pub use structure::{MAX_BODY_ROWS, MAX_COLUMNS, MAX_CONVERTED_CELLS, MAX_HEADER_FOOTER_ROWS};
|