Skip to content

Commit 951e209

Browse files
committed
JS - Add the basic architecture to be able to execute embedded js
1 parent 53cbe33 commit 951e209

18 files changed

+1323
-1
lines changed

extensions/chromium/preferences_schema.json

+4
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@
151151
"type": "boolean",
152152
"default": true
153153
},
154+
"enableScripting": {
155+
"type": "boolean",
156+
"default": false
157+
},
154158
"enablePermissions": {
155159
"type": "boolean",
156160
"default": false

gulpfile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,7 @@ function buildLib(defines, dir) {
12571257
return merge([
12581258
gulp.src(
12591259
[
1260-
"src/{core,display,shared}/*.js",
1260+
"src/{core,display,scripting_api,shared}/*.js",
12611261
"!src/shared/{cffStandardStrings,fonts_utils}.js",
12621262
"src/{pdf,pdf.worker}.js",
12631263
],

src/display/annotation_layer.js

+35
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,8 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
462462
element.setAttribute("value", textContent);
463463
}
464464

465+
element.setAttribute("id", id);
466+
465467
element.addEventListener("input", function (event) {
466468
storage.setValue(id, event.target.value);
467469
});
@@ -470,6 +472,39 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
470472
event.target.setSelectionRange(0, 0);
471473
});
472474

475+
if (this.data.actions) {
476+
element.addEventListener("updateFromSandbox", function (event) {
477+
const data = event.detail;
478+
if ("value" in data) {
479+
event.target.value = event.detail.value;
480+
} else if ("focus" in data) {
481+
event.target.focus({ preventScroll: false });
482+
}
483+
});
484+
485+
for (const eventType of Object.keys(this.data.actions)) {
486+
switch (eventType) {
487+
case "Format":
488+
element.addEventListener("blur", function (event) {
489+
window.dispatchEvent(
490+
new CustomEvent("dispatchEventInSandbox", {
491+
detail: {
492+
field: "value",
493+
id,
494+
event: {
495+
type: "Field",
496+
name: "Format",
497+
value: event.target.value,
498+
},
499+
},
500+
})
501+
);
502+
});
503+
break;
504+
}
505+
}
506+
}
507+
473508
element.disabled = this.data.readOnly;
474509
element.name = this.data.fieldName;
475510

src/pdf.js

+3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import { AnnotationLayer } from "./display/annotation_layer.js";
5353
import { apiCompatibilityParams } from "./display/api_compatibility.js";
5454
import { GlobalWorkerOptions } from "./display/worker_options.js";
5555
import { renderTextLayer } from "./display/text_layer.js";
56+
import { Scripting } from "./scripting_api/scripting.js";
5657
import { SVGGraphics } from "./display/svg.js";
5758

5859
/* eslint-disable-next-line no-unused-vars */
@@ -164,4 +165,6 @@ export {
164165
renderTextLayer,
165166
// From "./display/svg.js":
166167
SVGGraphics,
168+
// From "./scripting_api/scripting.js"
169+
Scripting,
167170
};

0 commit comments

Comments
 (0)