diff --git a/src/core/annotation.js b/src/core/annotation.js index 85ed31a7f..490877818 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -98,9 +98,14 @@ AnnotationFactory.prototype = /** @lends AnnotationFactory.prototype */ { case 'Widget': var fieldType = Util.getInheritableProperty(dict, 'FT'); - if (isName(fieldType, 'Tx')) { - return new TextWidgetAnnotation(parameters); + fieldType = isName(fieldType) ? fieldType.name : null; + + switch (fieldType) { + case 'Tx': + return new TextWidgetAnnotation(parameters); } + warn('Unimplemented widget field type "' + fieldType + '", ' + + 'falling back to base field type.'); return new WidgetAnnotation(parameters); case 'Popup': @@ -615,13 +620,12 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() { data.alternativeText = stringToPDFString(dict.get('TU') || ''); data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || ''; var fieldType = Util.getInheritableProperty(dict, 'FT'); - data.fieldType = isName(fieldType) ? fieldType.name : ''; + data.fieldType = isName(fieldType) ? fieldType.name : null; data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0; this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty; - // Hide unsupported Widget signatures. + // Hide signatures because we cannot validate them. if (data.fieldType === 'Sig') { - warn('unimplemented annotation type: Widget signature'); this.setFlags(AnnotationFlag.HIDDEN); } diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index cef981d94..ec5bde70a 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -69,6 +69,12 @@ AnnotationElementFactory.prototype = return new TextAnnotationElement(parameters); case AnnotationType.WIDGET: + var fieldType = parameters.data.fieldType; + + switch (fieldType) { + case 'Tx': + return new TextWidgetAnnotationElement(parameters); + } return new WidgetAnnotationElement(parameters); case AnnotationType.POPUP: @@ -392,9 +398,7 @@ var TextAnnotationElement = (function TextAnnotationElementClosure() { */ var WidgetAnnotationElement = (function WidgetAnnotationElementClosure() { function WidgetAnnotationElement(parameters) { - var isRenderable = !parameters.data.hasAppearance && - !!parameters.data.fieldValue; - AnnotationElement.call(this, parameters, isRenderable); + AnnotationElement.call(this, parameters, true); } Util.inherit(WidgetAnnotationElement, AnnotationElement, { @@ -406,6 +410,33 @@ var WidgetAnnotationElement = (function WidgetAnnotationElementClosure() { * @returns {HTMLSectionElement} */ render: function WidgetAnnotationElement_render() { + // Show only the container for unsupported field types. + return this.container; + } + }); + + return WidgetAnnotationElement; +})(); + +/** + * @class + * @alias TextWidgetAnnotationElement + */ +var TextWidgetAnnotationElement = ( + function TextWidgetAnnotationElementClosure() { + function TextWidgetAnnotationElement(parameters) { + WidgetAnnotationElement.call(this, parameters); + } + + Util.inherit(TextWidgetAnnotationElement, WidgetAnnotationElement, { + /** + * Render the text widget annotation's HTML element in the empty container. + * + * @public + * @memberof TextWidgetAnnotationElement + * @returns {HTMLSectionElement} + */ + render: function TextWidgetAnnotationElement_render() { var content = document.createElement('div'); content.textContent = this.data.fieldValue; var textAlignment = this.data.textAlignment; @@ -427,10 +458,10 @@ var WidgetAnnotationElement = (function WidgetAnnotationElementClosure() { * @private * @param {HTMLDivElement} element * @param {Object} font - * @memberof WidgetAnnotationElement + * @memberof TextWidgetAnnotationElement */ _setTextStyle: - function WidgetAnnotationElement_setTextStyle(element, font) { + function TextWidgetAnnotationElement_setTextStyle(element, font) { // TODO: This duplicates some of the logic in CanvasGraphics.setFont(). var style = element.style; style.fontSize = this.data.fontSize + 'px'; @@ -452,7 +483,7 @@ var WidgetAnnotationElement = (function WidgetAnnotationElementClosure() { } }); - return WidgetAnnotationElement; + return TextWidgetAnnotationElement; })(); /**