diff --git a/ATTRIBUTION.toml b/ATTRIBUTION.toml index 998fa13b8..3f3791f71 100644 --- a/ATTRIBUTION.toml +++ b/ATTRIBUTION.toml @@ -7,7 +7,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Greek UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "82a6d3b48da75024afd3261e2c2a30d2f8b45da5448b6018ad5b35d489d2c7bb" +sha256 = "cefa955aa92790d6773cb1d1e15e19019b3165a00528d57d6617362e1d1988ab" # ATTRIBUTION.toml: one entry per asset (AGENTS.md §1). The source of truth for provenance and licences. # ATTRIBUTION.md is generated from this file: `cargo xtask assets --write`. Checked by `cargo xtask assets` (part of `xtask ci`). @@ -30,7 +30,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Simplified Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "1d8134aad27f74186b0df2f6257ee51b0955a69597de5ca86cf4013ab98f7da9" +sha256 = "1de29a6cc089be31cb6206bf41e0715f8ddcf74ef887b45ccee235d743bed223" [[asset]] path = "crates/ui-egui/src/i18n/zh-hant.tsv" @@ -41,7 +41,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Traditional Chinese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "1a5a956aabe5746a0768497cb4e6568622a5ab70b8d429f745c33dda977a8fca" +sha256 = "8c6d5b1505d76bc7ba606c98660afa60b1152c5b4c2e7d345104a6ef3d280ed2" [[asset]] path = "crates/ui-egui/src/i18n/cs.tsv" @@ -52,7 +52,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Czech UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "5a29fe0c99e7116a2aab2387be553bb95b59ce450afc2546a04949a68dcf4f31" +sha256 = "8a8aed18bd8fceabd1389580361ba75b0dccf141d845650a353d8dfe19c95536" [[asset]] path = "crates/ui-egui/src/i18n/pt-br.tsv" @@ -63,7 +63,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Brazilian Portuguese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "09c3f837fefbe0774e9b21a40d74b93ab3671bb143f141e8cb212c92d91e4733" +sha256 = "1c197ac045810950aceb733152a296f2224f38857b1169032fdc7092ab4aa3f7" [[asset]] path = "crates/ui-egui/src/i18n/es.tsv" @@ -74,7 +74,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Spanish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "31ae2ecf486e132ad085b4ec415416263ee1e5e7461ec4dd4e778bf628fefcf9" +sha256 = "a9cf0e062b006b40f549ce2316b88d4b0196d70bd9cecd66c12d980d699bf679" [[asset]] path = "crates/ui-egui/src/i18n/fr.tsv" @@ -85,7 +85,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "French UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "fb7f392472e9ffbd7f8492d52b14c8e6bdd28655415869eefbcd1af43178d4c2" +sha256 = "ef5c84bd13ef8318f7deab7f42136cfe3c14cbef6fd5231014b94167baaecd2a" [[asset]] path = "crates/ui-egui/src/i18n/de.tsv" @@ -96,7 +96,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "German UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "85576c18721874113d92c8ee477e5a92d43d898f042ec5104bc3ee18336ef2a7" +sha256 = "be689af8bb22537879269ad9ab9bdcc4b730665cf0b27c6bf4bad560cacf3b69" [[asset]] path = "crates/ui-egui/src/i18n/te.tsv" @@ -107,7 +107,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Telugu UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "1f65ce25add0ffd6dbb9ea25e1bac1f78604265547b1995a7a43e573e303fc7b" +sha256 = "989d2e5f57cf22c21a85951835ca9fbd05e314da67eb4c17332df1f03679fa00" [[asset]] path = "crates/ui-egui/src/i18n/it.tsv" @@ -118,7 +118,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Italian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "c1a5a6d120bec8eaa8e60a5eb7f805aaf846f8ae0facf04a5a61da769dc6672c" +sha256 = "425c42acb8d98ac31b216b13c05a285e0676318dd379dcfb9d57cc7329e9d7a5" [[asset]] path = "crates/ui-egui/src/i18n/pl.tsv" @@ -129,7 +129,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Polish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "06cfe4f2dcdf970aa4269658930885c2536dfc3a1b5391fccc626232fd01b3de" +sha256 = "988bcf2e0322a46c0464ff7b91ab5d90193b0ea7f454812d12595eb843de6fc7" [[asset]] path = "crates/ui-egui/src/i18n/ru.tsv" @@ -140,7 +140,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Russian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "ca6e03bf5a37b39c7e7870e2c52f9c9fd88ec13324296926f0c2853675b155c3" +sha256 = "ebe7aa9152baff38ae7e36aeb4f6a7ed2198166ab93425a612a66d53e43cb363" [[asset]] path = "crates/ui-egui/src/i18n/hu.tsv" @@ -151,7 +151,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Hungarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "b0dcd01ae69d702740e6732b77b7ae8d192c4f789be9d3c5128bfa745ce07527" +sha256 = "69d2da21949f02c3c40f71159e377eef2fdd1a87f749d6c504e1d151ef33f643" [[asset]] path = "crates/ui-egui/src/i18n/bg.tsv" @@ -162,7 +162,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Bulgarian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "75b42fcb55a4518ba2057a2dfe29cd4b3718c26a0e1a3c83101a19201d9542ce" +sha256 = "98359685aa555f391846f2259ac302ce1234c7a180fb4abe07c36e0c1c62211e" [[asset]] path = "crates/ui-egui/src/i18n/kk.tsv" @@ -173,7 +173,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Kazakh UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "c9986f1b5a19f8fa3b431229e56bae73715d138e6507b0b7c314483029109585" +sha256 = "9f6296d9c79c848167fc80bb4cfaacc9e60f72edb70cc1d70f7b6088ada83578" [[asset]] path = "crates/ui-egui/src/i18n/ja.tsv" @@ -184,7 +184,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Japanese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "ef3156aab103af5bd99efac444a3e085ef50f9a5786c8c4f34aa5f384d2f028e" +sha256 = "3528e85afd4117de2c22b9f37d32a380a073a49834fa5a3063d21b803606ffbf" [[asset]] path = "crates/ui-egui/src/i18n/uk.tsv" @@ -195,7 +195,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Ukrainian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "13ee22f546e669cbde325343c3c1474c89932bc49342f02da3059047865007f0" +sha256 = "4db7e23074d44305f4584e2cd8b9a0fc35b433cb187dad493c8f7d78a8cd4ad2" [[asset]] path = "crates/ui-egui/src/i18n/ar.tsv" @@ -206,7 +206,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Arabic UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "9087b9d39cac0fb6ec3e6d886697b310686f20ba2c5cd86b9a80e23addd7de0c" +sha256 = "2af01de9509db4b4ae61193f41ff0f7f3b70ca5f91cd2afda667e90d34980b25" [[asset]] path = "crates/ui-egui/src/i18n/tr.tsv" @@ -217,7 +217,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Turkish UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "116784d4457a2cff2018e2652cc537a924f365012409547cbbaac3409c315c22" +sha256 = "de988b6959572931c4878a0588109c236bf8c5d46ef57c7a406b6ab42de51339" [[asset]] path = "crates/ui-egui/src/i18n/lt.tsv" @@ -228,7 +228,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Lithuanian UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "581a77647ccd0f002decdb430bcda1a7dfa90d3d2948fe6a12b33251e5edd318" +sha256 = "63955758227bd57329b22dc7c16ed9cee8b0a15df9453477755849c886424dd5" [[asset]] @@ -240,7 +240,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Vietnamese UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "949a3e933149eaf4fad17fb6711ec38b134858d0c434bdf1c38125bf7ead9855" +sha256 = "b54adaa6515dbfb0de3859b30989054e5fcc4f56e66e9cc713c7bf509bdbbac3" [[asset]] path = "assets/icons/accessibility.svg" @@ -3363,7 +3363,7 @@ licence = "MIT OR Apache-2.0" licence_file = "LICENSE-MIT" kind = "translation" usage = "Slovene UI strings, compiled in by crates/ui-egui/src/i18n/mod.rs" -sha256 = "5ca7e04c805f8ae8bee1b81f6c5e6263dddd1673ef003ec5c90c1b87b4bfd9ba" +sha256 = "5881cc7fbfe9da5f5f611309dacf267f95db3a143b916a113b649839019b292c" [[asset]] path = "vendor/vello_common/assets/probe.png" diff --git a/crates/ui-egui/src/comments.rs b/crates/ui-egui/src/comments.rs index 3bdbf5a2c..5a708c14f 100644 --- a/crates/ui-egui/src/comments.rs +++ b/crates/ui-egui/src/comments.rs @@ -481,6 +481,8 @@ pub struct CommentView { pub hidden_checks: Vec, /// How the panel orders comments. pub sort: SortBy, + /// Pages whose group is folded in the panel (when sorted by page). + pub collapsed_pages: Vec, /// Comment Properties was asked for from the panel: (page, index). pub props_request: Option<(usize, usize)>, /// Make Current Properties Default was asked for: (page, index). diff --git a/crates/ui-egui/src/comments_panel.rs b/crates/ui-egui/src/comments_panel.rs index 32ea870b0..c5fbbd0ce 100644 --- a/crates/ui-egui/src/comments_panel.rs +++ b/crates/ui-egui/src/comments_panel.rs @@ -199,6 +199,13 @@ pub(crate) fn show( SortBy::Date => None, } }; + // A comment selected elsewhere (on the page, or just added) opens its folded group, or the + // card it should scroll to would not be drawn. + if view.comments.reveal + && let Some((p, _)) = view.comments.selected + { + view.comments.collapsed_pages.retain(|&c| c != p); + } let mut page = usize::MAX; let mut group: Option = None; for a in roots { @@ -215,18 +222,38 @@ pub(crate) fn show( } else if a.page != page { page = a.page; let n = info.annotations.iter().filter(|x| x.page == page && x.in_reply_to.is_none()).count(); + let open = !view.comments.collapsed_pages.contains(&page); ui.add_space(6.0); - ui.horizontal(|ui| { - ui.add(icons::image("chevron-down", 14.0, t.text_muted)); - ui.label( - egui::RichText::new(crate::i18n::fmt(tl!("Page {label}"), &[("label", &info.pages[page].label)])) - .font(theme::semibold(12.5)) - .color(t.text_muted), - ); - ui.with_layout(Layout::right_to_left(Align::Center), |ui| ui.label(egui::RichText::new(n.to_string()).color(t.text_faint).small())); - }); + let clicked = ui + .horizontal(|ui| { + let chevron = if open { "chevron-down" } else { "chevron-right" }; + let toggle = icons::button(ui, chevron, 18.0, false, if open { tl!("Collapse") } else { tl!("Expand") }).clicked(); + let label = ui.add( + egui::Label::new( + egui::RichText::new(crate::i18n::fmt(tl!("Page {label}"), &[("label", &info.pages[page].label)])) + .font(theme::semibold(12.5)) + .color(t.text_muted), + ) + .sense(Sense::click()), + ); + ui.with_layout(Layout::right_to_left(Align::Center), |ui| { + ui.label(egui::RichText::new(n.to_string()).color(t.text_faint).small()) + }); + toggle || label.clicked() + }) + .inner; + if clicked { + if open { + view.comments.collapsed_pages.push(page); + } else { + view.comments.collapsed_pages.retain(|&c| c != page); + } + } ui.add_space(2.0); } + if sort == SortBy::Page && view.comments.collapsed_pages.contains(&a.page) { + continue; + } let thread = replies_of(a); if let Some(e) = card(ui, t, a, &thread, view, prefs, allowed, nav) { edit = Some(e); @@ -519,6 +546,20 @@ pub(crate) fn header_controls(ui: &mut egui::Ui, info: &DocInfo, view: &mut DocV ui.close(); } } + // Only the page sort has folding groups. + if cv.sort == SortBy::Page { + ui.separator(); + if ui.button(tl!("Collapse all pages")).clicked() { + cv.collapsed_pages = info.annotations.iter().map(|a| a.page).collect(); + cv.collapsed_pages.sort_unstable(); + cv.collapsed_pages.dedup(); + ui.close(); + } + if ui.button(tl!("Expand all pages")).clicked() { + cv.collapsed_pages.clear(); + ui.close(); + } + } ui.separator(); for (id, label) in [ ("comment.hide_all", if hidden { tl!("Show all comments") } else { tl!("Hide all comments") }), diff --git a/crates/ui-egui/src/i18n/ar.tsv b/crates/ui-egui/src/i18n/ar.tsv index c7f460f54..01bb1679e 100644 --- a/crates/ui-egui/src/i18n/ar.tsv +++ b/crates/ui-egui/src/i18n/ar.tsv @@ -2279,6 +2279,8 @@ key Space مسافة Switch to List view to change the pages it takes. انتقل إلى عرض القائمة لتغيير الصفحات التي يأخذها. Expand all توسيع الكل Collapse all طي الكل + Collapse all pages طي كل الصفحات + Expand all pages توسيع كل الصفحات Remove page إزالة الصفحة Remove {n} pages إزالة {n} صفحات diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index 5334c39e9..8f2fea70e 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -2219,6 +2219,8 @@ key Space Интервал Switch to List view to change the pages it takes. Превключете към изглед списък, за да промените кои страници се вземат. Expand all Разгъни всички Collapse all Свий всички + Collapse all pages Свий всички страници + Expand all pages Разгъни всички страници Remove page Премахни страницата Remove {n} pages Премахни {n} страници diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index 9e62f7f34..bad5c497e 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -2257,6 +2257,8 @@ certificate Subject Subjekt List view Zobrazení seznamu Expand all Rozbalit vše Collapse all Sbalit vše + Collapse all pages Sbalit všechny stránky + Expand all pages Rozbalit všechny stránky Files are combined in the order shown. Drag them to change it. Soubory se slučují v zobrazeném pořadí. Pořadí změníte přetažením. Pages: {k} of {n} Stránky: {k} z {n} Check the pages Zkontrolujte stránky diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 29439a186..b5baed7ba 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -2261,6 +2261,8 @@ key Space Leertaste Switch to List view to change the pages it takes. Wechsle zur Listenansicht, um die übernommenen Seiten zu ändern. Expand all Alle ausklappen Collapse all Alle einklappen + Collapse all pages Alle Seiten einklappen + Expand all pages Alle Seiten ausklappen Remove page Seite entfernen Remove {n} pages {n} Seiten entfernen diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index 36a1d9909..57de6eef0 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -1619,6 +1619,8 @@ Switch to List view to change the pages it takes. Μεταβείτε στην προβολή λίστας για να αλλάξετε ποιες σελίδες θα συμπεριληφθούν. Expand all Ανάπτυξη όλων Collapse all Σύμπτυξη όλων + Collapse all pages Σύμπτυξη όλων των σελίδων + Expand all pages Ανάπτυξη όλων των σελίδων Remove {n} pages Αφαίρεση {n} σελίδων Add an image field Προσθήκη πεδίου εικόνας Add a date field Προσθήκη πεδίου ημερομηνίας diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 62cbf95fe..548daf0ca 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -2397,6 +2397,8 @@ key Space Espacio Switch to List view to change the pages it takes. Cambia a la vista de lista para cambiar las páginas que se incluyen. Expand all Expandir todo Collapse all Contraer todo + Collapse all pages Contraer todas las páginas + Expand all pages Expandir todas las páginas Remove page Quitar página Remove {n} pages Quitar {n} páginas diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index 208f5d2c2..c082789bc 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -2260,6 +2260,8 @@ key Space Espace Switch to List view to change the pages it takes. Passez à la vue en liste pour modifier les pages prises. Expand all Tout développer Collapse all Tout réduire + Collapse all pages Réduire toutes les pages + Expand all pages Développer toutes les pages Remove page Retirer la page Remove {n} pages Retirer {n} pages diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index fe31b0e7a..b47da5b41 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -2255,6 +2255,8 @@ key Space Szóköz Switch to List view to change the pages it takes. Válts listanézetre, ha módosítanád, mely oldalak kerüljenek bele. Expand all Összes kibontása Collapse all Összes összecsukása + Collapse all pages Összes oldal összecsukása + Expand all pages Összes oldal kibontása Remove page Oldal eltávolítása Remove {n} pages {n} oldal eltávolítása diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 0cda1c323..9d54a4bea 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -2267,6 +2267,8 @@ key Space Spazio Switch to List view to change the pages it takes. Passa alla vista elenco per cambiare le pagine incluse. Expand all Espandi tutto Collapse all Comprimi tutto + Collapse all pages Comprimi tutte le pagine + Expand all pages Espandi tutte le pagine Remove page Rimuovi pagina Remove {n} pages Rimuovi {n} pagine diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 48bcb8f25..461e07493 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -2256,6 +2256,8 @@ key Space スペース Switch to List view to change the pages it takes. 使用するページを変更するには、リスト表示に切り替えてください。 Expand all すべて展開 Collapse all すべて折りたたむ + Collapse all pages すべてのページを折りたたむ + Expand all pages すべてのページを展開 Remove page ページを削除 Remove {n} pages {n} ページを削除 diff --git a/crates/ui-egui/src/i18n/kk.tsv b/crates/ui-egui/src/i18n/kk.tsv index 13a9f6729..af140d3a0 100644 --- a/crates/ui-egui/src/i18n/kk.tsv +++ b/crates/ui-egui/src/i18n/kk.tsv @@ -2142,6 +2142,8 @@ calendar date December Желтоқсан Check the pages Беттерді белгілеу Closed arrow Жабық көрсеткі Collapse all Барлығын жию + Collapse all pages Барлық беттерді жию + Expand all pages Барлық беттерді жаю Column select Баған бойынша таңдау Comb of characters Таңбалар торы Custom font Арнаулы қаріп diff --git a/crates/ui-egui/src/i18n/lt.tsv b/crates/ui-egui/src/i18n/lt.tsv index 165163d31..247b6cff9 100644 --- a/crates/ui-egui/src/i18n/lt.tsv +++ b/crates/ui-egui/src/i18n/lt.tsv @@ -377,6 +377,8 @@ Closed arrow Uždara rodyklė Collapse Suskleisti Collapse all Suskleisti viską + Collapse all pages Suskleisti visus puslapius + Expand all pages Išskleisti visus puslapius Collapse all bookmarks Suskleisti visas žymeles Collapse tag Suskleisti žymą Collate Rūšiuoti komplektais diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index 5cc409360..3dbb24705 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -1310,6 +1310,8 @@ Expand all bookmarks Rozwiń wszystkie zakładki Expand top-level bookmarks Rozwiń zakładki najwyższego poziomu Collapse all bookmarks Zwiń wszystkie zakładki + Collapse all pages Zwiń wszystkie strony + Expand all pages Rozwiń wszystkie strony New bookmark (⌘B) Nowa zakładka (⌘B) This document has no bookmarks. Ten dokument nie zawiera zakładek. This document has no layers. Ten dokument nie zawiera warstw. diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 8756fa94e..3e5517316 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -2258,6 +2258,8 @@ key Space Espaço Switch to List view to change the pages it takes. Mude para a exibição em lista para alterar as páginas incluídas. Expand all Expandir tudo Collapse all Recolher tudo + Collapse all pages Recolher todas as páginas + Expand all pages Expandir todas as páginas Remove page Remover página Remove {n} pages Remover {n} páginas diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index d9fe1a98b..1ac9c10ba 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -2173,6 +2173,8 @@ key Space Пробел Switch to List view to change the pages it takes. Переключитесь на вид списком, чтобы изменить, какие страницы взять. Expand all Развернуть все Collapse all Свернуть все + Collapse all pages Свернуть все страницы + Expand all pages Развернуть все страницы Remove page Удалить страницу Remove {n} pages Удалить страницы: {n} diff --git a/crates/ui-egui/src/i18n/sl.tsv b/crates/ui-egui/src/i18n/sl.tsv index d59de3df8..416590999 100644 --- a/crates/ui-egui/src/i18n/sl.tsv +++ b/crates/ui-egui/src/i18n/sl.tsv @@ -2192,6 +2192,8 @@ signature pad Type Vtipkaj Auto follows the system's text size. Pages always render at the display's full resolution. Samodejno sledi velikosti besedila v sistemu. Strani se vedno izrišejo v polni ločljivosti zaslona. Check the pages Preveri strani Collapse all Strni vse + Collapse all pages Strni vse strani + Expand all pages Razširi vse strani Column select Izbira stolpcev Drag the selection to move it. Esc clears the selection. Povlecite izbor, da ga premaknete. Esc počisti izbor. Expand all Razširi vse diff --git a/crates/ui-egui/src/i18n/te.tsv b/crates/ui-egui/src/i18n/te.tsv index ea10d7991..07b716eac 100644 --- a/crates/ui-egui/src/i18n/te.tsv +++ b/crates/ui-egui/src/i18n/te.tsv @@ -2181,6 +2181,8 @@ key Space స్పేస్ Reset page size పేజీ పరిమాణాన్ని రీసెట్ చేయి Expand all అన్నీ విస్తరించు Collapse all అన్నీ ముడుచు + Collapse all pages అన్ని పేజీలను ముడుచు + Expand all pages అన్ని పేజీలను విస్తరించు Remove page పేజీని తీసివేయి Remove {n} pages {n} పేజీలను తీసివేయి diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index 31fce37c8..9fbd4dc96 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -2215,6 +2215,8 @@ key Space Boşluk Some bookmarks are not shown here: the panel lists a limited number, nested a limited depth. Bazı yer imleri burada gösterilmiyor: panel sınırlı sayıda ve sınırlı derinlikte listeler. Expand all Tümünü genişlet Collapse all Tümünü daralt + Collapse all pages Tüm sayfaları daralt + Expand all pages Tüm sayfaları genişlet Remove page Sayfayı kaldır Remove {n} pages {n} sayfayı kaldır diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index db6e7b0ff..53bc832f5 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -2280,6 +2280,8 @@ key Space Пробіл Switch to List view to change the pages it takes. Перейдіть до вигляду списком, щоб змінити, які сторінки взяти. Expand all Розгорнути всі Collapse all Згорнути всі + Collapse all pages Згорнути всі сторінки + Expand all pages Розгорнути всі сторінки Remove page Видалити сторінку Remove {n} pages Видалити сторінки: {n} diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index d35f95151..a01b47f8a 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -374,6 +374,8 @@ theme Appearance Giao diện Closed arrow Mũi tên đóng Collapse Thu gọn Collapse all Thu gọn tất cả + Collapse all pages Thu gọn tất cả các trang + Expand all pages Mở rộng tất cả các trang Collapse all bookmarks Thu gọn tất cả dấu trang Collapse tag Thu gọn thẻ Collate Sắp theo bộ diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 72b0cd30a..3274ff473 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -2224,6 +2224,8 @@ key Space 空格 Switch to List view to change the pages it takes. 切换到列表视图以更改要使用的页面。 Expand all 全部展开 Collapse all 全部折叠 + Collapse all pages 折叠所有页面 + Expand all pages 展开所有页面 Remove page 删除页面 Remove {n} pages 删除 {n} 页 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index 668952554..0ea252e56 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -2139,6 +2139,8 @@ key Space 空格 Switch to List view to change the pages it takes. 切換到清單檢視以變更要使用的頁面。 Expand all 全部展開 Collapse all 全部摺疊 + Collapse all pages 摺疊所有頁面 + Expand all pages 展開所有頁面 Remove page 刪除頁面 Remove {n} pages 刪除 {n} 頁 diff --git a/crates/ui-egui/tests/comments.rs b/crates/ui-egui/tests/comments.rs index 745005240..914bc281b 100644 --- a/crates/ui-egui/tests/comments.rs +++ b/crates/ui-egui/tests/comments.rs @@ -735,6 +735,61 @@ fn the_panel_filters_and_sorts() { assert_eq!(h.query_all_by_label("Oval").count(), ovals + 1, "a group header was added"); } +/// #1554: a page group's chevron folds that page's cards away and back, and the choice holds. +#[test] +fn page_groups_collapse_and_expand() { + let mut h = harness(|app| app.set_option("panel", "comments").unwrap()); + for (page, text) in [(0, "First page note"), (1, "Second page note")] { + let shape = pdfcraft_engine::Shape::Note { at: [100.0, 100.0], icon: pdfcraft_engine::NoteIcon::Comment }; + h.state_mut().apply_edit(pdfcraft_engine::Edit::AddAnnotation(pdfcraft_engine::NewAnnotation { + page, + style: pdfcraft_engine::Style::default_for(&shape), + shape, + contents: text.into(), + author: "Tester".into(), + })); + } + h.state_mut().views[0].comments.selected = None; + h.run_steps(3); + let shown = |h: &Harness<'static, PdfCraftApp>, text: &str| h.query_all_by_label_contains(text).count() > 0; + assert!(shown(&h, "First page note") && shown(&h, "Second page note")); + assert_eq!(h.query_all_by_label("Collapse").count(), 2, "one chevron per page group"); + + h.query_all_by_label("Collapse").next().unwrap().click(); + h.run_steps(3); + assert!(!shown(&h, "First page note"), "page 1's card is folded away"); + assert!(shown(&h, "Second page note"), "page 2 stays open"); + h.run_steps(5); + assert!(!shown(&h, "First page note"), "the group stays folded on later frames"); + + h.get_by_label("Expand").click(); + h.run_steps(3); + assert!(shown(&h, "First page note"), "page 1's card is back"); + + // Selecting a comment on a folded page opens its group so the card can be shown. + h.query_all_by_label("Collapse").next().unwrap().click(); + h.run_steps(3); + assert!(!shown(&h, "First page note")); + h.state_mut().views[0].comments.selected = Some((0, 0)); + h.state_mut().views[0].comments.reveal = true; + h.run_steps(3); + assert!(shown(&h, "First page note"), "the selected comment's group opened"); + + // "…" ▸ Collapse all pages, then Expand all pages. + h.state_mut().views[0].comments.selected = None; + h.get_by_label("More options").click(); + h.run_steps(2); + h.get_by_label("Collapse all pages").click(); + h.run_steps(3); + assert!(!shown(&h, "First page note") && !shown(&h, "Second page note"), "every page is folded"); + assert_eq!(h.query_all_by_label("Expand").count(), 2); + h.get_by_label("More options").click(); + h.run_steps(2); + h.get_by_label("Expand all pages").click(); + h.run_steps(3); + assert!(shown(&h, "First page note") && shown(&h, "Second page note"), "every page is open again"); +} + #[test] fn comments_take_checkmarks_lock_hide_and_summarize() { let mut h = harness(|app| { diff --git a/parity/acrobat-features.toml b/parity/acrobat-features.toml index cfe560a94..e841dec08 100644 --- a/parity/acrobat-features.toml +++ b/parity/acrobat-features.toml @@ -3553,8 +3553,8 @@ milestone = "M3" status = "shipped" commands = ["comment.list"] tools = ["comment_list"] -evidence = ["crates/ui-egui/tests/ui.rs::opening_a_pdf_shows_comments_and_bookmarks", "crates/ui-egui/tests/comments.rs::the_panel_posts_comments_and_replies"] -notes = "cards grouped by page with replies, status badges, selection, reply box and an Add a comment box" +evidence = ["crates/ui-egui/tests/ui.rs::opening_a_pdf_shows_comments_and_bookmarks", "crates/ui-egui/tests/comments.rs::the_panel_posts_comments_and_replies", "crates/ui-egui/tests/comments.rs::page_groups_collapse_and_expand"] +notes = "cards grouped by page with replies, status badges, selection, reply box and an Add a comment box; page groups fold and unfold from their chevron or with Collapse/Expand all pages in the panel's \"…\" menu (a comment selected on a folded page opens its group). Groups by author, type or colour don't fold yet" [[feature]] id = "comment.appearance-generation"