mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-06-26 10:05:47 +02:00
Merge pull request #20852 from calixteman/bug2019550
Allow to collapse/expand all the outlines in double clicking somewhere on the header bar (bug 2019550)
This commit is contained in:
commit
d224bec9e2
@ -705,9 +705,11 @@ pdfjs-views-manager-view-selector-button =
|
|||||||
.title = Views
|
.title = Views
|
||||||
pdfjs-views-manager-view-selector-button-label = Views
|
pdfjs-views-manager-view-selector-button-label = Views
|
||||||
pdfjs-views-manager-pages-title = Pages
|
pdfjs-views-manager-pages-title = Pages
|
||||||
pdfjs-views-manager-outlines-title = Document outline
|
pdfjs-views-manager-outlines-title1 = Document outline
|
||||||
|
.title = Document outline (double-click to expand/collapse all items)
|
||||||
pdfjs-views-manager-attachments-title = Attachments
|
pdfjs-views-manager-attachments-title = Attachments
|
||||||
pdfjs-views-manager-layers-title = Layers
|
pdfjs-views-manager-layers-title1 = Layers
|
||||||
|
.title = Layers (double-click to reset all layers to the default state)
|
||||||
|
|
||||||
pdfjs-views-manager-pages-option-label = Pages
|
pdfjs-views-manager-pages-option-label = Pages
|
||||||
pdfjs-views-manager-outlines-option-label = Document outline
|
pdfjs-views-manager-outlines-option-label = Document outline
|
||||||
|
|||||||
@ -1687,4 +1687,101 @@ describe("PDF viewer", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Double-click on title collapses/expands all outline items", () => {
|
||||||
|
let pages;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
pages = await loadAndWait(
|
||||||
|
"nested_outline.pdf",
|
||||||
|
"#viewsManagerToggleButton"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await closePages(pages);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should collapse all outline items on first double-click and expand them on second", async () => {
|
||||||
|
await Promise.all(
|
||||||
|
pages.map(async ([browserName, page]) => {
|
||||||
|
await showViewsManager(page);
|
||||||
|
|
||||||
|
await page.click("#viewsManagerSelectorButton");
|
||||||
|
await page.waitForSelector("#outlinesViewMenu", { visible: true });
|
||||||
|
await page.click("#outlinesViewMenu");
|
||||||
|
await page.waitForSelector("#outlinesView.withNesting");
|
||||||
|
|
||||||
|
// Initially all togglers must be expanded (none hidden).
|
||||||
|
const initialHiddenCount = await page.$$eval(
|
||||||
|
"#outlinesView .treeItemToggler",
|
||||||
|
togglers =>
|
||||||
|
togglers.filter(t => t.classList.contains("treeItemsHidden"))
|
||||||
|
.length
|
||||||
|
);
|
||||||
|
expect(initialHiddenCount).withContext(`In ${browserName}`).toBe(0);
|
||||||
|
|
||||||
|
// Double-click the title label (not on a button) to collapse all.
|
||||||
|
await page.click("#viewsManagerHeaderLabel", { count: 2 });
|
||||||
|
await page.waitForFunction(
|
||||||
|
() =>
|
||||||
|
document.querySelectorAll(
|
||||||
|
"#outlinesView .treeItemToggler:not(.treeItemsHidden)"
|
||||||
|
).length === 0
|
||||||
|
);
|
||||||
|
|
||||||
|
// Double-click again to expand all.
|
||||||
|
await page.click("#viewsManagerHeaderLabel", { count: 2 });
|
||||||
|
await page.waitForFunction(
|
||||||
|
() =>
|
||||||
|
document.querySelectorAll(
|
||||||
|
"#outlinesView .treeItemToggler.treeItemsHidden"
|
||||||
|
).length === 0
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Double-click on title resets all layer checkboxes", () => {
|
||||||
|
let pages;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
pages = await loadAndWait("issue17679.pdf", "#viewsManagerToggleButton");
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await closePages(pages);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should restore all layer checkboxes to checked after unchecking them", async () => {
|
||||||
|
await Promise.all(
|
||||||
|
pages.map(async ([browserName, page]) => {
|
||||||
|
await showViewsManager(page);
|
||||||
|
|
||||||
|
await page.click("#viewsManagerSelectorButton");
|
||||||
|
await page.waitForSelector("#layersViewMenu", { visible: true });
|
||||||
|
await page.click("#layersViewMenu");
|
||||||
|
await page.waitForSelector("#layersView input[type='checkbox']");
|
||||||
|
|
||||||
|
// Uncheck all checkboxes.
|
||||||
|
const checkboxes = await page.$$(
|
||||||
|
"#layersView input[type='checkbox']"
|
||||||
|
);
|
||||||
|
for (const checkbox of checkboxes) {
|
||||||
|
await checkbox.click();
|
||||||
|
}
|
||||||
|
await page.waitForSelector("#layersView:not(:has(:checked))");
|
||||||
|
|
||||||
|
// Double-click the title label to reset layers to their default
|
||||||
|
// state.
|
||||||
|
await page.click("#viewsManagerHeaderLabel", { count: 2 });
|
||||||
|
|
||||||
|
await page.waitForSelector(
|
||||||
|
`#layersView:not(:has(input[type="checkbox"]:not(:checked)))`
|
||||||
|
);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -158,9 +158,9 @@ class ViewsManager extends Sidebar {
|
|||||||
|
|
||||||
ViewsManager.#l10nDescription ||= Object.freeze({
|
ViewsManager.#l10nDescription ||= Object.freeze({
|
||||||
pagesTitle: "pdfjs-views-manager-pages-title",
|
pagesTitle: "pdfjs-views-manager-pages-title",
|
||||||
outlinesTitle: "pdfjs-views-manager-outlines-title",
|
outlinesTitle: "pdfjs-views-manager-outlines-title1",
|
||||||
attachmentsTitle: "pdfjs-views-manager-attachments-title",
|
attachmentsTitle: "pdfjs-views-manager-attachments-title",
|
||||||
layersTitle: "pdfjs-views-manager-layers-title",
|
layersTitle: "pdfjs-views-manager-layers-title1",
|
||||||
notificationButton: "pdfjs-toggle-views-manager-notification-button",
|
notificationButton: "pdfjs-toggle-views-manager-notification-button",
|
||||||
toggleButton: "pdfjs-toggle-views-manager-button",
|
toggleButton: "pdfjs-toggle-views-manager-button",
|
||||||
});
|
});
|
||||||
@ -424,6 +424,16 @@ class ViewsManager extends Sidebar {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.viewsManagerHeaderLabel.addEventListener("dblclick", e => {
|
||||||
|
if (this.active === SidebarView.OUTLINE) {
|
||||||
|
eventBus.dispatch("toggleoutlinetree", { source: this });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.active === SidebarView.LAYERS) {
|
||||||
|
eventBus.dispatch("resetlayers", { source: this });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Buttons for switching views.
|
// Buttons for switching views.
|
||||||
this.thumbnailButton.addEventListener("click", () => {
|
this.thumbnailButton.addEventListener("click", () => {
|
||||||
this.switchView(SidebarView.THUMBS);
|
this.switchView(SidebarView.THUMBS);
|
||||||
@ -432,9 +442,6 @@ class ViewsManager extends Sidebar {
|
|||||||
this.outlineButton.addEventListener("click", () => {
|
this.outlineButton.addEventListener("click", () => {
|
||||||
this.switchView(SidebarView.OUTLINE);
|
this.switchView(SidebarView.OUTLINE);
|
||||||
});
|
});
|
||||||
this.outlineButton.addEventListener("dblclick", () => {
|
|
||||||
eventBus.dispatch("toggleoutlinetree", { source: this });
|
|
||||||
});
|
|
||||||
|
|
||||||
this.attachmentsButton.addEventListener("click", () => {
|
this.attachmentsButton.addEventListener("click", () => {
|
||||||
this.switchView(SidebarView.ATTACHMENTS);
|
this.switchView(SidebarView.ATTACHMENTS);
|
||||||
@ -443,9 +450,6 @@ class ViewsManager extends Sidebar {
|
|||||||
this.layersButton.addEventListener("click", () => {
|
this.layersButton.addEventListener("click", () => {
|
||||||
this.switchView(SidebarView.LAYERS);
|
this.switchView(SidebarView.LAYERS);
|
||||||
});
|
});
|
||||||
this.layersButton.addEventListener("dblclick", () => {
|
|
||||||
eventBus.dispatch("resetlayers", { source: this });
|
|
||||||
});
|
|
||||||
|
|
||||||
// Buttons for view-specific options.
|
// Buttons for view-specific options.
|
||||||
this.viewsManagerCurrentOutlineButton.addEventListener("click", () => {
|
this.viewsManagerCurrentOutlineButton.addEventListener("click", () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user