1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 22:58:07 +02:00
pdf.js/web
Jonas Jenwald 5729c0b32f Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050)
This implementation is inspired by the behaviour in (recent versions of) Adobe Reader, since it leads to reasonably simple and straightforward code as far as I'm concerned.
*Specifically:* We'll only consider *one* destination per page when finding/highlighting the current outline item, which is similar to e.g. Adobe Reader, and we choose the *first* outline item at the *lowest* level of the outline tree.

Given that this functionality requires not only parsing of the `outline`, but looking up *all* of the destinations in the document, this feature can when initialized have a non-trivial performance overhead for larger PDF documents.
In an attempt to reduce the performance impact, the following steps are taken here:

 - The "find current outline item"-functionality will only be enabled once *one* page has rendered and *all* the pages have been loaded[1], to prevent it interfering with data regular fetching/parsing early on during document loading and viewer initialization.

 - With the exception of a couple of small and simple `eventBus`-listeners, in `PDFOutlineViewer`, this new functionality is initialized *lazily* the first time that the user clicks on the `currentOutlineItem`-button.

 - The entire "find current outline item"-functionality is disabled when `disableAutoFetch = true` is set, since it can easily lead to the setting becoming essentially pointless[2] by triggering *a lot* of data fetching from a relatively minor viewer-feature.

 - Fetch the destinations *individually*, since that's generally more efficient than using `PDFDocumentProxy.getDestinations` to fetch them all at once. Despite making the overall parsing code *more* asynchronous, and leading to a lot more main/worker-thread message passing, in practice this seems faster for larger documents.

Finally, we'll now always highlight an outline item that the user manually clicked on, since only highlighting when the new "find current outline item"-functionality is used seemed inconsistent.

---
[1] Keep in mind that the `outline` itself already isn't fetched/parsed until at least *one* page has been rendered in the viewer.

[2] And also quite slow, since it can take a fair amount of time to fetch all of the necessary `destinations` data when `disableAutoFetch = true` is set.
2021-01-09 16:09:44 +01:00
..
images Use the same SVG images, in the default viewer, regardless of the CSS theme 2020-12-01 11:45:09 +01:00
.eslintrc Enable the ESLint prefer-const rule globally (PR 11450 follow-up) 2020-01-25 00:20:22 +01:00
.gitignore Remove obselete file from .gitignore 2015-01-26 16:44:45 +01:00
annotation_layer_builder.css Re-format all web/*.css files using Stylelint/Prettier 2020-08-30 21:49:08 +02:00
annotation_layer_builder.js Tweak the new mouseState parameter, and its usage, in the viewer components and the AnnotationLayer 2020-12-18 22:03:41 +01:00
app.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
app_options.js Remove the ENABLE_SCRIPTING build-target, since it's not necessary 2020-12-18 22:10:36 +01:00
base_tree_viewer.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
base_viewer.js Unconditionally initialize the this._pageOpenPendingSet in BaseViewer._initializeScriptingEvents (PR 12747 follow-up) 2021-01-07 23:11:31 +01:00
chrome-i18n-allow-access-to-file-urls.json Add translations of "Allow access to file URLs" 2015-08-14 18:59:55 +02:00
chromecom.js Pass in the "sandboxBundleSrc" option when calling DefaultExternalServices.createScripting 2020-12-23 14:05:49 +01:00
compressed.tracemonkey-pldi-09.pdf Add Makefile. Move some files around to make building the website easier. 2011-07-05 10:53:57 -07:00
debugger.js Enable the ESLint no-useless-escape rule (PR 12551 follow-up) 2020-11-07 13:06:24 +01:00
download_manager.js Remove the DownloadManager.onerror functionality, since its only usage is unlikely to be helpful 2021-01-02 13:25:42 +01:00
firefox_print_service.js [Firefox] Stop logging RenderingCancelledExceptions as errors when printing 2020-10-04 20:25:31 +02:00
firefoxcom.js Remove the DownloadManager.onerror functionality, since its only usage is unlikely to be helpful 2021-01-02 13:25:42 +01:00
generic_scripting.js Pass in the "sandboxBundleSrc" option when calling DefaultExternalServices.createScripting 2020-12-23 14:05:49 +01:00
genericcom.js Pass in the "sandboxBundleSrc" option when calling DefaultExternalServices.createScripting 2020-12-23 14:05:49 +01:00
genericl10n.js Enable import/extensions of ESlint plugin to enforce all import have a .js file extension. 2020-01-18 10:53:01 +09:00
grab_to_pan.js Remove some code/comments relevant for old (pre-Chromium) versions of Opera 2020-09-08 12:54:51 +02:00
interfaces.js JS -- Send events to the sandbox from annotation layer 2020-12-15 16:28:47 +01:00
overlay_manager.js Fix the linting errors, from the Prettier auto-formatting, that ESLint --fix couldn't handle 2019-12-26 12:35:12 +01:00
password_prompt.js Ensure that all import and require statements, in the entire code-base, have a .js file extension 2020-01-04 13:01:43 +01:00
pdf_attachment_viewer.js Extract common functionality into a new BaseTreeViewer._finishRendering method 2020-12-30 13:48:58 +01:00
pdf_cursor_tools.js Include the state in the "presentationmodechanged" event, and remove the separate active/switchInProgress properties 2020-12-28 20:31:17 +01:00
pdf_document_properties.js Convert the PDFDocumentProperties.open method to be async 2020-11-21 13:54:36 +01:00
pdf_find_bar.js [Generic viewer] Re-factor how the notFound appearance is set on the "findInput" in the PDFFindBar 2020-12-02 15:23:20 +01:00
pdf_find_controller.js Return the query with the findcontrols 2020-08-20 11:18:43 +01:00
pdf_find_utils.js Enable auto-formatting of the entire code-base using Prettier (issue 11444) 2019-12-26 12:34:24 +01:00
pdf_history.js Support the once option, when registering EventBus listeners 2020-12-29 16:49:13 +01:00
pdf_layer_viewer.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
pdf_link_service.js Trigger cleanup, once rendering has finished, in PDFThumbnailView.draw 2020-11-12 17:09:47 +01:00
pdf_outline_viewer.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
pdf_page_view.js Tweak the new mouseState parameter, and its usage, in the viewer components and the AnnotationLayer 2020-12-18 22:03:41 +01:00
pdf_presentation_mode.js Include the state in the "presentationmodechanged" event, and remove the separate active/switchInProgress properties 2020-12-28 20:31:17 +01:00
pdf_print_service.js Remove code-paths only relevant for IE 11/Edge (non-Chromium based) from the web/ folder 2020-09-05 17:18:15 +02:00
pdf_rendering_queue.js Ignore RenderingCancelledException when logging errors in PDFRenderingQueue.renderView 2020-09-25 14:21:05 +02:00
pdf_sidebar.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
pdf_sidebar_resizer.js Remove CSS variables feature-testing from PDFSidebarResizer 2020-09-09 22:26:08 +02:00
pdf_single_page_viewer.js Fix automatic zoom under spread mode (#12699) 2020-12-14 17:57:00 +01:00
pdf_thumbnail_view.js Merge pull request #12618 from Snuffleupagus/thumbnails-render-transform 2020-11-14 16:32:09 +01:00
pdf_thumbnail_viewer.js Improve the cleanup functionality for thumbnails 2020-11-13 13:31:01 +01:00
pdf_viewer.component.js [api-minor] Deprecate getGlobalEventBus and update the "viewer components" examples accordingly 2020-02-27 14:44:48 +01:00
pdf_viewer.css Remove code-paths only relevant for IE 11/Edge (non-Chromium based) from the web/ folder 2020-09-05 17:18:15 +02:00
pdf_viewer.js Rename BaseViewer._setDocumentViewerElement to BaseViewer._viewerElement 2020-03-24 16:54:37 +01:00
pdfjs.js Enable auto-formatting of the entire code-base using Prettier (issue 11444) 2019-12-26 12:34:24 +01:00
preferences.js Reduce, now unnecessary, asynchronicity in the BasePreferences constructor 2020-11-16 14:19:54 +01:00
secondary_toolbar.js Update Prettier to version 2.0 2020-04-14 12:28:14 +02:00
text_layer_builder.css Re-format all web/*.css files using Stylelint/Prettier 2020-08-30 21:49:08 +02:00
text_layer_builder.js Update Prettier to version 2.0 2020-04-14 12:28:14 +02:00
toolbar.js Update the zoom dropdown width calculation to work better in locales with long zoom-strings (PR 11077 follow-up) 2020-08-20 09:57:42 +02:00
ui_utils.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
view_history.js Add a bit more validation in the ViewHistory constructor 2020-03-21 13:55:06 +01:00
viewer-snippet-chrome-extension.html Wraps mozL10n to async calls; splits firefox and generic l10n libs. 2017-05-31 09:22:25 -05:00
viewer-snippet-chrome-overlays.html [CRX] Add file chooser as fallback (fixes #9411) 2018-03-21 18:21:46 +01:00
viewer-snippet-firefox-extension.html Stop bundling the ReadableStream polyfill in MOZCENTRAL builds (PR 10470 follow-up) 2019-01-23 20:33:20 +01:00
viewer-snippet-minified.html Remove XHTML leftovers from the viewer HTML files 2016-02-14 13:23:34 +01:00
viewer-snippet.html Wraps mozL10n to async calls; splits firefox and generic l10n libs. 2017-05-31 09:22:25 -05:00
viewer.css Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
viewer.html Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
viewer.js Add support for finding/highlighting the outlineItem, corresponding to the currently visible page, in the sidebar (issue 7557, bug 1253820, bug 1499050) 2021-01-09 16:09:44 +01:00
viewer_compatibility.js Remove code-paths only relevant for IE 11/Edge (non-Chromium based) from the web/ folder 2020-09-05 17:18:15 +02:00