mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-20 15:18:08 +02:00
Add support for outline items, in the default viewer, which default to collapsed when the outline is built
The PDF specification supports this feature, which is commonly used in large/long documents (such as the spec itself), and it seems reasonably straightforward to implement; see https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G11.2095911
This commit is contained in:
parent
63014eb897
commit
26bc630e19
3 changed files with 13 additions and 7 deletions
|
@ -112,9 +112,12 @@ class PDFOutlineViewer {
|
|||
*
|
||||
* @private
|
||||
*/
|
||||
_addToggleButton(div) {
|
||||
_addToggleButton(div, { count, items, }) {
|
||||
let toggler = document.createElement('div');
|
||||
toggler.className = 'outlineItemToggler';
|
||||
if (count < 0 && Math.abs(count) === items.length) {
|
||||
toggler.classList.add('outlineItemsHidden');
|
||||
}
|
||||
toggler.onclick = (evt) => {
|
||||
evt.stopPropagation();
|
||||
toggler.classList.toggle('outlineItemsHidden');
|
||||
|
@ -173,10 +176,8 @@ class PDFOutlineViewer {
|
|||
let queue = [{ parent: fragment, items: this.outline, }];
|
||||
let hasAnyNesting = false;
|
||||
while (queue.length > 0) {
|
||||
let levelData = queue.shift();
|
||||
for (let i = 0, len = levelData.items.length; i < len; i++) {
|
||||
let item = levelData.items[i];
|
||||
|
||||
const levelData = queue.shift();
|
||||
for (const item of levelData.items) {
|
||||
let div = document.createElement('div');
|
||||
div.className = 'outlineItem';
|
||||
|
||||
|
@ -190,7 +191,7 @@ class PDFOutlineViewer {
|
|||
|
||||
if (item.items.length > 0) {
|
||||
hasAnyNesting = true;
|
||||
this._addToggleButton(div);
|
||||
this._addToggleButton(div, item);
|
||||
|
||||
let itemsDiv = document.createElement('div');
|
||||
itemsDiv.className = 'outlineItems';
|
||||
|
@ -204,6 +205,9 @@ class PDFOutlineViewer {
|
|||
}
|
||||
if (hasAnyNesting) {
|
||||
this.container.classList.add('outlineWithDeepNesting');
|
||||
|
||||
this.lastToggleIsShow =
|
||||
(fragment.querySelectorAll('.outlineItemsHidden').length === 0);
|
||||
}
|
||||
|
||||
this.container.appendChild(fragment);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue