Handle possibly undefined parameters *once* per AnnotationLayer.render
invocation
There's no reason to repeat this for every single annotation. Also, adds a couple of missing JSDoc-parameters.
This commit is contained in:
parent
e182597cb1
commit
dcf9ff2182
@ -2562,13 +2562,16 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
|
|||||||
* @property {PDFPageProxy} page
|
* @property {PDFPageProxy} page
|
||||||
* @property {IPDFLinkService} linkService
|
* @property {IPDFLinkService} linkService
|
||||||
* @property {IDownloadManager} downloadManager
|
* @property {IDownloadManager} downloadManager
|
||||||
|
* @property {AnnotationStorage} [annotationStorage]
|
||||||
* @property {string} [imageResourcesPath] - Path for image resources, mainly
|
* @property {string} [imageResourcesPath] - Path for image resources, mainly
|
||||||
* for annotation icons. Include trailing slash.
|
* for annotation icons. Include trailing slash.
|
||||||
* @property {boolean} renderForms
|
* @property {boolean} renderForms
|
||||||
* @property {boolean} [enableScripting] - Enable embedded script execution.
|
* @property {boolean} [enableScripting] - Enable embedded script execution.
|
||||||
* @property {boolean} [hasJSActions] - Some fields have JS actions.
|
* @property {boolean} [hasJSActions] - Some fields have JS actions.
|
||||||
* The default value is `false`.
|
* The default value is `false`.
|
||||||
|
* @property {Object<string, Array<Object>> | null} [fieldObjects]
|
||||||
* @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]
|
* @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]
|
||||||
|
* @property {TextAccessibilityManager} [accessibilityManager]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class AnnotationLayer {
|
class AnnotationLayer {
|
||||||
@ -2588,14 +2591,28 @@ class AnnotationLayer {
|
|||||||
/**
|
/**
|
||||||
* Render a new annotation layer with all annotation elements.
|
* Render a new annotation layer with all annotation elements.
|
||||||
*
|
*
|
||||||
* @public
|
* @param {AnnotationLayerParameters} params
|
||||||
* @param {AnnotationLayerParameters} parameters
|
|
||||||
* @memberof AnnotationLayer
|
* @memberof AnnotationLayer
|
||||||
*/
|
*/
|
||||||
static render(parameters) {
|
static render(params) {
|
||||||
const { annotations, div, viewport, accessibilityManager } = parameters;
|
const { annotations, div, viewport, accessibilityManager } = params;
|
||||||
setLayerDimensions(div, viewport);
|
setLayerDimensions(div, viewport);
|
||||||
|
|
||||||
|
const elementParams = {
|
||||||
|
data: null,
|
||||||
|
layer: div,
|
||||||
|
page: params.page,
|
||||||
|
viewport,
|
||||||
|
linkService: params.linkService,
|
||||||
|
downloadManager: params.downloadManager,
|
||||||
|
imageResourcesPath: params.imageResourcesPath || "",
|
||||||
|
renderForms: params.renderForms !== false,
|
||||||
|
svgFactory: new DOMSVGFactory(),
|
||||||
|
annotationStorage: params.annotationStorage || new AnnotationStorage(),
|
||||||
|
enableScripting: params.enableScripting === true,
|
||||||
|
hasJSActions: params.hasJSActions,
|
||||||
|
fieldObjects: params.fieldObjects,
|
||||||
|
};
|
||||||
let zIndex = 0;
|
let zIndex = 0;
|
||||||
|
|
||||||
for (const data of annotations) {
|
for (const data of annotations) {
|
||||||
@ -2605,73 +2622,60 @@ class AnnotationLayer {
|
|||||||
continue; // Ignore empty annotations.
|
continue; // Ignore empty annotations.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const element = AnnotationElementFactory.create({
|
elementParams.data = data;
|
||||||
data,
|
const element = AnnotationElementFactory.create(elementParams);
|
||||||
layer: div,
|
|
||||||
page: parameters.page,
|
|
||||||
viewport,
|
|
||||||
linkService: parameters.linkService,
|
|
||||||
downloadManager: parameters.downloadManager,
|
|
||||||
imageResourcesPath: parameters.imageResourcesPath || "",
|
|
||||||
renderForms: parameters.renderForms !== false,
|
|
||||||
svgFactory: new DOMSVGFactory(),
|
|
||||||
annotationStorage:
|
|
||||||
parameters.annotationStorage || new AnnotationStorage(),
|
|
||||||
enableScripting: parameters.enableScripting,
|
|
||||||
hasJSActions: parameters.hasJSActions,
|
|
||||||
fieldObjects: parameters.fieldObjects,
|
|
||||||
});
|
|
||||||
if (element.isRenderable) {
|
|
||||||
const rendered = element.render();
|
|
||||||
if (data.hidden) {
|
|
||||||
rendered.style.visibility = "hidden";
|
|
||||||
}
|
|
||||||
if (Array.isArray(rendered)) {
|
|
||||||
for (const renderedElement of rendered) {
|
|
||||||
renderedElement.style.zIndex = zIndex++;
|
|
||||||
AnnotationLayer.#appendElement(
|
|
||||||
renderedElement,
|
|
||||||
data.id,
|
|
||||||
div,
|
|
||||||
accessibilityManager
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// The accessibility manager will move the annotation in the DOM in
|
|
||||||
// order to match the visual ordering.
|
|
||||||
// But if an annotation is above an other one, then we must draw it
|
|
||||||
// after the other one whatever the order is in the DOM, hence the
|
|
||||||
// use of the z-index.
|
|
||||||
rendered.style.zIndex = zIndex++;
|
|
||||||
|
|
||||||
if (element instanceof PopupAnnotationElement) {
|
if (!element.isRenderable) {
|
||||||
// Popup annotation elements should not be on top of other
|
continue;
|
||||||
// annotation elements to prevent interfering with mouse events.
|
}
|
||||||
div.prepend(rendered);
|
const rendered = element.render();
|
||||||
} else {
|
if (data.hidden) {
|
||||||
AnnotationLayer.#appendElement(
|
rendered.style.visibility = "hidden";
|
||||||
rendered,
|
}
|
||||||
data.id,
|
if (Array.isArray(rendered)) {
|
||||||
div,
|
for (const renderedElement of rendered) {
|
||||||
accessibilityManager
|
renderedElement.style.zIndex = zIndex++;
|
||||||
);
|
AnnotationLayer.#appendElement(
|
||||||
}
|
renderedElement,
|
||||||
|
data.id,
|
||||||
|
div,
|
||||||
|
accessibilityManager
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// The accessibility manager will move the annotation in the DOM in
|
||||||
|
// order to match the visual ordering.
|
||||||
|
// But if an annotation is above an other one, then we must draw it
|
||||||
|
// after the other one whatever the order is in the DOM, hence the
|
||||||
|
// use of the z-index.
|
||||||
|
rendered.style.zIndex = zIndex++;
|
||||||
|
|
||||||
|
if (element instanceof PopupAnnotationElement) {
|
||||||
|
// Popup annotation elements should not be on top of other
|
||||||
|
// annotation elements to prevent interfering with mouse events.
|
||||||
|
div.prepend(rendered);
|
||||||
|
} else {
|
||||||
|
AnnotationLayer.#appendElement(
|
||||||
|
rendered,
|
||||||
|
data.id,
|
||||||
|
div,
|
||||||
|
accessibilityManager
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.#setAnnotationCanvasMap(div, parameters.annotationCanvasMap);
|
this.#setAnnotationCanvasMap(div, params.annotationCanvasMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the annotation elements on existing annotation layer.
|
* Update the annotation elements on existing annotation layer.
|
||||||
*
|
*
|
||||||
* @public
|
* @param {AnnotationLayerParameters} params
|
||||||
* @param {AnnotationLayerParameters} parameters
|
|
||||||
* @memberof AnnotationLayer
|
* @memberof AnnotationLayer
|
||||||
*/
|
*/
|
||||||
static update(parameters) {
|
static update(params) {
|
||||||
const { annotationCanvasMap, div, viewport } = parameters;
|
const { annotationCanvasMap, div, viewport } = params;
|
||||||
setLayerDimensions(div, { rotation: viewport.rotation });
|
setLayerDimensions(div, { rotation: viewport.rotation });
|
||||||
|
|
||||||
this.#setAnnotationCanvasMap(div, annotationCanvasMap);
|
this.#setAnnotationCanvasMap(div, annotationCanvasMap);
|
||||||
|
@ -42,7 +42,7 @@ import { PresentationModeState } from "./ui_utils.js";
|
|||||||
* @property {Promise<Object<string, Array<Object>> | null>}
|
* @property {Promise<Object<string, Array<Object>> | null>}
|
||||||
* [fieldObjectsPromise]
|
* [fieldObjectsPromise]
|
||||||
* @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]
|
* @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]
|
||||||
* @property {TextAccessibilityManager} accessibilityManager
|
* @property {TextAccessibilityManager} [accessibilityManager]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class AnnotationLayerBuilder {
|
class AnnotationLayerBuilder {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user