summaryrefslogtreecommitdiff
path: root/addons/website/static/lib/pdfjs/web/annotations_layer_builder.js
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2015-08-04 15:05:06 +0200
committerAntony Lesuisse <al@openerp.com>2015-08-14 13:54:49 +0200
commit07c020d7e59d55a22ffbea313ed08a30cbe070a5 (patch)
tree9f143bced391d311044e959aa2c08689d60e7424 /addons/website/static/lib/pdfjs/web/annotations_layer_builder.js
parent70719843bfc8840f81088bfd82e1073cbd9d26dc (diff)
[IMP] website: PDFJS lib - GitHub import
* Import src, web and external directories from PDFJS GitHub repo
Diffstat (limited to 'addons/website/static/lib/pdfjs/web/annotations_layer_builder.js')
-rw-r--r--addons/website/static/lib/pdfjs/web/annotations_layer_builder.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/addons/website/static/lib/pdfjs/web/annotations_layer_builder.js b/addons/website/static/lib/pdfjs/web/annotations_layer_builder.js
new file mode 100644
index 00000000000..b5ef814ec79
--- /dev/null
+++ b/addons/website/static/lib/pdfjs/web/annotations_layer_builder.js
@@ -0,0 +1,177 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2014 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*globals PDFJS, CustomStyle, mozL10n */
+
+'use strict';
+
+/**
+ * @typedef {Object} AnnotationsLayerBuilderOptions
+ * @property {HTMLDivElement} pageDiv
+ * @property {PDFPage} pdfPage
+ * @property {IPDFLinkService} linkService
+ */
+
+/**
+ * @class
+ */
+var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() {
+ /**
+ * @param {AnnotationsLayerBuilderOptions} options
+ * @constructs AnnotationsLayerBuilder
+ */
+ function AnnotationsLayerBuilder(options) {
+ this.pageDiv = options.pageDiv;
+ this.pdfPage = options.pdfPage;
+ this.linkService = options.linkService;
+
+ this.div = null;
+ }
+ AnnotationsLayerBuilder.prototype =
+ /** @lends AnnotationsLayerBuilder.prototype */ {
+
+ /**
+ * @param {PageViewport} viewport
+ */
+ setupAnnotations:
+ function AnnotationsLayerBuilder_setupAnnotations(viewport) {
+ 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;
+ var self = this;
+
+ pdfPage.getAnnotations().then(function (annotationsData) {
+ 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');
+ } else {
+ for (i = 0, ii = annotationsData.length; i < ii; i++) {
+ data = annotationsData[i];
+ if (!data || !data.hasHtml) {
+ continue;
+ }
+
+ element = PDFJS.AnnotationUtils.getHtmlElement(data,
+ pdfPage.commonObjs);
+ element.setAttribute('data-annotation-id', data.id);
+ if (typeof mozL10n !== 'undefined') {
+ mozL10n.translate(element);
+ }
+
+ 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);
+ }
+ }
+ });
+ },
+
+ hide: function () {
+ if (!this.div) {
+ return;
+ }
+ this.div.setAttribute('hidden', 'true');
+ }
+ };
+ return AnnotationsLayerBuilder;
+})();
+
+/**
+ * @constructor
+ * @implements IPDFAnnotationsLayerFactory
+ */
+function DefaultAnnotationsLayerFactory() {}
+DefaultAnnotationsLayerFactory.prototype = {
+ /**
+ * @param {HTMLDivElement} pageDiv
+ * @param {PDFPage} pdfPage
+ * @returns {AnnotationsLayerBuilder}
+ */
+ createAnnotationsLayerBuilder: function (pageDiv, pdfPage) {
+ return new AnnotationsLayerBuilder({
+ pageDiv: pageDiv,
+ pdfPage: pdfPage
+ });
+ }
+};