Button widget annotations: implement radio button value fetching according to the specification
This commit is contained in:
		
							parent
							
								
									0c9a06c020
								
							
						
					
					
						commit
						77148c7880
					
				@ -776,24 +776,42 @@ 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;
 | 
				
			||||||
          for (var i = 0, ii = keys.length; i < ii; i++) {
 | 
					      }
 | 
				
			||||||
            if (keys[i] !== 'Off') {
 | 
					      var fieldParentValue = fieldParent.get('V');
 | 
				
			||||||
              this.data.buttonValue = keys[i];
 | 
					      if (!isName(fieldParentValue)) {
 | 
				
			||||||
              break;
 | 
					        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++) {
 | 
				
			||||||
 | 
					        if (keys[i] !== 'Off') {
 | 
				
			||||||
 | 
					          this.data.buttonValue = keys[i];
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user