Skip to content

Commit

Permalink
Merge pull request #9874 from boundlesshq/master
Browse files Browse the repository at this point in the history
[api-minor] Include export value for checkboxes
  • Loading branch information
timvandermeij authored Aug 3, 2018
2 parents ee9a5c1 + c31ddf7 commit f19ee12
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 5 deletions.
26 changes: 22 additions & 4 deletions src/core/annotation.js
Original file line number Diff line number Diff line change
Expand Up @@ -742,7 +742,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
this.data.pushButton = this.hasFieldFlag(AnnotationFieldFlag.PUSHBUTTON);

if (this.data.checkBox) {
this._processCheckBox();
this._processCheckBox(params);
} else if (this.data.radioButton) {
this._processRadioButton(params);
} else if (this.data.pushButton) {
Expand All @@ -752,11 +752,29 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
}
}

_processCheckBox() {
if (!isName(this.data.fieldValue)) {
_processCheckBox(params) {
if (isName(this.data.fieldValue)) {
this.data.fieldValue = this.data.fieldValue.name;
}

const customAppearance = params.dict.get('AP');
if (!isDict(customAppearance)) {
return;
}

const exportValueOptionsDict = customAppearance.get('D');
if (!isDict(exportValueOptionsDict)) {
return;
}
this.data.fieldValue = this.data.fieldValue.name;

const exportValues = exportValueOptionsDict.getKeys();
const hasCorrectOptionCount = exportValues.length === 2;
if (!hasCorrectOptionCount) {
return;
}

this.data.exportValue = exportValues[0] === 'Off' ?
exportValues[1] : exportValues[0];
}

_processRadioButton(params) {
Expand Down
29 changes: 28 additions & 1 deletion test/unit/annotation_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -979,7 +979,34 @@ describe('annotation', function() {
buttonWidgetDict = null;
});

it('should handle checkboxes', function() {
it('should handle checkboxes with export value', function() {
buttonWidgetDict.set('V', Name.get('1'));

var appearanceStatesDict = new Dict();
var exportValueOptionsDict = new Dict();

exportValueOptionsDict.set('Off', 0);
exportValueOptionsDict.set('Checked', 1);
appearanceStatesDict.set('D', exportValueOptionsDict);
buttonWidgetDict.set('AP', appearanceStatesDict);

var buttonWidgetRef = new Ref(124, 0);
var xref = new XRefMock([
{ ref: buttonWidgetRef, data: buttonWidgetDict, }
]);

var annotation = AnnotationFactory.create(xref, buttonWidgetRef,
pdfManagerMock, idFactoryMock);
var data = annotation.data;
expect(data.annotationType).toEqual(AnnotationType.WIDGET);

expect(data.checkBox).toEqual(true);
expect(data.fieldValue).toEqual('1');
expect(data.radioButton).toEqual(false);
expect(data.exportValue).toEqual('Checked');
});

it('should handle checkboxes without export value', function() {
buttonWidgetDict.set('V', Name.get('1'));

var buttonWidgetRef = new Ref(124, 0);
Expand Down

0 comments on commit f19ee12

Please sign in to comment.