From efb9619e53b0e12ccbac95f3d7d5c87bbae24fa0 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 27 Jan 2016 14:27:01 +0100 Subject: [PATCH] Add PageLabels to `PDFPageView` and `PDFThumbnailView` --- web/pdf_page_view.js | 14 ++++++++++++++ web/pdf_thumbnail_view.js | 31 +++++++++++++++++++++++++++++-- web/pdf_thumbnail_viewer.js | 6 ++++++ web/pdf_viewer.js | 6 ++++++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 8e8d2b274..14e9fd0b6 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -78,6 +78,7 @@ var PDFPageView = (function PDFPageViewClosure() { this.id = id; this.renderingId = 'page' + id; + this.pageLabel = null; this.rotation = 0; this.scale = scale || DEFAULT_SCALE; @@ -554,6 +555,19 @@ var PDFPageView = (function PDFPageViewClosure() { } return promise; }, + + /** + * @param {string|null} label + */ + setPageLabel: function PDFView_setPageLabel(label) { + this.pageLabel = (typeof label === 'string' ? label : null); + + if (this.pageLabel !== null) { + this.div.setAttribute('data-page-label', this.pageLabel); + } else { + this.div.removeAttribute('data-page-label'); + } + }, }; return PDFPageView; diff --git a/web/pdf_thumbnail_view.js b/web/pdf_thumbnail_view.js index 52db26928..65d0f6cf1 100644 --- a/web/pdf_thumbnail_view.js +++ b/web/pdf_thumbnail_view.js @@ -91,6 +91,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { this.id = id; this.renderingId = 'thumbnail' + id; + this.pageLabel = null; this.pdfPage = null; this.rotation = 0; @@ -120,6 +121,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { linkService.page = id; return false; }; + this.anchor = anchor; var div = document.createElement('div'); div.id = 'thumbnailContainer' + id; @@ -247,7 +249,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { } var id = this.renderingId; var className = 'thumbnailImage'; - var ariaLabel = mozL10n.get('thumb_page_canvas', { page: this.id }, + var ariaLabel = mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); if (this.disableCanvasToImageConversion) { @@ -395,7 +397,32 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() { ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); this._convertCanvasToImage(); - } + }, + + get pageId() { + return (this.pageLabel !== null ? this.pageLabel : this.id); + }, + + /** + * @param {string|null} label + */ + setPageLabel: function PDFThumbnailView_setPageLabel(label) { + this.pageLabel = (typeof label === 'string' ? label : null); + + this.anchor.title = mozL10n.get('thumb_page_title', { page: this.pageId }, + 'Page {{page}}'); + + if (this.renderingState !== RenderingStates.FINISHED) { + return; + } + var ariaLabel = mozL10n.get('thumb_page_canvas', { page: this.pageId }, + 'Thumbnail of Page {{page}}'); + if (this.image) { + this.image.setAttribute('aria-label', ariaLabel); + } else if (this.disableCanvasToImageConversion && this.canvas) { + this.canvas.setAttribute('aria-label', ariaLabel); + } + }, }; return PDFThumbnailView; diff --git a/web/pdf_thumbnail_viewer.js b/web/pdf_thumbnail_viewer.js index 8a9dcc663..7d7eb5dd9 100644 --- a/web/pdf_thumbnail_viewer.js +++ b/web/pdf_thumbnail_viewer.js @@ -196,6 +196,12 @@ var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() { } else { this._pageLabels = labels; } + // Update all the `PDFThumbnailView` instances. + for (var i = 0, ii = this.thumbnails.length; i < ii; i++) { + var thumbnailView = this.thumbnails[i]; + var label = this._pageLabels && this._pageLabels[i]; + thumbnailView.setPageLabel(label); + } }, /** diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 5f7b97c13..ede997ef2 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -453,6 +453,12 @@ var PDFViewer = (function pdfViewer() { } else { this._pageLabels = labels; } + // Update all the `PDFPageView` instances. + for (var i = 0, ii = this._pages.length; i < ii; i++) { + var pageView = this._pages[i]; + var label = this._pageLabels && this._pageLabels[i]; + pageView.setPageLabel(label); + } }, _resetView: function () {