XFA - By default a text ui has only one line when in a field element

- it aims to fix https://bugzilla.mozilla.org/show_bug.cgi?id=1716809.
This commit is contained in:
Calixte Denizet 2021-06-16 20:15:24 +02:00
parent f9a0568f96
commit 793a0156ce
4 changed files with 69 additions and 7 deletions

View File

@ -18,6 +18,7 @@ import {
$addHTML,
$appendChild,
$childrenToHTML,
$clean,
$content,
$extra,
$finalize,
@ -4820,11 +4821,7 @@ class TextEdit extends XFAObject {
"on",
]);
this.id = attributes.id || "";
this.multiLine = getInteger({
data: attributes.multiLine,
defaultValue: 1,
validate: x => x === 0,
});
this.multiLine = attributes.multiLine || "";
this.use = attributes.use || "";
this.usehref = attributes.usehref || "";
this.vScrollPolicy = getStringOption(attributes.vScrollPolicy, [
@ -4838,6 +4835,17 @@ class TextEdit extends XFAObject {
this.margin = null;
}
[$clean](builder) {
super[$clean](builder);
const parent = this[$getParent]();
const defaultValue = parent instanceof Draw ? 1 : 0;
this.multiLine = getInteger({
data: this.multiLine,
defaultValue,
validate: x => x === 0 || x === 1,
});
}
[$toHTML](availableSpace) {
// TODO: incomplete.
const style = toStyle(this, "border", "font", "margin");

View File

@ -0,0 +1 @@
https://bugzilla.mozilla.org/attachment.cgi?id=9227437

View File

@ -938,6 +938,14 @@
"enableXfa": true,
"type": "eq"
},
{ "id": "xfa_bug1716809",
"file": "pdfs/xfa_bug1716809.pdf",
"md5": "7192f9e27e8b84776d107f57cbe353d5",
"link": true,
"rounds": 1,
"enableXfa": true,
"type": "eq"
},
{ "id": "xfa_annual_expense_report",
"file": "pdfs/xfa_annual_expense_report.pdf",
"md5": "06866e7a6bbc0346789208ef5f6e885c",

View File

@ -137,7 +137,7 @@ describe("XFAFactory", function () {
<medium stock="default" short="456pt" long="789pt"/>
<field y="1pt" w="11pt" h="22pt" x="2pt">
<ui>
<textEdit/>
<textEdit multiLine="0"/>
</ui>
<value>
<text maxChars="123"/>
@ -160,9 +160,54 @@ describe("XFAFactory", function () {
expect(factory.numberPages).toEqual(1);
const pages = factory.getPages();
const field = searchHtmlNode(pages, "name", "textarea");
const field = searchHtmlNode(pages, "name", "input");
expect(field.attributes.maxLength).toEqual(123);
});
it("should have an input or textarea", function () {
const xml = `
<?xml version="1.0"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<template xmlns="http://www.xfa.org/schema/xfa-template/3.3">
<subform name="root" mergeMode="matchTemplate">
<pageSet>
<pageArea>
<contentArea x="123pt" w="456pt" h="789pt"/>
<medium stock="default" short="456pt" long="789pt"/>
<field y="1pt" w="11pt" h="22pt" x="2pt">
<ui>
<textEdit/>
</ui>
</field>
<field y="1pt" w="11pt" h="22pt" x="2pt">
<ui>
<textEdit multiLine="1"/>
</ui>
</field>
</pageArea>
</pageSet>
<subform name="first">
<draw><value><text>foo</text></value></draw>
</subform>
</subform>
</template>
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
</xfa:data>
</xfa:datasets>
</xdp:xdp>
`;
const factory = new XFAFactory({ "xdp:xdp": xml });
expect(factory.numberPages).toEqual(1);
const pages = factory.getPages();
const field1 = searchHtmlNode(pages, "name", "input");
expect(field1).not.toEqual(null);
const field2 = searchHtmlNode(pages, "name", "textarea");
expect(field2).not.toEqual(null);
});
});
});