diff --git a/examples/acroforms/index.html b/examples/acroforms/index.html index d6c644f44..a54ba7045 100644 --- a/examples/acroforms/index.html +++ b/examples/acroforms/index.html @@ -12,7 +12,7 @@ - + - + - + diff --git a/test/test_slave.html b/test/test_slave.html index 7236914d5..ad33b5905 100644 --- a/test/test_slave.html +++ b/test/test_slave.html @@ -26,7 +26,7 @@ limitations under the License. - + diff --git a/test/unit/unit_test.html b/test/unit/unit_test.html index fcce65d19..2fbfa8d8a 100644 --- a/test/unit/unit_test.html +++ b/test/unit/unit_test.html @@ -37,7 +37,7 @@ - + diff --git a/web/annotations_layer_builder.css b/web/annotations_layer_builder.css index 19974ac02..dc5a161c9 100644 --- a/web/annotations_layer_builder.css +++ b/web/annotations_layer_builder.css @@ -13,6 +13,10 @@ * limitations under the License. */ +.annotationLayer section { + position: absolute; +} + .annotationLayer .annotLink > a:hover { opacity: 0.2; background: #ff0; diff --git a/web/annotations_layer_builder.js b/web/annotations_layer_builder.js index 11ae32d54..e9b0fbde3 100644 --- a/web/annotations_layer_builder.js +++ b/web/annotations_layer_builder.js @@ -27,8 +27,6 @@ * @class */ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() { - var CustomStyle = PDFJS.CustomStyle; - /** * @param {AnnotationsLayerBuilderOptions} options * @constructs AnnotationsLayerBuilder @@ -40,6 +38,7 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() { this.div = null; } + AnnotationsLayerBuilder.prototype = /** @lends AnnotationsLayerBuilder.prototype */ { @@ -47,118 +46,47 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() { * @param {PageViewport} viewport * @param {string} intent (default value is 'display') */ - setupAnnotations: - function AnnotationsLayerBuilder_setupAnnotations(viewport, intent) { - function bindLink(link, dest) { - link.href = linkService.getDestinationHash(dest); - link.onclick = function annotationsLayerBuilderLinksOnclick() { - if (dest) { - linkService.navigateTo(dest); - } - return false; - }; - if (dest) { - link.className = 'internalLink'; - } - } - - function bindNamedAction(link, action) { - link.href = linkService.getAnchorUrl(''); - link.onclick = function annotationsLayerBuilderNamedActionOnClick() { - linkService.executeNamedAction(action); - return false; - }; - link.className = 'internalLink'; - } - - var linkService = this.linkService; - var pdfPage = this.pdfPage; + render: function AnnotationsLayerBuilder_render(viewport, intent) { var self = this; - var getAnnotationsParams = { + var parameters = { intent: (intent === undefined ? 'display' : intent), }; - pdfPage.getAnnotations(getAnnotationsParams).then( - function (annotationsData) { + this.pdfPage.getAnnotations(parameters).then(function (annotations) { viewport = viewport.clone({ dontFlip: true }); - var transform = viewport.transform; - var transformStr = 'matrix(' + transform.join(',') + ')'; - var data, element, i, ii; if (self.div) { // If an annotationLayer already exists, refresh its children's - // transformation matrices - for (i = 0, ii = annotationsData.length; i < ii; i++) { - data = annotationsData[i]; - element = self.div.querySelector( - '[data-annotation-id="' + data.id + '"]'); - if (element) { - CustomStyle.setProp('transform', element, transformStr); - } - } - // See PDFPageView.reset() - self.div.removeAttribute('hidden'); + // transformation matrices. + PDFJS.AnnotationLayer.update(viewport, self.div, annotations); } else { - for (i = 0, ii = annotationsData.length; i < ii; i++) { - data = annotationsData[i]; - if (!data || !data.hasHtml) { - continue; - } + // Create an annotation layer div and render the annotations + // if there is at least one annotation. + if (annotations.length === 0) { + return; + } - element = PDFJS.AnnotationUtils.getHtmlElement(data, - pdfPage.commonObjs); - element.setAttribute('data-annotation-id', data.id); - if (typeof mozL10n !== 'undefined') { - mozL10n.translate(element); - } + self.div = document.createElement('div'); + self.div.className = 'annotationLayer'; + self.pageDiv.appendChild(self.div); - var rect = data.rect; - var view = pdfPage.view; - rect = PDFJS.Util.normalizeRect([ - rect[0], - view[3] - rect[1] + view[1], - rect[2], - view[3] - rect[3] + view[1] - ]); - element.style.left = rect[0] + 'px'; - element.style.top = rect[1] + 'px'; - element.style.position = 'absolute'; - - CustomStyle.setProp('transform', element, transformStr); - var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px'; - CustomStyle.setProp('transformOrigin', element, transformOriginStr); - - if (data.subtype === 'Link' && !data.url) { - var link = element.getElementsByTagName('a')[0]; - if (link) { - if (data.action) { - bindNamedAction(link, data.action); - } else { - bindLink(link, ('dest' in data) ? data.dest : null); - } - } - } - - if (!self.div) { - var annotationLayerDiv = document.createElement('div'); - annotationLayerDiv.className = 'annotationLayer'; - self.pageDiv.appendChild(annotationLayerDiv); - self.div = annotationLayerDiv; - } - - self.div.appendChild(element); + PDFJS.AnnotationLayer.render(viewport, self.div, annotations, + self.pdfPage, self.linkService); + if (typeof mozL10n !== 'undefined') { + mozL10n.translate(self.div); } } }); }, - hide: function () { + hide: function AnnotationsLayerBuilder_hide() { if (!this.div) { return; } this.div.setAttribute('hidden', 'true'); } }; + return AnnotationsLayerBuilder; })(); diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 440b31fb4..1e1e68507 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -275,7 +275,7 @@ var PDFPageView = (function PDFPageViewClosure() { } if (redrawAnnotations && this.annotationLayer) { - this.annotationLayer.setupAnnotations(this.viewport, 'display'); + this.annotationLayer.render(this.viewport, 'display'); } }, @@ -507,7 +507,7 @@ var PDFPageView = (function PDFPageViewClosure() { this.annotationLayer = this.annotationsLayerFactory. createAnnotationsLayerBuilder(div, this.pdfPage); } - this.annotationLayer.setupAnnotations(this.viewport, 'display'); + this.annotationLayer.render(this.viewport, 'display'); } div.setAttribute('data-loaded', true); diff --git a/web/viewer.html b/web/viewer.html index dbbaece08..8cc4ea963 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -61,7 +61,7 @@ See https://github.com/adobe-type-tools/cmap-resources - +