[JS] Update siblings when a field is updated after a calculation (#15092)

This commit is contained in:
Calixte Denizet 2022-06-24 14:23:06 +02:00
parent eace7e4c63
commit a334a21a1d
5 changed files with 58 additions and 1 deletions

View File

@ -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],

View File

@ -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,
});

View File

@ -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");
})
);
});
});
});

View File

@ -529,3 +529,4 @@
!bug1724918.pdf
!issue15053.pdf
!bug1675139.pdf
!issue15092.pdf

BIN
test/pdfs/issue15092.pdf Executable file

Binary file not shown.