@panda-lingo/goldendict 0.1.2 → 0.1.4
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 +17 -1
- package/dist/element/goldendict-view.d.ts +9 -1
- package/dist/element/goldendict-view.d.ts.map +1 -1
- package/dist/index.js +259 -157
- package/dist/index.js.map +1 -1
- package/dist/renderer/article-document.d.ts.map +1 -1
- package/dist/renderer/link-router.d.ts.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
class
|
|
1
|
+
class M extends Error {
|
|
2
2
|
status;
|
|
3
3
|
body;
|
|
4
4
|
constructor(e, o, t) {
|
|
5
5
|
super(e), this.name = "DictionaryApiError", this.status = o, this.body = t;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
function
|
|
8
|
+
function B(i) {
|
|
9
9
|
const e = i.trim() || "/api/v1";
|
|
10
10
|
return e.length > 1 ? e.replace(/\/+$/, "") : e;
|
|
11
11
|
}
|
|
@@ -25,7 +25,7 @@ function y(i) {
|
|
|
25
25
|
...i.wordCount !== void 0 ? { wordCount: i.wordCount } : {}
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
async function
|
|
28
|
+
async function $(i) {
|
|
29
29
|
const e = await i.text();
|
|
30
30
|
if (e)
|
|
31
31
|
try {
|
|
@@ -40,7 +40,7 @@ class v {
|
|
|
40
40
|
headers;
|
|
41
41
|
credentials;
|
|
42
42
|
constructor(e = {}) {
|
|
43
|
-
this.baseUrl =
|
|
43
|
+
this.baseUrl = B(e.baseUrl ?? "/api/v1");
|
|
44
44
|
const o = e.fetch ?? globalThis.fetch;
|
|
45
45
|
if (!o)
|
|
46
46
|
throw new TypeError("A fetch implementation is required");
|
|
@@ -94,12 +94,12 @@ class v {
|
|
|
94
94
|
...this.headers,
|
|
95
95
|
...o.headers
|
|
96
96
|
}
|
|
97
|
-
}), n = await
|
|
97
|
+
}), n = await $(t);
|
|
98
98
|
if (!t.ok) {
|
|
99
99
|
let a = t.statusText;
|
|
100
100
|
throw typeof n == "object" && n && ("message" in n ? a = String(n.message) : "error" in n && typeof n.error == "object" && n.error && "message" in n.error && (a = String(
|
|
101
101
|
n.error.message
|
|
102
|
-
))), new
|
|
102
|
+
))), new M(
|
|
103
103
|
a || `Dictionary request failed (${t.status})`,
|
|
104
104
|
t.status,
|
|
105
105
|
n
|
|
@@ -108,7 +108,7 @@ class v {
|
|
|
108
108
|
return n;
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
const
|
|
111
|
+
const U = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
112
112
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
113
113
|
|
|
114
114
|
<svg
|
|
@@ -154,7 +154,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
154
154
|
sodipodi:nodetypes="cccc" />
|
|
155
155
|
</g>
|
|
156
156
|
</svg>
|
|
157
|
-
`,
|
|
157
|
+
`, R = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfmAxMKDTHgIis/AAAAwUlEQVQoz33RsUtCcRTF8U+vJ8/RCAKHdEoc+isachBcMhranQQXt/YIGmxrLAgRac/JFsP+jVqaHVvkuTy0V/08dzzfC/eew2+1FWxRz1KCG42/ZuxeKpWgaeYub++ZStcAsRcddgwdgCPVDC1qOHat7F2dz2xvMwluXeDBWQgomeDSIAp8s1DEh8PIdqUhoOQbFV8h4MojTsxjb9mbNZW13bIwtu9U72dQr7mgeNIPR10z9CwKlzXStfv/eef5uldwrDr7rieveQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMy0xOVQxMDoxMzo0OSswMDowMH0jItoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDMtMTlUMTA6MTM6NDkrMDA6MDAMfppmAAAAAElFTkSuQmCC", F = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
158
158
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
159
159
|
|
|
160
160
|
<svg
|
|
@@ -196,7 +196,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
196
196
|
d="m 9.8109427,14.803704 8.9999993,-8.9999986 -17.9999995,2e-7 z m 0,-4.225584 -4.7744158,-4.7744144 9.5488291,-2e-7 z"
|
|
197
197
|
id="rect1"
|
|
198
198
|
sodipodi:nodetypes="cccccccc" /></g></svg>
|
|
199
|
-
`,
|
|
199
|
+
`, P = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
200
200
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
201
201
|
|
|
202
202
|
<svg
|
|
@@ -243,7 +243,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
243
243
|
sodipodi:nodetypes="cccccccc" />
|
|
244
244
|
</g>
|
|
245
245
|
</svg>
|
|
246
|
-
`,
|
|
246
|
+
`, G = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
247
247
|
<svg
|
|
248
248
|
width="24.000002"
|
|
249
249
|
height="24"
|
|
@@ -311,7 +311,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
311
311
|
x="1.1215118e-09"
|
|
312
312
|
y="4.9718442"
|
|
313
313
|
ry="0.64957041" /></svg>
|
|
314
|
-
`,
|
|
314
|
+
`, N = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAATrAAAE6wHYKlsNAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAcRJREFUOI2lkztvE0EQgL8Z7/rB2T5fCixhQQc00FAjJCRkiTYV/JH0adIgfgJVGn4CKRBUSIjCHYiOBimK7KA4ORw/dofC3Ck2dhpGGu1r5pvZmV0xM/5HXDEZDAbf2u12BkiM0UIImBlmRoyxHBeLBaPRaNzv9++tAJIkyVS1673HzBCRUtfFzEo/d/VAVRERzvf2uDw6AqB6eMhlt1va9Hq9FWgJiDEiIqgqcTwmnp4CUPeearu9EmRjDYp7qiqVNEV3dgCYx8hlniMimBlZlm0GFN0QERoHB7j9/bIGVUDiHCrVfzLQqwDvPSLCZDIhz3MuLi6YTye4eY58fkOnUbkeUERMkoRWq0WaptRqDaYfXvPr3StmP75cX4PZbIb3HoDx6TmttImveZoPn9N+0KfWvbsdYGY45xARvn76zvu3H8m6GS/2dpnefLRsb4Bb2wAhBJxbLoc/hwCcDc9QqVCvuzLy+uPa2IUnu4+p36hz5/5tGkmdxWKBc45Op0MIYXsNClAzTXj28imquqKFzUbA8fHxbzMbi0glhKBmpsuEREQkqmpU1Sgi8eTkJC/8ZNN3FhEHNIHG360pkJvZdN32D0SOwDehr1HXAAAAAElFTkSuQmCC", V = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
315
315
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
316
316
|
|
|
317
317
|
<svg
|
|
@@ -357,7 +357,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
357
357
|
sodipodi:nodetypes="cccc" />
|
|
358
358
|
</g>
|
|
359
359
|
</svg>
|
|
360
|
-
`,
|
|
360
|
+
`, O = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
361
361
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
362
362
|
|
|
363
363
|
<svg
|
|
@@ -399,7 +399,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
399
399
|
d="m 14.310942,9.9316324 -8.9999991,-8.9999982 2e-7,17.9999978 z m -4.225584,0 -4.7744149,4.7744156 -2e-7,-9.5488279 z"
|
|
400
400
|
id="rect1"
|
|
401
401
|
sodipodi:nodetypes="cccccccc" /></g></svg>
|
|
402
|
-
`,
|
|
402
|
+
`, H = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
403
403
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
404
404
|
|
|
405
405
|
<svg
|
|
@@ -446,7 +446,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
446
446
|
sodipodi:nodetypes="cccccccc" />
|
|
447
447
|
</g>
|
|
448
448
|
</svg>
|
|
449
|
-
`,
|
|
449
|
+
`, W = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
450
450
|
<svg
|
|
451
451
|
width="24.000002"
|
|
452
452
|
height="24"
|
|
@@ -515,7 +515,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
515
515
|
x="1.1215118e-09"
|
|
516
516
|
y="4.9718442"
|
|
517
517
|
ry="0.64957041" /></svg>
|
|
518
|
-
`,
|
|
518
|
+
`, j = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
519
519
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
520
520
|
|
|
521
521
|
<svg
|
|
@@ -575,7 +575,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
575
575
|
id="path2"
|
|
576
576
|
style="fill:url(#radialGradient2)" />
|
|
577
577
|
</svg>
|
|
578
|
-
`,
|
|
578
|
+
`, Z = `<?xml version="1.0" encoding="UTF-8"?>
|
|
579
579
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
580
580
|
<svg width="32" height="32" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
|
581
581
|
<defs>
|
|
@@ -586,7 +586,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
586
586
|
</defs>
|
|
587
587
|
<path d="m3.7149 8.6551 24.57 1e-6 -12.286 14.69z" fill="url(#radialGradient2)" fill-rule="evenodd" stroke-width="3.7795"/>
|
|
588
588
|
</svg>
|
|
589
|
-
`,
|
|
589
|
+
`, X = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
590
590
|
<svg
|
|
591
591
|
width="23.02533"
|
|
592
592
|
height="24"
|
|
@@ -699,7 +699,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
699
699
|
transform="matrix(0.71827705,0,0,0.71827705,-3.1349141,-8.3199121)"
|
|
700
700
|
style="fill:url(#linearGradient9);fill-opacity:1;stroke:none" />
|
|
701
701
|
</svg>
|
|
702
|
-
`,
|
|
702
|
+
`, Q = `<svg fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
703
703
|
<defs>
|
|
704
704
|
<linearGradient id="videoGrad" y2="100%">
|
|
705
705
|
<stop stop-color="#FF5F6D" offset="0"/>
|
|
@@ -709,7 +709,7 @@ const M = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
709
709
|
<rect x="2" y="5" width="20" height="14" rx="2" ry="2" fill="url(#videoGrad)" stroke="none"/>
|
|
710
710
|
<polygon points="10 9 15 12 10 15" fill="#fff"/>
|
|
711
711
|
</svg>
|
|
712
|
-
`,
|
|
712
|
+
`, K = `<svg fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
713
713
|
<defs>
|
|
714
714
|
<linearGradient id="warnGrad" y2="100%">
|
|
715
715
|
<stop stop-color="#FF5F6D" offset="0"/>
|
|
@@ -725,27 +725,27 @@ function s(i) {
|
|
|
725
725
|
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(i)}`;
|
|
726
726
|
}
|
|
727
727
|
const u = {
|
|
728
|
-
"arrow.svg": s(
|
|
729
|
-
"audio.png":
|
|
730
|
-
"collapse_article.svg": s(
|
|
731
|
-
"collapse_article_hovered.svg": s(
|
|
732
|
-
"collapse_opt.svg": s(
|
|
733
|
-
"document.png":
|
|
734
|
-
"downarrow.svg": s(
|
|
735
|
-
"expand_article.svg": s(
|
|
736
|
-
"expand_article_hovered.svg": s(
|
|
737
|
-
"expand_opt.svg": s(
|
|
738
|
-
"old-arrow.svg": s(
|
|
739
|
-
"old-downarrow.svg": s(
|
|
740
|
-
"playsound.svg": s(
|
|
741
|
-
"video.svg": s(
|
|
742
|
-
"warning.svg": s(
|
|
728
|
+
"arrow.svg": s(U),
|
|
729
|
+
"audio.png": R,
|
|
730
|
+
"collapse_article.svg": s(P),
|
|
731
|
+
"collapse_article_hovered.svg": s(F),
|
|
732
|
+
"collapse_opt.svg": s(G),
|
|
733
|
+
"document.png": N,
|
|
734
|
+
"downarrow.svg": s(V),
|
|
735
|
+
"expand_article.svg": s(H),
|
|
736
|
+
"expand_article_hovered.svg": s(O),
|
|
737
|
+
"expand_opt.svg": s(W),
|
|
738
|
+
"old-arrow.svg": s(j),
|
|
739
|
+
"old-downarrow.svg": s(Z),
|
|
740
|
+
"playsound.svg": s(X),
|
|
741
|
+
"video.svg": s(Q),
|
|
742
|
+
"warning.svg": s(K)
|
|
743
743
|
};
|
|
744
|
-
function
|
|
744
|
+
function S(i) {
|
|
745
745
|
const e = /^qrc:\/{2,3}(?:icons\/)?([^?#]+)(?:[?#].*)?$/i.exec(i);
|
|
746
746
|
return e?.[1] ? u[e[1]] : void 0;
|
|
747
747
|
}
|
|
748
|
-
function
|
|
748
|
+
function A(i) {
|
|
749
749
|
return i.replace(
|
|
750
750
|
/qrc:\/{2,3}icons\/([a-z0-9_.-]+)/gi,
|
|
751
751
|
(e, o) => u[o] ?? e
|
|
@@ -7883,19 +7883,19 @@ a:hover {
|
|
|
7883
7883
|
code::selection {
|
|
7884
7884
|
background: #333333;
|
|
7885
7885
|
}
|
|
7886
|
-
` },
|
|
7886
|
+
` }, J = h["article-style.css"], Y = h["article-style-print.css"], ee = h["article-style-st-babylon.css"], ie = h["article-style-st-classic.css"], te = h["article-style-st-lingoes-blue.css"], oe = h["article-style-st-lingoes.css"], ne = h["article-style-st-lingvo.css"], re = h["article-style-st-modern.css"], ae = {
|
|
7887
7887
|
default: "",
|
|
7888
|
-
classic:
|
|
7889
|
-
modern:
|
|
7890
|
-
lingvo:
|
|
7891
|
-
babylon:
|
|
7892
|
-
lingoes:
|
|
7893
|
-
"lingoes-blue":
|
|
7894
|
-
},
|
|
7895
|
-
function
|
|
7896
|
-
return
|
|
7897
|
-
}
|
|
7898
|
-
const
|
|
7888
|
+
classic: ie,
|
|
7889
|
+
modern: re,
|
|
7890
|
+
lingvo: ne,
|
|
7891
|
+
babylon: ee,
|
|
7892
|
+
lingoes: oe,
|
|
7893
|
+
"lingoes-blue": te
|
|
7894
|
+
}, de = A(J), le = A(Y);
|
|
7895
|
+
function se(i = "default") {
|
|
7896
|
+
return A(ae[i]);
|
|
7897
|
+
}
|
|
7898
|
+
const ce = `
|
|
7899
7899
|
:root {
|
|
7900
7900
|
--gd-responsive-gutter: clamp(0.5rem, 2.5vw, 1rem);
|
|
7901
7901
|
}
|
|
@@ -8021,13 +8021,13 @@ const le = `
|
|
|
8021
8021
|
min-block-size: 2.75rem;
|
|
8022
8022
|
}
|
|
8023
8023
|
}
|
|
8024
|
-
`,
|
|
8024
|
+
`, E = /* @__PURE__ */ new Set([
|
|
8025
8025
|
"bres",
|
|
8026
8026
|
"qrcx",
|
|
8027
8027
|
"gico",
|
|
8028
8028
|
"gdau",
|
|
8029
8029
|
"gdvideo"
|
|
8030
|
-
]),
|
|
8030
|
+
]), _ = "/api/v1", me = {
|
|
8031
8031
|
gdlookup: "lookup",
|
|
8032
8032
|
bword: "lookup",
|
|
8033
8033
|
entry: "lookup",
|
|
@@ -8042,10 +8042,10 @@ const le = `
|
|
|
8042
8042
|
gdinternal: "unsupported",
|
|
8043
8043
|
ankicard: "unsupported",
|
|
8044
8044
|
ankisearch: "unsupported"
|
|
8045
|
-
},
|
|
8046
|
-
Object.entries(
|
|
8045
|
+
}, pe = new Set(
|
|
8046
|
+
Object.entries(me).filter(([, i]) => i === "unsupported").map(([i]) => i)
|
|
8047
8047
|
);
|
|
8048
|
-
function
|
|
8048
|
+
function w(i) {
|
|
8049
8049
|
try {
|
|
8050
8050
|
return decodeURIComponent(i);
|
|
8051
8051
|
} catch {
|
|
@@ -8055,43 +8055,47 @@ function f(i) {
|
|
|
8055
8055
|
function I(i, e) {
|
|
8056
8056
|
return `${i.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}`;
|
|
8057
8057
|
}
|
|
8058
|
-
function
|
|
8059
|
-
return i.pathname.replace(/^\/+/, "").split("/").map((e) => encodeURIComponent(
|
|
8058
|
+
function ge(i) {
|
|
8059
|
+
return i.pathname.replace(/^\/+/, "").split("/").map((e) => encodeURIComponent(w(e))).join("/");
|
|
8060
8060
|
}
|
|
8061
|
-
function
|
|
8061
|
+
function he(i, e) {
|
|
8062
8062
|
return /^[a-z][a-z\d+.-]*:/i.test(i) || i.startsWith("//") ? i : /^[a-z][a-z\d+.-]*:/i.test(e) ? new URL(i, e.endsWith("/") ? e : `${e}/`).toString() : I(e, i);
|
|
8063
8063
|
}
|
|
8064
|
-
function
|
|
8064
|
+
function D(i, e) {
|
|
8065
|
+
const o = e.replace(/[?#].*$/, "").replace(/\/+$/, "");
|
|
8066
|
+
return (i === _ || i.startsWith(`${_}/`)) && /(?:^|\/)api\/v1$/i.test(o) ? `${o}${i.slice(_.length)}` : /^[a-z][a-z\d+.-]*:/i.test(e) ? new URL(i, e).toString() : i;
|
|
8067
|
+
}
|
|
8068
|
+
function C(i) {
|
|
8065
8069
|
const e = i.resourceBaseUrl;
|
|
8066
8070
|
if (e)
|
|
8067
|
-
return e.startsWith("/") && !e.startsWith("//")
|
|
8071
|
+
return e.startsWith("/") && !e.startsWith("//") ? D(e, i.apiBaseUrl) : e;
|
|
8068
8072
|
}
|
|
8069
8073
|
function p(i, e) {
|
|
8070
|
-
const o =
|
|
8074
|
+
const o = S(i);
|
|
8071
8075
|
if (o)
|
|
8072
8076
|
return o;
|
|
8073
8077
|
if (i.startsWith("/") && !i.startsWith("//"))
|
|
8074
|
-
return
|
|
8078
|
+
return D(i, e.apiBaseUrl);
|
|
8075
8079
|
let t;
|
|
8076
8080
|
try {
|
|
8077
8081
|
t = new URL(i);
|
|
8078
8082
|
} catch {
|
|
8079
|
-
const d =
|
|
8080
|
-
return d ?
|
|
8083
|
+
const d = C(e);
|
|
8084
|
+
return d ? he(i, d) : i;
|
|
8081
8085
|
}
|
|
8082
8086
|
const n = t.protocol.slice(0, -1).toLowerCase();
|
|
8083
|
-
if (!
|
|
8087
|
+
if (!E.has(n))
|
|
8084
8088
|
return i;
|
|
8085
8089
|
const a = t.hostname || e.dictionaryId;
|
|
8086
8090
|
if (n === "gico")
|
|
8087
8091
|
return e.iconUrl ? p(e.iconUrl, {
|
|
8088
8092
|
...e,
|
|
8089
8093
|
iconUrl: void 0
|
|
8090
|
-
}) :
|
|
8091
|
-
const r =
|
|
8094
|
+
}) : S("qrc:///icons/document.png") ?? "";
|
|
8095
|
+
const r = ge(t), l = `${e.apiBaseUrl.replace(/\/+$/, "")}/dictionaries/${encodeURIComponent(a)}/resources`, m = I(C(e) ?? l, r);
|
|
8092
8096
|
return t.hash ? `${m}${t.hash}` : m;
|
|
8093
8097
|
}
|
|
8094
|
-
function
|
|
8098
|
+
function fe(i) {
|
|
8095
8099
|
const e = /^([a-z][a-z\d+.-]*):(.*)$/i.exec(i);
|
|
8096
8100
|
if (!e)
|
|
8097
8101
|
return;
|
|
@@ -8103,31 +8107,31 @@ function ge(i) {
|
|
|
8103
8107
|
const r = new URL(i);
|
|
8104
8108
|
t = r.searchParams.get("word") ?? r.pathname.replace(/^\/+/, ""), n = r.searchParams.get("gdanchor") ?? (r.hash.slice(1) || void 0), a = r.searchParams.get("dictionaries")?.split(",").filter(Boolean), !t && (o === "bword" || o === "entry") && (t = r.hostname);
|
|
8105
8109
|
} catch {
|
|
8106
|
-
const r = e[2]?.replace(/^\/{0,2}/, "") ?? "", [l, m] = r.split("#", 2), [d,
|
|
8107
|
-
t = d ?? "", n = new URLSearchParams(
|
|
8110
|
+
const r = e[2]?.replace(/^\/{0,2}/, "") ?? "", [l, m] = r.split("#", 2), [d, b] = (l ?? "").split("?", 2);
|
|
8111
|
+
t = d ?? "", n = new URLSearchParams(b ?? "").get("gdanchor") ?? (m || void 0);
|
|
8108
8112
|
}
|
|
8109
|
-
return t =
|
|
8113
|
+
return t = w(t.replace(/^\/+/, "")), t ? {
|
|
8110
8114
|
kind: "lookup",
|
|
8111
8115
|
word: t,
|
|
8112
|
-
...n ? { anchor:
|
|
8116
|
+
...n ? { anchor: w(n) } : {},
|
|
8113
8117
|
...a?.length ? { dictionaryIds: a } : {}
|
|
8114
8118
|
} : { kind: "unsafe" };
|
|
8115
8119
|
}
|
|
8116
|
-
function
|
|
8120
|
+
function L(i, e) {
|
|
8117
8121
|
const o = i.trim();
|
|
8118
8122
|
if (!o || o === "#")
|
|
8119
8123
|
return { kind: "anchor", anchor: "" };
|
|
8120
8124
|
if (o.startsWith("#"))
|
|
8121
|
-
return { kind: "anchor", anchor:
|
|
8122
|
-
const t =
|
|
8125
|
+
return { kind: "anchor", anchor: w(o.slice(1)) };
|
|
8126
|
+
const t = fe(o);
|
|
8123
8127
|
if (t)
|
|
8124
8128
|
return t;
|
|
8125
8129
|
const n = /^([a-z][a-z\d+.-]*):/i.exec(o)?.[1]?.toLowerCase();
|
|
8126
8130
|
if (n === "javascript" || n === "vbscript" || n === "file" || n === "data")
|
|
8127
8131
|
return { kind: "unsafe" };
|
|
8128
|
-
if (n &&
|
|
8132
|
+
if (n && pe.has(n))
|
|
8129
8133
|
return { kind: "unsafe" };
|
|
8130
|
-
if (n &&
|
|
8134
|
+
if (n && E.has(n))
|
|
8131
8135
|
return { kind: n === "gdau" ? "audio" : n === "gdvideo" ? "video" : "resource", url: p(o, e) };
|
|
8132
8136
|
if (o.startsWith("//") || n === "http" || n === "https" || n === "mailto" || n === "tel")
|
|
8133
8137
|
return { kind: "external", url: o };
|
|
@@ -8138,15 +8142,15 @@ function D(i, e) {
|
|
|
8138
8142
|
const [a, r] = o.split("#", 2);
|
|
8139
8143
|
return a ? {
|
|
8140
8144
|
kind: "lookup",
|
|
8141
|
-
word:
|
|
8142
|
-
...r ? { anchor:
|
|
8143
|
-
} : { kind: "anchor", anchor:
|
|
8145
|
+
word: w(a),
|
|
8146
|
+
...r ? { anchor: w(r) } : {}
|
|
8147
|
+
} : { kind: "anchor", anchor: w(r ?? "") };
|
|
8144
8148
|
}
|
|
8145
|
-
const
|
|
8149
|
+
const we = ["src", "poster", "data"];
|
|
8146
8150
|
function x(i) {
|
|
8147
8151
|
return /^(?:data:|blob:|https?:|#)/i.test(i);
|
|
8148
8152
|
}
|
|
8149
|
-
function
|
|
8153
|
+
function be(i, e, o) {
|
|
8150
8154
|
const t = [
|
|
8151
8155
|
["data-gd-audio", "audio"],
|
|
8152
8156
|
["data-gd-video", "video"],
|
|
@@ -8167,7 +8171,7 @@ function fe(i, e, o) {
|
|
|
8167
8171
|
const a = i.getAttribute("data-gd-lookup")?.trim();
|
|
8168
8172
|
if (a && a !== "true" && a !== "1")
|
|
8169
8173
|
return { kind: "lookup", word: a };
|
|
8170
|
-
const r =
|
|
8174
|
+
const r = L(e, o);
|
|
8171
8175
|
if (r.kind === "lookup")
|
|
8172
8176
|
return r;
|
|
8173
8177
|
const l = i.getAttribute("data-gd-word")?.trim();
|
|
@@ -8176,7 +8180,7 @@ function fe(i, e, o) {
|
|
|
8176
8180
|
if (n === "unsafe")
|
|
8177
8181
|
return { kind: "unsafe" };
|
|
8178
8182
|
}
|
|
8179
|
-
function
|
|
8183
|
+
function ke(i, e, o) {
|
|
8180
8184
|
switch (e.kind) {
|
|
8181
8185
|
case "anchor":
|
|
8182
8186
|
i.setAttribute(
|
|
@@ -8203,7 +8207,7 @@ function we(i, e, o) {
|
|
|
8203
8207
|
break;
|
|
8204
8208
|
}
|
|
8205
8209
|
}
|
|
8206
|
-
function
|
|
8210
|
+
function T(i, e) {
|
|
8207
8211
|
return i.replace(
|
|
8208
8212
|
/url\(\s*(["']?)([^"')]+)\1\s*\)/gi,
|
|
8209
8213
|
(t, n, a) => {
|
|
@@ -8215,13 +8219,13 @@ function C(i, e) {
|
|
|
8215
8219
|
(t, n, a) => x(a) ? t : `@import ${n}${p(a, e)}${n}`
|
|
8216
8220
|
);
|
|
8217
8221
|
}
|
|
8218
|
-
function
|
|
8222
|
+
function ue(i, e) {
|
|
8219
8223
|
return i.split(/,\s+(?=[^,]+(?:\s+\d+(?:\.\d+)?[wx])?(?:,|$))/).map((o) => {
|
|
8220
8224
|
const t = /^(\S+)([\s\S]*)$/.exec(o.trim());
|
|
8221
8225
|
return !t?.[1] || x(t[1]) ? o.trim() : `${p(t[1], e)}${t[2] ?? ""}`;
|
|
8222
8226
|
}).join(", ");
|
|
8223
8227
|
}
|
|
8224
|
-
function
|
|
8228
|
+
function xe(i) {
|
|
8225
8229
|
if (!i.classList.contains("hidden_expand_opt"))
|
|
8226
8230
|
return;
|
|
8227
8231
|
const e = i.getAttribute("onclick") ?? "", o = /gdExpandOptPart\(\s*['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]\s*\)/.exec(
|
|
@@ -8229,7 +8233,7 @@ function ke(i) {
|
|
|
8229
8233
|
);
|
|
8230
8234
|
o?.[1] && o[2] && (i.setAttribute("data-gd-expander", o[1]), i.setAttribute("data-gd-optional", o[2]));
|
|
8231
8235
|
}
|
|
8232
|
-
function
|
|
8236
|
+
function ye(i, e, o) {
|
|
8233
8237
|
if (typeof document > "u")
|
|
8234
8238
|
throw new Error("Article rendering requires a browser document");
|
|
8235
8239
|
const t = {
|
|
@@ -8242,37 +8246,37 @@ function ue(i, e, o) {
|
|
|
8242
8246
|
r.remove();
|
|
8243
8247
|
}), o === "none" && a.querySelectorAll("script").forEach((r) => r.remove());
|
|
8244
8248
|
for (const r of a.querySelectorAll("*")) {
|
|
8245
|
-
if (
|
|
8249
|
+
if (xe(r), o === "none")
|
|
8246
8250
|
for (const d of [...r.attributes])
|
|
8247
8251
|
(/^on/i.test(d.name) || d.name.toLowerCase() === "srcdoc") && r.removeAttribute(d.name);
|
|
8248
8252
|
if (r instanceof HTMLAnchorElement || r.tagName === "AREA") {
|
|
8249
8253
|
const d = r.getAttribute("href");
|
|
8250
|
-
d !== null &&
|
|
8254
|
+
d !== null && ke(
|
|
8251
8255
|
r,
|
|
8252
|
-
|
|
8256
|
+
be(r, d, t) ?? L(d, t),
|
|
8253
8257
|
i.dictionaryId
|
|
8254
8258
|
);
|
|
8255
8259
|
} else if (r.hasAttribute("href")) {
|
|
8256
8260
|
const d = r.getAttribute("href") ?? "";
|
|
8257
8261
|
x(d) || r.setAttribute("href", p(d, t));
|
|
8258
8262
|
}
|
|
8259
|
-
for (const d of
|
|
8260
|
-
const
|
|
8261
|
-
|
|
8263
|
+
for (const d of we) {
|
|
8264
|
+
const b = r.getAttribute(d);
|
|
8265
|
+
b === null || x(b) || (/^(?:javascript|vbscript|file):/i.test(b) ? r.removeAttribute(d) : r.setAttribute(d, p(b, t)));
|
|
8262
8266
|
}
|
|
8263
8267
|
const l = r.getAttribute("srcset");
|
|
8264
|
-
l && r.setAttribute("srcset",
|
|
8268
|
+
l && r.setAttribute("srcset", ue(l, t));
|
|
8265
8269
|
const m = r.getAttribute("style");
|
|
8266
8270
|
m && r.setAttribute(
|
|
8267
8271
|
"style",
|
|
8268
|
-
|
|
8272
|
+
T(m, t)
|
|
8269
8273
|
);
|
|
8270
8274
|
}
|
|
8271
8275
|
for (const r of a.querySelectorAll("style"))
|
|
8272
|
-
r.textContent =
|
|
8276
|
+
r.textContent = T(r.textContent ?? "", t);
|
|
8273
8277
|
return a.innerHTML;
|
|
8274
8278
|
}
|
|
8275
|
-
const
|
|
8279
|
+
const ve = {
|
|
8276
8280
|
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Arial, sans-serif',
|
|
8277
8281
|
textColor: "#222222",
|
|
8278
8282
|
mutedTextColor: "#555555",
|
|
@@ -8286,8 +8290,8 @@ const xe = {
|
|
|
8286
8290
|
selectionTextColor: "#ffffff",
|
|
8287
8291
|
radius: "8px",
|
|
8288
8292
|
spacing: "8px"
|
|
8289
|
-
},
|
|
8290
|
-
fontFamily:
|
|
8293
|
+
}, _e = {
|
|
8294
|
+
fontFamily: ve.fontFamily,
|
|
8291
8295
|
textColor: "#edf1f5",
|
|
8292
8296
|
mutedTextColor: "#aeb8c3",
|
|
8293
8297
|
linkColor: "#79bfff",
|
|
@@ -8301,7 +8305,7 @@ const xe = {
|
|
|
8301
8305
|
radius: "8px",
|
|
8302
8306
|
spacing: "8px"
|
|
8303
8307
|
};
|
|
8304
|
-
function
|
|
8308
|
+
function q(i = "light") {
|
|
8305
8309
|
return i !== "auto" ? i : globalThis.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
8306
8310
|
}
|
|
8307
8311
|
function c(i, e) {
|
|
@@ -8310,8 +8314,8 @@ function c(i, e) {
|
|
|
8310
8314
|
function k(i) {
|
|
8311
8315
|
return i.replace(/<\/style/gi, "<\\/style");
|
|
8312
8316
|
}
|
|
8313
|
-
function
|
|
8314
|
-
const e =
|
|
8317
|
+
function ze(i = {}) {
|
|
8318
|
+
const e = q(i.mode), o = i.tokens ?? {}, t = e === "dark" ? { ..._e, ...o } : o, n = [
|
|
8315
8319
|
c("--gd-font-family", t.fontFamily),
|
|
8316
8320
|
c("--gd-text-color", t.textColor),
|
|
8317
8321
|
c("--gd-muted-text-color", t.mutedTextColor),
|
|
@@ -8345,24 +8349,24 @@ function ve(i = {}) {
|
|
|
8345
8349
|
function g(i) {
|
|
8346
8350
|
return i.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
8347
8351
|
}
|
|
8348
|
-
function
|
|
8352
|
+
function Ae(i) {
|
|
8349
8353
|
return i.replace(
|
|
8350
8354
|
/[^a-zA-Z0-9_-]/g,
|
|
8351
8355
|
(e) => `_u${e.codePointAt(0)?.toString(16) ?? "0"}_`
|
|
8352
8356
|
);
|
|
8353
8357
|
}
|
|
8354
|
-
function
|
|
8358
|
+
function Se(i) {
|
|
8355
8359
|
return (i ?? "unknown").toLowerCase().replace(/[^a-z0-9_-]/g, "-");
|
|
8356
8360
|
}
|
|
8357
|
-
function
|
|
8361
|
+
function Ce(i, e) {
|
|
8358
8362
|
return i.iconUrl ? p(i.iconUrl, {
|
|
8359
8363
|
apiBaseUrl: e,
|
|
8360
8364
|
dictionaryId: i.dictionaryId,
|
|
8361
8365
|
...i.resourceBaseUrl ? { resourceBaseUrl: i.resourceBaseUrl } : {}
|
|
8362
8366
|
}) : u["document.png"];
|
|
8363
8367
|
}
|
|
8364
|
-
function
|
|
8365
|
-
const t = g(i.dictionaryId), n =
|
|
8368
|
+
function Te(i, e, o) {
|
|
8369
|
+
const t = g(i.dictionaryId), n = Ae(i.dictionaryId), a = ye(i, e, o), r = Se(i.sourceLanguage), l = g(i.targetLanguage ?? ""), m = g(Ce(i, e));
|
|
8366
8370
|
return `
|
|
8367
8371
|
<article class="gdarticle" id="gdfrom-${n}" data-gd-id="${t}">
|
|
8368
8372
|
<gd-dict-header class="gddictname" id="gddictname-${n}"
|
|
@@ -8380,7 +8384,7 @@ function Se(i, e, o) {
|
|
|
8380
8384
|
<div style="clear:both;" aria-hidden="true"></div>
|
|
8381
8385
|
<span class="gdarticleseparator"></span>`;
|
|
8382
8386
|
}
|
|
8383
|
-
function
|
|
8387
|
+
function Ee(i) {
|
|
8384
8388
|
return i.length ? `<div class="gdstemmedsuggestion">
|
|
8385
8389
|
<span class="gdstemmedsuggestion_head">Close words: </span>
|
|
8386
8390
|
<span class="gdstemmedsuggestion_body">${i.map(
|
|
@@ -8388,7 +8392,7 @@ function Ce(i) {
|
|
|
8388
8392
|
).join(", ")}</span>
|
|
8389
8393
|
</div>` : "";
|
|
8390
8394
|
}
|
|
8391
|
-
function
|
|
8395
|
+
function Ie(i, e) {
|
|
8392
8396
|
return `(function(){
|
|
8393
8397
|
"use strict";
|
|
8394
8398
|
const config=${JSON.stringify({
|
|
@@ -8404,6 +8408,32 @@ function Te(i, e) {
|
|
|
8404
8408
|
type,
|
|
8405
8409
|
detail
|
|
8406
8410
|
},"*");
|
|
8411
|
+
const reportResourceError=(failure)=>{
|
|
8412
|
+
if(!failure||typeof failure.url!=="string"||!failure.url)return;
|
|
8413
|
+
if(failure.resourceType!=="stylesheet"&&failure.resourceType!=="script")return;
|
|
8414
|
+
post("resource-error",{
|
|
8415
|
+
resourceType:failure.resourceType,
|
|
8416
|
+
url:failure.url,
|
|
8417
|
+
dictionaryId:typeof failure.dictionaryId==="string"&&failure.dictionaryId
|
|
8418
|
+
?failure.dictionaryId
|
|
8419
|
+
:undefined
|
|
8420
|
+
});
|
|
8421
|
+
};
|
|
8422
|
+
globalThis.__GOLDENDICT_WEB_REPORT_RESOURCE_ERROR__=reportResourceError;
|
|
8423
|
+
const pendingResourceErrors=globalThis.__GOLDENDICT_WEB_RESOURCE_ERRORS__;
|
|
8424
|
+
if(Array.isArray(pendingResourceErrors)){
|
|
8425
|
+
pendingResourceErrors.splice(0).forEach(reportResourceError);
|
|
8426
|
+
}
|
|
8427
|
+
const verifyStylesheets=()=>{
|
|
8428
|
+
document.querySelectorAll('link[rel~="stylesheet"][href]').forEach((link)=>{
|
|
8429
|
+
if(!(link instanceof HTMLLinkElement)||link.disabled||link.sheet!==null)return;
|
|
8430
|
+
reportResourceError({
|
|
8431
|
+
resourceType:"stylesheet",
|
|
8432
|
+
url:link.href,
|
|
8433
|
+
dictionaryId:link.closest(".gdarticle")?.getAttribute("data-gd-id")||undefined
|
|
8434
|
+
});
|
|
8435
|
+
});
|
|
8436
|
+
};
|
|
8407
8437
|
const articleOf=(target)=>target instanceof Element?target.closest(".gdarticle"):null;
|
|
8408
8438
|
const articleId=(article)=>article?.getAttribute("data-gd-id")||"";
|
|
8409
8439
|
const syncDictionaryTheme=()=>{
|
|
@@ -8545,10 +8575,10 @@ function Te(i, e) {
|
|
|
8545
8575
|
const resizeObserver=new ResizeObserver(requestSize);
|
|
8546
8576
|
resizeObserver.observe(document.body);
|
|
8547
8577
|
addEventListener("resize",requestSize,{passive:true});
|
|
8548
|
-
addEventListener("load",()=>{requestSize();post("ready",{});});
|
|
8578
|
+
addEventListener("load",()=>{verifyStylesheets();requestSize();post("ready",{});});
|
|
8549
8579
|
})();`;
|
|
8550
8580
|
}
|
|
8551
|
-
function
|
|
8581
|
+
function De(i, e) {
|
|
8552
8582
|
const o = i === "none" ? `'nonce-${e}'` : "'unsafe-inline' 'unsafe-eval' data: blob: http: https:", t = i === "none" ? "'none'" : "http: https:";
|
|
8553
8583
|
return [
|
|
8554
8584
|
"default-src 'none'",
|
|
@@ -8564,35 +8594,66 @@ function Ie(i, e) {
|
|
|
8564
8594
|
"base-uri 'none'"
|
|
8565
8595
|
].join("; ");
|
|
8566
8596
|
}
|
|
8567
|
-
function
|
|
8568
|
-
|
|
8569
|
-
|
|
8597
|
+
function Le() {
|
|
8598
|
+
return `(function(){
|
|
8599
|
+
globalThis.__DICT__={name:"GoldenDict",version:"web"};
|
|
8600
|
+
const pending=[];
|
|
8601
|
+
globalThis.__GOLDENDICT_WEB_RESOURCE_ERRORS__=pending;
|
|
8602
|
+
addEventListener("error",(event)=>{
|
|
8603
|
+
const target=event.target;
|
|
8604
|
+
let resourceType="";
|
|
8605
|
+
let url="";
|
|
8606
|
+
if(target instanceof HTMLLinkElement&&target.relList.contains("stylesheet")){
|
|
8607
|
+
resourceType="stylesheet";
|
|
8608
|
+
url=target.href;
|
|
8609
|
+
}else if(target instanceof HTMLScriptElement&&target.src){
|
|
8610
|
+
resourceType="script";
|
|
8611
|
+
url=target.src;
|
|
8612
|
+
}
|
|
8613
|
+
if(!resourceType||!url)return;
|
|
8614
|
+
const article=target.closest(".gdarticle");
|
|
8615
|
+
const failure={
|
|
8616
|
+
resourceType,
|
|
8617
|
+
url,
|
|
8618
|
+
dictionaryId:article?.getAttribute("data-gd-id")||undefined
|
|
8619
|
+
};
|
|
8620
|
+
const report=globalThis.__GOLDENDICT_WEB_REPORT_RESOURCE_ERROR__;
|
|
8621
|
+
if(typeof report==="function")report(failure);
|
|
8622
|
+
else pending.push(failure);
|
|
8623
|
+
},true);
|
|
8624
|
+
})();`;
|
|
8625
|
+
}
|
|
8626
|
+
function qe(i, e) {
|
|
8627
|
+
const o = e.theme ?? {}, t = q(o.mode), n = e.layoutMode ?? "responsive", a = e.instanceId.replace(/[^a-zA-Z0-9_-]/g, ""), r = i.articles.map(
|
|
8628
|
+
(d) => Te(d, e.apiBaseUrl, e.scriptPolicy)
|
|
8570
8629
|
).join(""), l = r ? `${r}<div class="empty-space" aria-hidden="true"></div>` : `<div class="gdnotfound"><p>No translation for <b>${g(i.word)}</b> was found.</p></div>`, m = o.brandName ? `${i.word} — ${o.brandName}` : i.word;
|
|
8571
8630
|
return `<!doctype html>
|
|
8572
8631
|
<html data-gd-theme="${t}" data-gd-layout="${n}" data-darkreader-scheme="${t}"><head>
|
|
8573
8632
|
<meta charset="utf-8">
|
|
8574
8633
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
8575
|
-
<meta http-equiv="Content-Security-Policy" content="${g(
|
|
8634
|
+
<meta http-equiv="Content-Security-Policy" content="${g(De(e.scriptPolicy, a))}">
|
|
8576
8635
|
<title>${g(m)}</title>
|
|
8577
|
-
<
|
|
8578
|
-
<style>${k(de
|
|
8579
|
-
|
|
8580
|
-
|
|
8581
|
-
<style
|
|
8636
|
+
<script nonce="${a}" data-gd-runtime="compatibility">${Le()}<\/script>
|
|
8637
|
+
<style>${k(de)}</style>
|
|
8638
|
+
<style>${k(se(o.preset))}</style>
|
|
8639
|
+
${n === "responsive" ? `<style data-gd-style="responsive">${k(ce)}</style>` : ""}
|
|
8640
|
+
<style>${ze(o)}</style>
|
|
8641
|
+
<style media="print">${k(le)}</style>
|
|
8582
8642
|
</head><body>
|
|
8583
8643
|
${l}
|
|
8584
|
-
${
|
|
8585
|
-
<script nonce="${a}">${
|
|
8644
|
+
${Ee(i.suggestions)}
|
|
8645
|
+
<script nonce="${a}">${Ie(e.instanceId, t).replace(/<\/script/gi, "<\\/script")}<\/script>
|
|
8586
8646
|
</body></html>`;
|
|
8587
8647
|
}
|
|
8588
|
-
const
|
|
8648
|
+
const f = {
|
|
8589
8649
|
lookup: "goldendict-lookup",
|
|
8590
8650
|
activeArticleChange: "goldendict-active-article-change",
|
|
8591
8651
|
articleToggle: "goldendict-article-toggle",
|
|
8592
8652
|
mediaRequest: "goldendict-media-request",
|
|
8593
8653
|
externalLink: "goldendict-external-link",
|
|
8654
|
+
resourceError: "goldendict-resource-error",
|
|
8594
8655
|
stateChange: "goldendict-state-change"
|
|
8595
|
-
},
|
|
8656
|
+
}, Me = `
|
|
8596
8657
|
:host{display:block;box-sizing:border-box;width:100%;min-width:0;max-width:100%;color:#222;font-family:system-ui,sans-serif;container:goldendict-view / inline-size}
|
|
8597
8658
|
.shell{position:relative;box-sizing:border-box;width:100%;min-width:0;max-width:100%;min-height:8rem;border-radius:var(--gd-host-radius,8px);overflow:hidden;background:var(--gd-host-background,#fff)}
|
|
8598
8659
|
.brand{display:flex;align-items:center;gap:.65rem;min-width:0;padding:.65rem .9rem;border-bottom:1px solid var(--gd-host-border,#e3e3e3);background:var(--gd-host-surface,#f7f9fb);font-weight:650}
|
|
@@ -8600,7 +8661,7 @@ const b = {
|
|
|
8600
8661
|
.brand img{display:block;flex:0 0 auto;width:1.75rem;height:1.75rem;object-fit:contain}
|
|
8601
8662
|
.brand img[hidden]{display:none}
|
|
8602
8663
|
.brand span{min-width:0;overflow-wrap:anywhere}
|
|
8603
|
-
.status{display:grid;place-items:center;min-height:8rem;padding:1.25rem;text-align:center;color:var(--gd-host-muted,#59636e)}
|
|
8664
|
+
.status{display:grid;place-items:center;min-height:8rem;padding:1.25rem;overflow-wrap:anywhere;text-align:center;color:var(--gd-host-muted,#59636e)}
|
|
8604
8665
|
.status[hidden]{display:none}
|
|
8605
8666
|
.status[data-state="error"]{color:var(--gd-host-error,#a21d2d)}
|
|
8606
8667
|
.spinner{width:1.25rem;height:1.25rem;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .75s linear infinite;margin:0 auto .7rem}
|
|
@@ -8610,13 +8671,13 @@ const b = {
|
|
|
8610
8671
|
@container goldendict-view (max-width:30rem){.brand{gap:.5rem;padding:.55rem .65rem}.status{padding:1rem .75rem}}
|
|
8611
8672
|
@media (prefers-reduced-motion:reduce){.spinner{animation:none}}
|
|
8612
8673
|
`;
|
|
8613
|
-
function
|
|
8674
|
+
function Be() {
|
|
8614
8675
|
return globalThis.crypto?.randomUUID?.() ?? `gd-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
8615
8676
|
}
|
|
8616
|
-
function
|
|
8677
|
+
function $e(i) {
|
|
8617
8678
|
return (i instanceof DOMException || i instanceof Error) && i.name === "AbortError";
|
|
8618
8679
|
}
|
|
8619
|
-
class
|
|
8680
|
+
class z extends HTMLElement {
|
|
8620
8681
|
static observedAttributes = [
|
|
8621
8682
|
"api-base",
|
|
8622
8683
|
"word",
|
|
@@ -8625,7 +8686,7 @@ class _ extends HTMLElement {
|
|
|
8625
8686
|
"script-policy",
|
|
8626
8687
|
"layout-mode"
|
|
8627
8688
|
];
|
|
8628
|
-
instanceId =
|
|
8689
|
+
instanceId = Be();
|
|
8629
8690
|
frame;
|
|
8630
8691
|
statusElement;
|
|
8631
8692
|
brandElement;
|
|
@@ -8639,12 +8700,14 @@ class _ extends HTMLElement {
|
|
|
8639
8700
|
responseValue;
|
|
8640
8701
|
themeValue = {};
|
|
8641
8702
|
stateValue = "idle";
|
|
8703
|
+
errorValue;
|
|
8704
|
+
resourceErrorsValue = [];
|
|
8642
8705
|
dictionaryIdsValue = [];
|
|
8643
8706
|
pendingAnchor;
|
|
8644
8707
|
constructor() {
|
|
8645
8708
|
super();
|
|
8646
8709
|
const e = this.attachShadow({ mode: "open" });
|
|
8647
|
-
e.innerHTML = `<style>${
|
|
8710
|
+
e.innerHTML = `<style>${Me}</style>
|
|
8648
8711
|
<section class="shell" part="container">
|
|
8649
8712
|
<div class="brand" part="brand" hidden>
|
|
8650
8713
|
<img alt="" hidden><span></span>
|
|
@@ -8713,6 +8776,14 @@ class _ extends HTMLElement {
|
|
|
8713
8776
|
get response() {
|
|
8714
8777
|
return this.responseValue;
|
|
8715
8778
|
}
|
|
8779
|
+
/** The current request or article-resource error, if `state` is `"error"`. */
|
|
8780
|
+
get error() {
|
|
8781
|
+
return this.errorValue;
|
|
8782
|
+
}
|
|
8783
|
+
/** Dictionary-authored stylesheets or scripts that failed in this render. */
|
|
8784
|
+
get resourceErrors() {
|
|
8785
|
+
return this.resourceErrorsValue.map((e) => ({ ...e }));
|
|
8786
|
+
}
|
|
8716
8787
|
configureClient(e) {
|
|
8717
8788
|
this.clientValue = new v(e);
|
|
8718
8789
|
}
|
|
@@ -8734,7 +8805,7 @@ class _ extends HTMLElement {
|
|
|
8734
8805
|
return;
|
|
8735
8806
|
this.setLookupResponse(r);
|
|
8736
8807
|
} catch (r) {
|
|
8737
|
-
if (n !== this.requestSequence ||
|
|
8808
|
+
if (n !== this.requestSequence || $e(r))
|
|
8738
8809
|
return;
|
|
8739
8810
|
const l = r instanceof Error ? r : new Error(String(r));
|
|
8740
8811
|
this.responseValue = void 0, this.resetFrame(), this.setState("error", { word: t, error: l });
|
|
@@ -8755,11 +8826,13 @@ class _ extends HTMLElement {
|
|
|
8755
8826
|
this.postCommand({ type: "scroll-article", dictionaryId: e });
|
|
8756
8827
|
}
|
|
8757
8828
|
renderResponse(e) {
|
|
8758
|
-
const o = ++this.renderSequence
|
|
8829
|
+
const o = ++this.renderSequence;
|
|
8830
|
+
this.resourceErrorsValue = [], this.errorValue = void 0;
|
|
8831
|
+
const t = `${this.instanceId}-${o}`;
|
|
8759
8832
|
this.activeBridgeInstanceId = t;
|
|
8760
8833
|
const n = this.replaceFrame(!1);
|
|
8761
8834
|
n.title = e.word ? `Dictionary results for ${e.word}` : "Dictionary article";
|
|
8762
|
-
const a =
|
|
8835
|
+
const a = qe(e, {
|
|
8763
8836
|
apiBaseUrl: this.clientValue.baseUrl,
|
|
8764
8837
|
instanceId: t,
|
|
8765
8838
|
scriptPolicy: this.scriptPolicy,
|
|
@@ -8771,7 +8844,7 @@ class _ extends HTMLElement {
|
|
|
8771
8844
|
});
|
|
8772
8845
|
}
|
|
8773
8846
|
resetFrame() {
|
|
8774
|
-
this.activeBridgeInstanceId = void 0, this.replaceFrame(!0);
|
|
8847
|
+
this.activeBridgeInstanceId = void 0, this.resourceErrorsValue = [], this.replaceFrame(!0);
|
|
8775
8848
|
}
|
|
8776
8849
|
replaceFrame(e) {
|
|
8777
8850
|
const o = this.frame, t = this.ownerDocument.createElement("iframe");
|
|
@@ -8780,7 +8853,10 @@ class _ extends HTMLElement {
|
|
|
8780
8853
|
}), o.replaceWith(t), this.frame = t, t.offsetWidth, t;
|
|
8781
8854
|
}
|
|
8782
8855
|
handleFrameLoaded() {
|
|
8783
|
-
this.responseValue && (this.setState(
|
|
8856
|
+
this.responseValue && (this.resourceErrorsValue.length ? this.setState("error", {
|
|
8857
|
+
word: this.responseValue.word,
|
|
8858
|
+
error: this.errorValue ?? this.resourceError(this.resourceErrorsValue[0])
|
|
8859
|
+
}) : this.setState(
|
|
8784
8860
|
this.responseValue.articles.length ? "ready" : "not-found",
|
|
8785
8861
|
{ word: this.responseValue.word }
|
|
8786
8862
|
), this.pendingAnchor && (this.postCommand({ type: "scroll-anchor", anchor: this.pendingAnchor }), this.pendingAnchor = void 0));
|
|
@@ -8805,12 +8881,12 @@ class _ extends HTMLElement {
|
|
|
8805
8881
|
this.handleLookupMessage(t);
|
|
8806
8882
|
break;
|
|
8807
8883
|
case "active-article":
|
|
8808
|
-
this.emit(
|
|
8884
|
+
this.emit(f.activeArticleChange, {
|
|
8809
8885
|
dictionaryId: String(t.dictionaryId ?? "")
|
|
8810
8886
|
});
|
|
8811
8887
|
break;
|
|
8812
8888
|
case "article-toggle":
|
|
8813
|
-
this.emit(
|
|
8889
|
+
this.emit(f.articleToggle, {
|
|
8814
8890
|
dictionaryId: String(t.dictionaryId ?? ""),
|
|
8815
8891
|
collapsed: !!t.collapsed
|
|
8816
8892
|
});
|
|
@@ -8821,8 +8897,34 @@ class _ extends HTMLElement {
|
|
|
8821
8897
|
case "external-link":
|
|
8822
8898
|
this.handleExternalLink(String(t.url ?? ""));
|
|
8823
8899
|
break;
|
|
8900
|
+
case "resource-error":
|
|
8901
|
+
this.handleResourceErrorMessage(t);
|
|
8902
|
+
break;
|
|
8824
8903
|
}
|
|
8825
8904
|
};
|
|
8905
|
+
handleResourceErrorMessage(e) {
|
|
8906
|
+
const o = e.resourceType === "stylesheet" || e.resourceType === "script" ? e.resourceType : void 0, t = String(e.url ?? "").trim();
|
|
8907
|
+
if (!o || !t)
|
|
8908
|
+
return;
|
|
8909
|
+
const n = {
|
|
8910
|
+
resourceType: o,
|
|
8911
|
+
url: t,
|
|
8912
|
+
...e.dictionaryId ? { dictionaryId: String(e.dictionaryId) } : {}
|
|
8913
|
+
};
|
|
8914
|
+
this.resourceErrorsValue.some(
|
|
8915
|
+
(a) => a.resourceType === n.resourceType && a.url === n.url && a.dictionaryId === n.dictionaryId
|
|
8916
|
+
) || (this.resourceErrorsValue.push(n), this.emit(
|
|
8917
|
+
f.resourceError,
|
|
8918
|
+
{ ...n }
|
|
8919
|
+
), this.setState("error", {
|
|
8920
|
+
word: this.responseValue?.word,
|
|
8921
|
+
error: this.resourceError(n)
|
|
8922
|
+
}));
|
|
8923
|
+
}
|
|
8924
|
+
resourceError(e) {
|
|
8925
|
+
const o = e.resourceType === "stylesheet" ? "stylesheet" : "script";
|
|
8926
|
+
return new Error(`Dictionary ${o} failed to load: ${e.url}`);
|
|
8927
|
+
}
|
|
8826
8928
|
handleLookupMessage(e) {
|
|
8827
8929
|
const o = String(e.word ?? "").trim();
|
|
8828
8930
|
if (!o)
|
|
@@ -8832,7 +8934,7 @@ class _ extends HTMLElement {
|
|
|
8832
8934
|
...e.anchor ? { anchor: String(e.anchor) } : {},
|
|
8833
8935
|
...t.length ? { dictionaryIds: [...t] } : {}
|
|
8834
8936
|
};
|
|
8835
|
-
this.emit(
|
|
8937
|
+
this.emit(f.lookup, n, !0).defaultPrevented || (this.pendingAnchor = n.anchor, this.lookup(o, t));
|
|
8836
8938
|
}
|
|
8837
8939
|
handleMediaMessage(e) {
|
|
8838
8940
|
const o = e.kind === "video" || e.kind === "resource" ? e.kind : "audio", t = {
|
|
@@ -8840,14 +8942,14 @@ class _ extends HTMLElement {
|
|
|
8840
8942
|
url: String(e.url ?? ""),
|
|
8841
8943
|
...e.dictionaryId ? { dictionaryId: String(e.dictionaryId) } : {}
|
|
8842
8944
|
};
|
|
8843
|
-
!t.url || this.emit(
|
|
8945
|
+
!t.url || this.emit(f.mediaRequest, t, !0).defaultPrevented || (o === "audio" ? new Audio(t.url).play().catch(() => {
|
|
8844
8946
|
}) : this.openExternal(t.url));
|
|
8845
8947
|
}
|
|
8846
8948
|
handleExternalLink(e) {
|
|
8847
8949
|
if (!e)
|
|
8848
8950
|
return;
|
|
8849
8951
|
this.emit(
|
|
8850
|
-
|
|
8952
|
+
f.externalLink,
|
|
8851
8953
|
{ url: e },
|
|
8852
8954
|
!0
|
|
8853
8955
|
).defaultPrevented || this.openExternal(e);
|
|
@@ -8862,15 +8964,15 @@ class _ extends HTMLElement {
|
|
|
8862
8964
|
}
|
|
8863
8965
|
setState(e, o = {}) {
|
|
8864
8966
|
const t = e !== this.stateValue;
|
|
8865
|
-
if (this.stateValue = e, this.statusElement.dataset.state = e, this.statusElement.hidden = e === "ready" || e === "not-found", e === "loading") {
|
|
8967
|
+
if (this.stateValue = e, this.errorValue = e === "error" ? o.error ?? new Error("The dictionary request failed.") : void 0, this.statusElement.dataset.state = e, this.statusElement.hidden = e === "ready" || e === "not-found", e === "loading") {
|
|
8866
8968
|
this.frame.hidden = !0, this.statusElement.innerHTML = '<div><div class="spinner" aria-hidden="true"></div>Looking up <strong></strong>…</div>';
|
|
8867
8969
|
const n = this.statusElement.querySelector("strong");
|
|
8868
8970
|
n && (n.textContent = o.word ?? "");
|
|
8869
|
-
} else e === "error" ? this.statusElement.textContent =
|
|
8870
|
-
t && this.emit(
|
|
8971
|
+
} else e === "error" ? this.statusElement.textContent = this.errorValue?.message ?? "The dictionary request failed." : e === "idle" ? this.statusElement.textContent = "Enter a word to search the loaded dictionaries." : this.statusElement.textContent = e === "not-found" ? `No translation found for ${o.word ?? ""}.` : "";
|
|
8972
|
+
t && this.emit(f.stateChange, {
|
|
8871
8973
|
state: e,
|
|
8872
8974
|
...o.word ? { word: o.word } : {},
|
|
8873
|
-
...
|
|
8975
|
+
...this.errorValue ? { error: this.errorValue } : {}
|
|
8874
8976
|
});
|
|
8875
8977
|
}
|
|
8876
8978
|
postCommand(e) {
|
|
@@ -8893,26 +8995,26 @@ class _ extends HTMLElement {
|
|
|
8893
8995
|
return this.dispatchEvent(n), n;
|
|
8894
8996
|
}
|
|
8895
8997
|
}
|
|
8896
|
-
function
|
|
8998
|
+
function Ue(i = "goldendict-view") {
|
|
8897
8999
|
if (!globalThis.customElements)
|
|
8898
|
-
return
|
|
9000
|
+
return z;
|
|
8899
9001
|
const e = globalThis.customElements.get(i);
|
|
8900
|
-
return e || (globalThis.customElements.define(i,
|
|
9002
|
+
return e || (globalThis.customElements.define(i, z), z);
|
|
8901
9003
|
}
|
|
8902
|
-
|
|
9004
|
+
Ue();
|
|
8903
9005
|
export {
|
|
8904
|
-
|
|
8905
|
-
|
|
9006
|
+
_e as DARK_THEME_TOKENS,
|
|
9007
|
+
M as DictionaryApiError,
|
|
8906
9008
|
v as DictionaryClient,
|
|
8907
|
-
|
|
8908
|
-
|
|
8909
|
-
|
|
8910
|
-
|
|
8911
|
-
|
|
8912
|
-
|
|
9009
|
+
f as GOLDENDICT_EVENTS,
|
|
9010
|
+
me as GOLDENDICT_SCHEME_SUPPORT,
|
|
9011
|
+
z as GoldenDictView,
|
|
9012
|
+
ve as LIGHT_THEME_TOKENS,
|
|
9013
|
+
L as classifyArticleLink,
|
|
9014
|
+
Ue as defineGoldendictView,
|
|
8913
9015
|
k as escapeStyleText,
|
|
8914
9016
|
p as resolveResourceUrl,
|
|
8915
|
-
|
|
8916
|
-
|
|
9017
|
+
q as resolveThemeMode,
|
|
9018
|
+
ze as themeToCss
|
|
8917
9019
|
};
|
|
8918
9020
|
//# sourceMappingURL=index.js.map
|