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
-
+