Merge pull request #20832 from calixteman/fix_labels

Fix the label and tooltip on the paste buttons
This commit is contained in:
calixteman 2026-03-09 15:20:59 +01:00 committed by GitHub
commit cc680f68c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 20 deletions

View File

@ -769,8 +769,11 @@ pdfjs-views-manager-status-close-button =
.title = Close .title = Close
pdfjs-views-manager-status-close-button-label = Close pdfjs-views-manager-status-close-button-label = Close
pdfjs-views-manager-paste-button-label = Paste
pdfjs-views-manager-paste-button-before =
.title = Paste before the first page
# Variables: # Variables:
# $page (Number) - the page number after which the paste button is. # $page (Number) - the page number after which the paste button is.
pdfjs-views-manager-paste-button-after-label = Paste after page { $page } pdfjs-views-manager-paste-button-after =
.title = Paste after page { $page }
pdfjs-views-manager-paste-button-before-label = Paste before the first page

View File

@ -34,6 +34,7 @@ import {
waitAndClick, waitAndClick,
waitForDOMMutation, waitForDOMMutation,
waitForTextToBe, waitForTextToBe,
waitForTooltipToBe,
} from "./test_utils.mjs"; } from "./test_utils.mjs";
async function waitForThumbnailVisible(page, pageNums) { async function waitForThumbnailVisible(page, pageNums) {
@ -812,21 +813,27 @@ describe("Reorganize Pages View", () => {
await waitAndClick(page, "#viewsManagerStatusActionCopy"); await waitAndClick(page, "#viewsManagerStatusActionCopy");
await awaitPromise(handlePagesEdited); await awaitPromise(handlePagesEdited);
const prevSpanText = await page.$eval( await waitForTextToBe(
page,
`button.thumbnailPasteButton:has(+ ${getThumbnailSelector(1)}) > span`, `button.thumbnailPasteButton:has(+ ${getThumbnailSelector(1)}) > span`,
el => el.textContent.trim() "Paste"
);
await waitForTooltipToBe(
page,
`button.thumbnailPasteButton:has(+ ${getThumbnailSelector(1)})`,
"Paste before the first page"
); );
expect(prevSpanText)
.withContext(`In ${browserName}`)
.toBe("Paste before the first page");
const afterSpanText = await page.$eval( await waitForTextToBe(
page,
`${getThumbnailSelector(1)} + button.thumbnailPasteButton > span`, `${getThumbnailSelector(1)} + button.thumbnailPasteButton > span`,
el => el.textContent.trim() "Paste"
);
await waitForTooltipToBe(
page,
`${getThumbnailSelector(1)} + button.thumbnailPasteButton`,
`Paste after page ${FSI}1${PDI}`
); );
expect(afterSpanText)
.withContext(`In ${browserName}`)
.toBe(`Paste after page ${FSI}1${PDI}`);
}) })
); );
}); });

View File

@ -899,6 +899,15 @@ function waitForTextToBe(page, selector, text) {
); );
} }
function waitForTooltipToBe(page, selector, text) {
return page.waitForFunction(
(sel, str) => document.querySelector(sel)?.title === str,
{},
selector,
text
);
}
function isCanvasMonochrome(page, pageNumber, rectangle, color) { function isCanvasMonochrome(page, pageNumber, rectangle, color) {
return page.evaluate( return page.evaluate(
(rect, pageN, col) => { (rect, pageN, col) => {
@ -1082,5 +1091,6 @@ export {
waitForStorageEntries, waitForStorageEntries,
waitForTextToBe, waitForTextToBe,
waitForTimeout, waitForTimeout,
waitForTooltipToBe,
waitForUnselectedEditor, waitForUnselectedEditor,
}; };

View File

@ -182,17 +182,18 @@ class PDFThumbnailView extends RenderableView {
const pasteButton = (this.pasteButton = document.createElement("button")); const pasteButton = (this.pasteButton = document.createElement("button"));
pasteButton.classList.add("thumbnailPasteButton", "viewsManagerButton"); pasteButton.classList.add("thumbnailPasteButton", "viewsManagerButton");
pasteButton.tabIndex = 0; pasteButton.tabIndex = 0;
const span = document.createElement("span"); pasteButton.setAttribute(
span.setAttribute(
"data-l10n-id", "data-l10n-id",
"pdfjs-views-manager-paste-button-after-label" "pdfjs-views-manager-paste-button-after"
); );
span.setAttribute( pasteButton.setAttribute(
"data-l10n-args", "data-l10n-args",
JSON.stringify({ JSON.stringify({
page: this.pageLabel ?? this.id, page: this.pageLabel ?? this.id,
}) })
); );
const span = document.createElement("span");
span.setAttribute("data-l10n-id", "pdfjs-views-manager-paste-button-label");
pasteButton.append(span); pasteButton.append(span);
pasteButton.addEventListener("click", () => { pasteButton.addEventListener("click", () => {
pasteCallback(this.id); pasteCallback(this.id);
@ -200,10 +201,9 @@ class PDFThumbnailView extends RenderableView {
if (this.id === 1) { if (this.id === 1) {
const prevPasteButton = (this.prevPasteButton = const prevPasteButton = (this.prevPasteButton =
pasteButton.cloneNode(true)); pasteButton.cloneNode(true));
const prevSpan = prevPasteButton.firstElementChild; prevPasteButton.setAttribute(
prevSpan.setAttribute(
"data-l10n-id", "data-l10n-id",
"pdfjs-views-manager-paste-button-before-label" "pdfjs-views-manager-paste-button-before"
); );
prevPasteButton.addEventListener("click", () => { prevPasteButton.addEventListener("click", () => {
pasteCallback(0); pasteCallback(0);