Comments panel: page groups fold from their chevron (#1614)

* Comments panel: page groups fold from their chevron (fixes #1554)

* Comments panel: translate the fold-all buttons in every catalog

"Collapse all pages" and "Expand all pages" were missing from the 21
catalogs, so the covers_ui_literals tests failed; the catalogs' hashes
are re-pinned in ATTRIBUTION.toml.

* Add the Vietnamese entries for Collapse/Expand all pages; refresh catalog hashes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Refresh catalog hashes after merging main

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Marco Arnulfo
2026-10-15 04:03:49 -04:00
committed by GitHub
co-authored by Claude Opus 5.5 Brandon Thomas
parent ab45a1855f
commit cdf44d7999
27 changed files with 175 additions and 33 deletions
+22 -22
View File
@@ -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"
+2
View File
@@ -481,6 +481,8 @@ pub struct CommentView {
pub hidden_checks: Vec<String>,
/// How the panel orders comments.
pub sort: SortBy,
/// Pages whose group is folded in the panel (when sorted by page).
pub collapsed_pages: Vec<usize>,
/// 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).
+50 -9
View File
@@ -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<String> = 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") }),
+2
View File
@@ -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} صفحات
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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} страници
Can't render this file because it contains an unexpected character in line 8 and column 16.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 6 and column 51.
+2
View File
@@ -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 Προσθήκη πεδίου ημερομηνίας
Can't render this file because it contains an unexpected character in line 476 and column 9.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 6 and column 60.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 6 and column 39.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 7 and column 44.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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} ページを削除
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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 Арнаулы қаріп
Can't render this file because it contains an unexpected character in line 825 and column 9.
+2
View File
@@ -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
1 # Lithuanian (lt) catalog. Columns, separated by a TAB: context <TAB> source <TAB> translation
377
378
379
380
381
382
383
384
+2
View File
@@ -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.
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 9 and column 16.
+2
View File
@@ -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}
Can't render this file because it contains an unexpected character in line 9 and column 16.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 9 and column 16.
+2
View File
@@ -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} పేజీలను తీసివేయి
Can't render this file because it contains an unexpected character in line 13 and column 16.
+2
View File
@@ -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
Can't render this file because it contains an unexpected character in line 824 and column 9.
+2
View File
@@ -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}
Can't render this file because it contains an unexpected character in line 6 and column 47.
+2
View File
@@ -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ộ
1 # Vietnamese (vi) catalog. Columns, separated by a TAB: context <TAB> source <TAB> translation
374
375
376
377
378
379
380
381
+2
View File
@@ -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} 页
Can't render this file because it contains an unexpected character in line 9 and column 16.
+2
View File
@@ -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} 頁
Can't render this file because it contains an unexpected character in line 9 and column 16.
+55
View File
@@ -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| {
+2 -2
View File
@@ -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"