diff --git a/src/core/annotation.js b/src/core/annotation.js index af7fbb7c8..1efabe472 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -96,6 +96,9 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { case 'Popup': return new PopupAnnotation(parameters); + case 'Highlight': + return new HighlightAnnotation(parameters); + case 'Underline': return new UnderlineAnnotation(parameters); @@ -795,6 +798,22 @@ var PopupAnnotation = (function PopupAnnotationClosure() { return PopupAnnotation; })(); +var HighlightAnnotation = (function HighlightAnnotationClosure() { + function HighlightAnnotation(parameters) { + Annotation.call(this, parameters); + + this.data.annotationType = AnnotationType.HIGHLIGHT; + this.data.hasHtml = true; + + // PDF viewers completely ignore any border styles. + this.data.borderStyle.setWidth(0); + } + + Util.inherit(HighlightAnnotation, Annotation, {}); + + return HighlightAnnotation; +})(); + var UnderlineAnnotation = (function UnderlineAnnotationClosure() { function UnderlineAnnotation(parameters) { Annotation.call(this, parameters); diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index bd7ae50ad..196a0e325 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -72,6 +72,9 @@ AnnotationElementFactory.prototype = case AnnotationType.POPUP: return new PopupAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); @@ -609,6 +612,33 @@ var PopupElement = (function PopupElementClosure() { return PopupElement; })(); +/** + * @class + * @alias HighlightAnnotationElement + */ +var HighlightAnnotationElement = ( + function HighlightAnnotationElementClosure() { + function HighlightAnnotationElement(parameters) { + AnnotationElement.call(this, parameters); + } + + Util.inherit(HighlightAnnotationElement, AnnotationElement, { + /** + * Render the highlight annotation's HTML element in the empty container. + * + * @public + * @memberof HighlightAnnotationElement + * @returns {HTMLSectionElement} + */ + render: function HighlightAnnotationElement_render() { + this.container.className = 'highlightAnnotation'; + return this.container; + } + }); + + return HighlightAnnotationElement; +})(); + /** * @class * @alias UnderlineAnnotationElement diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e5a212cb0..6237b2586 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -204,3 +204,4 @@ !annotation-underline.pdf !annotation-strikeout.pdf !annotation-squiggly.pdf +!annotation-highlight.pdf diff --git a/test/pdfs/annotation-highlight.pdf b/test/pdfs/annotation-highlight.pdf new file mode 100644 index 000000000..ab2ef6ec9 Binary files /dev/null and b/test/pdfs/annotation-highlight.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 63d537ddb..cbd13002d 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -2667,6 +2667,13 @@ "type": "eq", "annotations": true }, + { "id": "annotation-highlight", + "file": "pdfs/annotation-highlight.pdf", + "md5": "e13e198e3a69c32dc9ebdc704d3105e1", + "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 5d5afdf1b..3c6b4e43d 100644 --- a/web/annotation_layer_builder.css +++ b/web/annotation_layer_builder.css @@ -69,6 +69,7 @@ padding-top: 0.2em; } +.annotationLayer .highlightAnnotation, .annotationLayer .underlineAnnotation, .annotationLayer .squigglyAnnotation, .annotationLayer .strikeoutAnnotation {