diff --git a/src/core/annotation.js b/src/core/annotation.js index e33573ccd..418058475 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -99,6 +99,9 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { case 'Underline': return new UnderlineAnnotation(parameters); + case 'StrikeOut': + return new StrikeOutAnnotation(parameters); + default: warn('Unimplemented annotation type "' + subtype + '", ' + 'falling back to base annotation'); @@ -805,6 +808,22 @@ var UnderlineAnnotation = (function UnderlineAnnotationClosure() { return UnderlineAnnotation; })(); +var StrikeOutAnnotation = (function StrikeOutAnnotationClosure() { + function StrikeOutAnnotation(parameters) { + Annotation.call(this, parameters); + + this.data.annotationType = AnnotationType.STRIKEOUT; + this.data.hasHtml = true; + + // PDF viewers completely ignore any border styles. + this.data.borderStyle.setWidth(0); + } + + Util.inherit(StrikeOutAnnotation, Annotation, {}); + + return StrikeOutAnnotation; +})(); + exports.Annotation = Annotation; exports.AnnotationBorderStyle = AnnotationBorderStyle; exports.AnnotationFactory = AnnotationFactory; diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index d0b23e0c1..fc974f23c 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -75,6 +75,9 @@ AnnotationElementFactory.prototype = case AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); + case AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + default: throw new Error('Unimplemented annotation type "' + subtype + '"'); } @@ -630,6 +633,33 @@ var UnderlineAnnotationElement = ( return UnderlineAnnotationElement; })(); +/** + * @class + * @alias StrikeOutAnnotationElement + */ +var StrikeOutAnnotationElement = ( + function StrikeOutAnnotationElementClosure() { + function StrikeOutAnnotationElement(parameters) { + AnnotationElement.call(this, parameters); + } + + Util.inherit(StrikeOutAnnotationElement, AnnotationElement, { + /** + * Render the strikeout annotation's HTML element in the empty container. + * + * @public + * @memberof StrikeOutAnnotationElement + * @returns {HTMLSectionElement} + */ + render: function StrikeOutAnnotationElement_render() { + this.container.className = 'strikeoutAnnotation'; + return this.container; + } + }); + + return StrikeOutAnnotationElement; +})(); + /** * @typedef {Object} AnnotationLayerParameters * @property {PageViewport} viewport diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 78943c4ae..252702f6b 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -202,3 +202,4 @@ !annotation-link-text-popup.pdf !annotation-text-without-popup.pdf !annotation-underline.pdf +!annotation-strikeout.pdf diff --git a/test/pdfs/annotation-strikeout.pdf b/test/pdfs/annotation-strikeout.pdf new file mode 100644 index 000000000..ede841870 Binary files /dev/null and b/test/pdfs/annotation-strikeout.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 244aeedfd..fef94af4d 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2645,6 +2645,13 @@ "type": "eq", "annotations": true }, + { "id": "annotation-strikeout", + "file": "pdfs/annotation-strikeout.pdf", + "md5": "6624e6b5bedd2f2855b6ab12bbf93c57", + "rounds": 1, + "type": "eq", + "annotations": true + }, { "id": "issue6108", "file": "pdfs/issue6108.pdf", "md5": "8961cb55149495989a80bf0487e0f076", diff --git a/web/annotation_layer_builder.css b/web/annotation_layer_builder.css index a2fe4e78d..b48e4c691 100644 --- a/web/annotation_layer_builder.css +++ b/web/annotation_layer_builder.css @@ -72,3 +72,7 @@ .annotationLayer .underlineAnnotation { cursor: pointer; } + +.annotationLayer .strikeoutAnnotation { + cursor: pointer; +}