JS - Handle correctly hierarchy of fields (#13133)

* JS - Handle correctly hierarchy of fields
  - it aims to fix #13132;
  - annotations can inherit their actions from the parent field;
  - there are some fields which act as a container for other fields:
    - they can be access through js so need to add them with an empty type (nothing in the spec about that but checked in Acrobat);
    - calculation order list (CO) can reference them so need make them through this.getField;
    - getArray method must return kids.
  - field values are number, string, ... depending of their type but nothing in the spec on how to know what's the type:
    - according to the comment for Canonical Format: https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf#page=461
    - it seems that this "type" can be guessed from js action Format (when setting a type in Acrobat DC, the only affected thing is this action).
  - util.scand with an empty string returns the current date.
This commit is contained in:
calixteman 2021-03-30 17:50:35 +02:00 committed by GitHub
parent 75a6b2fa13
commit 84d7cccb1d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 337 additions and 106 deletions

View file

@ -13,6 +13,14 @@
* limitations under the License.
*/
const FieldType = {
none: 0,
number: 1,
percent: 2,
date: 3,
time: 4,
};
function createActionsMap(actions) {
const actionsMap = new Map();
if (actions) {
@ -23,4 +31,28 @@ function createActionsMap(actions) {
return actionsMap;
}
export { createActionsMap };
function getFieldType(actions) {
let format = actions.get("Format");
if (!format) {
return FieldType.none;
}
format = format[0];
format = format.trim();
if (format.startsWith("AFNumber_")) {
return FieldType.number;
}
if (format.startsWith("AFPercent_")) {
return FieldType.percent;
}
if (format.startsWith("AFDate_")) {
return FieldType.date;
}
if (format.startsWith("AFTime__")) {
return FieldType.time;
}
return FieldType.none;
}
export { createActionsMap, FieldType, getFieldType };