From f7fd1db52f6c429ef87f2fc723224bd9ec0ea237 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Mon, 24 Jul 2017 00:09:18 +0200 Subject: [PATCH 1/4] Introduce `DOMSVGFactory` This patch provides a new unit tested factory for creating SVG containers and elements. This code is duplicated twice in the codebase, but with upcoming changes this would need to be duplicated even more. Moreover, consolidating this code in one factory allows us to replace it easily for e.g., supporting Node.js. Therefore, move this to a central place and update/ES6-ify the related code. Finally, we replace `setAttributeNS` with `setAttribute` because no namespace is provided. --- src/display/annotation_layer.js | 33 ++++++++--------- src/display/dom_utils.js | 27 ++++++++++++-- src/display/svg.js | 59 ++++++++++++++---------------- test/unit/dom_utils_spec.js | 63 ++++++++++++++++++++++++++++++++- 4 files changed, 128 insertions(+), 54 deletions(-) diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 1014458eb..8011ed05d 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -14,8 +14,8 @@ */ import { - addLinkAttributes, CustomStyle, getDefaultSetting, getFilenameFromUrl, - LinkTarget + addLinkAttributes, CustomStyle, DOMSVGFactory, getDefaultSetting, + getFilenameFromUrl, LinkTarget } from './dom_utils'; import { AnnotationBorderStyleType, AnnotationType, stringToPDFString, Util, warn @@ -31,6 +31,7 @@ import { * @property {DownloadManager} downloadManager * @property {string} imageResourcesPath * @property {boolean} renderInteractiveForms + * @property {Object} svgFactory */ class AnnotationElementFactory { @@ -105,6 +106,7 @@ class AnnotationElement { this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderInteractiveForms = parameters.renderInteractiveForms; + this.svgFactory = parameters.svgFactory; if (isRenderable) { this.container = this._createContainer(ignoreBorder); @@ -769,8 +771,6 @@ class LineAnnotationElement extends AnnotationElement { * @returns {HTMLSectionElement} */ render() { - const SVG_NS = 'http://www.w3.org/2000/svg'; - this.container.className = 'lineAnnotation'; // Create an invisible line with the same starting and ending coordinates @@ -779,30 +779,24 @@ class LineAnnotationElement extends AnnotationElement { let data = this.data; let width = data.rect[2] - data.rect[0]; let height = data.rect[3] - data.rect[1]; - - let svg = document.createElementNS(SVG_NS, 'svg:svg'); - svg.setAttributeNS(null, 'version', '1.1'); - svg.setAttributeNS(null, 'width', width + 'px'); - svg.setAttributeNS(null, 'height', height + 'px'); - svg.setAttributeNS(null, 'preserveAspectRatio', 'none'); - svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height); + let svg = this.svgFactory.create(width, height); // PDF coordinates are calculated from a bottom left origin, so transform // the line coordinates to a top left origin for the SVG element. - let line = document.createElementNS(SVG_NS, 'svg:line'); - line.setAttributeNS(null, 'x1', data.rect[2] - data.lineCoordinates[0]); - line.setAttributeNS(null, 'y1', data.rect[3] - data.lineCoordinates[1]); - line.setAttributeNS(null, 'x2', data.rect[2] - data.lineCoordinates[2]); - line.setAttributeNS(null, 'y2', data.rect[3] - data.lineCoordinates[3]); - line.setAttributeNS(null, 'stroke-width', data.borderStyle.width); - line.setAttributeNS(null, 'stroke', 'transparent'); + let line = this.svgFactory.createElement('svg:line'); + line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]); + line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]); + line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]); + line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]); + line.setAttribute('stroke-width', data.borderStyle.width); + line.setAttribute('stroke', 'transparent'); svg.appendChild(line); this.container.append(svg); // Create the popup ourselves so that we can bind it to the line instead // of to the entire container (which is the default). - this._createPopup(this.container, line, this.data); + this._createPopup(this.container, line, data); return this.container; } @@ -993,6 +987,7 @@ class AnnotationLayer { imageResourcesPath: parameters.imageResourcesPath || getDefaultSetting('imageResourcesPath'), renderInteractiveForms: parameters.renderInteractiveForms || false, + svgFactory: new DOMSVGFactory(), }); if (element.isRenderable) { parameters.div.appendChild(element.render()); diff --git a/src/display/dom_utils.js b/src/display/dom_utils.js index 6fca2ae2e..4d0116849 100644 --- a/src/display/dom_utils.js +++ b/src/display/dom_utils.js @@ -14,12 +14,13 @@ */ import { - CMapCompressionType, createValidAbsoluteUrl, deprecated, + assert, CMapCompressionType, createValidAbsoluteUrl, deprecated, removeNullCharacters, stringToBytes, warn } from '../shared/util'; import globalScope from '../shared/global_scope'; -var DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; +const DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; +const SVG_NS = 'http://www.w3.org/2000/svg'; class DOMCanvasFactory { create(width, height) { @@ -109,6 +110,27 @@ class DOMCMapReaderFactory { } } +class DOMSVGFactory { + create(width, height) { + assert(width > 0 && height > 0, 'Invalid SVG dimensions'); + + let svg = document.createElementNS(SVG_NS, 'svg:svg'); + svg.setAttribute('version', '1.1'); + svg.setAttribute('width', width + 'px'); + svg.setAttribute('height', height + 'px'); + svg.setAttribute('preserveAspectRatio', 'none'); + svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height); + + return svg; + } + + createElement(type) { + assert(typeof type === 'string', 'Invalid SVG element type'); + + return document.createElementNS(SVG_NS, type); + } +} + /** * Optimised CSS custom property getter/setter. * @class @@ -330,4 +352,5 @@ export { DEFAULT_LINK_REL, DOMCanvasFactory, DOMCMapReaderFactory, + DOMSVGFactory, }; diff --git a/src/display/svg.js b/src/display/svg.js index 1ce15e383..a9367ea01 100644 --- a/src/display/svg.js +++ b/src/display/svg.js @@ -18,6 +18,7 @@ import { createObjectURL, FONT_IDENTITY_MATRIX, IDENTITY_MATRIX, ImageKind, isNodeJS, isNum, OPS, Util, warn } from '../shared/util'; +import { DOMSVGFactory } from './dom_utils'; var SVGGraphics = function() { throw new Error('Not implemented: SVGGraphics'); @@ -403,6 +404,8 @@ SVGGraphics = (function SVGGraphicsClosure() { } function SVGGraphics(commonObjs, objs, forceDataSchema) { + this.svgFactory = new DOMSVGFactory(); + this.current = new SVGExtraState(); this.transformMatrix = IDENTITY_MATRIX; // Graphics state matrix this.transformStack = []; @@ -418,7 +421,6 @@ SVGGraphics = (function SVGGraphicsClosure() { this.forceDataSchema = !!forceDataSchema; } - var NS = 'http://www.w3.org/2000/svg'; var XML_NS = 'http://www.w3.org/XML/1998/namespace'; var XLINK_NS = 'http://www.w3.org/1999/xlink'; var LINE_CAP_STYLES = ['butt', 'round', 'square']; @@ -683,13 +685,13 @@ SVGGraphics = (function SVGGraphicsClosure() { this.current.y = this.current.lineY = 0; current.xcoords = []; - current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan = this.svgFactory.createElement('svg:tspan'); current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); current.tspan.setAttributeNS(null, 'y', pf(-current.y)); - current.txtElement = document.createElementNS(NS, 'svg:text'); + current.txtElement = this.svgFactory.createElement('svg:text'); current.txtElement.appendChild(current.tspan); }, @@ -698,9 +700,9 @@ SVGGraphics = (function SVGGraphicsClosure() { this.current.y = this.current.lineY = 0; this.current.textMatrix = IDENTITY_MATRIX; this.current.lineMatrix = IDENTITY_MATRIX; - this.current.tspan = document.createElementNS(NS, 'svg:tspan'); - this.current.txtElement = document.createElementNS(NS, 'svg:text'); - this.current.txtgrp = document.createElementNS(NS, 'svg:g'); + this.current.tspan = this.svgFactory.createElement('svg:tspan'); + this.current.txtElement = this.svgFactory.createElement('svg:text'); + this.current.txtgrp = this.svgFactory.createElement('svg:g'); this.current.xcoords = []; }, @@ -710,7 +712,7 @@ SVGGraphics = (function SVGGraphicsClosure() { this.current.y = this.current.lineY += y; current.xcoords = []; - current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan = this.svgFactory.createElement('svg:tspan'); current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); @@ -810,7 +812,7 @@ SVGGraphics = (function SVGGraphicsClosure() { addFontStyle: function SVGGraphics_addFontStyle(fontObj) { if (!this.cssStyle) { - this.cssStyle = document.createElementNS(NS, 'svg:style'); + this.cssStyle = this.svgFactory.createElement('svg:style'); this.cssStyle.setAttributeNS(null, 'type', 'text/css'); this.defs.appendChild(this.cssStyle); } @@ -852,7 +854,7 @@ SVGGraphics = (function SVGGraphicsClosure() { current.fontWeight = bold; current.fontStyle = italic; - current.tspan = document.createElementNS(NS, 'svg:tspan'); + current.tspan = this.svgFactory.createElement('svg:tspan'); current.tspan.setAttributeNS(null, 'y', pf(-current.y)); current.xcoords = []; }, @@ -885,7 +887,7 @@ SVGGraphics = (function SVGGraphicsClosure() { setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) { var color = Util.makeCssRgb(r, g, b); this.current.fillColor = color; - this.current.tspan = document.createElementNS(NS, 'svg:tspan'); + this.current.tspan = this.svgFactory.createElement('svg:tspan'); this.current.xcoords = []; }, setDash: function SVGGraphics_setDash(dashArray, dashPhase) { @@ -896,7 +898,7 @@ SVGGraphics = (function SVGGraphicsClosure() { constructPath: function SVGGraphics_constructPath(ops, args) { var current = this.current; var x = current.x, y = current.y; - current.path = document.createElementNS(NS, 'svg:path'); + current.path = this.svgFactory.createElement('svg:path'); var d = []; var opLength = ops.length; @@ -967,7 +969,7 @@ SVGGraphics = (function SVGGraphicsClosure() { // Add current path to clipping path var clipId = 'clippath' + clipCount; clipCount++; - var clipPath = document.createElementNS(NS, 'svg:clipPath'); + var clipPath = this.svgFactory.createElement('svg:clipPath'); clipPath.setAttributeNS(null, 'id', clipId); clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix)); var clipElement = current.element.cloneNode(); @@ -1110,7 +1112,7 @@ SVGGraphics = (function SVGGraphicsClosure() { paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() { var current = this.current; - var rect = document.createElementNS(NS, 'svg:rect'); + var rect = this.svgFactory.createElement('svg:rect'); rect.setAttributeNS(null, 'x', '0'); rect.setAttributeNS(null, 'y', '0'); rect.setAttributeNS(null, 'width', '1px'); @@ -1122,7 +1124,7 @@ SVGGraphics = (function SVGGraphicsClosure() { paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) { var imgObj = this.objs.get(objId); - var imgEl = document.createElementNS(NS, 'svg:image'); + var imgEl = this.svgFactory.createElement('svg:image'); imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src); imgEl.setAttributeNS(null, 'width', pf(w)); imgEl.setAttributeNS(null, 'height', pf(h)); @@ -1149,14 +1151,14 @@ SVGGraphics = (function SVGGraphicsClosure() { var height = imgData.height; var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema); - var cliprect = document.createElementNS(NS, 'svg:rect'); + var cliprect = this.svgFactory.createElement('svg:rect'); cliprect.setAttributeNS(null, 'x', '0'); cliprect.setAttributeNS(null, 'y', '0'); cliprect.setAttributeNS(null, 'width', pf(width)); cliprect.setAttributeNS(null, 'height', pf(height)); this.current.element = cliprect; this.clip('nonzero'); - var imgEl = document.createElementNS(NS, 'svg:image'); + var imgEl = this.svgFactory.createElement('svg:image'); imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc); imgEl.setAttributeNS(null, 'x', '0'); imgEl.setAttributeNS(null, 'y', pf(-height)); @@ -1180,10 +1182,10 @@ SVGGraphics = (function SVGGraphicsClosure() { var fillColor = current.fillColor; current.maskId = 'mask' + maskCount++; - var mask = document.createElementNS(NS, 'svg:mask'); + var mask = this.svgFactory.createElement('svg:mask'); mask.setAttributeNS(null, 'id', current.maskId); - var rect = document.createElementNS(NS, 'svg:rect'); + var rect = this.svgFactory.createElement('svg:rect'); rect.setAttributeNS(null, 'x', '0'); rect.setAttributeNS(null, 'y', '0'); rect.setAttributeNS(null, 'width', pf(width)); @@ -1208,7 +1210,7 @@ SVGGraphics = (function SVGGraphicsClosure() { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; - var cliprect = document.createElementNS(NS, 'svg:rect'); + var cliprect = this.svgFactory.createElement('svg:rect'); cliprect.setAttributeNS(null, 'x', bbox[0]); cliprect.setAttributeNS(null, 'y', bbox[1]); cliprect.setAttributeNS(null, 'width', pf(width)); @@ -1225,24 +1227,17 @@ SVGGraphics = (function SVGGraphicsClosure() { /** * @private */ - _initialize: function SVGGraphics_initialize(viewport) { - // Create the SVG element. - var svg = document.createElementNS(NS, 'svg:svg'); - svg.setAttributeNS(null, 'version', '1.1'); - svg.setAttributeNS(null, 'width', viewport.width + 'px'); - svg.setAttributeNS(null, 'height', viewport.height + 'px'); - svg.setAttributeNS(null, 'preserveAspectRatio', 'none'); - svg.setAttributeNS(null, 'viewBox', '0 0 ' + viewport.width + - ' ' + viewport.height); + _initialize(viewport) { + let svg = this.svgFactory.create(viewport.width, viewport.height); // Create the definitions element. - var definitions = document.createElementNS(NS, 'svg:defs'); + let definitions = this.svgFactory.createElement('svg:defs'); svg.appendChild(definitions); this.defs = definitions; // Create the root group element, which acts a container for all other // groups and applies the viewport transform. - var rootGroup = document.createElementNS(NS, 'svg:g'); + let rootGroup = this.svgFactory.createElement('svg:g'); rootGroup.setAttributeNS(null, 'transform', pm(viewport.transform)); svg.appendChild(rootGroup); @@ -1259,7 +1254,7 @@ SVGGraphics = (function SVGGraphicsClosure() { */ _ensureClipGroup: function SVGGraphics_ensureClipGroup() { if (!this.current.clipGroup) { - var clipGroup = document.createElementNS(NS, 'svg:g'); + var clipGroup = this.svgFactory.createElement('svg:g'); clipGroup.setAttributeNS(null, 'clip-path', this.current.activeClipUrl); this.svg.appendChild(clipGroup); @@ -1273,7 +1268,7 @@ SVGGraphics = (function SVGGraphicsClosure() { */ _ensureTransformGroup: function SVGGraphics_ensureTransformGroup() { if (!this.tgrp) { - this.tgrp = document.createElementNS(NS, 'svg:g'); + this.tgrp = this.svgFactory.createElement('svg:g'); this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); if (this.current.activeClipUrl) { this._ensureClipGroup().appendChild(this.tgrp); diff --git a/test/unit/dom_utils_spec.js b/test/unit/dom_utils_spec.js index 6457131c4..ab1f82d4f 100644 --- a/test/unit/dom_utils_spec.js +++ b/test/unit/dom_utils_spec.js @@ -14,11 +14,72 @@ */ import { - getFilenameFromUrl, isExternalLinkTargetSet, LinkTarget + DOMSVGFactory, getFilenameFromUrl, isExternalLinkTargetSet, LinkTarget } from '../../src/display/dom_utils'; +import { isNodeJS } from '../../src/shared/util'; import { PDFJS } from '../../src/display/global'; describe('dom_utils', function() { + describe('DOMSVGFactory', function() { + let svgFactory; + + beforeAll(function (done) { + svgFactory = new DOMSVGFactory(); + done(); + }); + + afterAll(function () { + svgFactory = null; + }); + + it('`create` should throw an error if the dimensions are invalid', + function() { + // Invalid width. + expect(function() { + return svgFactory.create(-1, 0); + }).toThrow(new Error('Invalid SVG dimensions')); + + // Invalid height. + expect(function() { + return svgFactory.create(0, -1); + }).toThrow(new Error('Invalid SVG dimensions')); + }); + + it('`create` should return an SVG element if the dimensions are valid', + function() { + if (isNodeJS()) { + pending('Document is not supported in Node.js.'); + } + + let svg = svgFactory.create(20, 40); + + expect(svg instanceof SVGSVGElement).toBe(true); + expect(svg.getAttribute('version')).toBe('1.1'); + expect(svg.getAttribute('width')).toBe('20px'); + expect(svg.getAttribute('height')).toBe('40px'); + expect(svg.getAttribute('preserveAspectRatio')).toBe('none'); + expect(svg.getAttribute('viewBox')).toBe('0 0 20 40'); + }); + + it('`createElement` should throw an error if the type is not a string', + function() { + expect(function() { + return svgFactory.createElement(true); + }).toThrow(new Error('Invalid SVG element type')); + }); + + it('`createElement` should return an SVG element if the type is valid', + function() { + if (isNodeJS()) { + pending('Document is not supported in Node.js.'); + } + + let svg = svgFactory.createElement('svg:rect'); + + expect(svg instanceof SVGRectElement).toBe(true); + }); + }); + describe('getFilenameFromUrl', function() { it('should get the filename from an absolute URL', function() { var url = 'http://server.org/filename.pdf'; From cace2e9047c10c9e5dd0c9a667c33c122b37e24f Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Mon, 24 Jul 2017 00:11:27 +0200 Subject: [PATCH 2/4] Implement support for square annotations --- src/core/annotation.js | 12 +++++++ src/display/annotation_layer.js | 55 +++++++++++++++++++++++++++++++- web/annotation_layer_builder.css | 1 + 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/core/annotation.js b/src/core/annotation.js index 7bda3ec03..1d1b55a5c 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -81,6 +81,9 @@ class AnnotationFactory { case 'Line': return new LineAnnotation(parameters); + case 'Square': + return new SquareAnnotation(parameters); + case 'Highlight': return new HighlightAnnotation(parameters); @@ -886,6 +889,15 @@ class LineAnnotation extends Annotation { } } +class SquareAnnotation extends Annotation { + constructor(parameters) { + super(parameters); + + this.data.annotationType = AnnotationType.SQUARE; + this._preparePopup(parameters.dict); + } +} + class HighlightAnnotation extends Annotation { constructor(parameters) { super(parameters); diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 8011ed05d..cf4d7ee9b 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -74,6 +74,9 @@ class AnnotationElementFactory { case AnnotationType.LINE: return new LineAnnotationElement(parameters); + case AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); @@ -590,7 +593,7 @@ class PopupAnnotationElement extends AnnotationElement { render() { // Do not render popup annotations for parent elements with these types as // they create the popups themselves (because of custom trigger divs). - const IGNORE_TYPES = ['Line']; + const IGNORE_TYPES = ['Line', 'Square']; this.container.className = 'popupAnnotation'; @@ -802,9 +805,59 @@ class LineAnnotationElement extends AnnotationElement { } } +class SquareAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, /* ignoreBorder = */ true); + } + + /** + * Render the square annotation's HTML element in the empty container. + * + * @public + * @memberof SquareAnnotationElement + * @returns {HTMLSectionElement} + */ + render() { + this.container.className = 'squareAnnotation'; + + // Create an invisible square with the same rectangle that acts as the + // trigger for the popup. Only the square itself should trigger the + // popup, not the entire container. + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + + // The browser draws half of the borders inside the square and half of + // the borders outside the square by default. This behavior cannot be + // changed programmatically, so correct for that here. + let borderWidth = data.borderStyle.width; + let square = this.svgFactory.createElement('svg:rect'); + square.setAttribute('x', borderWidth / 2); + square.setAttribute('y', borderWidth / 2); + square.setAttribute('width', width - borderWidth); + square.setAttribute('height', height - borderWidth); + square.setAttribute('stroke-width', borderWidth); + square.setAttribute('stroke', 'transparent'); + square.setAttribute('fill', 'none'); + + svg.appendChild(square); + this.container.append(svg); + + // Create the popup ourselves so that we can bind it to the square instead + // of to the entire container (which is the default). + this._createPopup(this.container, square, data); + + return this.container; + } +} + class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { let isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); super(parameters, isRenderable, /* ignoreBorder = */ true); } diff --git a/web/annotation_layer_builder.css b/web/annotation_layer_builder.css index 234d3d70e..44bf119b0 100644 --- a/web/annotation_layer_builder.css +++ b/web/annotation_layer_builder.css @@ -144,6 +144,7 @@ .annotationLayer .squigglyAnnotation, .annotationLayer .strikeoutAnnotation, .annotationLayer .lineAnnotation svg line, +.annotationLayer .squareAnnotation svg rect, .annotationLayer .fileAttachmentAnnotation { cursor: pointer; } From 44c116ac496f7452994b23debe372b0368aaa229 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Mon, 24 Jul 2017 00:30:58 +0200 Subject: [PATCH 3/4] Implement support for circle annotations --- src/core/annotation.js | 12 +++++++ src/display/annotation_layer.js | 55 ++++++++++++++++++++++++++++++-- web/annotation_layer_builder.css | 1 + 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/core/annotation.js b/src/core/annotation.js index 1d1b55a5c..a84858abb 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -84,6 +84,9 @@ class AnnotationFactory { case 'Square': return new SquareAnnotation(parameters); + case 'Circle': + return new CircleAnnotation(parameters); + case 'Highlight': return new HighlightAnnotation(parameters); @@ -898,6 +901,15 @@ class SquareAnnotation extends Annotation { } } +class CircleAnnotation extends Annotation { + constructor(parameters) { + super(parameters); + + this.data.annotationType = AnnotationType.CIRCLE; + this._preparePopup(parameters.dict); + } +} + class HighlightAnnotation extends Annotation { constructor(parameters) { super(parameters); diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index cf4d7ee9b..a8a99345b 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -77,6 +77,9 @@ class AnnotationElementFactory { case AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); + case AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); @@ -593,7 +596,7 @@ class PopupAnnotationElement extends AnnotationElement { render() { // Do not render popup annotations for parent elements with these types as // they create the popups themselves (because of custom trigger divs). - const IGNORE_TYPES = ['Line', 'Square']; + const IGNORE_TYPES = ['Line', 'Square', 'Circle']; this.container.className = 'popupAnnotation'; @@ -854,10 +857,58 @@ class SquareAnnotationElement extends AnnotationElement { } } +class CircleAnnotationElement extends AnnotationElement { + constructor(parameters) { + let isRenderable = !!(parameters.data.hasPopup || + parameters.data.title || parameters.data.contents); + super(parameters, isRenderable, /* ignoreBorder = */ true); + } + + /** + * Render the circle annotation's HTML element in the empty container. + * + * @public + * @memberof CircleAnnotationElement + * @returns {HTMLSectionElement} + */ + render() { + this.container.className = 'circleAnnotation'; + + // Create an invisible circle with the same ellipse that acts as the + // trigger for the popup. Only the circle itself should trigger the + // popup, not the entire container. + let data = this.data; + let width = data.rect[2] - data.rect[0]; + let height = data.rect[3] - data.rect[1]; + let svg = this.svgFactory.create(width, height); + + // The browser draws half of the borders inside the circle and half of + // the borders outside the circle by default. This behavior cannot be + // changed programmatically, so correct for that here. + let borderWidth = data.borderStyle.width; + let circle = this.svgFactory.createElement('svg:ellipse'); + circle.setAttribute('cx', width / 2); + circle.setAttribute('cy', height / 2); + circle.setAttribute('rx', (width / 2) - (borderWidth / 2)); + circle.setAttribute('ry', (height / 2) - (borderWidth / 2)); + circle.setAttribute('stroke-width', borderWidth); + circle.setAttribute('stroke', 'transparent'); + circle.setAttribute('fill', 'none'); + + svg.appendChild(circle); + this.container.append(svg); + + // Create the popup ourselves so that we can bind it to the circle instead + // of to the entire container (which is the default). + this._createPopup(this.container, circle, data); + + return this.container; + } +} + class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { let isRenderable = !!(parameters.data.hasPopup || - parameters.data.title || parameters.data.contents); super(parameters, isRenderable, /* ignoreBorder = */ true); } diff --git a/web/annotation_layer_builder.css b/web/annotation_layer_builder.css index 44bf119b0..1b89cba37 100644 --- a/web/annotation_layer_builder.css +++ b/web/annotation_layer_builder.css @@ -145,6 +145,7 @@ .annotationLayer .strikeoutAnnotation, .annotationLayer .lineAnnotation svg line, .annotationLayer .squareAnnotation svg rect, +.annotationLayer .circleAnnotation svg ellipse, .annotationLayer .fileAttachmentAnnotation { cursor: pointer; } From c04f9d6098bab011cc87ff4e21a59d7f837d8b12 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Mon, 24 Jul 2017 00:34:39 +0200 Subject: [PATCH 4/4] Implement reference tests for square and circle annotations --- test/pdfs/.gitignore | 1 + test/pdfs/annotation-square-circle.pdf | Bin 0 -> 88740 bytes test/test_manifest.json | 7 +++++++ 3 files changed, 8 insertions(+) create mode 100755 test/pdfs/annotation-square-circle.pdf diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 78c790ade..0b59690cb 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -283,6 +283,7 @@ !annotation-squiggly.pdf !annotation-highlight.pdf !annotation-line.pdf +!annotation-square-circle.pdf !annotation-fileattachment.pdf !annotation-text-widget.pdf !annotation-choice-widget.pdf diff --git a/test/pdfs/annotation-square-circle.pdf b/test/pdfs/annotation-square-circle.pdf new file mode 100755 index 0000000000000000000000000000000000000000..4aff07fe0c50e52f23af3fabfc15f9646011d6b0 GIT binary patch literal 88740 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%0D@BRv^19`t>GSBY&rQx~kG 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index de8aa1200..111952209 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -3551,6 +3551,13 @@ "type": "eq", "annotations": true }, + { "id": "annotation-square-circle", + "file": "pdfs/annotation-square-circle.pdf", + "md5": "cfd3c302f68d61e1d55ed9c7896046c3", + "rounds": 1, + "type": "eq", + "annotations": true + }, { "id": "annotation-fileattachment", "file": "pdfs/annotation-fileattachment.pdf", "md5": "d20ecee4b53c81b2dd44c8715a1b4a83",