Skip to content

Commit a7083d0

Browse files
authored
Merge pull request #20854 from calixteman/bug2022769
Add a button for unchecking all the checked thumbnails (bug 2022769)
2 parents fbfcceb + df4a563 commit a7083d0

5 files changed

Lines changed: 78 additions & 8 deletions

File tree

test/integration/reorganize_pages_spec.mjs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,49 @@ describe("Reorganize Pages View", () => {
13311331
})
13321332
);
13331333
});
1334+
1335+
it("should deselect all thumbnails when the deselect button is clicked", async () => {
1336+
await Promise.all(
1337+
pages.map(async ([browserName, page]) => {
1338+
await waitForThumbnailVisible(page, 1);
1339+
await page.waitForSelector("#viewsManagerStatusActionButton", {
1340+
visible: true,
1341+
});
1342+
1343+
const labelSelector = "#viewsManagerStatusActionLabel";
1344+
const deselectButtonSelector =
1345+
"#viewsManagerStatusActionDeselectButton";
1346+
1347+
// Check thumbnails 1 and 2.
1348+
await waitAndClick(
1349+
page,
1350+
`.thumbnail:has(${getThumbnailSelector(1)}) input`
1351+
);
1352+
await waitAndClick(
1353+
page,
1354+
`.thumbnail:has(${getThumbnailSelector(2)}) input`
1355+
);
1356+
await waitForTextToBe(page, labelSelector, `${FSI}2${PDI} selected`);
1357+
1358+
// Click the deselect button: all thumbnails should be unchecked.
1359+
await waitAndClick(page, deselectButtonSelector);
1360+
1361+
// Label should revert to "Select pages".
1362+
await waitForTextToBe(page, labelSelector, "Select pages");
1363+
1364+
// The deselect button should be hidden again.
1365+
await page.waitForSelector(deselectButtonSelector, { hidden: true });
1366+
1367+
// All checkboxes should be unchecked.
1368+
await page.waitForSelector(
1369+
"#thumbnailsView:not(:has(input:checked))",
1370+
{
1371+
visible: true,
1372+
}
1373+
);
1374+
})
1375+
);
1376+
});
13341377
});
13351378

13361379
describe("Undo label reflects number of cut/deleted pages (bug 2010832)", () => {

web/pdf_thumbnail_viewer.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ class PDFThumbnailViewer {
145145

146146
#statusBar = null;
147147

148+
#deselectButton = null;
149+
148150
#undoBar = null;
149151

150152
#undoLabel = null;
@@ -183,6 +185,8 @@ class PDFThumbnailViewer {
183185
this.pageColors = pageColors || null;
184186
this.#enableSplitMerge = enableSplitMerge || false;
185187
this.#statusLabel = statusBar?.viewsManagerStatusActionLabel || null;
188+
this.#deselectButton =
189+
statusBar?.viewsManagerStatusActionDeselectButton || null;
186190
this.#statusBar = statusBar?.viewsManagerStatusAction || null;
187191
this.#undoBar = undoBar?.viewsManagerStatusUndo || null;
188192
this.#undoLabel = undoBar?.viewsManagerStatusUndoLabel || null;
@@ -260,6 +264,12 @@ class PDFThumbnailViewer {
260264
"click",
261265
this.#dismissUndo.bind(this)
262266
);
267+
this.#deselectButton?.addEventListener("click", () => {
268+
this.#clearSelection();
269+
this.#toggleMenuEntries(false);
270+
this.#updateStatus("select");
271+
});
272+
this.#deselectButton.classList.toggle("hidden", true);
263273
} else {
264274
manageMenu.button.hidden = true;
265275
}
@@ -910,8 +920,10 @@ class PDFThumbnailViewer {
910920
"data-l10n-args",
911921
JSON.stringify({ count })
912922
);
923+
this.#deselectButton.classList.toggle("hidden", false);
913924
} else {
914925
this.#statusLabel.removeAttribute("data-l10n-args");
926+
this.#deselectButton.classList.toggle("hidden", true);
915927
}
916928
this.#statusBar.classList.toggle("hidden", false);
917929
this.#undoBar.classList.toggle("hidden", true);

web/viewer.html

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,22 @@
188188
</div>
189189
<div id="viewsManagerStatus">
190190
<div id="viewsManagerStatusAction">
191-
<span
192-
id="viewsManagerStatusActionLabel"
193-
class="viewsManagerStatusLabel"
194-
data-l10n-id="pdfjs-views-manager-pages-status-none-action-label"
195-
></span>
191+
<span id="viewsManagerStatusActionLabelContainer" class="viewsManagerStatusLabel">
192+
<button
193+
id="viewsManagerStatusActionDeselectButton"
194+
class="hiddden"
195+
type="button"
196+
tabindex="0"
197+
role="checkbox"
198+
aria-checked="true"
199+
aria-labelledby="viewsManagerStatusActionLabel"
200+
></button>
201+
<span
202+
id="viewsManagerStatusActionLabel"
203+
class="viewsManagerStatusLabel"
204+
data-l10n-id="pdfjs-views-manager-pages-status-none-action-label"
205+
></span>
206+
</span>
196207
<div id="actionSelector">
197208
<button
198209
id="viewsManagerStatusActionButton"

web/viewer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ function getViewerConfiguration() {
138138
viewsManagerStatusAction: document.getElementById(
139139
"viewsManagerStatusAction"
140140
),
141+
viewsManagerStatusActionDeselectButton: document.getElementById(
142+
"viewsManagerStatusActionDeselectButton"
143+
),
141144
viewsManagerStatusActionLabel: document.getElementById(
142145
"viewsManagerStatusActionLabel"
143146
),

web/views_manager.css

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,15 +406,16 @@
406406
align-self: stretch;
407407
background-color: var(--status-actions-bg);
408408

409-
> span[data-l10n-args]::before {
410-
content: "";
411-
display: inline-block;
409+
#viewsManagerStatusActionLabelContainer > button {
412410
width: var(--icon-size);
413411
height: var(--icon-size);
414412
mask-repeat: no-repeat;
415413
mask-position: center;
416414
background-color: var(--indicator-color);
417415
mask-image: var(--pages-selected-icon);
416+
border: none;
417+
padding: 0;
418+
flex: 0 0 auto;
418419
}
419420

420421
#actionSelector {

0 commit comments

Comments
 (0)