Browse Source

Button widget annotations: implement radio button value fetching according to the specification

Tim van der Meij 8 years ago
parent
commit
77148c7880
  1. 38
      src/core/annotation.js

38
src/core/annotation.js

@ -776,18 +776,38 @@ var ButtonWidgetAnnotation = (function ButtonWidgetAnnotationClosure() {
this.data.pushbutton = this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON); this.data.pushbutton = this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);
this.data.radio = !this.data.pushbutton && this.data.radio = !this.data.pushbutton &&
this.hasFieldFlag(AnnotationFieldFlag.RADIO); this.hasFieldFlag(AnnotationFieldFlag.RADIO);
if (isName(this.data.fieldValue)) { if (isName(this.data.fieldValue)) {
this.data.fieldValue = this.data.fieldValue.name; this.data.fieldValue = this.data.fieldValue.name;
} else {
warn('Button widget annotation: field value is not a `Name` object.');
} }
// Get the value of the radio button
if (this.data.radio) { if (this.data.radio) {
// Generate a unique ID in case no value is found this.data.fieldValue = this.data.buttonValue = null;
this.data.buttonValue = Math.random().toString(16).slice(2);
var appearanceState = params.dict.get('AP'); // The parent field's `V` entry holds a `Name` object with the appearance
if (isDict(appearanceState)) { // state of whichever child field is currently in the "on" state.
var appearances = appearanceState.get('N'); var fieldParent = params.dict.get('Parent');
if (isDict(appearances) && appearances.has('Off')) { if (!isDict(fieldParent) || !fieldParent.has('V')) {
var keys = appearances.getKeys(); return;
}
var fieldParentValue = fieldParent.get('V');
if (!isName(fieldParentValue)) {
return;
}
this.data.fieldValue = fieldParentValue.name;
// The button's value corresponds to its appearance state.
var appearanceStates = params.dict.get('AP');
if (!isDict(appearanceStates)) {
return;
}
var normalAppearanceState = appearanceStates.get('N');
if (!isDict(normalAppearanceState)) {
return;
}
var keys = normalAppearanceState.getKeys();
for (var i = 0, ii = keys.length; i < ii; i++) { for (var i = 0, ii = keys.length; i < ii; i++) {
if (keys[i] !== 'Off') { if (keys[i] !== 'Off') {
this.data.buttonValue = keys[i]; this.data.buttonValue = keys[i];
@ -796,8 +816,6 @@ var ButtonWidgetAnnotation = (function ButtonWidgetAnnotationClosure() {
} }
} }
} }
}
}
Util.inherit(ButtonWidgetAnnotation, WidgetAnnotation, { Util.inherit(ButtonWidgetAnnotation, WidgetAnnotation, {
getOperatorList: getOperatorList:

Loading…
Cancel
Save