snap-report-viewer 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,16 +3,65 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export class PrintService {
|
|
4
4
|
constructor() {
|
|
5
5
|
this.printStyleId = 'rv-print-styles';
|
|
6
|
+
this.hiddenElements = [];
|
|
7
|
+
this.ancestorElements = [];
|
|
6
8
|
}
|
|
7
9
|
print(viewerElement, pageSetup) {
|
|
8
|
-
this.
|
|
10
|
+
this.isolateForPrint(viewerElement);
|
|
11
|
+
this.injectPrintStyles(pageSetup);
|
|
12
|
+
// Cleanup after print dialog closes
|
|
13
|
+
const cleanup = () => {
|
|
14
|
+
this.cleanupIsolation(viewerElement);
|
|
15
|
+
this.cleanupPrintStyles();
|
|
16
|
+
window.removeEventListener('afterprint', cleanup);
|
|
17
|
+
};
|
|
18
|
+
window.addEventListener('afterprint', cleanup);
|
|
9
19
|
window.print();
|
|
10
20
|
}
|
|
11
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Walk from the viewer element up to <body>, hiding all siblings
|
|
23
|
+
* and marking all ancestors so their layout can be reset for print.
|
|
24
|
+
*/
|
|
25
|
+
isolateForPrint(viewerElement) {
|
|
26
|
+
this.hiddenElements = [];
|
|
27
|
+
this.ancestorElements = [];
|
|
28
|
+
let current = viewerElement;
|
|
29
|
+
while (current && current !== document.body) {
|
|
30
|
+
const parent = current.parentElement;
|
|
31
|
+
if (parent) {
|
|
32
|
+
// Mark the ancestor (the parent in the path) for layout reset
|
|
33
|
+
parent.setAttribute('data-rv-print-ancestor', '');
|
|
34
|
+
this.ancestorElements.push(parent);
|
|
35
|
+
for (let i = 0; i < parent.children.length; i++) {
|
|
36
|
+
const sibling = parent.children[i];
|
|
37
|
+
if (sibling !== current && sibling.tagName !== 'STYLE' && sibling.tagName !== 'SCRIPT' && sibling.tagName !== 'LINK') {
|
|
38
|
+
sibling.setAttribute('data-rv-print-hide', '');
|
|
39
|
+
this.hiddenElements.push(sibling);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
current = parent;
|
|
44
|
+
}
|
|
45
|
+
// Also mark body for layout reset
|
|
46
|
+
document.body.setAttribute('data-rv-print-ancestor', '');
|
|
47
|
+
this.ancestorElements.push(document.body);
|
|
48
|
+
// Mark internal viewer chrome (toolbar, sidebars) for hiding
|
|
49
|
+
viewerElement.setAttribute('data-rv-printing', 'true');
|
|
50
|
+
}
|
|
51
|
+
cleanupIsolation(viewerElement) {
|
|
52
|
+
for (const el of this.hiddenElements) {
|
|
53
|
+
el.removeAttribute('data-rv-print-hide');
|
|
54
|
+
}
|
|
55
|
+
for (const el of this.ancestorElements) {
|
|
56
|
+
el.removeAttribute('data-rv-print-ancestor');
|
|
57
|
+
}
|
|
58
|
+
this.hiddenElements = [];
|
|
59
|
+
this.ancestorElements = [];
|
|
60
|
+
viewerElement.removeAttribute('data-rv-printing');
|
|
61
|
+
}
|
|
62
|
+
injectPrintStyles(pageSetup) {
|
|
12
63
|
// Remove existing print styles if any
|
|
13
64
|
this.cleanupPrintStyles();
|
|
14
|
-
// Add a data attribute to identify the viewer for print
|
|
15
|
-
viewerElement.setAttribute('data-rv-printing', 'true');
|
|
16
65
|
const pageRule = this.buildPageRule(pageSetup);
|
|
17
66
|
const style = document.createElement('style');
|
|
18
67
|
style.id = this.printStyleId;
|
|
@@ -20,12 +69,35 @@ export class PrintService {
|
|
|
20
69
|
@media print {
|
|
21
70
|
${pageRule}
|
|
22
71
|
|
|
23
|
-
/* Hide
|
|
24
|
-
|
|
72
|
+
/* Hide all sibling elements along the ancestor path */
|
|
73
|
+
[data-rv-print-hide] {
|
|
25
74
|
display: none !important;
|
|
26
75
|
}
|
|
27
76
|
|
|
28
|
-
/*
|
|
77
|
+
/* Reset all ancestor containers so they don't offset the content */
|
|
78
|
+
[data-rv-print-ancestor] {
|
|
79
|
+
display: block !important;
|
|
80
|
+
margin: 0 !important;
|
|
81
|
+
padding: 0 !important;
|
|
82
|
+
width: 100% !important;
|
|
83
|
+
max-width: 100% !important;
|
|
84
|
+
height: auto !important;
|
|
85
|
+
position: static !important;
|
|
86
|
+
overflow: visible !important;
|
|
87
|
+
float: none !important;
|
|
88
|
+
columns: auto !important;
|
|
89
|
+
column-gap: 0 !important;
|
|
90
|
+
gap: 0 !important;
|
|
91
|
+
transform: none !important;
|
|
92
|
+
grid-template-columns: none !important;
|
|
93
|
+
grid-template-rows: none !important;
|
|
94
|
+
flex: none !important;
|
|
95
|
+
border: none !important;
|
|
96
|
+
box-shadow: none !important;
|
|
97
|
+
background: transparent !important;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Hide toolbar and sidebars inside the viewer */
|
|
29
101
|
rv-viewer-toolbar,
|
|
30
102
|
.rv-sidebar-wrapper,
|
|
31
103
|
rv-toc-sidebar,
|
|
@@ -55,6 +127,8 @@ export class PrintService {
|
|
|
55
127
|
overflow: visible !important;
|
|
56
128
|
padding: 0 !important;
|
|
57
129
|
background: white !important;
|
|
130
|
+
display: block !important;
|
|
131
|
+
align-items: initial !important;
|
|
58
132
|
}
|
|
59
133
|
|
|
60
134
|
.rv-page-wrapper {
|
|
@@ -74,13 +148,6 @@ export class PrintService {
|
|
|
74
148
|
}
|
|
75
149
|
`;
|
|
76
150
|
document.head.appendChild(style);
|
|
77
|
-
// Cleanup after print
|
|
78
|
-
const cleanup = () => {
|
|
79
|
-
this.cleanupPrintStyles();
|
|
80
|
-
viewerElement.removeAttribute('data-rv-printing');
|
|
81
|
-
window.removeEventListener('afterprint', cleanup);
|
|
82
|
-
};
|
|
83
|
-
window.addEventListener('afterprint', cleanup);
|
|
84
151
|
}
|
|
85
152
|
buildPageRule(pageSetup) {
|
|
86
153
|
if (!pageSetup) {
|
|
@@ -130,4 +197,4 @@ export class PrintService {
|
|
|
130
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrintService, decorators: [{
|
|
131
198
|
type: Injectable
|
|
132
199
|
}] });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRVUsaUJBQVksR0FBRyxpQkFBaUIsQ0FBQztLQXdJMUM7SUF0SUMsS0FBSyxDQUFDLGFBQTBCLEVBQUUsU0FBcUI7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGFBQTBCLEVBQUUsU0FBcUI7UUFDekUsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLHdEQUF3RDtRQUN4RCxhQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0IsS0FBSyxDQUFDLFdBQVcsR0FBRzs7VUFFZCxRQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzRGIsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsYUFBYSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sYUFBYSxDQUFDLFNBQXFCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sOENBQThDLENBQUM7UUFDeEQsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELHlCQUF5QjtRQUN6QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNLE9BQU8sQ0FBQyxNQUFNLE1BQU0sT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBRWhHLE9BQU8saUJBQWlCLFNBQVMsYUFBYSxXQUFXLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQW9CO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVyRixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsd0RBQXdEO1lBQ3hELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO1lBQ3ZDLDJFQUEyRTtZQUMzRSw2Q0FBNkM7WUFDN0MsSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JFLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyRSxDQUFDO1FBRUQsNERBQTREO1FBQzVELE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUFHLHFEQUFxRDtZQUNsRSxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsUUFBUTtZQUNsQixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDaEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7K0dBeElVLFlBQVk7bUhBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnZVNldHVwLCBQQUdFX1NJWkVTIH0gZnJvbSAnLi4vbW9kZWxzL3JlcG9ydC10ZW1wbGF0ZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcmludFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpbnRTdHlsZUlkID0gJ3J2LXByaW50LXN0eWxlcyc7XHJcblxyXG4gIHByaW50KHZpZXdlckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYWdlU2V0dXA/OiBQYWdlU2V0dXApOiB2b2lkIHtcclxuICAgIHRoaXMuaW5qZWN0UHJpbnRTdHlsZXModmlld2VyRWxlbWVudCwgcGFnZVNldHVwKTtcclxuICAgIHdpbmRvdy5wcmludCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RQcmludFN0eWxlcyh2aWV3ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgcGFnZVNldHVwPzogUGFnZVNldHVwKTogdm9pZCB7XHJcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgcHJpbnQgc3R5bGVzIGlmIGFueVxyXG4gICAgdGhpcy5jbGVhbnVwUHJpbnRTdHlsZXMoKTtcclxuXHJcbiAgICAvLyBBZGQgYSBkYXRhIGF0dHJpYnV0ZSB0byBpZGVudGlmeSB0aGUgdmlld2VyIGZvciBwcmludFxyXG4gICAgdmlld2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcnYtcHJpbnRpbmcnLCAndHJ1ZScpO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VSdWxlID0gdGhpcy5idWlsZFBhZ2VSdWxlKHBhZ2VTZXR1cCk7XHJcblxyXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgc3R5bGUuaWQgPSB0aGlzLnByaW50U3R5bGVJZDtcclxuICAgIHN0eWxlLnRleHRDb250ZW50ID0gYFxyXG4gICAgICBAbWVkaWEgcHJpbnQge1xyXG4gICAgICAgICR7cGFnZVJ1bGV9XHJcblxyXG4gICAgICAgIC8qIEhpZGUgZXZlcnl0aGluZyBleGNlcHQgdGhlIHZpZXdlciAqL1xyXG4gICAgICAgIGJvZHkgPiAqOm5vdCg6aGFzKFtkYXRhLXJ2LXByaW50aW5nXSkpIHtcclxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIEhpZGUgdG9vbGJhciBhbmQgc2lkZWJhcnMgKi9cclxuICAgICAgICBydi12aWV3ZXItdG9vbGJhcixcclxuICAgICAgICAucnYtc2lkZWJhci13cmFwcGVyLFxyXG4gICAgICAgIHJ2LXRvYy1zaWRlYmFyLFxyXG4gICAgICAgIHJ2LXRodW1ibmFpbC1zaWRlYmFyLFxyXG4gICAgICAgIC5ydi1zZWFyY2gtaGlnaGxpZ2h0IHtcclxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFJlc2V0IHZpZXdlciBsYXlvdXQgZm9yIHByaW50ICovXHJcbiAgICAgICAgW2RhdGEtcnYtcHJpbnRpbmddIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAucnYtdmlld2VyLXJvb3Qge1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAucnYtdmlld2VyLWJvZHkge1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2UtY29udGFpbmVyIHtcclxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlciB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcclxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlcjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Uge1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgYDtcclxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG5cclxuICAgIC8vIENsZWFudXAgYWZ0ZXIgcHJpbnRcclxuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xlYW51cFByaW50U3R5bGVzKCk7XHJcbiAgICAgIHZpZXdlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXJ2LXByaW50aW5nJyk7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgY2xlYW51cCk7XHJcbiAgICB9O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBjbGVhbnVwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRQYWdlUnVsZShwYWdlU2V0dXA/OiBQYWdlU2V0dXApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFwYWdlU2V0dXApIHtcclxuICAgICAgcmV0dXJuICdAcGFnZSB7IHNpemU6IEE0IHBvcnRyYWl0OyBtYXJnaW46IDI1LjRtbTsgfSc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnVpbGQgdGhlIHNpemUgdmFsdWVcclxuICAgIGNvbnN0IHNpemVWYWx1ZSA9IHRoaXMuZ2V0UGFnZVNpemVDU1MocGFnZVNldHVwKTtcclxuXHJcbiAgICAvLyBCdWlsZCB0aGUgbWFyZ2luIHZhbHVlXHJcbiAgICBjb25zdCBtYXJnaW5zID0gcGFnZVNldHVwLm1hcmdpbnM7XHJcbiAgICBjb25zdCBtYXJnaW5WYWx1ZSA9IGAke21hcmdpbnMudG9wfW1tICR7bWFyZ2lucy5yaWdodH1tbSAke21hcmdpbnMuYm90dG9tfW1tICR7bWFyZ2lucy5sZWZ0fW1tYDtcclxuXHJcbiAgICByZXR1cm4gYEBwYWdlIHsgc2l6ZTogJHtzaXplVmFsdWV9OyBtYXJnaW46ICR7bWFyZ2luVmFsdWV9OyB9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnZVNpemVDU1MocGFnZVNldHVwOiBQYWdlU2V0dXApOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBwYWdlU2V0dXAub3JpZW50YXRpb24gPT09ICdMYW5kc2NhcGUnID8gJ2xhbmRzY2FwZScgOiAncG9ydHJhaXQnO1xyXG5cclxuICAgIGlmIChwYWdlU2V0dXAuc2l6ZSA9PT0gJ0N1c3RvbScpIHtcclxuICAgICAgLy8gRm9yIGN1c3RvbSBzaXplcywgdXNlIGV4cGxpY2l0IHdpZHRoIGFuZCBoZWlnaHQgaW4gbW1cclxuICAgICAgY29uc3Qgd2lkdGggPSBwYWdlU2V0dXAud2lkdGggfHwgMjEwO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBwYWdlU2V0dXAuaGVpZ2h0IHx8IDI5NztcclxuICAgICAgLy8gQ1NTIEBwYWdlIHNpemUgd2l0aCBleHBsaWNpdCBkaW1lbnNpb25zIGRvZXNuJ3QgdXNlIG9yaWVudGF0aW9uIGtleXdvcmQ7XHJcbiAgICAgIC8vIGluc3RlYWQgd2Ugc3dhcCB3aWR0aC9oZWlnaHQgZm9yIGxhbmRzY2FwZVxyXG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdsYW5kc2NhcGUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke01hdGgubWF4KHdpZHRoLCBoZWlnaHQpfW1tICR7TWF0aC5taW4od2lkdGgsIGhlaWdodCl9bW1gO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBgJHtNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KX1tbSAke01hdGgubWF4KHdpZHRoLCBoZWlnaHQpfW1tYDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOYW1lZCBwYWdlIHNpemVzOiBBMywgQTQsIEE1LCBsZXR0ZXIsIGxlZ2FsICsgb3JpZW50YXRpb25cclxuICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICdBMic6ICdBMycsICAvLyBDU1MgQHBhZ2UgZG9lc24ndCBzdXBwb3J0IEEyLCBmYWxsIGJhY2sgdG8gY2xvc2VzdFxyXG4gICAgICAnQTMnOiAnQTMnLFxyXG4gICAgICAnQTQnOiAnQTQnLFxyXG4gICAgICAnQTUnOiAnQTUnLFxyXG4gICAgICAnTGV0dGVyJzogJ2xldHRlcicsXHJcbiAgICAgICdMZWdhbCc6ICdsZWdhbCcsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNzc1NpemUgPSBzaXplTWFwW3BhZ2VTZXR1cC5zaXplXSB8fCAnQTQnO1xyXG4gICAgcmV0dXJuIGAke2Nzc1NpemV9ICR7b3JpZW50YXRpb259YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cFByaW50U3R5bGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByaW50U3R5bGVJZCk7XHJcbiAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgZXhpc3RpbmcucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydC12aWV3ZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRVUsaUJBQVksR0FBRyxpQkFBaUIsQ0FBQztRQUNqQyxtQkFBYyxHQUFrQixFQUFFLENBQUM7UUFDbkMscUJBQWdCLEdBQWtCLEVBQUUsQ0FBQztLQStNOUM7SUE3TUMsS0FBSyxDQUFDLGFBQTBCLEVBQUUsU0FBcUI7UUFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEMsb0NBQW9DO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLGFBQTBCO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQXVCLGFBQWEsQ0FBQztRQUVoRCxPQUFPLE9BQU8sSUFBSSxPQUFPLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUF1QixPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3pELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsOERBQThEO2dCQUM5RCxNQUFNLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQWdCLENBQUM7b0JBQ2xELElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUNySCxPQUFPLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQyw2REFBNkQ7UUFDN0QsYUFBYSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsYUFBMEI7UUFDakQsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLEVBQUUsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixhQUFhLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQXFCO1FBQzdDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxXQUFXLEdBQUc7O1VBRWQsUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQStFYixDQUFDO1FBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFxQjtRQUN6QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLDhDQUE4QyxDQUFDO1FBQ3hELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRCx5QkFBeUI7UUFDekIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssTUFBTSxPQUFPLENBQUMsTUFBTSxNQUFNLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztRQUVoRyxPQUFPLGlCQUFpQixTQUFTLGFBQWEsV0FBVyxLQUFLLENBQUM7SUFDakUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUFvQjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFckYsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLHdEQUF3RDtZQUN4RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUN2QywyRUFBMkU7WUFDM0UsNkNBQTZDO1lBQzdDLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNyRSxDQUFDO1lBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckUsQ0FBQztRQUVELDREQUE0RDtRQUM1RCxNQUFNLE9BQU8sR0FBMkI7WUFDdEMsSUFBSSxFQUFFLElBQUksRUFBRyxxREFBcUQ7WUFDbEUsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7WUFDbEIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDOytHQWpOVSxZQUFZO21IQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2VTZXR1cCwgUEFHRV9TSVpFUyB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtdGVtcGxhdGUubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJpbnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHByaW50U3R5bGVJZCA9ICdydi1wcmludC1zdHlsZXMnO1xyXG4gIHByaXZhdGUgaGlkZGVuRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICBwcml2YXRlIGFuY2VzdG9yRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgcHJpbnQodmlld2VyRWxlbWVudDogSFRNTEVsZW1lbnQsIHBhZ2VTZXR1cD86IFBhZ2VTZXR1cCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc29sYXRlRm9yUHJpbnQodmlld2VyRWxlbWVudCk7XHJcbiAgICB0aGlzLmluamVjdFByaW50U3R5bGVzKHBhZ2VTZXR1cCk7XHJcblxyXG4gICAgLy8gQ2xlYW51cCBhZnRlciBwcmludCBkaWFsb2cgY2xvc2VzXHJcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFudXBJc29sYXRpb24odmlld2VyRWxlbWVudCk7XHJcbiAgICAgIHRoaXMuY2xlYW51cFByaW50U3R5bGVzKCk7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgY2xlYW51cCk7XHJcbiAgICB9O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBjbGVhbnVwKTtcclxuXHJcbiAgICB3aW5kb3cucHJpbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhbGsgZnJvbSB0aGUgdmlld2VyIGVsZW1lbnQgdXAgdG8gPGJvZHk+LCBoaWRpbmcgYWxsIHNpYmxpbmdzXHJcbiAgICogYW5kIG1hcmtpbmcgYWxsIGFuY2VzdG9ycyBzbyB0aGVpciBsYXlvdXQgY2FuIGJlIHJlc2V0IGZvciBwcmludC5cclxuICAgKi9cclxuICBwcml2YXRlIGlzb2xhdGVGb3JQcmludCh2aWV3ZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWRkZW5FbGVtZW50cyA9IFtdO1xyXG4gICAgdGhpcy5hbmNlc3RvckVsZW1lbnRzID0gW107XHJcbiAgICBsZXQgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdmlld2VyRWxlbWVudDtcclxuXHJcbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgLy8gTWFyayB0aGUgYW5jZXN0b3IgKHRoZSBwYXJlbnQgaW4gdGhlIHBhdGgpIGZvciBsYXlvdXQgcmVzZXRcclxuICAgICAgICBwYXJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLXJ2LXByaW50LWFuY2VzdG9yJywgJycpO1xyXG4gICAgICAgIHRoaXMuYW5jZXN0b3JFbGVtZW50cy5wdXNoKHBhcmVudCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaWJsaW5nID0gcGFyZW50LmNoaWxkcmVuW2ldIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgaWYgKHNpYmxpbmcgIT09IGN1cnJlbnQgJiYgc2libGluZy50YWdOYW1lICE9PSAnU1RZTEUnICYmIHNpYmxpbmcudGFnTmFtZSAhPT0gJ1NDUklQVCcgJiYgc2libGluZy50YWdOYW1lICE9PSAnTElOSycpIHtcclxuICAgICAgICAgICAgc2libGluZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcnYtcHJpbnQtaGlkZScsICcnKTtcclxuICAgICAgICAgICAgdGhpcy5oaWRkZW5FbGVtZW50cy5wdXNoKHNpYmxpbmcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50ID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsc28gbWFyayBib2R5IGZvciBsYXlvdXQgcmVzZXRcclxuICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXJ2LXByaW50LWFuY2VzdG9yJywgJycpO1xyXG4gICAgdGhpcy5hbmNlc3RvckVsZW1lbnRzLnB1c2goZG9jdW1lbnQuYm9keSk7XHJcblxyXG4gICAgLy8gTWFyayBpbnRlcm5hbCB2aWV3ZXIgY2hyb21lICh0b29sYmFyLCBzaWRlYmFycykgZm9yIGhpZGluZ1xyXG4gICAgdmlld2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcnYtcHJpbnRpbmcnLCAndHJ1ZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwSXNvbGF0aW9uKHZpZXdlckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuaGlkZGVuRWxlbWVudHMpIHtcclxuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXJ2LXByaW50LWhpZGUnKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgZWwgb2YgdGhpcy5hbmNlc3RvckVsZW1lbnRzKSB7XHJcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1ydi1wcmludC1hbmNlc3RvcicpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWRkZW5FbGVtZW50cyA9IFtdO1xyXG4gICAgdGhpcy5hbmNlc3RvckVsZW1lbnRzID0gW107XHJcbiAgICB2aWV3ZXJFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1ydi1wcmludGluZycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RQcmludFN0eWxlcyhwYWdlU2V0dXA/OiBQYWdlU2V0dXApOiB2b2lkIHtcclxuICAgIC8vIFJlbW92ZSBleGlzdGluZyBwcmludCBzdHlsZXMgaWYgYW55XHJcbiAgICB0aGlzLmNsZWFudXBQcmludFN0eWxlcygpO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VSdWxlID0gdGhpcy5idWlsZFBhZ2VSdWxlKHBhZ2VTZXR1cCk7XHJcblxyXG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgc3R5bGUuaWQgPSB0aGlzLnByaW50U3R5bGVJZDtcclxuICAgIHN0eWxlLnRleHRDb250ZW50ID0gYFxyXG4gICAgICBAbWVkaWEgcHJpbnQge1xyXG4gICAgICAgICR7cGFnZVJ1bGV9XHJcblxyXG4gICAgICAgIC8qIEhpZGUgYWxsIHNpYmxpbmcgZWxlbWVudHMgYWxvbmcgdGhlIGFuY2VzdG9yIHBhdGggKi9cclxuICAgICAgICBbZGF0YS1ydi1wcmludC1oaWRlXSB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZXNldCBhbGwgYW5jZXN0b3IgY29udGFpbmVycyBzbyB0aGV5IGRvbid0IG9mZnNldCB0aGUgY29udGVudCAqL1xyXG4gICAgICAgIFtkYXRhLXJ2LXByaW50LWFuY2VzdG9yXSB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgY29sdW1uczogYXV0byAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgY29sdW1uLWdhcDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZ2FwOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBmbGV4OiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBIaWRlIHRvb2xiYXIgYW5kIHNpZGViYXJzIGluc2lkZSB0aGUgdmlld2VyICovXHJcbiAgICAgICAgcnYtdmlld2VyLXRvb2xiYXIsXHJcbiAgICAgICAgLnJ2LXNpZGViYXItd3JhcHBlcixcclxuICAgICAgICBydi10b2Mtc2lkZWJhcixcclxuICAgICAgICBydi10aHVtYm5haWwtc2lkZWJhcixcclxuICAgICAgICAucnYtc2VhcmNoLWhpZ2hsaWdodCB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZXNldCB2aWV3ZXIgbGF5b3V0IGZvciBwcmludCAqL1xyXG4gICAgICAgIFtkYXRhLXJ2LXByaW50aW5nXSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXZpZXdlci1yb290IHtcclxuICAgICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXZpZXdlci1ib2R5IHtcclxuICAgICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5ydi1wYWdlLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBhbGlnbi1pdGVtczogaW5pdGlhbCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlciB7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cztcclxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Utd3JhcHBlcjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJ2LXBhZ2Uge1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgYDtcclxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFBhZ2VSdWxlKHBhZ2VTZXR1cD86IFBhZ2VTZXR1cCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXBhZ2VTZXR1cCkge1xyXG4gICAgICByZXR1cm4gJ0BwYWdlIHsgc2l6ZTogQTQgcG9ydHJhaXQ7IG1hcmdpbjogMjUuNG1tOyB9JztcclxuICAgIH1cclxuXHJcbiAgICAvLyBCdWlsZCB0aGUgc2l6ZSB2YWx1ZVxyXG4gICAgY29uc3Qgc2l6ZVZhbHVlID0gdGhpcy5nZXRQYWdlU2l6ZUNTUyhwYWdlU2V0dXApO1xyXG5cclxuICAgIC8vIEJ1aWxkIHRoZSBtYXJnaW4gdmFsdWVcclxuICAgIGNvbnN0IG1hcmdpbnMgPSBwYWdlU2V0dXAubWFyZ2lucztcclxuICAgIGNvbnN0IG1hcmdpblZhbHVlID0gYCR7bWFyZ2lucy50b3B9bW0gJHttYXJnaW5zLnJpZ2h0fW1tICR7bWFyZ2lucy5ib3R0b219bW0gJHttYXJnaW5zLmxlZnR9bW1gO1xyXG5cclxuICAgIHJldHVybiBgQHBhZ2UgeyBzaXplOiAke3NpemVWYWx1ZX07IG1hcmdpbjogJHttYXJnaW5WYWx1ZX07IH1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYWdlU2l6ZUNTUyhwYWdlU2V0dXA6IFBhZ2VTZXR1cCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IHBhZ2VTZXR1cC5vcmllbnRhdGlvbiA9PT0gJ0xhbmRzY2FwZScgPyAnbGFuZHNjYXBlJyA6ICdwb3J0cmFpdCc7XHJcblxyXG4gICAgaWYgKHBhZ2VTZXR1cC5zaXplID09PSAnQ3VzdG9tJykge1xyXG4gICAgICAvLyBGb3IgY3VzdG9tIHNpemVzLCB1c2UgZXhwbGljaXQgd2lkdGggYW5kIGhlaWdodCBpbiBtbVxyXG4gICAgICBjb25zdCB3aWR0aCA9IHBhZ2VTZXR1cC53aWR0aCB8fCAyMTA7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IHBhZ2VTZXR1cC5oZWlnaHQgfHwgMjk3O1xyXG4gICAgICAvLyBDU1MgQHBhZ2Ugc2l6ZSB3aXRoIGV4cGxpY2l0IGRpbWVuc2lvbnMgZG9lc24ndCB1c2Ugb3JpZW50YXRpb24ga2V5d29yZDtcclxuICAgICAgLy8gaW5zdGVhZCB3ZSBzd2FwIHdpZHRoL2hlaWdodCBmb3IgbGFuZHNjYXBlXHJcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZScpIHtcclxuICAgICAgICByZXR1cm4gYCR7TWF0aC5tYXgod2lkdGgsIGhlaWdodCl9bW0gJHtNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KX1tbWA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGAke01hdGgubWluKHdpZHRoLCBoZWlnaHQpfW1tICR7TWF0aC5tYXgod2lkdGgsIGhlaWdodCl9bW1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5hbWVkIHBhZ2Ugc2l6ZXM6IEEzLCBBNCwgQTUsIGxldHRlciwgbGVnYWwgKyBvcmllbnRhdGlvblxyXG4gICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgJ0EyJzogJ0EzJywgIC8vIENTUyBAcGFnZSBkb2Vzbid0IHN1cHBvcnQgQTIsIGZhbGwgYmFjayB0byBjbG9zZXN0XHJcbiAgICAgICdBMyc6ICdBMycsXHJcbiAgICAgICdBNCc6ICdBNCcsXHJcbiAgICAgICdBNSc6ICdBNScsXHJcbiAgICAgICdMZXR0ZXInOiAnbGV0dGVyJyxcclxuICAgICAgJ0xlZ2FsJzogJ2xlZ2FsJyxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY3NzU2l6ZSA9IHNpemVNYXBbcGFnZVNldHVwLnNpemVdIHx8ICdBNCc7XHJcbiAgICByZXR1cm4gYCR7Y3NzU2l6ZX0gJHtvcmllbnRhdGlvbn1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwUHJpbnRTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJpbnRTdHlsZUlkKTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -2280,16 +2280,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2280
2280
|
class PrintService {
|
|
2281
2281
|
constructor() {
|
|
2282
2282
|
this.printStyleId = 'rv-print-styles';
|
|
2283
|
+
this.hiddenElements = [];
|
|
2284
|
+
this.ancestorElements = [];
|
|
2283
2285
|
}
|
|
2284
2286
|
print(viewerElement, pageSetup) {
|
|
2285
|
-
this.
|
|
2287
|
+
this.isolateForPrint(viewerElement);
|
|
2288
|
+
this.injectPrintStyles(pageSetup);
|
|
2289
|
+
// Cleanup after print dialog closes
|
|
2290
|
+
const cleanup = () => {
|
|
2291
|
+
this.cleanupIsolation(viewerElement);
|
|
2292
|
+
this.cleanupPrintStyles();
|
|
2293
|
+
window.removeEventListener('afterprint', cleanup);
|
|
2294
|
+
};
|
|
2295
|
+
window.addEventListener('afterprint', cleanup);
|
|
2286
2296
|
window.print();
|
|
2287
2297
|
}
|
|
2288
|
-
|
|
2298
|
+
/**
|
|
2299
|
+
* Walk from the viewer element up to <body>, hiding all siblings
|
|
2300
|
+
* and marking all ancestors so their layout can be reset for print.
|
|
2301
|
+
*/
|
|
2302
|
+
isolateForPrint(viewerElement) {
|
|
2303
|
+
this.hiddenElements = [];
|
|
2304
|
+
this.ancestorElements = [];
|
|
2305
|
+
let current = viewerElement;
|
|
2306
|
+
while (current && current !== document.body) {
|
|
2307
|
+
const parent = current.parentElement;
|
|
2308
|
+
if (parent) {
|
|
2309
|
+
// Mark the ancestor (the parent in the path) for layout reset
|
|
2310
|
+
parent.setAttribute('data-rv-print-ancestor', '');
|
|
2311
|
+
this.ancestorElements.push(parent);
|
|
2312
|
+
for (let i = 0; i < parent.children.length; i++) {
|
|
2313
|
+
const sibling = parent.children[i];
|
|
2314
|
+
if (sibling !== current && sibling.tagName !== 'STYLE' && sibling.tagName !== 'SCRIPT' && sibling.tagName !== 'LINK') {
|
|
2315
|
+
sibling.setAttribute('data-rv-print-hide', '');
|
|
2316
|
+
this.hiddenElements.push(sibling);
|
|
2317
|
+
}
|
|
2318
|
+
}
|
|
2319
|
+
}
|
|
2320
|
+
current = parent;
|
|
2321
|
+
}
|
|
2322
|
+
// Also mark body for layout reset
|
|
2323
|
+
document.body.setAttribute('data-rv-print-ancestor', '');
|
|
2324
|
+
this.ancestorElements.push(document.body);
|
|
2325
|
+
// Mark internal viewer chrome (toolbar, sidebars) for hiding
|
|
2326
|
+
viewerElement.setAttribute('data-rv-printing', 'true');
|
|
2327
|
+
}
|
|
2328
|
+
cleanupIsolation(viewerElement) {
|
|
2329
|
+
for (const el of this.hiddenElements) {
|
|
2330
|
+
el.removeAttribute('data-rv-print-hide');
|
|
2331
|
+
}
|
|
2332
|
+
for (const el of this.ancestorElements) {
|
|
2333
|
+
el.removeAttribute('data-rv-print-ancestor');
|
|
2334
|
+
}
|
|
2335
|
+
this.hiddenElements = [];
|
|
2336
|
+
this.ancestorElements = [];
|
|
2337
|
+
viewerElement.removeAttribute('data-rv-printing');
|
|
2338
|
+
}
|
|
2339
|
+
injectPrintStyles(pageSetup) {
|
|
2289
2340
|
// Remove existing print styles if any
|
|
2290
2341
|
this.cleanupPrintStyles();
|
|
2291
|
-
// Add a data attribute to identify the viewer for print
|
|
2292
|
-
viewerElement.setAttribute('data-rv-printing', 'true');
|
|
2293
2342
|
const pageRule = this.buildPageRule(pageSetup);
|
|
2294
2343
|
const style = document.createElement('style');
|
|
2295
2344
|
style.id = this.printStyleId;
|
|
@@ -2297,12 +2346,35 @@ class PrintService {
|
|
|
2297
2346
|
@media print {
|
|
2298
2347
|
${pageRule}
|
|
2299
2348
|
|
|
2300
|
-
/* Hide
|
|
2301
|
-
|
|
2349
|
+
/* Hide all sibling elements along the ancestor path */
|
|
2350
|
+
[data-rv-print-hide] {
|
|
2302
2351
|
display: none !important;
|
|
2303
2352
|
}
|
|
2304
2353
|
|
|
2305
|
-
/*
|
|
2354
|
+
/* Reset all ancestor containers so they don't offset the content */
|
|
2355
|
+
[data-rv-print-ancestor] {
|
|
2356
|
+
display: block !important;
|
|
2357
|
+
margin: 0 !important;
|
|
2358
|
+
padding: 0 !important;
|
|
2359
|
+
width: 100% !important;
|
|
2360
|
+
max-width: 100% !important;
|
|
2361
|
+
height: auto !important;
|
|
2362
|
+
position: static !important;
|
|
2363
|
+
overflow: visible !important;
|
|
2364
|
+
float: none !important;
|
|
2365
|
+
columns: auto !important;
|
|
2366
|
+
column-gap: 0 !important;
|
|
2367
|
+
gap: 0 !important;
|
|
2368
|
+
transform: none !important;
|
|
2369
|
+
grid-template-columns: none !important;
|
|
2370
|
+
grid-template-rows: none !important;
|
|
2371
|
+
flex: none !important;
|
|
2372
|
+
border: none !important;
|
|
2373
|
+
box-shadow: none !important;
|
|
2374
|
+
background: transparent !important;
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
/* Hide toolbar and sidebars inside the viewer */
|
|
2306
2378
|
rv-viewer-toolbar,
|
|
2307
2379
|
.rv-sidebar-wrapper,
|
|
2308
2380
|
rv-toc-sidebar,
|
|
@@ -2332,6 +2404,8 @@ class PrintService {
|
|
|
2332
2404
|
overflow: visible !important;
|
|
2333
2405
|
padding: 0 !important;
|
|
2334
2406
|
background: white !important;
|
|
2407
|
+
display: block !important;
|
|
2408
|
+
align-items: initial !important;
|
|
2335
2409
|
}
|
|
2336
2410
|
|
|
2337
2411
|
.rv-page-wrapper {
|
|
@@ -2351,13 +2425,6 @@ class PrintService {
|
|
|
2351
2425
|
}
|
|
2352
2426
|
`;
|
|
2353
2427
|
document.head.appendChild(style);
|
|
2354
|
-
// Cleanup after print
|
|
2355
|
-
const cleanup = () => {
|
|
2356
|
-
this.cleanupPrintStyles();
|
|
2357
|
-
viewerElement.removeAttribute('data-rv-printing');
|
|
2358
|
-
window.removeEventListener('afterprint', cleanup);
|
|
2359
|
-
};
|
|
2360
|
-
window.addEventListener('afterprint', cleanup);
|
|
2361
2428
|
}
|
|
2362
2429
|
buildPageRule(pageSetup) {
|
|
2363
2430
|
if (!pageSetup) {
|