diff --git a/Behaviors.md b/Behaviors.md index 95a12c9..b0c4b5b 100644 --- a/Behaviors.md +++ b/Behaviors.md @@ -442,6 +442,16 @@ playing use the same two words. touches — nodes are large rectangles, so touching counts, unlike the scene view's test of an object's position. Ctrl/Shift-click adds or removes single nodes, dragging any node of a selection moves all of them, and `Delete` removes all of them — one undo step either way. +- **A link is picked on its line** (#289). A click on the curve selects that link and draws a + halo behind it; Ctrl/Shift-click adds or takes one, and the rubber band takes every line it + crosses, into the same selection as the nodes and boxes it caught. `Delete` or `Backspace` + removes what is picked as one undo step, and a right-click on a line offers *Hide link* and + *Delete link* (it speaks about the whole selection, like a box's menu). The inspector shows a + picked link: the node and port at each end and the type it carries, with *Hide link* and + *Delete link* below; for several it says how many. A press counts within 6 screen pixels of + the line, and where two cross the one drawn last wins. A hidden link has no line and is never + picked this way: its mark at the port stays its handle. The port's own menu is unchanged, + *Disconnect* included. The hit test is `editor/graph/edgeHit.ts`, the canvas only asks it. - **The band catches groups and comments too** (#95), and they end up in the *same* selection as the nodes: one drag then moves all of it, one `Delete` removes all of it, one undo takes it back. A box counts only when the band holds **all** of it, where a node counts on touching alone. That diff --git a/Development.md b/Development.md index 9d4df1d..34eeeda 100644 --- a/Development.md +++ b/Development.md @@ -18,7 +18,7 @@ php tests/php/accounts.test.php # the API's accoun # has and the web server's container has not (SKIP there) php tests/php/snapshots.test.php # the snapshot store (#231), the same way php tests/php/releases.test.php # the release store (#266), the same way -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1629 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1635 editor checks, screenshots in /tmp/gm-e2e-*.png GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step ./e2e.sh start [GM_STEPS] # the same run detached, see below ./e2e.sh status # live progress, or the last run's result diff --git a/Keyboard.md b/Keyboard.md index c905e6c..cf66c68 100644 --- a/Keyboard.md +++ b/Keyboard.md @@ -1,5 +1,5 @@ `Ctrl+Z` / `Ctrl+Shift+Z` / `Ctrl+Y` undo/redo (`Cmd` works wherever `Ctrl` does) · `Delete` or -`Backspace` remove the selection (objects, nodes, frames, the shapes of a vector art, keys or a row of the Animation tab, a graph group or comment — the box only, its nodes stay, and a band that caught boxes and nodes together removes both in one step; an asset asks first) · `Ctrl+G` create +`Backspace` remove the selection (objects, nodes, frames, the shapes of a vector art, keys or a row of the Animation tab, a graph group or comment — the box only, its nodes stay, and a band that caught boxes and nodes together removes both in one step; a link or transition picked on its line; an asset asks first) · `Ctrl+G` create container from the selection · `Ctrl+Enter` play, and pause/resume while playing · `Esc` stop · `Esc` on a question does what its Cancel does · while the eyedropper of an object variable picks, `Enter` takes the candidate and `Esc` leaves diff --git a/State-machines.md b/State-machines.md index e289bb1..2ba2695 100644 --- a/State-machines.md +++ b/State-machines.md @@ -50,8 +50,10 @@ last. Only states may do this; any other node connected to itself is still refus A transition can be **named**. Select a state and the inspector lists its transitions in two groups, *out* and *in*, each row with the state at the far end, a name field and a button to -remove it — that list is also the only way to delete a transition, since the arrow itself cannot -be clicked. The name is drawn on the arrow. Names need **not** be unique across the machine: what +remove it. The arrow itself is a handle too (#289): a click on it, or on its name, picks the +transition, the inspector then shows its two states and its name field, and `Delete` or a +right-click → *Delete transition* removes it. Ctrl/Shift-click and the rubber band pick several. +The name is drawn on the arrow. Names need **not** be unique across the machine: what must not repeat is two transitions of the same name leaving the *same* state (the inspector warns when they do). That is the point of naming them — a single `State transition` node asking for `alarm` moves every state that has an `alarm`.