diff --git a/src/scripting_api/doc.js b/src/scripting_api/doc.js index 153264393..4440d5ca5 100644 --- a/src/scripting_api/doc.js +++ b/src/scripting_api/doc.js @@ -1151,6 +1151,7 @@ class Doc extends PDFObject { field.obj.value = field.obj.defaultValue; this._send({ id: field.obj._id, + siblings: field.obj._siblings, value: field.obj.defaultValue, formattedValue: null, selRange: [0, 0], diff --git a/src/scripting_api/event.js b/src/scripting_api/event.js index b0f3c26f7..e684d37ce 100644 --- a/src/scripting_api/event.js +++ b/src/scripting_api/event.js @@ -163,6 +163,7 @@ class EventDispatcher { } source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value, selRange: [selStart, selEnd], }); @@ -170,6 +171,7 @@ class EventDispatcher { } else if (!event.willCommit) { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: savedChange.value, selRange: [savedChange.selStart, savedChange.selEnd], }); @@ -178,6 +180,7 @@ class EventDispatcher { // so just clear the field. source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0], @@ -193,6 +196,7 @@ class EventDispatcher { if (this.runActions(source, source, event, "Format")) { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, formattedValue: event.value?.toString?.(), }); } @@ -215,6 +219,7 @@ class EventDispatcher { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: savedValue, formattedValue, }); @@ -223,6 +228,7 @@ class EventDispatcher { // The value is not valid. source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0], @@ -320,6 +326,7 @@ class EventDispatcher { target.obj._send({ id: target.obj._id, + siblings: target.obj._siblings, value: savedValue, formattedValue, }); diff --git a/test/integration/scripting_spec.js b/test/integration/scripting_spec.js index 5b36303aa..2405c5608 100644 --- a/test/integration/scripting_spec.js +++ b/test/integration/scripting_spec.js @@ -1413,7 +1413,7 @@ describe("Interaction", () => { await closePages(pages); }); - it("must check that data-annotation-rotation is correc", async () => { + it("must check that data-annotation-rotation is correct", async () => { await Promise.all( pages.map(async ([browserName, page]) => { await page.waitForFunction( @@ -1444,4 +1444,52 @@ describe("Interaction", () => { ); }); }); + + describe("in issue15092.pdf", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("issue15092.pdf", getSelector("39R")); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that a values is correctly updated on a field and its siblings", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await page.waitForFunction( + "window.PDFViewerApplication.scriptingReady === true" + ); + + await clearInput(page, getSelector("39R")); + await page.type(getSelector("39R"), "123", { delay: 10 }); + + const prevTotal = await page.$eval( + getSelector("43R"), + el => el.value + ); + + await clearInput(page, getSelector("42R")); + await page.type(getSelector("42R"), "456", { delay: 10 }); + + await page.click(getSelector("45R")); + + await page.waitForFunction( + `${getQuerySelector("43R")}.value !== "${prevTotal}"` + ); + await page.waitForFunction( + `${getQuerySelector("46R")}.value !== "${prevTotal}"` + ); + + let total = await page.$eval(getSelector("43R"), el => el.value); + expect(total).withContext(`In ${browserName}`).toEqual("579.00"); + + total = await page.$eval(getSelector("46R"), el => el.value); + expect(total).withContext(`In ${browserName}`).toEqual("579.00"); + }) + ); + }); + }); }); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 70817f3a2..5d1d18e73 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -529,3 +529,4 @@ !bug1724918.pdf !issue15053.pdf !bug1675139.pdf +!issue15092.pdf diff --git a/test/pdfs/issue15092.pdf b/test/pdfs/issue15092.pdf new file mode 100755 index 000000000..1f1442304 Binary files /dev/null and b/test/pdfs/issue15092.pdf differ