Merge pull request #16563 from calixteman/bug1838855
Guess that a checkbox belongs to a group in using its T value (bug 1838855)
This commit is contained in:
		
						commit
						a5c10b6d89
					
				| @ -1530,6 +1530,17 @@ class WidgetAnnotation extends Annotation { | |||||||
|     if (data.fieldName === undefined) { |     if (data.fieldName === undefined) { | ||||||
|       data.fieldName = this._constructFieldName(dict); |       data.fieldName = this._constructFieldName(dict); | ||||||
|     } |     } | ||||||
|  |     if ( | ||||||
|  |       data.fieldName && | ||||||
|  |       /\[\d+\]$/.test(data.fieldName) && | ||||||
|  |       !dict.has("Kids") | ||||||
|  |     ) { | ||||||
|  |       data.baseFieldName = data.fieldName.substring( | ||||||
|  |         0, | ||||||
|  |         data.fieldName.lastIndexOf("[") | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (data.actions === undefined) { |     if (data.actions === undefined) { | ||||||
|       data.actions = collectActions(xref, dict, AnnotationActionEventType); |       data.actions = collectActions(xref, dict, AnnotationActionEventType); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1674,6 +1674,11 @@ class PDFDocument { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     if (!field.has("Kids") && /\[\d+\]$/.test(name)) { | ||||||
|  |       // We've a terminal node: strip the index.
 | ||||||
|  |       name = name.substring(0, name.lastIndexOf("[")); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (!promises.has(name)) { |     if (!promises.has(name)) { | ||||||
|       promises.set(name, []); |       promises.set(name, []); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1106,7 +1106,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { | |||||||
|       element.setAttribute("data-element-id", id); |       element.setAttribute("data-element-id", id); | ||||||
| 
 | 
 | ||||||
|       element.disabled = this.data.readOnly; |       element.disabled = this.data.readOnly; | ||||||
|       element.name = this.data.fieldName; |       element.name = this.data.baseFieldName || this.data.fieldName; | ||||||
|       element.tabIndex = DEFAULT_TAB_INDEX; |       element.tabIndex = DEFAULT_TAB_INDEX; | ||||||
| 
 | 
 | ||||||
|       this._setRequired(element, this.data.required); |       this._setRequired(element, this.data.required); | ||||||
| @ -1408,7 +1408,7 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { | |||||||
|     element.disabled = data.readOnly; |     element.disabled = data.readOnly; | ||||||
|     this._setRequired(element, this.data.required); |     this._setRequired(element, this.data.required); | ||||||
|     element.type = "checkbox"; |     element.type = "checkbox"; | ||||||
|     element.name = data.fieldName; |     element.name = data.baseFieldName || data.fieldName; | ||||||
|     if (value) { |     if (value) { | ||||||
|       element.setAttribute("checked", true); |       element.setAttribute("checked", true); | ||||||
|     } |     } | ||||||
| @ -1493,7 +1493,7 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { | |||||||
|     element.disabled = data.readOnly; |     element.disabled = data.readOnly; | ||||||
|     this._setRequired(element, this.data.required); |     this._setRequired(element, this.data.required); | ||||||
|     element.type = "radio"; |     element.type = "radio"; | ||||||
|     element.name = data.fieldName; |     element.name = data.baseFieldName || data.fieldName; | ||||||
|     if (value) { |     if (value) { | ||||||
|       element.setAttribute("checked", true); |       element.setAttribute("checked", true); | ||||||
|     } |     } | ||||||
| @ -1606,7 +1606,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { | |||||||
| 
 | 
 | ||||||
|     selectElement.disabled = this.data.readOnly; |     selectElement.disabled = this.data.readOnly; | ||||||
|     this._setRequired(selectElement, this.data.required); |     this._setRequired(selectElement, this.data.required); | ||||||
|     selectElement.name = this.data.fieldName; |     selectElement.name = this.data.baseFieldName || this.data.fieldName; | ||||||
|     selectElement.tabIndex = DEFAULT_TAB_INDEX; |     selectElement.tabIndex = DEFAULT_TAB_INDEX; | ||||||
| 
 | 
 | ||||||
|     let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; |     let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; | ||||||
|  | |||||||
| @ -120,6 +120,46 @@ describe("Checkbox annotation", () => { | |||||||
|       ); |       ); | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
|  | 
 | ||||||
|  |   describe("f1040_2022.pdf", () => { | ||||||
|  |     let pages; | ||||||
|  | 
 | ||||||
|  |     beforeAll(async () => { | ||||||
|  |       pages = await loadAndWait( | ||||||
|  |         "f1040_2022.pdf", | ||||||
|  |         "[data-annotation-id='1566R']" | ||||||
|  |       ); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     afterAll(async () => { | ||||||
|  |       await closePages(pages); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     it("must check the checkbox", async () => { | ||||||
|  |       await Promise.all( | ||||||
|  |         pages.map(async ([_browserName, page]) => { | ||||||
|  |           const selectors = [1566, 1568, 1569, 1570, 1571].map( | ||||||
|  |             id => `[data-annotation-id='${id}R']` | ||||||
|  |           ); | ||||||
|  |           for (const selector of selectors) { | ||||||
|  |             await page.click(selector); | ||||||
|  |             for (const otherSelector of selectors) { | ||||||
|  |               if (otherSelector === selector) { | ||||||
|  |                 await page.waitForFunction( | ||||||
|  |                   `document.querySelector("${selector} > :first-child").checked` | ||||||
|  |                 ); | ||||||
|  |               } else { | ||||||
|  |                 await page.waitForFunction( | ||||||
|  |                   `!document.querySelector("${otherSelector} > :first-child").checked` | ||||||
|  |                 ); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |             page.waitForTimeout(10); | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| describe("Text widget", () => { | describe("Text widget", () => { | ||||||
|  | |||||||
| @ -1491,6 +1491,22 @@ describe("api", function () { | |||||||
|       await loadingTask.destroy(); |       await loadingTask.destroy(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     it("check field object for group of buttons", async function () { | ||||||
|  |       if (isNodeJS) { | ||||||
|  |         pending("Linked test-cases are not supported in Node.js."); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       const loadingTask = getDocument(buildGetDocumentParams("f1040_2022.pdf")); | ||||||
|  |       const pdfDoc = await loadingTask.promise; | ||||||
|  |       const fieldObjects = await pdfDoc.getFieldObjects(); | ||||||
|  | 
 | ||||||
|  |       expect( | ||||||
|  |         fieldObjects["topmostSubform[0].Page1[0].c1_01"].map(o => o.id) | ||||||
|  |       ).toEqual(["1566R", "1568R", "1569R", "1570R", "1571R"]); | ||||||
|  | 
 | ||||||
|  |       await loadingTask.destroy(); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|     it("gets non-existent calculationOrder", async function () { |     it("gets non-existent calculationOrder", async function () { | ||||||
|       const calculationOrder = await pdfDocument.getCalculationOrderIds(); |       const calculationOrder = await pdfDocument.getCalculationOrderIds(); | ||||||
|       expect(calculationOrder).toEqual(null); |       expect(calculationOrder).toEqual(null); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user