summaryrefslogtreecommitdiff
path: root/addons/web/static/lib/pdfjs/src/display/annotation_helper.js
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2016-09-13 12:31:47 +0200
committerqsm-odoo <qsm@odoo.com>2016-09-13 14:18:31 +0200
commitd83f7587aae3fd2fcd4b6c4622ee7bcca9e80abe (patch)
treea9114bd3014f61583609a75c1b5d5af85397a2a6 /addons/web/static/lib/pdfjs/src/display/annotation_helper.js
parent837be69785ee24b8a7b0230ff6bc7e70cba5f5c5 (diff)
[MOV] web, website(_slides): move PDFjs lib to web
website_sign is now a backend-only module in enterprise, so it should not use a website library (even in a static way).
Diffstat (limited to 'addons/web/static/lib/pdfjs/src/display/annotation_helper.js')
-rw-r--r--addons/web/static/lib/pdfjs/src/display/annotation_helper.js246
1 files changed, 246 insertions, 0 deletions
diff --git a/addons/web/static/lib/pdfjs/src/display/annotation_helper.js b/addons/web/static/lib/pdfjs/src/display/annotation_helper.js
new file mode 100644
index 00000000000..a64ee35f782
--- /dev/null
+++ b/addons/web/static/lib/pdfjs/src/display/annotation_helper.js
@@ -0,0 +1,246 @@
+/* -*- 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, Util, AnnotationType */
+
+'use strict';
+
+var ANNOT_MIN_SIZE = 10; // px
+
+var AnnotationUtils = (function AnnotationUtilsClosure() {
+ // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()
+ function setTextStyles(element, item, fontObj) {
+
+ var style = element.style;
+ style.fontSize = item.fontSize + 'px';
+ style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';
+
+ if (!fontObj) {
+ return;
+ }
+
+ style.fontWeight = fontObj.black ?
+ (fontObj.bold ? 'bolder' : 'bold') :
+ (fontObj.bold ? 'bold' : 'normal');
+ style.fontStyle = fontObj.italic ? 'italic' : 'normal';
+
+ var fontName = fontObj.loadedName;
+ var fontFamily = fontName ? '"' + fontName + '", ' : '';
+ // Use a reasonable default font if the font doesn't specify a fallback
+ var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif';
+ style.fontFamily = fontFamily + fallbackName;
+ }
+
+ function initContainer(item, drawBorder) {
+ var container = document.createElement('section');
+ var cstyle = container.style;
+ var width = item.rect[2] - item.rect[0];
+ var height = item.rect[3] - item.rect[1];
+
+ var bWidth = item.borderWidth || 0;
+ if (bWidth) {
+ width = width - 2 * bWidth;
+ height = height - 2 * bWidth;
+ cstyle.borderWidth = bWidth + 'px';
+ var color = item.color;
+ if (drawBorder && color) {
+ cstyle.borderStyle = 'solid';
+ cstyle.borderColor = Util.makeCssRgb(Math.round(color[0] * 255),
+ Math.round(color[1] * 255),
+ Math.round(color[2] * 255));
+ }
+ }
+ cstyle.width = width + 'px';
+ cstyle.height = height + 'px';
+ return container;
+ }
+
+ function getHtmlElementForTextWidgetAnnotation(item, commonObjs) {
+ var element = document.createElement('div');
+ var width = item.rect[2] - item.rect[0];
+ var height = item.rect[3] - item.rect[1];
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ element.style.display = 'table';
+
+ var content = document.createElement('div');
+ content.textContent = item.fieldValue;
+ var textAlignment = item.textAlignment;
+ content.style.textAlign = ['left', 'center', 'right'][textAlignment];
+ content.style.verticalAlign = 'middle';
+ content.style.display = 'table-cell';
+
+ var fontObj = item.fontRefName ?
+ commonObjs.getData(item.fontRefName) : null;
+ setTextStyles(content, item, fontObj);
+
+ element.appendChild(content);
+
+ return element;
+ }
+
+ function getHtmlElementForTextAnnotation(item) {
+ var rect = item.rect;
+
+ // sanity check because of OOo-generated PDFs
+ if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) {
+ rect[3] = rect[1] + ANNOT_MIN_SIZE;
+ }
+ if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) {
+ rect[2] = rect[0] + (rect[3] - rect[1]); // make it square
+ }
+
+ var container = initContainer(item, false);
+ container.className = 'annotText';
+
+ var image = document.createElement('img');
+ image.style.height = container.style.height;
+ image.style.width = container.style.width;
+ var iconName = item.name;
+ image.src = PDFJS.imageResourcesPath + 'annotation-' +
+ iconName.toLowerCase() + '.svg';
+ image.alt = '[{{type}} Annotation]';
+ image.dataset.l10nId = 'text_annotation_type';
+ image.dataset.l10nArgs = JSON.stringify({type: iconName});
+
+ var contentWrapper = document.createElement('div');
+ contentWrapper.className = 'annotTextContentWrapper';
+ contentWrapper.style.left = Math.floor(rect[2] - rect[0] + 5) + 'px';
+ contentWrapper.style.top = '-10px';
+
+ var content = document.createElement('div');
+ content.className = 'annotTextContent';
+ content.setAttribute('hidden', true);
+
+ var i, ii;
+ if (item.hasBgColor) {
+ var color = item.color;
+
+ // Enlighten the color (70%)
+ var BACKGROUND_ENLIGHT = 0.7;
+ var r = BACKGROUND_ENLIGHT * (1.0 - color[0]) + color[0];
+ var g = BACKGROUND_ENLIGHT * (1.0 - color[1]) + color[1];
+ var b = BACKGROUND_ENLIGHT * (1.0 - color[2]) + color[2];
+ content.style.backgroundColor = Util.makeCssRgb((r * 255) | 0,
+ (g * 255) | 0,
+ (b * 255) | 0);
+ }
+
+ var title = document.createElement('h1');
+ var text = document.createElement('p');
+ title.textContent = item.title;
+
+ if (!item.content && !item.title) {
+ content.setAttribute('hidden', true);
+ } else {
+ var e = document.createElement('span');
+ var lines = item.content.split(/(?:\r\n?|\n)/);
+ for (i = 0, ii = lines.length; i < ii; ++i) {
+ var line = lines[i];
+ e.appendChild(document.createTextNode(line));
+ if (i < (ii - 1)) {
+ e.appendChild(document.createElement('br'));
+ }
+ }
+ text.appendChild(e);
+
+ var pinned = false;
+
+ var showAnnotation = function showAnnotation(pin) {
+ if (pin) {
+ pinned = true;
+ }
+ if (content.hasAttribute('hidden')) {
+ container.style.zIndex += 1;
+ content.removeAttribute('hidden');
+ }
+ };
+
+ var hideAnnotation = function hideAnnotation(unpin) {
+ if (unpin) {
+ pinned = false;
+ }
+ if (!content.hasAttribute('hidden') && !pinned) {
+ container.style.zIndex -= 1;
+ content.setAttribute('hidden', true);
+ }
+ };
+
+ var toggleAnnotation = function toggleAnnotation() {
+ if (pinned) {
+ hideAnnotation(true);
+ } else {
+ showAnnotation(true);
+ }
+ };
+
+ image.addEventListener('click', function image_clickHandler() {
+ toggleAnnotation();
+ }, false);
+ image.addEventListener('mouseover', function image_mouseOverHandler() {
+ showAnnotation();
+ }, false);
+ image.addEventListener('mouseout', function image_mouseOutHandler() {
+ hideAnnotation();
+ }, false);
+
+ content.addEventListener('click', function content_clickHandler() {
+ hideAnnotation(true);
+ }, false);
+ }
+
+ content.appendChild(title);
+ content.appendChild(text);
+ contentWrapper.appendChild(content);
+ container.appendChild(image);
+ container.appendChild(contentWrapper);
+
+ return container;
+ }
+
+ function getHtmlElementForLinkAnnotation(item) {
+ var container = initContainer(item, true);
+ container.className = 'annotLink';
+
+ var link = document.createElement('a');
+ link.href = link.title = item.url || '';
+ if (item.url && PDFJS.openExternalLinksInNewWindow) {
+ link.target = '_blank';
+ }
+
+ container.appendChild(link);
+
+ return container;
+ }
+
+ function getHtmlElement(data, objs) {
+ switch (data.annotationType) {
+ case AnnotationType.WIDGET:
+ return getHtmlElementForTextWidgetAnnotation(data, objs);
+ case AnnotationType.TEXT:
+ return getHtmlElementForTextAnnotation(data);
+ case AnnotationType.LINK:
+ return getHtmlElementForLinkAnnotation(data);
+ default:
+ throw new Error('Unsupported annotationType: ' + data.annotationType);
+ }
+ }
+
+ return {
+ getHtmlElement: getHtmlElement
+ };
+})();
+PDFJS.AnnotationUtils = AnnotationUtils;