pdfjs-viewer-element 2.6.0 → 2.6.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.
- package/README.md +7 -11
- package/dist/pdfjs-viewer-element.js +66 -55
- package/package.json +1 -1
- package/types/pdfjs-viewer-element.d.ts +2 -2
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ Using browser:
|
|
|
64
64
|
## Usage
|
|
65
65
|
|
|
66
66
|
```html
|
|
67
|
-
<pdfjs-viewer-element src="/
|
|
67
|
+
<pdfjs-viewer-element src="/file.pdf" viewer-path="/pdfjs-4.0.379-dist"></pdfjs-viewer-element>
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
## Attributes
|
|
@@ -100,21 +100,21 @@ Use `viewer-css-theme` attribute to set light or dark theme manually:
|
|
|
100
100
|
```html
|
|
101
101
|
<pdfjs-viewer-element
|
|
102
102
|
src="/file.pdf"
|
|
103
|
-
viewer-path="/
|
|
103
|
+
viewer-path="/pdfjs-4.0.379-dist"
|
|
104
104
|
viewer-css-theme="DARK">
|
|
105
105
|
</pdfjs-viewer-element>
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
## Viewer extra styles
|
|
109
109
|
|
|
110
|
-
You can add your own CSS rules to the viewer application using `viewer-extra-styles` attribute:
|
|
110
|
+
You can add your own CSS rules to the viewer application using `viewer-extra-styles` or `viewer-extra-styles-urls` attribute:
|
|
111
111
|
|
|
112
112
|
```html
|
|
113
|
-
<!-- Remove download button from viewer toolbar -->
|
|
114
113
|
<pdfjs-viewer-element
|
|
115
114
|
src="/file.pdf"
|
|
116
|
-
viewer-path="/
|
|
117
|
-
viewer-extra-styles="#
|
|
115
|
+
viewer-path="/pdfjs-4.0.379-dist"
|
|
116
|
+
viewer-extra-styles="#toolbarViewerMiddle { display: none; }"
|
|
117
|
+
viewer-extra-styles-urls="['/demo/extra-styles-one.css', '/demo/extra-styles-two.css']">
|
|
118
118
|
</pdfjs-viewer-element>
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -123,7 +123,7 @@ You can add your own CSS rules to the viewer application using `viewer-extra-sty
|
|
|
123
123
|
`initialize` - using this method you can access PDFViewerApplication and use methods and events of PDF.js default viewer
|
|
124
124
|
|
|
125
125
|
```html
|
|
126
|
-
<pdfjs-viewer-element viewer-path="/
|
|
126
|
+
<pdfjs-viewer-element viewer-path="/pdfjs-4.0.379-dist"></pdfjs-viewer-element>
|
|
127
127
|
```
|
|
128
128
|
|
|
129
129
|
```javascript
|
|
@@ -132,10 +132,6 @@ const viewer = document.querySelector('pdfjs-viewer-element')
|
|
|
132
132
|
const viewerApp = await viewer.initialize()
|
|
133
133
|
// Open PDF file data using Uint8Array instead of URL
|
|
134
134
|
viewerApp.open({ data: pdfData })
|
|
135
|
-
// Use event bus to handle viewer application events
|
|
136
|
-
viewerApp.eventBus.on('pagesloaded', () => {
|
|
137
|
-
console.log('Viewer pages loaded')
|
|
138
|
-
})
|
|
139
135
|
```
|
|
140
136
|
|
|
141
137
|
## License
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const w = (m, e) => new Promise((
|
|
2
|
-
let
|
|
3
|
-
if (
|
|
4
|
-
r
|
|
1
|
+
const w = (m, e) => new Promise((s) => {
|
|
2
|
+
let r = e.querySelector(m);
|
|
3
|
+
if (r) {
|
|
4
|
+
s(r);
|
|
5
5
|
return;
|
|
6
6
|
}
|
|
7
|
-
new MutationObserver((
|
|
8
|
-
Array.from(e.querySelectorAll(m)).forEach((
|
|
9
|
-
|
|
7
|
+
new MutationObserver((n, t) => {
|
|
8
|
+
Array.from(e.querySelectorAll(m)).forEach((i) => {
|
|
9
|
+
s(i), t.disconnect();
|
|
10
10
|
});
|
|
11
11
|
}).observe(e, {
|
|
12
12
|
childList: !0,
|
|
@@ -15,31 +15,31 @@ const w = (m, e) => new Promise((r) => {
|
|
|
15
15
|
}), g = {
|
|
16
16
|
trailing: !0
|
|
17
17
|
};
|
|
18
|
-
function
|
|
19
|
-
if (
|
|
18
|
+
function v(m, e = 25, s = {}) {
|
|
19
|
+
if (s = { ...g, ...s }, !Number.isFinite(e))
|
|
20
20
|
throw new TypeError("Expected `wait` to be a finite number");
|
|
21
|
-
let
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
const u =
|
|
25
|
-
return
|
|
21
|
+
let r, n, t = [], i, a;
|
|
22
|
+
const o = (l, h) => (i = b(m, l, h), i.finally(() => {
|
|
23
|
+
if (i = null, s.trailing && a && !n) {
|
|
24
|
+
const u = o(l, a);
|
|
25
|
+
return a = null, u;
|
|
26
26
|
}
|
|
27
|
-
}),
|
|
27
|
+
}), i);
|
|
28
28
|
return function(...l) {
|
|
29
|
-
return
|
|
30
|
-
const u = !
|
|
31
|
-
clearTimeout(
|
|
32
|
-
|
|
33
|
-
const p =
|
|
34
|
-
for (const y of
|
|
29
|
+
return i ? (s.trailing && (a = l), i) : new Promise((h) => {
|
|
30
|
+
const u = !n && s.leading;
|
|
31
|
+
clearTimeout(n), n = setTimeout(() => {
|
|
32
|
+
n = null;
|
|
33
|
+
const p = s.leading ? r : o(this, l);
|
|
34
|
+
for (const y of t)
|
|
35
35
|
y(p);
|
|
36
|
-
|
|
37
|
-
}, e), u ? (
|
|
36
|
+
t = [];
|
|
37
|
+
}, e), u ? (r = o(this, l), h(r)) : t.push(h);
|
|
38
38
|
});
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
async function
|
|
42
|
-
return await m.apply(e,
|
|
41
|
+
async function b(m, e, s) {
|
|
42
|
+
return await m.apply(e, s);
|
|
43
43
|
}
|
|
44
44
|
const c = {
|
|
45
45
|
viewerPath: "/pdfjs",
|
|
@@ -53,47 +53,58 @@ const c = {
|
|
|
53
53
|
locale: "",
|
|
54
54
|
textLayer: "",
|
|
55
55
|
viewerCssTheme: "AUTOMATIC",
|
|
56
|
-
viewerExtraStyles: ""
|
|
56
|
+
viewerExtraStyles: "",
|
|
57
|
+
viewerExtraStylesUrls: ""
|
|
57
58
|
}, d = {
|
|
58
59
|
AUTOMATIC: 0,
|
|
59
60
|
// Default value.
|
|
60
61
|
LIGHT: 1,
|
|
61
62
|
DARK: 2
|
|
62
|
-
}, A = ["src", "viewer-path", "locale", "viewer-css-theme", "viewer-extra-styles"];
|
|
63
|
+
}, A = ["src", "viewer-path", "locale", "text-layer", "viewer-css-theme", "viewer-extra-styles", "viewer-extra-styles-urls"];
|
|
63
64
|
class f extends HTMLElement {
|
|
64
65
|
constructor() {
|
|
65
|
-
super(), this.onIframeReady =
|
|
66
|
-
await w("iframe", this.shadowRoot),
|
|
67
|
-
}, 0, { leading: !0 }), this.setViewerExtraStyles = (
|
|
68
|
-
var
|
|
69
|
-
if (!
|
|
70
|
-
(
|
|
66
|
+
super(), this.onIframeReady = v(async (r) => {
|
|
67
|
+
await w("iframe", this.shadowRoot), r();
|
|
68
|
+
}, 0, { leading: !0 }), this.setViewerExtraStyles = (r, n = "extra") => {
|
|
69
|
+
var i, a, o, l, h;
|
|
70
|
+
if (!r) {
|
|
71
|
+
(a = (i = this.iframe.contentDocument) == null ? void 0 : i.head.querySelector(`style[${n}]`)) == null || a.remove();
|
|
71
72
|
return;
|
|
72
73
|
}
|
|
73
|
-
if (((l = (
|
|
74
|
+
if (((l = (o = this.iframe.contentDocument) == null ? void 0 : o.head.querySelector(`style[${n}]`)) == null ? void 0 : l.innerHTML) === r)
|
|
74
75
|
return;
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
}, this.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
const t = document.createElement("style");
|
|
77
|
+
t.innerHTML = r, t.setAttribute(n, ""), (h = this.iframe.contentDocument) == null || h.head.appendChild(t);
|
|
78
|
+
}, this.injectExtraStylesLinks = (r) => {
|
|
79
|
+
if (!r)
|
|
80
|
+
return;
|
|
81
|
+
r.replace(/'|]|\[/g, "").split(",").map((t) => t.trim()).forEach((t) => {
|
|
82
|
+
var o, l;
|
|
83
|
+
if ((o = this.iframe.contentDocument) == null ? void 0 : o.head.querySelector(`link[href="${t}"]`))
|
|
84
|
+
return;
|
|
85
|
+
const a = document.createElement("link");
|
|
86
|
+
a.rel = "stylesheet", a.href = t, (l = this.iframe.contentDocument) == null || l.head.appendChild(a);
|
|
87
|
+
});
|
|
88
|
+
}, this.initialize = () => new Promise(async (r) => {
|
|
89
|
+
var n;
|
|
90
|
+
await w("iframe", this.shadowRoot), (n = this.iframe) == null || n.addEventListener("load", async () => {
|
|
91
|
+
var t, i, a;
|
|
92
|
+
await ((i = (t = this.iframe.contentWindow) == null ? void 0 : t.PDFViewerApplication) == null ? void 0 : i.initializedPromise), r((a = this.iframe.contentWindow) == null ? void 0 : a.PDFViewerApplication);
|
|
82
93
|
}, { once: !0 });
|
|
83
94
|
});
|
|
84
|
-
const e = this.attachShadow({ mode: "open" }),
|
|
85
|
-
|
|
95
|
+
const e = this.attachShadow({ mode: "open" }), s = document.createElement("template");
|
|
96
|
+
s.innerHTML = `
|
|
86
97
|
<style>:host{width:100%;display:block;overflow:hidden}:host iframe{height:100%}</style>
|
|
87
98
|
<iframe frameborder="0" width="100%" loading="lazy"></iframe>
|
|
88
|
-
`, e.appendChild(
|
|
99
|
+
`, e.appendChild(s.content.cloneNode(!0));
|
|
89
100
|
}
|
|
90
101
|
static get observedAttributes() {
|
|
91
|
-
return ["src", "viewer-path", "locale", "page", "search", "phrase", "zoom", "pagemode", "text-layer", "viewer-css-theme", "viewer-extra-styles"];
|
|
102
|
+
return ["src", "viewer-path", "locale", "page", "search", "phrase", "zoom", "pagemode", "text-layer", "viewer-css-theme", "viewer-extra-styles", "viewer-extra-styles-urls"];
|
|
92
103
|
}
|
|
93
104
|
connectedCallback() {
|
|
94
105
|
this.iframe = this.shadowRoot.querySelector("iframe"), document.addEventListener("webviewerloaded", async () => {
|
|
95
|
-
var e,
|
|
96
|
-
this.setCssTheme(this.getCssThemeOption()), this.setViewerExtraStyles(this.getAttribute("viewer-extra-styles")), this.getAttribute("src") !== c.src && ((
|
|
106
|
+
var e, s, r, n, t, i, a, o;
|
|
107
|
+
this.setCssTheme(this.getCssThemeOption()), this.injectExtraStylesLinks(this.getAttribute("viewer-extra-styles-urls") ?? c.viewerExtraStylesUrls), this.setViewerExtraStyles(this.getAttribute("viewer-extra-styles") ?? c.viewerExtraStyles), this.getAttribute("src") !== c.src && ((s = (e = this.iframe.contentWindow) == null ? void 0 : e.PDFViewerApplicationOptions) == null || s.set("defaultUrl", "")), (n = (r = this.iframe.contentWindow) == null ? void 0 : r.PDFViewerApplicationOptions) == null || n.set("disablePreferences", !0), (i = (t = this.iframe.contentWindow) == null ? void 0 : t.PDFViewerApplicationOptions) == null || i.set("pdfBugEnabled", !0), (o = (a = this.iframe.contentWindow) == null ? void 0 : a.PDFViewerApplicationOptions) == null || o.set("eventBusDispatchToDOM", !0);
|
|
97
108
|
});
|
|
98
109
|
}
|
|
99
110
|
attributeChangedCallback(e) {
|
|
@@ -106,8 +117,8 @@ class f extends HTMLElement {
|
|
|
106
117
|
this.onIframeReady(() => this.mountViewer(this.getIframeSrc()));
|
|
107
118
|
}
|
|
108
119
|
getIframeSrc() {
|
|
109
|
-
const e = this.getFullPath(this.getAttribute("src") || c.src),
|
|
110
|
-
return `${
|
|
120
|
+
const e = this.getFullPath(this.getAttribute("src") || c.src), s = this.getFullPath(this.getAttribute("viewer-path") || c.viewerPath), r = this.getAttribute("page") || c.page, n = this.getAttribute("search") || c.search, t = this.getAttribute("phrase") || c.phrase, i = this.getAttribute("zoom") || c.zoom, a = this.getAttribute("pagemode") || c.pagemode, o = this.getAttribute("locale") || c.locale, l = this.getAttribute("text-layer") || c.textLayer, h = this.getAttribute("viewer-css-theme") || c.viewerCssTheme, u = !!(this.getAttribute("viewer-extra-styles") || c.viewerExtraStyles);
|
|
121
|
+
return `${s}${c.viewerEntry}?file=${encodeURIComponent(e)}#page=${r}&zoom=${i}&pagemode=${a}&search=${n}&phrase=${t}&textLayer=${l}${o ? "&locale=" + o : ""}&viewerCssTheme=${h}&viewerExtraStyles=${u}`;
|
|
111
122
|
}
|
|
112
123
|
mountViewer(e) {
|
|
113
124
|
!e || !this.iframe || (this.shadowRoot.replaceChild(this.iframe.cloneNode(), this.iframe), this.iframe = this.shadowRoot.querySelector("iframe"), this.iframe.src = e);
|
|
@@ -120,17 +131,17 @@ class f extends HTMLElement {
|
|
|
120
131
|
return Object.keys(d).includes(e) ? d[e] : d[c.viewerCssTheme];
|
|
121
132
|
}
|
|
122
133
|
setCssTheme(e) {
|
|
123
|
-
var
|
|
134
|
+
var s, r, n;
|
|
124
135
|
if (e === d.DARK) {
|
|
125
|
-
const
|
|
136
|
+
const t = (s = this.iframe.contentDocument) == null ? void 0 : s.styleSheets[0], i = (t == null ? void 0 : t.cssRules) || [], a = Object.keys(i).filter((o) => {
|
|
126
137
|
var l;
|
|
127
|
-
return ((l =
|
|
128
|
-
}).map((
|
|
138
|
+
return ((l = i[Number(o)]) == null ? void 0 : l.conditionText) === "(prefers-color-scheme: dark)";
|
|
139
|
+
}).map((o) => i[Number(o)].cssText.split(`@media (prefers-color-scheme: dark) {
|
|
129
140
|
`)[1].split(`
|
|
130
141
|
}`)[0]);
|
|
131
|
-
this.setViewerExtraStyles(
|
|
142
|
+
this.setViewerExtraStyles(a.join(""), "theme");
|
|
132
143
|
} else
|
|
133
|
-
(
|
|
144
|
+
(n = (r = this.iframe.contentDocument) == null ? void 0 : r.head.querySelector("style[theme]")) == null || n.remove();
|
|
134
145
|
}
|
|
135
146
|
}
|
|
136
147
|
window.customElements.get("pdfjs-viewer-element") || (window.PdfjsViewerElement = f, window.customElements.define("pdfjs-viewer-element", f));
|
package/package.json
CHANGED
|
@@ -17,6 +17,7 @@ export declare class PdfjsViewerElement extends HTMLElement {
|
|
|
17
17
|
private getCssThemeOption;
|
|
18
18
|
private setCssTheme;
|
|
19
19
|
private setViewerExtraStyles;
|
|
20
|
+
private injectExtraStylesLinks;
|
|
20
21
|
initialize: () => Promise<PdfjsViewerElementIframeWindow['PDFViewerApplication']>;
|
|
21
22
|
}
|
|
22
23
|
declare global {
|
|
@@ -31,9 +32,8 @@ export interface PdfjsViewerElementIframeWindow extends Window {
|
|
|
31
32
|
PDFViewerApplication: {
|
|
32
33
|
initializedPromise: Promise<void>;
|
|
33
34
|
initialized: boolean;
|
|
34
|
-
open: (data: Uint8Array) => void;
|
|
35
35
|
eventBus: Record<string, any>;
|
|
36
|
-
|
|
36
|
+
open: (data: Uint8Array) => void;
|
|
37
37
|
};
|
|
38
38
|
PDFViewerApplicationOptions: {
|
|
39
39
|
set: (name: string, value: string | boolean | number) => void;
|