Skip to content

Commit

Permalink
Merge pull request #7596 from timvandermeij/widget-annotation-cleanup
Browse files Browse the repository at this point in the history
Improve the structure for widget annotations
  • Loading branch information
Snuffleupagus committed Sep 6, 2016
2 parents b26af7e + 576f742 commit 8dbb5a7
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 11 deletions.
14 changes: 9 additions & 5 deletions src/core/annotation.js
Expand Up @@ -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':
Expand Down Expand Up @@ -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);
}

Expand Down
43 changes: 37 additions & 6 deletions src/display/annotation_layer.js
Expand Up @@ -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:
Expand Down Expand Up @@ -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, {
Expand All @@ -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;
Expand All @@ -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';
Expand All @@ -452,7 +483,7 @@ var WidgetAnnotationElement = (function WidgetAnnotationElementClosure() {
}
});

return WidgetAnnotationElement;
return TextWidgetAnnotationElement;
})();

/**
Expand Down

0 comments on commit 8dbb5a7

Please sign in to comment.