react-book-reader 1.0.0
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/LICENSE +201 -0
- package/README.md +23 -0
- package/lib/comic-book-D2H5riQt.js +29 -0
- package/lib/epub-BZxdKHA1.js +730 -0
- package/lib/fb2-DHUjllK8.js +263 -0
- package/lib/fflate-9VGFqnqw.js +162 -0
- package/lib/fixed-layout-DpOZsuor.js +223 -0
- package/lib/index-DjYU7mCB.js +1720 -0
- package/lib/mobi-Di0D6QEl.js +1036 -0
- package/lib/paginator-zvlJVmJl.js +722 -0
- package/lib/pdf-7wZ7-Bhj.js +563 -0
- package/lib/react-book-reader.es.js +7 -0
- package/lib/react-book-reader.umd.js +715 -0
- package/lib/search-Dw1WQJVD.js +78 -0
- package/lib/tts-CuDZu6rz.js +242 -0
- package/lib/zip-BLPDOR3v.js +1614 -0
- package/package.json +43 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
const N = (a) => a ? a.replace(/[\t\n\f\r ]+/g, " ").replace(/^[\t\n\f\r ]+/, "").replace(/[\t\n\f\r ]+$/, "") : "", d = (a) => N(a == null ? void 0 : a.textContent), w = {
|
|
2
|
+
XLINK: "http://www.w3.org/1999/xlink",
|
|
3
|
+
EPUB: "http://www.idpf.org/2007/ops"
|
|
4
|
+
}, S = {
|
|
5
|
+
XML: "application/xml",
|
|
6
|
+
XHTML: "application/xhtml+xml"
|
|
7
|
+
}, m = {
|
|
8
|
+
strong: ["strong", "self"],
|
|
9
|
+
emphasis: ["em", "self"],
|
|
10
|
+
style: ["span", "self"],
|
|
11
|
+
a: "anchor",
|
|
12
|
+
strikethrough: ["s", "self"],
|
|
13
|
+
sub: ["sub", "self"],
|
|
14
|
+
sup: ["sup", "self"],
|
|
15
|
+
code: ["code", "self"],
|
|
16
|
+
image: "image"
|
|
17
|
+
}, D = {
|
|
18
|
+
tr: ["tr", ["align"]],
|
|
19
|
+
th: ["th", ["colspan", "rowspan", "align", "valign"]],
|
|
20
|
+
td: ["td", ["colspan", "rowspan", "align", "valign"]]
|
|
21
|
+
}, E = {
|
|
22
|
+
epigraph: ["blockquote"],
|
|
23
|
+
subtitle: ["h2", m],
|
|
24
|
+
"text-author": ["p", m],
|
|
25
|
+
date: ["p", m],
|
|
26
|
+
stanza: "stanza"
|
|
27
|
+
}, T = {
|
|
28
|
+
title: ["header", {
|
|
29
|
+
p: ["h1", m],
|
|
30
|
+
"empty-line": ["br"]
|
|
31
|
+
}],
|
|
32
|
+
epigraph: ["blockquote", "self"],
|
|
33
|
+
image: "image",
|
|
34
|
+
annotation: ["aside"],
|
|
35
|
+
section: ["section", "self"],
|
|
36
|
+
p: ["p", m],
|
|
37
|
+
poem: ["blockquote", E],
|
|
38
|
+
subtitle: ["h2", m],
|
|
39
|
+
cite: ["blockquote", "self"],
|
|
40
|
+
"empty-line": ["br"],
|
|
41
|
+
table: ["table", D],
|
|
42
|
+
"text-author": ["p", m]
|
|
43
|
+
};
|
|
44
|
+
E.epigraph.push(T);
|
|
45
|
+
const $ = {
|
|
46
|
+
image: "image",
|
|
47
|
+
title: ["section", {
|
|
48
|
+
p: ["h1", m],
|
|
49
|
+
"empty-line": ["br"]
|
|
50
|
+
}],
|
|
51
|
+
epigraph: ["section", T],
|
|
52
|
+
section: ["section", T]
|
|
53
|
+
}, k = (a) => {
|
|
54
|
+
const t = a.getAttributeNS(w.XLINK, "href"), [, o] = t.split("#"), s = a.getRootNode().getElementById(o);
|
|
55
|
+
return s ? `data:${s.getAttribute("content-type")};base64,${s.textContent}` : t;
|
|
56
|
+
};
|
|
57
|
+
class X {
|
|
58
|
+
constructor(t) {
|
|
59
|
+
this.fb2 = t, this.doc = document.implementation.createDocument(w.XHTML, "html");
|
|
60
|
+
}
|
|
61
|
+
image(t) {
|
|
62
|
+
const o = this.doc.createElement("img");
|
|
63
|
+
return o.alt = t.getAttribute("alt"), o.title = t.getAttribute("title"), o.setAttribute("src", k(t)), o;
|
|
64
|
+
}
|
|
65
|
+
anchor(t) {
|
|
66
|
+
const o = this.convert(t, { a: ["a", m] });
|
|
67
|
+
return o.setAttribute("href", t.getAttributeNS(w.XLINK, "href")), t.getAttribute("type") === "note" && o.setAttributeNS(w.EPUB, "epub:type", "noteref"), o;
|
|
68
|
+
}
|
|
69
|
+
stanza(t) {
|
|
70
|
+
const o = this.convert(t, {
|
|
71
|
+
stanza: ["p", {
|
|
72
|
+
title: ["header", {
|
|
73
|
+
p: ["strong", m],
|
|
74
|
+
"empty-line": ["br"]
|
|
75
|
+
}],
|
|
76
|
+
subtitle: ["p", m]
|
|
77
|
+
}]
|
|
78
|
+
});
|
|
79
|
+
for (const s of t.children)
|
|
80
|
+
s.nodeName === "v" && (o.append(this.doc.createTextNode(s.textContent)), o.append(this.doc.createElement("br")));
|
|
81
|
+
return o;
|
|
82
|
+
}
|
|
83
|
+
convert(t, o) {
|
|
84
|
+
if (t.nodeType === 3)
|
|
85
|
+
return this.doc.createTextNode(t.textContent);
|
|
86
|
+
if (t.nodeType === 4)
|
|
87
|
+
return this.doc.createCDATASection(t.textContent);
|
|
88
|
+
if (t.nodeType === 8)
|
|
89
|
+
return this.doc.createComment(t.textContent);
|
|
90
|
+
const s = o == null ? void 0 : o[t.nodeName];
|
|
91
|
+
if (!s)
|
|
92
|
+
return null;
|
|
93
|
+
if (typeof s == "string")
|
|
94
|
+
return this[s](t);
|
|
95
|
+
const [p, c] = s, u = this.doc.createElement(p);
|
|
96
|
+
if (t.id && (u.id = t.id), u.classList.add(t.nodeName), Array.isArray(c))
|
|
97
|
+
for (const g of c)
|
|
98
|
+
u.setAttribute(g, t.getAttribute(g));
|
|
99
|
+
const y = c === "self" ? o : Array.isArray(c) ? null : c;
|
|
100
|
+
let b = t.firstChild;
|
|
101
|
+
for (; b; ) {
|
|
102
|
+
const g = this.convert(b, y);
|
|
103
|
+
g && u.append(g), b = b.nextSibling;
|
|
104
|
+
}
|
|
105
|
+
return u;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const z = async (a) => {
|
|
109
|
+
var u;
|
|
110
|
+
const t = await a.arrayBuffer(), o = new TextDecoder("utf-8").decode(t), s = new DOMParser(), p = s.parseFromString(o, S.XML), c = p.xmlEncoding || ((u = o.match(/^<\?xml\s+version\s*=\s*["']1.\d+"\s+encoding\s*=\s*["']([A-Za-z0-9._-]*)["']/)) == null ? void 0 : u[1]);
|
|
111
|
+
if (c && c.toLowerCase() !== "utf-8") {
|
|
112
|
+
const y = new TextDecoder(c).decode(t);
|
|
113
|
+
return s.parseFromString(y, S.XML);
|
|
114
|
+
}
|
|
115
|
+
return p;
|
|
116
|
+
}, O = URL.createObjectURL(new Blob([`
|
|
117
|
+
@namespace epub "http://www.idpf.org/2007/ops";
|
|
118
|
+
body > img, section > img {
|
|
119
|
+
display: block;
|
|
120
|
+
margin: auto;
|
|
121
|
+
}
|
|
122
|
+
.title h1 {
|
|
123
|
+
text-align: center;
|
|
124
|
+
}
|
|
125
|
+
body > section > .title, body.notesBodyType > .title {
|
|
126
|
+
margin: 3em 0;
|
|
127
|
+
}
|
|
128
|
+
body.notesBodyType > section .title h1 {
|
|
129
|
+
text-align: start;
|
|
130
|
+
}
|
|
131
|
+
body.notesBodyType > section .title {
|
|
132
|
+
margin: 1em 0;
|
|
133
|
+
}
|
|
134
|
+
p {
|
|
135
|
+
text-indent: 1em;
|
|
136
|
+
margin: 0;
|
|
137
|
+
}
|
|
138
|
+
:not(p) + p, p:first-child {
|
|
139
|
+
text-indent: 0;
|
|
140
|
+
}
|
|
141
|
+
.poem p {
|
|
142
|
+
text-indent: 0;
|
|
143
|
+
margin: 1em 0;
|
|
144
|
+
}
|
|
145
|
+
.text-author, .date {
|
|
146
|
+
text-align: end;
|
|
147
|
+
}
|
|
148
|
+
.text-author:before {
|
|
149
|
+
content: "—";
|
|
150
|
+
}
|
|
151
|
+
table {
|
|
152
|
+
border-collapse: collapse;
|
|
153
|
+
}
|
|
154
|
+
td, th {
|
|
155
|
+
padding: .25em;
|
|
156
|
+
}
|
|
157
|
+
a[epub|type~="noteref"] {
|
|
158
|
+
font-size: .75em;
|
|
159
|
+
vertical-align: super;
|
|
160
|
+
}
|
|
161
|
+
body:not(.notesBodyType) > .title, body:not(.notesBodyType) > .epigraph {
|
|
162
|
+
margin: 3em 0;
|
|
163
|
+
}
|
|
164
|
+
`], { type: "text/css" })), I = (a) => `<?xml version="1.0" encoding="utf-8"?>
|
|
165
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
166
|
+
<head><link href="${O}" rel="stylesheet" type="text/css"/></head>
|
|
167
|
+
<body>${a}</body>
|
|
168
|
+
</html>`, v = "data-foliate-id", H = async (a) => {
|
|
169
|
+
const t = {}, o = await z(a), s = new X(o), p = (e) => o.querySelector(e), c = (e) => [...o.querySelectorAll(e)], u = (e) => {
|
|
170
|
+
const n = d(e.querySelector("nickname"));
|
|
171
|
+
if (n)
|
|
172
|
+
return n;
|
|
173
|
+
const r = d(e.querySelector("first-name")), i = d(e.querySelector("middle-name")), l = d(e.querySelector("last-name")), f = [r, i, l].filter((h) => h).join(" "), x = l ? [l, [r, i].filter((h) => h).join(" ")].join(", ") : null;
|
|
174
|
+
return { name: f, sortAs: x };
|
|
175
|
+
}, y = (e) => (e == null ? void 0 : e.getAttribute("value")) ?? d(e), b = p("title-info annotation");
|
|
176
|
+
if (t.metadata = {
|
|
177
|
+
title: d(p("title-info book-title")),
|
|
178
|
+
identifier: d(p("document-info id")),
|
|
179
|
+
language: d(p("title-info lang")),
|
|
180
|
+
author: c("title-info author").map(u),
|
|
181
|
+
translator: c("title-info translator").map(u),
|
|
182
|
+
producer: c("document-info author").map(u).concat(c("document-info program-used").map(d)),
|
|
183
|
+
publisher: d(p("publish-info publisher")),
|
|
184
|
+
published: y(p("title-info date")),
|
|
185
|
+
modified: y(p("document-info date")),
|
|
186
|
+
description: b ? s.convert(
|
|
187
|
+
b,
|
|
188
|
+
{ annotation: ["div", T] }
|
|
189
|
+
).innerHTML : null,
|
|
190
|
+
subject: c("title-info genre").map(d)
|
|
191
|
+
}, p("coverpage image")) {
|
|
192
|
+
const e = k(p("coverpage image"));
|
|
193
|
+
t.getCover = () => fetch(e).then((n) => n.blob());
|
|
194
|
+
} else
|
|
195
|
+
t.getCover = () => null;
|
|
196
|
+
const g = Array.from(o.querySelectorAll("body"), (e) => {
|
|
197
|
+
const n = s.convert(e, { body: ["body", $] });
|
|
198
|
+
return [Array.from(n.children, (r) => {
|
|
199
|
+
const i = [r, ...r.querySelectorAll("[id]")].map((l) => l.id);
|
|
200
|
+
return { el: r, ids: i };
|
|
201
|
+
}), n];
|
|
202
|
+
}), C = [], q = g[0][0].map(({ el: e, ids: n }) => {
|
|
203
|
+
const r = Array.from(
|
|
204
|
+
e.querySelectorAll(":scope > section > .title"),
|
|
205
|
+
(i, l) => (i.setAttribute(v, l), { title: d(i), index: l })
|
|
206
|
+
);
|
|
207
|
+
return { ids: n, titles: r, el: e };
|
|
208
|
+
}).concat(g.slice(1).map(([e, n]) => {
|
|
209
|
+
const r = e.map((i) => i.ids).flat();
|
|
210
|
+
return n.classList.add("notesBodyType"), { ids: r, el: n, linear: "no" };
|
|
211
|
+
})).map(({ ids: e, titles: n, el: r, linear: i }) => {
|
|
212
|
+
var M;
|
|
213
|
+
const l = I(r.outerHTML), f = new Blob([l], { type: S.XHTML }), x = URL.createObjectURL(f);
|
|
214
|
+
C.push(x);
|
|
215
|
+
const h = N(
|
|
216
|
+
((M = r.querySelector(".title, .subtitle, p")) == null ? void 0 : M.textContent) ?? (r.classList.contains("title") ? r.textContent : "")
|
|
217
|
+
);
|
|
218
|
+
return {
|
|
219
|
+
ids: e,
|
|
220
|
+
title: h,
|
|
221
|
+
titles: n,
|
|
222
|
+
load: () => x,
|
|
223
|
+
createDocument: () => new DOMParser().parseFromString(l, S.XHTML),
|
|
224
|
+
// doo't count image data as it'd skew the size too much
|
|
225
|
+
size: f.size - Array.from(
|
|
226
|
+
r.querySelectorAll("[src]"),
|
|
227
|
+
(L) => {
|
|
228
|
+
var A;
|
|
229
|
+
return ((A = L.getAttribute("src")) == null ? void 0 : A.length) ?? 0;
|
|
230
|
+
}
|
|
231
|
+
).reduce((L, A) => L + A, 0),
|
|
232
|
+
linear: i
|
|
233
|
+
};
|
|
234
|
+
}), B = /* @__PURE__ */ new Map();
|
|
235
|
+
return t.sections = q.map((e, n) => {
|
|
236
|
+
const { ids: r, load: i, createDocument: l, size: f, linear: x } = e;
|
|
237
|
+
for (const h of r)
|
|
238
|
+
h && B.set(h, n);
|
|
239
|
+
return { id: n, load: i, createDocument: l, size: f, linear: x };
|
|
240
|
+
}), t.toc = q.map(({ title: e, titles: n }, r) => {
|
|
241
|
+
const i = r.toString();
|
|
242
|
+
return {
|
|
243
|
+
label: e,
|
|
244
|
+
href: i,
|
|
245
|
+
subitems: n != null && n.length ? n.map(({ title: l, index: f }) => ({
|
|
246
|
+
label: l,
|
|
247
|
+
href: `${i}#${f}`
|
|
248
|
+
})) : null
|
|
249
|
+
};
|
|
250
|
+
}).filter((e) => e), t.resolveHref = (e) => {
|
|
251
|
+
const [n, r] = e.split("#");
|
|
252
|
+
return n ? { index: Number(n), anchor: (i) => i.querySelector(`[${v}="${r}"]`) } : { index: B.get(r), anchor: (i) => i.getElementById(r) };
|
|
253
|
+
}, t.splitTOCHref = (e) => {
|
|
254
|
+
var n;
|
|
255
|
+
return ((n = e == null ? void 0 : e.split("#")) == null ? void 0 : n.map((r) => Number(r))) ?? [];
|
|
256
|
+
}, t.getTOCFragment = (e, n) => e.querySelector(`[${v}="${n}"]`), t.destroy = () => {
|
|
257
|
+
for (const e of C)
|
|
258
|
+
URL.revokeObjectURL(e);
|
|
259
|
+
}, t;
|
|
260
|
+
};
|
|
261
|
+
export {
|
|
262
|
+
H as makeFB2
|
|
263
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
var c = Uint8Array, S = Uint16Array, Y = Uint32Array, r1 = new c([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]), n1 = new c([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]), i1 = new c([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), e1 = function(n, e) {
|
|
2
|
+
for (var r = new S(31), v = 0; v < 31; ++v)
|
|
3
|
+
r[v] = e += 1 << n[v - 1];
|
|
4
|
+
var t = new Y(r[30]);
|
|
5
|
+
for (v = 1; v < 30; ++v)
|
|
6
|
+
for (var u = r[v]; u < r[v + 1]; ++u)
|
|
7
|
+
t[u] = u - r[v] << 5 | v;
|
|
8
|
+
return [r, t];
|
|
9
|
+
}, a1 = e1(r1, 2), t1 = a1[0], w1 = a1[1];
|
|
10
|
+
t1[28] = 258, w1[258] = 28;
|
|
11
|
+
for (var b1 = e1(n1, 0)[0], Z = new S(32768), f = 0; f < 32768; ++f) {
|
|
12
|
+
var x = (43690 & f) >>> 1 | (21845 & f) << 1;
|
|
13
|
+
x = (61680 & (x = (52428 & x) >>> 2 | (13107 & x) << 2)) >>> 4 | (3855 & x) << 4, Z[f] = ((65280 & x) >>> 8 | (255 & x) << 8) >>> 1;
|
|
14
|
+
}
|
|
15
|
+
var L = function(n, e, r) {
|
|
16
|
+
for (var v = n.length, t = 0, u = new S(e); t < v; ++t)
|
|
17
|
+
n[t] && ++u[n[t] - 1];
|
|
18
|
+
var s, b = new S(e);
|
|
19
|
+
for (t = 0; t < e; ++t)
|
|
20
|
+
b[t] = b[t - 1] + u[t - 1] << 1;
|
|
21
|
+
if (r) {
|
|
22
|
+
s = new S(1 << e);
|
|
23
|
+
var a = 15 - e;
|
|
24
|
+
for (t = 0; t < v; ++t)
|
|
25
|
+
if (n[t])
|
|
26
|
+
for (var o = t << 4 | n[t], l = e - n[t], E = b[n[t] - 1]++ << l, m = E | (1 << l) - 1; E <= m; ++E)
|
|
27
|
+
s[Z[E] >>> a] = o;
|
|
28
|
+
} else
|
|
29
|
+
for (s = new S(v), t = 0; t < v; ++t)
|
|
30
|
+
n[t] && (s[t] = Z[b[n[t] - 1]++] >>> 15 - n[t]);
|
|
31
|
+
return s;
|
|
32
|
+
}, M = new c(288);
|
|
33
|
+
for (f = 0; f < 144; ++f)
|
|
34
|
+
M[f] = 8;
|
|
35
|
+
for (f = 144; f < 256; ++f)
|
|
36
|
+
M[f] = 9;
|
|
37
|
+
for (f = 256; f < 280; ++f)
|
|
38
|
+
M[f] = 7;
|
|
39
|
+
for (f = 280; f < 288; ++f)
|
|
40
|
+
M[f] = 8;
|
|
41
|
+
var v1 = new c(32);
|
|
42
|
+
for (f = 0; f < 32; ++f)
|
|
43
|
+
v1[f] = 5;
|
|
44
|
+
var l1 = L(M, 9, 1), h1 = L(v1, 5, 1), G = function(n) {
|
|
45
|
+
for (var e = n[0], r = 1; r < n.length; ++r)
|
|
46
|
+
n[r] > e && (e = n[r]);
|
|
47
|
+
return e;
|
|
48
|
+
}, w = function(n, e, r) {
|
|
49
|
+
var v = e / 8 | 0;
|
|
50
|
+
return (n[v] | n[v + 1] << 8) >> (7 & e) & r;
|
|
51
|
+
}, J = function(n, e) {
|
|
52
|
+
var r = e / 8 | 0;
|
|
53
|
+
return (n[r] | n[r + 1] << 8 | n[r + 2] << 16) >> (7 & e);
|
|
54
|
+
}, s1 = ["unexpected EOF", "invalid block type", "invalid length/literal", "invalid distance", "stream finished", "no stream handler", , "no callback", "invalid UTF-8 data", "extra field too long", "date not in range 1980-2099", "filename too long", "stream finishing", "invalid zip data"], h = function(n, e, r) {
|
|
55
|
+
var v = new Error(e || s1[n]);
|
|
56
|
+
if (v.code = n, Error.captureStackTrace && Error.captureStackTrace(v, h), !r)
|
|
57
|
+
throw v;
|
|
58
|
+
return v;
|
|
59
|
+
}, E1 = function(n, e, r) {
|
|
60
|
+
var v = n.length;
|
|
61
|
+
if (!v || r && r.f && !r.l)
|
|
62
|
+
return e || new c(0);
|
|
63
|
+
var t = !e || r, u = !r || r.i;
|
|
64
|
+
r || (r = {}), e || (e = new c(3 * v));
|
|
65
|
+
var s = function(y) {
|
|
66
|
+
var T = e.length;
|
|
67
|
+
if (y > T) {
|
|
68
|
+
var k = new c(Math.max(2 * T, y));
|
|
69
|
+
k.set(e), e = k;
|
|
70
|
+
}
|
|
71
|
+
}, b = r.f || 0, a = r.p || 0, o = r.b || 0, l = r.l, E = r.d, m = r.m, _ = r.n, j = 8 * v;
|
|
72
|
+
do {
|
|
73
|
+
if (!l) {
|
|
74
|
+
b = w(n, a, 1);
|
|
75
|
+
var q = w(n, a + 1, 3);
|
|
76
|
+
if (a += 3, !q) {
|
|
77
|
+
var B = n[(p = 4 + ((a + 7) / 8 | 0)) - 4] | n[p - 3] << 8, D = p + B;
|
|
78
|
+
if (D > v) {
|
|
79
|
+
u && h(0);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
t && s(o + B), e.set(n.subarray(p, D), o), r.b = o += B, r.p = a = 8 * D, r.f = b;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (q == 1)
|
|
86
|
+
l = l1, E = h1, m = 9, _ = 5;
|
|
87
|
+
else if (q == 2) {
|
|
88
|
+
var F = w(n, a, 31) + 257, P = w(n, a + 10, 15) + 4, W = F + w(n, a + 5, 31) + 1;
|
|
89
|
+
a += 14;
|
|
90
|
+
for (var d = new c(W), O = new c(19), i = 0; i < P; ++i)
|
|
91
|
+
O[i1[i]] = w(n, a + 3 * i, 7);
|
|
92
|
+
a += 3 * P;
|
|
93
|
+
var I = G(O), f1 = (1 << I) - 1, o1 = L(O, I, 1);
|
|
94
|
+
for (i = 0; i < W; ) {
|
|
95
|
+
var p, H = o1[w(n, a, f1)];
|
|
96
|
+
if (a += 15 & H, (p = H >>> 4) < 16)
|
|
97
|
+
d[i++] = p;
|
|
98
|
+
else {
|
|
99
|
+
var z = 0, N = 0;
|
|
100
|
+
for (p == 16 ? (N = 3 + w(n, a, 3), a += 2, z = d[i - 1]) : p == 17 ? (N = 3 + w(n, a, 7), a += 3) : p == 18 && (N = 11 + w(n, a, 127), a += 7); N--; )
|
|
101
|
+
d[i++] = z;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
var $ = d.subarray(0, F), g = d.subarray(F);
|
|
105
|
+
m = G($), _ = G(g), l = L($, m, 1), E = L(g, _, 1);
|
|
106
|
+
} else
|
|
107
|
+
h(1);
|
|
108
|
+
if (a > j) {
|
|
109
|
+
u && h(0);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
t && s(o + 131072);
|
|
114
|
+
for (var u1 = (1 << m) - 1, c1 = (1 << _) - 1, Q = a; ; Q = a) {
|
|
115
|
+
var U = (z = l[J(n, a) & u1]) >>> 4;
|
|
116
|
+
if ((a += 15 & z) > j) {
|
|
117
|
+
u && h(0);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
if (z || h(2), U < 256)
|
|
121
|
+
e[o++] = U;
|
|
122
|
+
else {
|
|
123
|
+
if (U == 256) {
|
|
124
|
+
Q = a, l = null;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
var X = U - 254;
|
|
128
|
+
if (U > 264) {
|
|
129
|
+
var A = r1[i = U - 257];
|
|
130
|
+
X = w(n, a, (1 << A) - 1) + t1[i], a += A;
|
|
131
|
+
}
|
|
132
|
+
var R = E[J(n, a) & c1], V = R >>> 4;
|
|
133
|
+
if (R || h(3), a += 15 & R, g = b1[V], V > 3 && (A = n1[V], g += J(n, a) & (1 << A) - 1, a += A), a > j) {
|
|
134
|
+
u && h(0);
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
t && s(o + 131072);
|
|
138
|
+
for (var K = o + X; o < K; o += 4)
|
|
139
|
+
e[o] = e[o - g], e[o + 1] = e[o + 1 - g], e[o + 2] = e[o + 2 - g], e[o + 3] = e[o + 3 - g];
|
|
140
|
+
o = K;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
r.l = l, r.p = Q, r.b = o, r.f = b, l && (b = 1, r.m = m, r.d = E, r.n = _);
|
|
144
|
+
} while (!b);
|
|
145
|
+
return o == e.length ? e : function(y, T, k) {
|
|
146
|
+
(T == null || T < 0) && (T = 0), (k == null || k > y.length) && (k = y.length);
|
|
147
|
+
var C = new (y.BYTES_PER_ELEMENT == 2 ? S : y.BYTES_PER_ELEMENT == 4 ? Y : c)(k - T);
|
|
148
|
+
return C.set(y.subarray(T, k)), C;
|
|
149
|
+
}(e, 0, o);
|
|
150
|
+
}, p1 = new c(0);
|
|
151
|
+
function y1(n, e) {
|
|
152
|
+
return E1((((15 & (r = n)[0]) != 8 || r[0] >>> 4 > 7 || (r[0] << 8 | r[1]) % 31) && h(6, "invalid zlib data"), 32 & r[1] && h(6, "invalid zlib data: preset dictionaries not supported"), n.subarray(2, -4)), e);
|
|
153
|
+
var r;
|
|
154
|
+
}
|
|
155
|
+
var g1 = typeof TextDecoder < "u" && new TextDecoder();
|
|
156
|
+
try {
|
|
157
|
+
g1.decode(p1, { stream: !0 });
|
|
158
|
+
} catch {
|
|
159
|
+
}
|
|
160
|
+
export {
|
|
161
|
+
y1 as unzlibSync
|
|
162
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
var K = Object.defineProperty;
|
|
2
|
+
var Q = (r, h, t) => h in r ? K(r, h, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[h] = t;
|
|
3
|
+
var D = (r, h, t) => (Q(r, typeof h != "symbol" ? h + "" : h, t), t), W = (r, h, t) => {
|
|
4
|
+
if (!h.has(r))
|
|
5
|
+
throw TypeError("Cannot " + t);
|
|
6
|
+
};
|
|
7
|
+
var n = (r, h, t) => (W(r, h, "read from private field"), t ? t.call(r) : h.get(r)), f = (r, h, t) => {
|
|
8
|
+
if (h.has(r))
|
|
9
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
10
|
+
h instanceof WeakSet ? h.add(r) : h.set(r, t);
|
|
11
|
+
}, p = (r, h, t, e) => (W(r, h, "write to private field"), e ? e.call(r, t) : h.set(r, t), t);
|
|
12
|
+
var c = (r, h, t) => (W(r, h, "access private method"), t);
|
|
13
|
+
const I = (r) => {
|
|
14
|
+
var h, t;
|
|
15
|
+
return (t = (h = r == null ? void 0 : r.split(/[,;\s]/)) == null ? void 0 : h.filter((e) => e)) == null ? void 0 : t.map((e) => e.split("=").map((i) => i.trim()));
|
|
16
|
+
}, U = (r, h) => {
|
|
17
|
+
var i, s;
|
|
18
|
+
if (r.documentElement.localName === "svg") {
|
|
19
|
+
const [, , a, o] = ((i = r.documentElement.getAttribute("viewBox")) == null ? void 0 : i.split(/\s/)) ?? [];
|
|
20
|
+
return { width: a, height: o };
|
|
21
|
+
}
|
|
22
|
+
const t = I((s = r.querySelector('meta[name="viewport"]')) == null ? void 0 : s.getAttribute("content"));
|
|
23
|
+
if (t)
|
|
24
|
+
return Object.fromEntries(t);
|
|
25
|
+
if (typeof h == "string")
|
|
26
|
+
return I(h);
|
|
27
|
+
if (h)
|
|
28
|
+
return h;
|
|
29
|
+
const e = r.querySelector("img");
|
|
30
|
+
return e ? { width: e.naturalWidth, height: e.naturalHeight } : (console.warn(new Error("Missing viewport properties")), { width: 1e3, height: 2e3 });
|
|
31
|
+
};
|
|
32
|
+
var k, j, x, S, L, w, y, b, v, A, H, E, C, M, N, R, P, V, G, T, z;
|
|
33
|
+
class X extends HTMLElement {
|
|
34
|
+
constructor() {
|
|
35
|
+
super();
|
|
36
|
+
f(this, A);
|
|
37
|
+
f(this, E);
|
|
38
|
+
f(this, M);
|
|
39
|
+
f(this, R);
|
|
40
|
+
f(this, V);
|
|
41
|
+
f(this, T);
|
|
42
|
+
f(this, k, this.attachShadow({ mode: "closed" }));
|
|
43
|
+
f(this, j, new ResizeObserver(() => c(this, E, C).call(this)));
|
|
44
|
+
f(this, x, void 0);
|
|
45
|
+
f(this, S, -1);
|
|
46
|
+
D(this, "defaultViewport");
|
|
47
|
+
D(this, "spread");
|
|
48
|
+
f(this, L, !1);
|
|
49
|
+
f(this, w, void 0);
|
|
50
|
+
f(this, y, void 0);
|
|
51
|
+
f(this, b, void 0);
|
|
52
|
+
f(this, v, void 0);
|
|
53
|
+
const t = new CSSStyleSheet();
|
|
54
|
+
n(this, k).adoptedStyleSheets = [t], t.replaceSync(`:host {
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: 100%;
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
align-items: center;
|
|
60
|
+
}`), n(this, j).observe(this);
|
|
61
|
+
}
|
|
62
|
+
open(t) {
|
|
63
|
+
this.book = t;
|
|
64
|
+
const { rendition: e } = t;
|
|
65
|
+
this.spread = e == null ? void 0 : e.spread, this.defaultViewport = e == null ? void 0 : e.viewport;
|
|
66
|
+
const i = t.dir === "rtl", s = !i;
|
|
67
|
+
this.rtl = i, (e == null ? void 0 : e.spread) === "none" ? p(this, x, t.sections.map((a) => ({ center: a }))) : p(this, x, t.sections.reduce((a, o) => {
|
|
68
|
+
const l = a[a.length - 1], { linear: m, pageSpread: g } = o;
|
|
69
|
+
if (m === "no")
|
|
70
|
+
return a;
|
|
71
|
+
const u = () => {
|
|
72
|
+
const d = {};
|
|
73
|
+
return a.push(d), d;
|
|
74
|
+
};
|
|
75
|
+
if (g === "center") {
|
|
76
|
+
const d = l.left || l.right ? u() : l;
|
|
77
|
+
d.center = o;
|
|
78
|
+
} else if (g === "left") {
|
|
79
|
+
const d = l.center || l.left || s ? u() : l;
|
|
80
|
+
d.left = o;
|
|
81
|
+
} else if (g === "right") {
|
|
82
|
+
const d = l.center || l.right || i ? u() : l;
|
|
83
|
+
d.right = o;
|
|
84
|
+
} else
|
|
85
|
+
s ? l.center || l.right ? u().left = o : l.left ? l.right = o : l.left = o : l.center || l.left ? u().right = o : l.right ? l.left = o : l.right = o;
|
|
86
|
+
return a;
|
|
87
|
+
}, [{}]));
|
|
88
|
+
}
|
|
89
|
+
get index() {
|
|
90
|
+
const t = n(this, x)[n(this, S)], e = (t == null ? void 0 : t.center) ?? (this.side === "left" ? t.left ?? t.right : t.right ?? t.left);
|
|
91
|
+
return this.book.sections.indexOf(e);
|
|
92
|
+
}
|
|
93
|
+
getSpreadOf(t) {
|
|
94
|
+
const e = n(this, x);
|
|
95
|
+
for (let i = 0; i < e.length; i++) {
|
|
96
|
+
const { left: s, right: a, center: o } = e[i];
|
|
97
|
+
if (s === t)
|
|
98
|
+
return { index: i, side: "left" };
|
|
99
|
+
if (a === t)
|
|
100
|
+
return { index: i, side: "right" };
|
|
101
|
+
if (o === t)
|
|
102
|
+
return { index: i, side: "center" };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async goToSpread(t, e, i) {
|
|
106
|
+
var a, o, l, m, g, u;
|
|
107
|
+
if (t < 0 || t > n(this, x).length - 1)
|
|
108
|
+
return;
|
|
109
|
+
if (t === n(this, S)) {
|
|
110
|
+
c(this, E, C).call(this, e);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
p(this, S, t);
|
|
114
|
+
const s = n(this, x)[t];
|
|
115
|
+
if (s.center) {
|
|
116
|
+
const d = this.book.sections.indexOf(s.center), O = await ((o = (a = s.center) == null ? void 0 : a.load) == null ? void 0 : o.call(a));
|
|
117
|
+
await c(this, M, N).call(this, { center: { index: d, src: O } });
|
|
118
|
+
} else {
|
|
119
|
+
const d = this.book.sections.indexOf(s.left), O = this.book.sections.indexOf(s.right), $ = await ((m = (l = s.left) == null ? void 0 : l.load) == null ? void 0 : m.call(l)), B = await ((u = (g = s.right) == null ? void 0 : g.load) == null ? void 0 : u.call(g)), F = { index: d, src: $ }, q = { index: O, src: B };
|
|
120
|
+
await c(this, M, N).call(this, { left: F, right: q, side: e });
|
|
121
|
+
}
|
|
122
|
+
c(this, T, z).call(this, i);
|
|
123
|
+
}
|
|
124
|
+
async select(t) {
|
|
125
|
+
await this.goTo(t);
|
|
126
|
+
}
|
|
127
|
+
async goTo(t) {
|
|
128
|
+
const { book: e } = this, i = await t, s = e.sections[i.index];
|
|
129
|
+
if (!s)
|
|
130
|
+
return;
|
|
131
|
+
const { index: a, side: o } = this.getSpreadOf(s);
|
|
132
|
+
await this.goToSpread(a, o);
|
|
133
|
+
}
|
|
134
|
+
async next() {
|
|
135
|
+
if (this.rtl ? c(this, R, P).call(this) : c(this, V, G).call(this))
|
|
136
|
+
c(this, T, z).call(this, "page");
|
|
137
|
+
else
|
|
138
|
+
return this.goToSpread(n(this, S) + 1, this.rtl ? "right" : "left", "page");
|
|
139
|
+
}
|
|
140
|
+
async prev() {
|
|
141
|
+
if (this.rtl ? c(this, V, G).call(this) : c(this, R, P).call(this))
|
|
142
|
+
c(this, T, z).call(this, "page");
|
|
143
|
+
else
|
|
144
|
+
return this.goToSpread(n(this, S) - 1, this.rtl ? "left" : "right", "page");
|
|
145
|
+
}
|
|
146
|
+
getContents() {
|
|
147
|
+
return Array.from(n(this, k).querySelectorAll("iframe"), (t) => ({
|
|
148
|
+
doc: t.contentDocument
|
|
149
|
+
// TODO: index, overlayer
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
destroy() {
|
|
153
|
+
n(this, j).unobserve(this);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
k = new WeakMap(), j = new WeakMap(), x = new WeakMap(), S = new WeakMap(), L = new WeakMap(), w = new WeakMap(), y = new WeakMap(), b = new WeakMap(), v = new WeakMap(), A = new WeakSet(), H = async function({ index: t, src: e }) {
|
|
157
|
+
const i = document.createElement("div"), s = document.createElement("iframe");
|
|
158
|
+
return i.append(s), Object.assign(s.style, {
|
|
159
|
+
border: "0",
|
|
160
|
+
display: "none",
|
|
161
|
+
overflow: "hidden"
|
|
162
|
+
}), s.setAttribute("sandbox", "allow-same-origin allow-scripts"), s.setAttribute("scrolling", "no"), s.setAttribute("part", "filter"), n(this, k).append(i), e ? new Promise((a) => {
|
|
163
|
+
const o = () => {
|
|
164
|
+
s.removeEventListener("load", o);
|
|
165
|
+
const l = s.contentDocument;
|
|
166
|
+
this.dispatchEvent(new CustomEvent("load", { detail: { doc: l, index: t } }));
|
|
167
|
+
const { width: m, height: g } = U(l, this.defaultViewport);
|
|
168
|
+
a({
|
|
169
|
+
element: i,
|
|
170
|
+
iframe: s,
|
|
171
|
+
width: parseFloat(m),
|
|
172
|
+
height: parseFloat(g)
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
s.addEventListener("load", o), s.src = e;
|
|
176
|
+
}) : { blank: !0, element: i, iframe: s };
|
|
177
|
+
}, E = new WeakSet(), C = function(t = n(this, v)) {
|
|
178
|
+
if (!t)
|
|
179
|
+
return;
|
|
180
|
+
const e = n(this, w) ?? {}, i = n(this, b) ?? n(this, y), s = t === "left" ? e : i, { width: a, height: o } = this.getBoundingClientRect(), l = this.spread !== "both" && this.spread !== "portrait" && o > a;
|
|
181
|
+
p(this, L, l);
|
|
182
|
+
const m = e.width ?? i.width, g = e.height ?? i.height, u = l || n(this, b) ? Math.min(
|
|
183
|
+
a / (s.width ?? m),
|
|
184
|
+
o / (s.height ?? g)
|
|
185
|
+
) : Math.min(
|
|
186
|
+
a / ((e.width ?? m) + (i.width ?? m)),
|
|
187
|
+
o / Math.max(
|
|
188
|
+
e.height ?? g,
|
|
189
|
+
i.height ?? g
|
|
190
|
+
)
|
|
191
|
+
), d = (O) => {
|
|
192
|
+
const { element: $, iframe: B, width: F, height: q, blank: J } = O;
|
|
193
|
+
Object.assign(B.style, {
|
|
194
|
+
width: `${F}px`,
|
|
195
|
+
height: `${q}px`,
|
|
196
|
+
transform: `scale(${u})`,
|
|
197
|
+
transformOrigin: "top left",
|
|
198
|
+
display: J ? "none" : "block"
|
|
199
|
+
}), Object.assign($.style, {
|
|
200
|
+
width: `${(F ?? m) * u}px`,
|
|
201
|
+
height: `${(q ?? g) * u}px`,
|
|
202
|
+
overflow: "hidden",
|
|
203
|
+
display: "block"
|
|
204
|
+
}), l && O !== s && ($.style.display = "none");
|
|
205
|
+
};
|
|
206
|
+
n(this, b) ? d(n(this, b)) : (d(e), d(i));
|
|
207
|
+
}, M = new WeakSet(), N = async function({ left: t, right: e, center: i, side: s }) {
|
|
208
|
+
n(this, k).replaceChildren(), p(this, w, null), p(this, y, null), p(this, b, null), i ? (p(this, b, await c(this, A, H).call(this, i)), p(this, v, "center"), c(this, E, C).call(this)) : (p(this, w, await c(this, A, H).call(this, t)), p(this, y, await c(this, A, H).call(this, e)), p(this, v, n(this, w).blank ? "right" : n(this, y).blank ? "left" : s), c(this, E, C).call(this));
|
|
209
|
+
}, R = new WeakSet(), P = function() {
|
|
210
|
+
var t, e, i, s;
|
|
211
|
+
if (!(n(this, b) || (t = n(this, w)) != null && t.blank) && n(this, L) && ((s = (i = (e = n(this, w)) == null ? void 0 : e.element) == null ? void 0 : i.style) == null ? void 0 : s.display) === "none")
|
|
212
|
+
return n(this, y).element.style.display = "none", n(this, w).element.style.display = "block", p(this, v, "left"), !0;
|
|
213
|
+
}, V = new WeakSet(), G = function() {
|
|
214
|
+
var t, e, i, s;
|
|
215
|
+
if (!(n(this, b) || (t = n(this, y)) != null && t.blank) && n(this, L) && ((s = (i = (e = n(this, y)) == null ? void 0 : e.element) == null ? void 0 : i.style) == null ? void 0 : s.display) === "none")
|
|
216
|
+
return n(this, w).element.style.display = "none", n(this, y).element.style.display = "block", p(this, v, "right"), !0;
|
|
217
|
+
}, T = new WeakSet(), z = function(t) {
|
|
218
|
+
this.dispatchEvent(new CustomEvent("relocate", { detail: { reason: t, range: null, index: this.index, fraction: 0, size: 1 } }));
|
|
219
|
+
};
|
|
220
|
+
customElements.define("foliate-fxl", X);
|
|
221
|
+
export {
|
|
222
|
+
X as FixedLayout
|
|
223
|
+
};
|