Merge pull request #13782 from Snuffleupagus/viewer-reset-xfaLayer
[api-minor] XFA - Remove the `xfaLayer` from the DOM when resetting pages (bug 1721977, PR 13427 follow-up)
This commit is contained in:
commit
834a638aad
@ -207,42 +207,47 @@ class PDFPageView {
|
||||
this.zoomLayer = null;
|
||||
}
|
||||
|
||||
reset(keepZoomLayer = false, keepAnnotations = false) {
|
||||
this.cancelRendering(keepAnnotations);
|
||||
reset({
|
||||
keepZoomLayer = false,
|
||||
keepAnnotationLayer = false,
|
||||
keepXfaLayer = false,
|
||||
} = {}) {
|
||||
this.cancelRendering({ keepAnnotationLayer, keepXfaLayer });
|
||||
this.renderingState = RenderingStates.INITIAL;
|
||||
|
||||
const div = this.div;
|
||||
div.style.width = Math.floor(this.viewport.width) + "px";
|
||||
div.style.height = Math.floor(this.viewport.height) + "px";
|
||||
|
||||
const childNodes = div.childNodes;
|
||||
const currentZoomLayerNode = (keepZoomLayer && this.zoomLayer) || null;
|
||||
const currentAnnotationNode =
|
||||
(keepAnnotations && this.annotationLayer?.div) || null;
|
||||
const currentXfaLayerNode = this.xfaLayer?.div || null;
|
||||
const childNodes = div.childNodes,
|
||||
zoomLayerNode = (keepZoomLayer && this.zoomLayer) || null,
|
||||
annotationLayerNode =
|
||||
(keepAnnotationLayer && this.annotationLayer?.div) || null,
|
||||
xfaLayerNode = (keepXfaLayer && this.xfaLayer?.div) || null;
|
||||
for (let i = childNodes.length - 1; i >= 0; i--) {
|
||||
const node = childNodes[i];
|
||||
if (
|
||||
currentZoomLayerNode === node ||
|
||||
currentAnnotationNode === node ||
|
||||
currentXfaLayerNode === node
|
||||
) {
|
||||
continue;
|
||||
switch (node) {
|
||||
case zoomLayerNode:
|
||||
case annotationLayerNode:
|
||||
case xfaLayerNode:
|
||||
continue;
|
||||
}
|
||||
div.removeChild(node);
|
||||
}
|
||||
div.removeAttribute("data-loaded");
|
||||
|
||||
if (currentAnnotationNode) {
|
||||
if (annotationLayerNode) {
|
||||
// Hide the annotation layer until all elements are resized
|
||||
// so they are not displayed on the already resized page.
|
||||
this.annotationLayer.hide();
|
||||
} else if (this.annotationLayer) {
|
||||
this.annotationLayer.cancel();
|
||||
this.annotationLayer = null;
|
||||
}
|
||||
if (xfaLayerNode) {
|
||||
// Hide the XFA layer until all elements are resized
|
||||
// so they are not displayed on the already resized page.
|
||||
this.xfaLayer.hide();
|
||||
}
|
||||
|
||||
if (!currentZoomLayerNode) {
|
||||
if (!zoomLayerNode) {
|
||||
if (this.canvas) {
|
||||
this.paintedViewportMap.delete(this.canvas);
|
||||
// Zeroing the width and height causes Firefox to release graphics
|
||||
@ -284,7 +289,11 @@ class PDFPageView {
|
||||
});
|
||||
|
||||
if (this.svg) {
|
||||
this.cssTransform(this.svg, true);
|
||||
this.cssTransform({
|
||||
target: this.svg,
|
||||
redrawAnnotationLayer: true,
|
||||
redrawXfaLayer: true,
|
||||
});
|
||||
|
||||
this.eventBus.dispatch("pagerendered", {
|
||||
source: this,
|
||||
@ -313,7 +322,11 @@ class PDFPageView {
|
||||
this.useOnlyCssZoom ||
|
||||
(this.hasRestrictedScaling && isScalingRestricted)
|
||||
) {
|
||||
this.cssTransform(this.canvas, true);
|
||||
this.cssTransform({
|
||||
target: this.canvas,
|
||||
redrawAnnotationLayer: true,
|
||||
redrawXfaLayer: true,
|
||||
});
|
||||
|
||||
this.eventBus.dispatch("pagerendered", {
|
||||
source: this,
|
||||
@ -330,16 +343,20 @@ class PDFPageView {
|
||||
}
|
||||
}
|
||||
if (this.zoomLayer) {
|
||||
this.cssTransform(this.zoomLayer.firstChild);
|
||||
this.cssTransform({ target: this.zoomLayer.firstChild });
|
||||
}
|
||||
this.reset(/* keepZoomLayer = */ true, /* keepAnnotations = */ true);
|
||||
this.reset({
|
||||
keepZoomLayer: true,
|
||||
keepAnnotationLayer: true,
|
||||
keepXfaLayer: true,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* PLEASE NOTE: Most likely you want to use the `this.reset()` method,
|
||||
* rather than calling this one directly.
|
||||
*/
|
||||
cancelRendering(keepAnnotations = false) {
|
||||
cancelRendering({ keepAnnotationLayer = false, keepXfaLayer = false } = {}) {
|
||||
if (this.paintTask) {
|
||||
this.paintTask.cancel();
|
||||
this.paintTask = null;
|
||||
@ -350,17 +367,28 @@ class PDFPageView {
|
||||
this.textLayer.cancel();
|
||||
this.textLayer = null;
|
||||
}
|
||||
if (!keepAnnotations && this.annotationLayer) {
|
||||
if (
|
||||
this.annotationLayer &&
|
||||
(!keepAnnotationLayer || !this.annotationLayer.div)
|
||||
) {
|
||||
this.annotationLayer.cancel();
|
||||
this.annotationLayer = null;
|
||||
}
|
||||
if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {
|
||||
this.xfaLayer.cancel();
|
||||
this.xfaLayer = null;
|
||||
}
|
||||
if (this._onTextLayerRendered) {
|
||||
this.eventBus._off("textlayerrendered", this._onTextLayerRendered);
|
||||
this._onTextLayerRendered = null;
|
||||
}
|
||||
}
|
||||
|
||||
cssTransform(target, redrawAnnotations = false) {
|
||||
cssTransform({
|
||||
target,
|
||||
redrawAnnotationLayer = false,
|
||||
redrawXfaLayer = false,
|
||||
}) {
|
||||
// Scale target (canvas or svg), its wrapper and page container.
|
||||
const width = this.viewport.width;
|
||||
const height = this.viewport.height;
|
||||
@ -429,11 +457,10 @@ class PDFPageView {
|
||||
textLayerDiv.style.transformOrigin = "0% 0%";
|
||||
}
|
||||
|
||||
if (redrawAnnotations && this.annotationLayer) {
|
||||
if (redrawAnnotationLayer && this.annotationLayer) {
|
||||
this._renderAnnotationLayer();
|
||||
}
|
||||
|
||||
if (this.xfaLayer) {
|
||||
if (redrawXfaLayer && this.xfaLayer) {
|
||||
this._renderXfaLayer();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user