JS - Fix setting a color on an annotation
- strokeColor corresponds to borderColor; - support fillColor and textColor; - support colors on the different annotations; - fix typo in aforms (+test).
This commit is contained in:
parent
0fa9976268
commit
4a5f1d1b7a
@ -582,6 +582,39 @@ class WidgetAnnotationElement extends AnnotationElement {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_setColor(event) {
|
||||
const { detail, target } = event;
|
||||
const { style } = target;
|
||||
for (const name of [
|
||||
"bgColor",
|
||||
"fillColor",
|
||||
"fgColor",
|
||||
"textColor",
|
||||
"borderColor",
|
||||
"strokeColor",
|
||||
]) {
|
||||
let color = detail[name];
|
||||
if (!color) {
|
||||
continue;
|
||||
}
|
||||
color = ColorConverters[`${color[0]}_HTML`](color.slice(1));
|
||||
switch (name) {
|
||||
case "bgColor":
|
||||
case "fillColor":
|
||||
style.backgroundColor = color;
|
||||
break;
|
||||
case "fgColor":
|
||||
case "textColor":
|
||||
style.color = color;
|
||||
break;
|
||||
case "borderColor":
|
||||
case "strokeColor":
|
||||
style.borderColor = color;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TextWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
@ -644,7 +677,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
}
|
||||
});
|
||||
|
||||
element.addEventListener("updatefromsandbox", function (event) {
|
||||
element.addEventListener("updatefromsandbox", event => {
|
||||
const { detail } = event;
|
||||
const actions = {
|
||||
value() {
|
||||
@ -686,16 +719,11 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
event.target.setSelectionRange(selStart, selEnd);
|
||||
}
|
||||
},
|
||||
strokeColor() {
|
||||
const color = detail.strokeColor;
|
||||
event.target.style.color = ColorConverters[`${color[0]}_HTML`](
|
||||
color.slice(1)
|
||||
);
|
||||
},
|
||||
};
|
||||
Object.keys(detail)
|
||||
.filter(name => name in actions)
|
||||
.forEach(name => actions[name]());
|
||||
this._setColor(event);
|
||||
});
|
||||
|
||||
// Even if the field hasn't any actions
|
||||
@ -929,6 +957,7 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
Object.keys(detail)
|
||||
.filter(name => name in actions)
|
||||
.forEach(name => actions[name]());
|
||||
this._setColor(event);
|
||||
});
|
||||
|
||||
this._setEventListeners(
|
||||
@ -1018,6 +1047,7 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
Object.keys(detail)
|
||||
.filter(name => name in actions)
|
||||
.forEach(name => actions[name]());
|
||||
this._setColor(event);
|
||||
});
|
||||
|
||||
this._setEventListeners(
|
||||
@ -1226,6 +1256,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
|
||||
Object.keys(detail)
|
||||
.filter(name => name in actions)
|
||||
.forEach(name => actions[name]());
|
||||
this._setColor(event);
|
||||
});
|
||||
|
||||
selectElement.addEventListener("input", event => {
|
||||
|
@ -529,7 +529,7 @@ class AForm {
|
||||
event.rc = false;
|
||||
return;
|
||||
}
|
||||
event.value += cMask.subString(value.length);
|
||||
event.value += cMask.substring(value.length);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -140,6 +140,14 @@ class Field extends PDFObject {
|
||||
}
|
||||
}
|
||||
|
||||
get bgColor() {
|
||||
return this.fillColor;
|
||||
}
|
||||
|
||||
set bgColor(color) {
|
||||
this.fillColor = color;
|
||||
}
|
||||
|
||||
get numItems() {
|
||||
if (!this._isChoice) {
|
||||
throw new Error("Not a choice widget");
|
||||
@ -161,6 +169,14 @@ class Field extends PDFObject {
|
||||
}
|
||||
}
|
||||
|
||||
get borderColor() {
|
||||
return this.strokeColor;
|
||||
}
|
||||
|
||||
set borderColor(color) {
|
||||
this.strokeColor = color;
|
||||
}
|
||||
|
||||
get textColor() {
|
||||
return this._textColor;
|
||||
}
|
||||
@ -171,6 +187,14 @@ class Field extends PDFObject {
|
||||
}
|
||||
}
|
||||
|
||||
get fgColor() {
|
||||
return this.textColor;
|
||||
}
|
||||
|
||||
set fgColor(color) {
|
||||
this.textColor = color;
|
||||
}
|
||||
|
||||
get value() {
|
||||
return this._value;
|
||||
}
|
||||
|
@ -630,4 +630,53 @@ describe("Interaction", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("in js-colors.pdf", () => {
|
||||
let pages;
|
||||
|
||||
beforeAll(async () => {
|
||||
pages = await loadAndWait("js-colors.pdf", "#\\33 4R");
|
||||
});
|
||||
|
||||
it("must changes colors", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
for (const [name, ref] of [
|
||||
["Text1", "#\\33 4R"],
|
||||
["Check1", "#\\33 5R"],
|
||||
["Radio1", "#\\33 7R"],
|
||||
["Choice1", "#\\33 8R"],
|
||||
]) {
|
||||
await clearInput(page, "#\\33 4R");
|
||||
await page.type("#\\33 4R", `${name}`, {
|
||||
delay: 10,
|
||||
});
|
||||
await page.click("[data-annotation-id='41R']");
|
||||
let color = await page.$eval(
|
||||
ref,
|
||||
el => getComputedStyle(el).backgroundColor
|
||||
);
|
||||
expect(color)
|
||||
.withContext(`In ${browserName}`)
|
||||
.toEqual("rgb(255, 0, 0)");
|
||||
|
||||
await page.click("[data-annotation-id='43R']");
|
||||
color = await page.$eval(ref, el => getComputedStyle(el).color);
|
||||
expect(color)
|
||||
.withContext(`In ${browserName}`)
|
||||
.toEqual("rgb(0, 255, 0)");
|
||||
|
||||
await page.click("[data-annotation-id='44R']");
|
||||
color = await page.$eval(
|
||||
ref,
|
||||
el => getComputedStyle(el)["border-top-color"]
|
||||
);
|
||||
expect(color)
|
||||
.withContext(`In ${browserName}`)
|
||||
.toEqual("rgb(0, 0, 255)");
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -245,6 +245,7 @@
|
||||
!personwithdog.pdf
|
||||
!helloworld-bad.pdf
|
||||
!zerowidthline.pdf
|
||||
!js-colors.pdf
|
||||
!issue12841_reduced.pdf
|
||||
!bug868745.pdf
|
||||
!mmtype1.pdf
|
||||
|
BIN
test/pdfs/js-colors.pdf
Normal file
BIN
test/pdfs/js-colors.pdf
Normal file
Binary file not shown.
@ -1166,6 +1166,18 @@ describe("Scripting", function () {
|
||||
value: "3F?",
|
||||
selRange: [3, 3],
|
||||
});
|
||||
|
||||
send_queue.delete(refId);
|
||||
await sandbox.dispatchEventInSandbox({
|
||||
id: refId,
|
||||
value: "3F?",
|
||||
change: "0",
|
||||
name: "Keystroke",
|
||||
willCommit: true,
|
||||
selStart: 3,
|
||||
selEnd: 3,
|
||||
});
|
||||
expect(send_queue.has(refId)).toEqual(false);
|
||||
});
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user