max / goingson
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
- Claude-Session
- https://claude.ai/code/session_01WHu5vBgpCULUFXsEJBHryC
4 files changed,
+58 insertions,
-24 deletions
| @@ -1387,7 +1387,7 @@ | |||
| 1387 | 1387 | "libc", | |
| 1388 | 1388 | "option-ext", | |
| 1389 | 1389 | "redox_users", | |
| 1390 | - | "windows-sys 0.61.2", | |
| 1390 | + | "windows-sys 0.60.2", | |
| 1391 | 1391 | ] | |
| 1392 | 1392 | ||
| 1393 | 1393 | [[package]] | |
| @@ -1628,7 +1628,7 @@ | |||
| 1628 | 1628 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" | |
| 1629 | 1629 | dependencies = [ | |
| 1630 | 1630 | "libc", | |
| 1631 | - | "windows-sys 0.61.2", | |
| 1631 | + | "windows-sys 0.60.2", | |
| 1632 | 1632 | ] | |
| 1633 | 1633 | ||
| 1634 | 1634 | [[package]] | |
| @@ -3650,7 +3650,7 @@ | |||
| 3650 | 3650 | "png 0.18.1", | |
| 3651 | 3651 | "serde", | |
| 3652 | 3652 | "thiserror 2.0.20", | |
| 3653 | - | "windows-sys 0.61.2", | |
| 3653 | + | "windows-sys 0.60.2", | |
| 3654 | 3654 | ] | |
| 3655 | 3655 | ||
| 3656 | 3656 | [[package]] | |
| @@ -3783,7 +3783,7 @@ | |||
| 3783 | 3783 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 3784 | 3784 | checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" | |
| 3785 | 3785 | dependencies = [ | |
| 3786 | - | "windows-sys 0.61.2", | |
| 3786 | + | "windows-sys 0.60.2", | |
| 3787 | 3787 | ] | |
| 3788 | 3788 | ||
| 3789 | 3789 | [[package]] | |
| @@ -4717,7 +4717,7 @@ | |||
| 4717 | 4717 | ||
| 4718 | 4718 | [[package]] | |
| 4719 | 4719 | name = "quasi-http" | |
| 4720 | - | version = "0.91.0" | |
| 4720 | + | version = "0.91.1" | |
| 4721 | 4721 | dependencies = [ | |
| 4722 | 4722 | "form_urlencoded", | |
| 4723 | 4723 | "http", | |
| @@ -4726,7 +4726,7 @@ | |||
| 4726 | 4726 | ||
| 4727 | 4727 | [[package]] | |
| 4728 | 4728 | name = "quasi-notifs" | |
| 4729 | - | version = "0.91.0" | |
| 4729 | + | version = "0.91.1" | |
| 4730 | 4730 | dependencies = [ | |
| 4731 | 4731 | "quasi-router", | |
| 4732 | 4732 | "synckit-config", | |
| @@ -4736,14 +4736,14 @@ | |||
| 4736 | 4736 | ||
| 4737 | 4737 | [[package]] | |
| 4738 | 4738 | name = "quasi-router" | |
| 4739 | - | version = "0.91.0" | |
| 4739 | + | version = "0.91.1" | |
| 4740 | 4740 | dependencies = [ | |
| 4741 | 4741 | "makeover-layout", | |
| 4742 | 4742 | ] | |
| 4743 | 4743 | ||
| 4744 | 4744 | [[package]] | |
| 4745 | 4745 | name = "quasi-tauri" | |
| 4746 | - | version = "0.91.0" | |
| 4746 | + | version = "0.91.1" | |
| 4747 | 4747 | dependencies = [ | |
| 4748 | 4748 | "http", | |
| 4749 | 4749 | "quasi-http", | |
| @@ -4769,7 +4769,7 @@ | |||
| 4769 | 4769 | ||
| 4770 | 4770 | [[package]] | |
| 4771 | 4771 | name = "quasi-webview" | |
| 4772 | - | version = "0.91.0" | |
| 4772 | + | version = "0.91.1" | |
| 4773 | 4773 | dependencies = [ | |
| 4774 | 4774 | "docengine", | |
| 4775 | 4775 | "makeover-layout", | |
| @@ -5208,7 +5208,7 @@ | |||
| 5208 | 5208 | "errno", | |
| 5209 | 5209 | "libc", | |
| 5210 | 5210 | "linux-raw-sys", | |
| 5211 | - | "windows-sys 0.61.2", | |
| 5211 | + | "windows-sys 0.60.2", | |
| 5212 | 5212 | ] | |
| 5213 | 5213 | ||
| 5214 | 5214 | [[package]] | |
| @@ -5265,7 +5265,7 @@ | |||
| 5265 | 5265 | "security-framework", | |
| 5266 | 5266 | "security-framework-sys", | |
| 5267 | 5267 | "webpki-root-certs", | |
| 5268 | - | "windows-sys 0.61.2", | |
| 5268 | + | "windows-sys 0.60.2", | |
| 5269 | 5269 | ] | |
| 5270 | 5270 | ||
| 5271 | 5271 | [[package]] | |
| @@ -5805,7 +5805,7 @@ | |||
| 5805 | 5805 | checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" | |
| 5806 | 5806 | dependencies = [ | |
| 5807 | 5807 | "libc", | |
| 5808 | - | "windows-sys 0.61.2", | |
| 5808 | + | "windows-sys 0.60.2", | |
| 5809 | 5809 | ] | |
| 5810 | 5810 | ||
| 5811 | 5811 | [[package]] | |
| @@ -6565,7 +6565,7 @@ | |||
| 6565 | 6565 | "getrandom 0.4.3", | |
| 6566 | 6566 | "once_cell", | |
| 6567 | 6567 | "rustix", | |
| 6568 | - | "windows-sys 0.61.2", | |
| 6568 | + | "windows-sys 0.60.2", | |
| 6569 | 6569 | ] | |
| 6570 | 6570 | ||
| 6571 | 6571 | [[package]] | |
| @@ -6587,7 +6587,7 @@ | |||
| 6587 | 6587 | "parking_lot", | |
| 6588 | 6588 | "rustix", | |
| 6589 | 6589 | "signal-hook", | |
| 6590 | - | "windows-sys 0.61.2", | |
| 6590 | + | "windows-sys 0.60.2", | |
| 6591 | 6591 | ] | |
| 6592 | 6592 | ||
| 6593 | 6593 | [[package]] | |
| @@ -7069,7 +7069,7 @@ | |||
| 7069 | 7069 | "png 0.18.1", | |
| 7070 | 7070 | "serde", | |
| 7071 | 7071 | "thiserror 2.0.20", | |
| 7072 | - | "windows-sys 0.61.2", | |
| 7072 | + | "windows-sys 0.60.2", | |
| 7073 | 7073 | ] | |
| 7074 | 7074 | ||
| 7075 | 7075 | [[package]] | |
| @@ -7104,7 +7104,7 @@ | |||
| 7104 | 7104 | dependencies = [ | |
| 7105 | 7105 | "memoffset", | |
| 7106 | 7106 | "tempfile", | |
| 7107 | - | "windows-sys 0.61.2", | |
| 7107 | + | "windows-sys 0.60.2", | |
| 7108 | 7108 | ] | |
| 7109 | 7109 | ||
| 7110 | 7110 | [[package]] | |
| @@ -7634,7 +7634,7 @@ | |||
| 7634 | 7634 | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 7635 | 7635 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" | |
| 7636 | 7636 | dependencies = [ | |
| 7637 | - | "windows-sys 0.61.2", | |
| 7637 | + | "windows-sys 0.60.2", | |
| 7638 | 7638 | ] | |
| 7639 | 7639 | ||
| 7640 | 7640 | [[package]] | |
| @@ -8493,15 +8493,15 @@ | |||
| 8493 | 8493 | ||
| 8494 | 8494 | [[patch.unused]] | |
| 8495 | 8495 | name = "quasi-axum" | |
| 8496 | - | version = "0.91.0" | |
| 8496 | + | version = "0.91.1" | |
| 8497 | 8497 | ||
| 8498 | 8498 | [[patch.unused]] | |
| 8499 | 8499 | name = "quasi-basics" | |
| 8500 | - | version = "0.91.0" | |
| 8500 | + | version = "0.91.1" | |
| 8501 | 8501 | ||
| 8502 | 8502 | [[patch.unused]] | |
| 8503 | 8503 | name = "quasi-immediate" | |
| 8504 | - | version = "0.91.0" | |
| 8504 | + | version = "0.91.1" | |
| 8505 | 8505 | ||
| 8506 | 8506 | [[patch.unused]] | |
| 8507 | 8507 | name = "quasi-store" |
| @@ -56,7 +56,14 @@ | |||
| 56 | 56 | * same one-variable walk the Rust side makes. | |
| 57 | 57 | */ | |
| 58 | 58 | const settle = (row) => { | |
| 59 | - | let shut = null; | |
| 59 | + | // Seeded from the row that was just pressed, which is the whole of | |
| 60 | + | // `d131a14c`: this started at `null` and only ever learned about a | |
| 61 | + | // *descendant's* chevron, so shutting a branch hid nothing at all. | |
| 62 | + | // Every row under a shut one is hidden, and the row's own state is the | |
| 63 | + | // only thing that says whether it is shut. | |
| 64 | + | let shut = row.querySelector(DISCLOSE)?.getAttribute("aria-expanded") === "false" | |
| 65 | + | ? depth(row) | |
| 66 | + | : null; | |
| 60 | 67 | for (const next of under(row)) { | |
| 61 | 68 | const level = depth(next); | |
| 62 | 69 | if (shut !== null && level <= shut) shut = null; | |
| @@ -69,6 +76,21 @@ | |||
| 69 | 76 | } | |
| 70 | 77 | }; | |
| 71 | 78 | ||
| 79 | + | // Capture, so this runs before anything bound on the way down. | |
| 80 | + | // | |
| 81 | + | // Found 2026-08-30 by the first test written against this file. Bubbling, | |
| 82 | + | // `stopPropagation` here stopped nothing that had already run: a listener | |
| 83 | + | // on the row is *below* the document in the bubble path, so it fires | |
| 84 | + | // first. That is not hypothetical -- `node.rs` hangs a table row's | |
| 85 | + | // `activate` on the row element (`Fires::ClickBeside`) and filters it with | |
| 86 | + | // `click[!event.target.closest('[data-act]')]`, which a chevron is not, so | |
| 87 | + | // pressing the chevron on a row that both discloses and activates folded | |
| 88 | + | // the branch *and* navigated away from it. The emitter's own comment | |
| 89 | + | // already claimed otherwise: "filters by it, pressing its chevron does | |
| 90 | + | // not." | |
| 91 | + | // | |
| 92 | + | // Fixed here rather than by widening that filter, because this is the one | |
| 93 | + | // place that knows what a chevron is. | |
| 72 | 94 | document.addEventListener("click", (event) => { | |
| 73 | 95 | const chevron = event.target.closest(DISCLOSE); | |
| 74 | 96 | if (!chevron) return; | |
| @@ -84,5 +106,5 @@ | |||
| 84 | 106 | chevron.setAttribute("aria-expanded", String(!open)); | |
| 85 | 107 | chevron.setAttribute("aria-label", open ? "Expand" : "Collapse"); | |
| 86 | 108 | settle(row); | |
| 87 | - | }); | |
| 109 | + | }, true); | |
| 88 | 110 | })(); |
| @@ -908,8 +908,10 @@ | |||
| 908 | 908 | ||
| 909 | 909 | /// The table, and the way to more of it. | |
| 910 | 910 | /// | |
| 911 | - | /// Two nodes rather than one because a table cannot say there is more; finding | |
| 912 | - | /// 2 in the module header. | |
| 911 | + | /// The table says there is more itself, since quasi 0.15.0 gave `Node::Table` a | |
| 912 | + | /// `Rest`; finding 2 in the module header. The second node this can return is | |
| 913 | + | /// the ceiling sentence, which is a different thing: at `PAGE * PAGES` there is | |
| 914 | + | /// no address left to offer and the honest answer is a sentence. | |
| 913 | 915 | fn table(state: &AppState, view: &View) -> Result<Vec<Node>, RouteError> { | |
| 914 | 916 | let (tasks, total) = page(state, view)?; | |
| 915 | 917 |
| @@ -1182,3 +1182,13 @@ | |||
| 1182 | 1182 | "{pane}" | |
| 1183 | 1183 | ); | |
| 1184 | 1184 | } | |
| 1185 | + | ||
| 1186 | + | #[tokio::test] | |
| 1187 | + | async fn tmp_dump_appearance() { | |
| 1188 | + | let state = state().await; | |
| 1189 | + | let page = html(get(&state, "/settings/appearance")); | |
| 1190 | + | let at = page | |
| 1191 | + | .find("name=\"theme\"") | |
| 1192 | + | .map_or(0, |i| i.saturating_sub(1200)); | |
| 1193 | + | eprintln!("---\n{}\n---", &page[at..(at + 2400).min(page.len())]); | |
| 1194 | + | } |