@xwadex/fesd 0.0.63 → 0.0.64
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/dist/fesd-bundle.js +160 -156
- package/dist/fesd-bundle.js.map +1 -1
- package/package.json +7 -7
package/dist/fesd-bundle.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
var
|
|
1
|
+
var ve = (s, e, t) => {
|
|
2
2
|
if (!e.has(s))
|
|
3
3
|
throw TypeError("Cannot " + t);
|
|
4
4
|
};
|
|
5
|
-
var
|
|
5
|
+
var g = (s, e, t) => {
|
|
6
6
|
if (e.has(s))
|
|
7
7
|
throw TypeError("Cannot add the same private member more than once");
|
|
8
8
|
e instanceof WeakSet ? e.add(s) : e.set(s, t);
|
|
9
9
|
};
|
|
10
|
-
var h = (s, e, t) => (
|
|
11
|
-
import { i as
|
|
12
|
-
import { A as
|
|
13
|
-
import
|
|
14
|
-
import { m as
|
|
15
|
-
const
|
|
10
|
+
var h = (s, e, t) => (ve(s, e, "access private method"), t);
|
|
11
|
+
import { i as se, a as G, g as q, v as ye, c as $e, b as xe, d as Ae, e as ke, f as Se, s as Le } from "./image-preview-bundle.js";
|
|
12
|
+
import { A as Fe, j as Ue, C as Ve, h as Ye, D as Ge, m as Je, I as Ke, k as Qe, M as Ze, l as et, R as tt, T as rt } from "./image-preview-bundle.js";
|
|
13
|
+
import Z from "jquery";
|
|
14
|
+
import { m as $, S as Ee, p as Ce } from "./vendor-bundle.js";
|
|
15
|
+
const E = () => {
|
|
16
16
|
const s = navigator.userAgent, e = {
|
|
17
17
|
// Firefox 1.0+
|
|
18
18
|
isFirefox: typeof InstallTrigger < "u",
|
|
@@ -47,86 +47,86 @@ const L = () => {
|
|
|
47
47
|
isLinux: s.indexOf("Linux") > -1
|
|
48
48
|
};
|
|
49
49
|
return { browser: e, mobile: t, os: r };
|
|
50
|
-
},
|
|
51
|
-
const { browser: s } =
|
|
50
|
+
}, Te = () => {
|
|
51
|
+
const { browser: s } = E();
|
|
52
52
|
return Object.keys(s).find((e) => {
|
|
53
53
|
if (s[e])
|
|
54
54
|
return s[e];
|
|
55
55
|
});
|
|
56
|
-
},
|
|
57
|
-
const { mobile: s } =
|
|
56
|
+
}, qe = () => {
|
|
57
|
+
const { mobile: s } = E();
|
|
58
58
|
return Object.keys(s).some((e) => {
|
|
59
59
|
if (s[e])
|
|
60
60
|
return s[e];
|
|
61
61
|
});
|
|
62
|
-
},
|
|
63
|
-
const { os: s } =
|
|
62
|
+
}, We = () => {
|
|
63
|
+
const { os: s } = E();
|
|
64
64
|
return Object.keys(s).find((e) => {
|
|
65
65
|
if (s[e])
|
|
66
66
|
return s[e];
|
|
67
67
|
});
|
|
68
|
-
},
|
|
69
|
-
function
|
|
68
|
+
}, _e = () => console.dir(E());
|
|
69
|
+
function ze() {
|
|
70
70
|
return {
|
|
71
|
-
init:
|
|
72
|
-
isBrowser4:
|
|
73
|
-
isMobile4:
|
|
74
|
-
isOs4:
|
|
75
|
-
logs:
|
|
71
|
+
init: E,
|
|
72
|
+
isBrowser4: Te,
|
|
73
|
+
isMobile4: qe,
|
|
74
|
+
isOs4: We,
|
|
75
|
+
logs: _e
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
const b = (s, e, t) => {
|
|
79
|
-
s && (
|
|
79
|
+
s && (xe(s) ? s.forEach((r) => r.style[e] = t) : s.style[e] = t);
|
|
80
80
|
};
|
|
81
|
-
var
|
|
82
|
-
class
|
|
81
|
+
var W, ie, _, oe, k, J, O, ae, M, ne, R, le, B, ce, I, de, N, ue, z, pe, X, he, S, K, D, me, L, Q;
|
|
82
|
+
class Xe {
|
|
83
83
|
constructor(e, t = {}) {
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
g(this, W);
|
|
85
|
+
g(this, _);
|
|
86
86
|
// 取得元件上的設定值
|
|
87
|
-
|
|
87
|
+
g(this, k);
|
|
88
88
|
// 設置設定值的 CSS 樣式
|
|
89
|
-
|
|
89
|
+
g(this, O);
|
|
90
90
|
// 表格拖曳功能
|
|
91
|
-
|
|
91
|
+
g(this, M);
|
|
92
92
|
// 設置表格凍結
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
g(this, R);
|
|
94
|
+
g(this, B);
|
|
95
|
+
g(this, I);
|
|
96
|
+
g(this, N);
|
|
97
97
|
// Markdown 設置
|
|
98
|
-
|
|
98
|
+
g(this, z);
|
|
99
99
|
// Navigation 設置
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
!
|
|
100
|
+
g(this, X);
|
|
101
|
+
g(this, S);
|
|
102
|
+
g(this, D);
|
|
103
|
+
g(this, L);
|
|
104
|
+
!se(e) || !G(e) || (this.__storage__ = {
|
|
105
105
|
el: e,
|
|
106
106
|
options: t
|
|
107
|
-
}, this.active = "data-article-active", h(this,
|
|
107
|
+
}, this.active = "data-article-active", h(this, W, ie).call(this));
|
|
108
108
|
}
|
|
109
109
|
update() {
|
|
110
110
|
const { elements: e } = this;
|
|
111
111
|
e.forEach((t) => {
|
|
112
112
|
t.querySelectorAll("._article").forEach((r) => {
|
|
113
|
-
r.article = {}, r.article.parent = t, r.article.params = h(this,
|
|
113
|
+
r.article = {}, r.article.parent = t, r.article.params = h(this, k, J).call(this, r), h(this, S, K).call(this, r), h(this, L, Q).call(this, r);
|
|
114
114
|
});
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
|
|
119
|
-
const { el: e, options: t } = this.__storage__, { SETTINGS: r } =
|
|
120
|
-
this.elements = t.state == "not active" ?
|
|
121
|
-
},
|
|
118
|
+
W = new WeakSet(), ie = function() {
|
|
119
|
+
const { el: e, options: t } = this.__storage__, { SETTINGS: r } = Ae;
|
|
120
|
+
this.elements = t.state == "not active" ? q(e + `:not([${this.active}])`) : q(e), this.elements = q(e), this.options = Object.assign({}, r, t), h(this, _, oe).call(this);
|
|
121
|
+
}, _ = new WeakSet(), oe = function() {
|
|
122
122
|
const { elements: e } = this;
|
|
123
123
|
e.forEach((t) => {
|
|
124
124
|
t.setAttribute(this.active, ""), t.querySelectorAll("._article").forEach((r) => {
|
|
125
125
|
var o, l;
|
|
126
|
-
r.article = {}, r.article.parent = t, r.article.params = h(this,
|
|
126
|
+
r.article = {}, r.article.parent = t, r.article.params = h(this, k, J).call(this, r), r.article.methods = {}, r.article.methods.update = this.update, h(l = h(o = h(this, O, ae).call(this, r), S, K).call(o, r), D, me).call(l, r), h(this, L, Q).call(this, r);
|
|
127
127
|
});
|
|
128
128
|
});
|
|
129
|
-
},
|
|
129
|
+
}, k = new WeakSet(), J = function(e) {
|
|
130
130
|
return {
|
|
131
131
|
// 元件本身
|
|
132
132
|
$selector: e,
|
|
@@ -162,10 +162,10 @@ q = new WeakSet(), re = function() {
|
|
|
162
162
|
quoteColor: e.getAttribute("quote-color"),
|
|
163
163
|
markdown: e.getAttribute("data-table-markdown") ?? !1
|
|
164
164
|
};
|
|
165
|
-
},
|
|
165
|
+
}, O = new WeakSet(), ae = function(e) {
|
|
166
166
|
const { params: t } = e.article;
|
|
167
167
|
return b(t.$h, "color", t.hColor), b(t.$subH, "color", t.subHColor), b(t.$p, "color", t.pColor), b(t.$description, "color", t.descriptionColor), b(t.$button, "backgroundColor", t.buttonColor), b(t.$button, "color", t.buttonTextColor), t.buttonColorHover && t.$button && (t.$button.appendChild(document.createElement("span")), b(t.$button.querySelector("span"), "backgroundColor", t.buttonColorHover)), b(t.$backgroundWrap, "backgroundColor", t.typeFullColor), b(t.$contentWrap, "backgroundColor", t.typeFullBoxColor), b(t.$quote, "color", t.quoteColor), this;
|
|
168
|
-
},
|
|
168
|
+
}, M = new WeakSet(), ne = function(e) {
|
|
169
169
|
const { params: t } = e.article, r = t.$table;
|
|
170
170
|
let o = !1, l, n, u, p;
|
|
171
171
|
r.addEventListener("mousedown", function(c) {
|
|
@@ -180,16 +180,16 @@ q = new WeakSet(), re = function() {
|
|
|
180
180
|
if (!o)
|
|
181
181
|
return;
|
|
182
182
|
c.preventDefault();
|
|
183
|
-
const i = r.getBoundingClientRect(), a = c.pageX - i.left, d = c.pageY - i.top,
|
|
184
|
-
r.scrollLeft = u -
|
|
183
|
+
const i = r.getBoundingClientRect(), a = c.pageX - i.left, d = c.pageY - i.top, m = a - l, f = d - n;
|
|
184
|
+
r.scrollLeft = u - m, r.scrollTop = p - f;
|
|
185
185
|
});
|
|
186
|
-
},
|
|
186
|
+
}, R = new WeakSet(), le = function(e, t, r) {
|
|
187
187
|
const { basic_rwd: o } = this.options, l = window.innerWidth < o, n = [...e.querySelectorAll("tr")];
|
|
188
188
|
if (l || !n.length)
|
|
189
189
|
return;
|
|
190
|
-
const u = h(this,
|
|
191
|
-
h(this, N,
|
|
192
|
-
},
|
|
190
|
+
const u = h(this, B, ce).call(this, n);
|
|
191
|
+
h(this, N, ue).call(this, e, u, t, r);
|
|
192
|
+
}, B = new WeakSet(), ce = function(e) {
|
|
193
193
|
const t = [], r = /* @__PURE__ */ new Set();
|
|
194
194
|
return e.forEach((o, l) => {
|
|
195
195
|
const n = [...o.children];
|
|
@@ -202,10 +202,10 @@ q = new WeakSet(), re = function() {
|
|
|
202
202
|
for (let a = 0; a < c; a++) {
|
|
203
203
|
const d = l + a;
|
|
204
204
|
t[d] ?? (t[d] = []);
|
|
205
|
-
for (let
|
|
206
|
-
const f = u +
|
|
205
|
+
for (let m = 0; m < i; m++) {
|
|
206
|
+
const f = u + m;
|
|
207
207
|
t[d][f] = {
|
|
208
|
-
el: a === 0 &&
|
|
208
|
+
el: a === 0 && m === 0 ? p : null,
|
|
209
209
|
topRow: l,
|
|
210
210
|
leftCol: u,
|
|
211
211
|
rowspan: c,
|
|
@@ -216,7 +216,7 @@ q = new WeakSet(), re = function() {
|
|
|
216
216
|
u += i;
|
|
217
217
|
});
|
|
218
218
|
}), t;
|
|
219
|
-
},
|
|
219
|
+
}, I = new WeakSet(), de = function(e, t) {
|
|
220
220
|
var n;
|
|
221
221
|
const r = t.length, o = Array(r).fill(0), l = e.getBoundingClientRect().top;
|
|
222
222
|
for (let u = 0; u < r; u++)
|
|
@@ -229,9 +229,9 @@ q = new WeakSet(), re = function() {
|
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
return o;
|
|
232
|
-
}, N = new WeakSet(),
|
|
232
|
+
}, N = new WeakSet(), ue = function(e, t, r, o) {
|
|
233
233
|
var p;
|
|
234
|
-
const l = h(this,
|
|
234
|
+
const l = h(this, I, de).call(this, e, t), n = ((p = t[0]) == null ? void 0 : p.length) ?? 0, u = Array(n).fill(0);
|
|
235
235
|
for (let c = 0; c < n; c++)
|
|
236
236
|
for (let i = 0; i < t.length; i++) {
|
|
237
237
|
const a = t[i][c];
|
|
@@ -244,15 +244,15 @@ q = new WeakSet(), re = function() {
|
|
|
244
244
|
(c) => c.forEach((i) => {
|
|
245
245
|
if (!(i != null && i.el))
|
|
246
246
|
return;
|
|
247
|
-
const { el: a, topRow: d, leftCol:
|
|
248
|
-
a.style.position = "sticky", a.style.zIndex = f &&
|
|
247
|
+
const { el: a, topRow: d, leftCol: m } = i, f = d < r, x = m < o;
|
|
248
|
+
a.style.position = "sticky", a.style.zIndex = f && x ? 3 : f ? 2 : x ? 1 : 0, a.style.backgroundColor = getComputedStyle(a).backgroundColor, f && (a.style.top = `${l[d]}px`), x && (a.style.left = `${u[m]}px`);
|
|
249
249
|
})
|
|
250
250
|
);
|
|
251
|
-
}, z = new WeakSet(),
|
|
251
|
+
}, z = new WeakSet(), pe = function(e) {
|
|
252
252
|
const { markdownLink: t, markdownImg: r, markdownLinkBlank: o } = this.options;
|
|
253
253
|
if (e.hasAttribute("data-markdown-rendered"))
|
|
254
254
|
return;
|
|
255
|
-
new
|
|
255
|
+
new $.Renderer(), $.use({
|
|
256
256
|
extensions: [
|
|
257
257
|
{
|
|
258
258
|
name: "center",
|
|
@@ -272,7 +272,7 @@ q = new WeakSet(), re = function() {
|
|
|
272
272
|
};
|
|
273
273
|
},
|
|
274
274
|
renderer(i) {
|
|
275
|
-
return `<div data-center="true">${
|
|
275
|
+
return `<div data-center="true">${$.parser(i.tokens)}</div>`;
|
|
276
276
|
}
|
|
277
277
|
},
|
|
278
278
|
{
|
|
@@ -293,7 +293,7 @@ q = new WeakSet(), re = function() {
|
|
|
293
293
|
};
|
|
294
294
|
},
|
|
295
295
|
renderer(i) {
|
|
296
|
-
return `<div data-left="true">${
|
|
296
|
+
return `<div data-left="true">${$.parser(i.tokens)}</div>`;
|
|
297
297
|
}
|
|
298
298
|
},
|
|
299
299
|
{
|
|
@@ -314,7 +314,7 @@ q = new WeakSet(), re = function() {
|
|
|
314
314
|
};
|
|
315
315
|
},
|
|
316
316
|
renderer(i) {
|
|
317
|
-
return `<div data-right="true">${
|
|
317
|
+
return `<div data-right="true">${$.parser(i.tokens)}</div>`;
|
|
318
318
|
}
|
|
319
319
|
},
|
|
320
320
|
{
|
|
@@ -361,7 +361,7 @@ q = new WeakSet(), re = function() {
|
|
|
361
361
|
}
|
|
362
362
|
]
|
|
363
363
|
});
|
|
364
|
-
const l = ["h2", "h3", "h4", "h5", "h6", "b", "del", "i", "em", "strong", "p", "ul", "ol", "li", "br", "span", "div", "sup", "sub"], n = ["data-center", "data-right", "data-left"], u = (i) =>
|
|
364
|
+
const l = ["h2", "h3", "h4", "h5", "h6", "b", "del", "i", "em", "strong", "p", "ul", "ol", "li", "br", "span", "div", "sup", "sub"], n = ["data-center", "data-right", "data-left"], u = (i) => Ce.sanitize(i, {
|
|
365
365
|
ALLOWED_TAGS: [
|
|
366
366
|
...l,
|
|
367
367
|
...t ? ["a"] : [],
|
|
@@ -373,16 +373,16 @@ q = new WeakSet(), re = function() {
|
|
|
373
373
|
...r ? ["src", "alt", "title"] : []
|
|
374
374
|
],
|
|
375
375
|
RETURN_TRUSTED_TYPE: !1
|
|
376
|
-
}), p = (i) => u(
|
|
376
|
+
}), p = (i) => u($.parse(i));
|
|
377
377
|
e.querySelectorAll("td,th").forEach((i) => {
|
|
378
378
|
i.innerHTML = i.textContent;
|
|
379
379
|
const a = i.textContent.trim().replace(/<[^>]*>/g, "");
|
|
380
|
-
i.innerHTML = p(a), o &&
|
|
380
|
+
i.innerHTML = p(a), o && Z(i).find("a") && Z(i).find("a").attr({
|
|
381
381
|
target: "_blank",
|
|
382
382
|
rel: "noopener noreferrer"
|
|
383
383
|
});
|
|
384
384
|
}), e.setAttribute("data-markdown-rendered", "true");
|
|
385
|
-
},
|
|
385
|
+
}, X = new WeakSet(), he = function(e) {
|
|
386
386
|
const { scrollStep: t } = this.options, r = e.querySelector("._contentWrap"), o = e.querySelector("._tableCover"), l = e.querySelector("._table"), n = typeof t == "number" ? t : r.clientWidth * 0.5;
|
|
387
387
|
if (!r || !o || o.querySelector(".table_navigation"))
|
|
388
388
|
return;
|
|
@@ -399,21 +399,21 @@ q = new WeakSet(), re = function() {
|
|
|
399
399
|
}), c.addEventListener("click", () => {
|
|
400
400
|
l.scrollBy({ left: n, behavior: "smooth" });
|
|
401
401
|
}), l.addEventListener("scroll", i), window.addEventListener("resize", i), i();
|
|
402
|
-
},
|
|
402
|
+
}, S = new WeakSet(), K = function(e) {
|
|
403
403
|
const { params: t } = e.article;
|
|
404
|
-
return t.$video.length && new
|
|
405
|
-
},
|
|
404
|
+
return t.$video.length && new ye(t.$video, this.options.videoOptions), this;
|
|
405
|
+
}, D = new WeakSet(), me = function(e) {
|
|
406
406
|
const { basic_rwd: t } = this.options, { params: r } = e.article;
|
|
407
407
|
if (!r.$swiper)
|
|
408
408
|
return;
|
|
409
|
-
const o =
|
|
409
|
+
const o = $e(), l = this;
|
|
410
410
|
let n = {
|
|
411
411
|
on: {
|
|
412
412
|
init(c) {
|
|
413
413
|
const i = c.$el[0];
|
|
414
414
|
r.$video.length && ([...i.querySelectorAll("[video4-active]")].forEach((d) => {
|
|
415
|
-
var
|
|
416
|
-
(
|
|
415
|
+
var m, f;
|
|
416
|
+
(m = d.querySelector(ke.SETTINGS.videoButton)) == null || m.remove(), (f = d.querySelector(".overlay")) == null || f.remove(), d.removeAttribute("video4-active");
|
|
417
417
|
}), l.update());
|
|
418
418
|
},
|
|
419
419
|
observerUpdate(c) {
|
|
@@ -447,18 +447,18 @@ q = new WeakSet(), re = function() {
|
|
|
447
447
|
}), (r.$selector.getAttribute("swiper-loop") !== "off" || !r.$selector.getAttribute("swiper-loop")) && (n.loop = !0), r.$selector.getAttribute("swiper-speed") && (n.speed = parseInt(r.$selector.getAttribute("swiper-speed"))), r.$selector.getAttribute("swiper-parallax") !== "off" && !r.$selector.getAttribute("swiper-loop") && (n.parallax = !0), r.$selector.getAttribute("swiper-pagination-dynamic") === "on" && (n.pagination.dynamicBullets = !0, n.pagination ? n.pagination.dynamicBullets = !0 : console.warn("pagination undefined"));
|
|
448
448
|
let u = () => window.innerWidth > t && Number(r.$selector.getAttribute("swiper-num")) || 1;
|
|
449
449
|
r.$swiper.querySelectorAll(".swiper-slide").length <= u() && (n.navigation = !1, n.pagination = !1, n.autoplay = !1, n.loop = !1, r.$selector.querySelector(".swiper-button-cover").style.display = "none", r.$selector.querySelector(".swiper-pagination").style.display = "none", r.$swiper.classList.add("swiper-no-swiping"));
|
|
450
|
-
const p = new
|
|
450
|
+
const p = new Ee(r.$swiper, n);
|
|
451
451
|
return e.article.swiperList = [], e.article.swiperList.push(p), this;
|
|
452
|
-
},
|
|
452
|
+
}, L = new WeakSet(), Q = function(e) {
|
|
453
453
|
const { navigation: t } = this.options, { params: r } = e.article;
|
|
454
454
|
if (!r.$table)
|
|
455
455
|
return;
|
|
456
|
-
const o = e.getAttribute("freeze-table") === "on", l = parseInt(e.getAttribute("freeze-table-row") ?? "0", 10), n = parseInt(e.getAttribute("freeze-table-col") ?? "0", 10), u = e.querySelector("table"), p = e.querySelector("._tipText"), c = e.offsetWidth, i = u.offsetWidth, a = c < i, d = r.markdown === "on",
|
|
457
|
-
o && h(this,
|
|
456
|
+
const o = e.getAttribute("freeze-table") === "on", l = parseInt(e.getAttribute("freeze-table-row") ?? "0", 10), n = parseInt(e.getAttribute("freeze-table-col") ?? "0", 10), u = e.querySelector("table"), p = e.querySelector("._tipText"), c = e.offsetWidth, i = u.offsetWidth, a = c < i, d = r.markdown === "on", m = () => {
|
|
457
|
+
o && h(this, R, le).call(this, u, l, n), (o || a) && h(this, M, ne).call(this, e), d && h(this, z, pe).call(this, u), t && a && h(this, X, he).call(this, e), a ? (e.classList.add("overflow"), p.style.display = "flex") : (e.classList.remove("overflow"), p.style.display = "none");
|
|
458
458
|
};
|
|
459
|
-
return
|
|
459
|
+
return m(), window.addEventListener("resize", m), this;
|
|
460
460
|
};
|
|
461
|
-
let
|
|
461
|
+
let ee = "ontouchstart" in document.documentElement ? "touchstart" : "mousedown", te = "ontouchend" in document.documentElement ? "touchend" : "mouseup", V = "ontouchmove" in document.documentElement ? "touchmove" : "mousemove";
|
|
462
462
|
function w(s) {
|
|
463
463
|
const e = window.getComputedStyle(s), t = e.transform || e.mozTransform;
|
|
464
464
|
if (t === "none")
|
|
@@ -481,7 +481,7 @@ function w(s) {
|
|
|
481
481
|
z: Number(o[14])
|
|
482
482
|
};
|
|
483
483
|
}
|
|
484
|
-
function
|
|
484
|
+
function T(s) {
|
|
485
485
|
const t = s.querySelector(".wrapper").querySelectorAll(".item");
|
|
486
486
|
let r = 0;
|
|
487
487
|
return t.forEach((o) => {
|
|
@@ -489,7 +489,7 @@ function C(s) {
|
|
|
489
489
|
r += o.getBoundingClientRect().width + n + u;
|
|
490
490
|
}), r;
|
|
491
491
|
}
|
|
492
|
-
function
|
|
492
|
+
function Y(s) {
|
|
493
493
|
if (w(s.slideWrapEl).x >= s.translateMin)
|
|
494
494
|
return "is-start";
|
|
495
495
|
if (w(s.slideWrapEl).x <= s.translateMax)
|
|
@@ -497,10 +497,10 @@ function U(s) {
|
|
|
497
497
|
if (w(s.slideWrapEl).x < s.translateMin && w(s.slideWrapEl).x > s.translateMax)
|
|
498
498
|
return "is-middle";
|
|
499
499
|
}
|
|
500
|
-
function
|
|
500
|
+
function Oe(s) {
|
|
501
501
|
const e = s.el, t = e.querySelector(".wrapper");
|
|
502
|
-
t.addEventListener(
|
|
503
|
-
switch (s.isDown = !0, s.slidable && t.classList.add("dragging"),
|
|
502
|
+
t.addEventListener(ee, function(r) {
|
|
503
|
+
switch (s.isDown = !0, s.slidable && t.classList.add("dragging"), ee) {
|
|
504
504
|
case "mousedown":
|
|
505
505
|
s.startX = r.pageX;
|
|
506
506
|
break;
|
|
@@ -509,10 +509,10 @@ function We(s) {
|
|
|
509
509
|
break;
|
|
510
510
|
}
|
|
511
511
|
s.nowTranslateX = w(t).x;
|
|
512
|
-
}), t.addEventListener(
|
|
512
|
+
}), t.addEventListener(te, function(r) {
|
|
513
513
|
s.isDown = !1, t.classList.remove("dragging"), t.classList.remove("moving");
|
|
514
514
|
let o;
|
|
515
|
-
switch (
|
|
515
|
+
switch (V) {
|
|
516
516
|
case "mousemove":
|
|
517
517
|
o = r.pageX - s.startX;
|
|
518
518
|
break;
|
|
@@ -521,7 +521,7 @@ function We(s) {
|
|
|
521
521
|
break;
|
|
522
522
|
}
|
|
523
523
|
if (o === 0 && r.target.closest(".item")) {
|
|
524
|
-
if (
|
|
524
|
+
if (te === "mouseup" && r.button !== 0)
|
|
525
525
|
return;
|
|
526
526
|
t.querySelectorAll(".item").forEach((n) => {
|
|
527
527
|
n.classList.remove("active");
|
|
@@ -530,13 +530,13 @@ function We(s) {
|
|
|
530
530
|
s.slidable && s.resetPos(e);
|
|
531
531
|
}), t.addEventListener("mouseleave", function() {
|
|
532
532
|
s.isDown && s.slidable && (s.isDown = !1, t.classList.remove("dragging"), t.classList.remove("moving"), s.resetPos(e));
|
|
533
|
-
}), t.addEventListener(
|
|
533
|
+
}), t.addEventListener(V, function(r) {
|
|
534
534
|
if (s.draggable && s.slidable) {
|
|
535
535
|
if (!s.isDown)
|
|
536
536
|
return;
|
|
537
537
|
r.preventDefault();
|
|
538
538
|
let o;
|
|
539
|
-
switch (
|
|
539
|
+
switch (V) {
|
|
540
540
|
case "mousemove":
|
|
541
541
|
o = r.pageX - s.startX;
|
|
542
542
|
break;
|
|
@@ -555,20 +555,20 @@ function We(s) {
|
|
|
555
555
|
}
|
|
556
556
|
});
|
|
557
557
|
}
|
|
558
|
-
function
|
|
558
|
+
function Me(s) {
|
|
559
559
|
const e = s.querySelectorAll("a");
|
|
560
560
|
for (var t = 0, r = e.length; t < r; t++)
|
|
561
561
|
e[t].draggable = !1;
|
|
562
562
|
}
|
|
563
|
-
class
|
|
563
|
+
class De {
|
|
564
564
|
constructor(e, t) {
|
|
565
565
|
this.el = typeof e == "string" ? document.querySelector(e) : e, this.slideWrapEl = this.el.querySelector(".wrapper"), this.params = {
|
|
566
566
|
speed: 300,
|
|
567
567
|
clickSwitch: !0,
|
|
568
568
|
breakpoint: !1
|
|
569
|
-
}, Object.assign(this.params, t), this.draggable = !0, this.isDown = !1, this.startX = 0, this.nowTranslateX = w(this.slideWrapEl).x, this.slideTotalWidth =
|
|
569
|
+
}, Object.assign(this.params, t), this.draggable = !0, this.isDown = !1, this.startX = 0, this.nowTranslateX = w(this.slideWrapEl).x, this.slideTotalWidth = T(this.el), this.translateMin = 0, this.translateMax = -Math.floor(
|
|
570
570
|
Math.abs(
|
|
571
|
-
|
|
571
|
+
T(this.el) - this.el.querySelector(".wrapper").getBoundingClientRect().width
|
|
572
572
|
)
|
|
573
573
|
), this.slidable = this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) && (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint), this.init();
|
|
574
574
|
}
|
|
@@ -576,7 +576,7 @@ class Ie {
|
|
|
576
576
|
const e = this;
|
|
577
577
|
e.slidable && (e.slideWrapEl.style.width = `${e.slideTotalWidth}px`, e.el.classList.add("slidable"), e.slideWrapEl.querySelector(".item.active") && e.moveActive()), window.addEventListener("resize", function() {
|
|
578
578
|
e.update();
|
|
579
|
-
}),
|
|
579
|
+
}), Oe(e), Me(e.el);
|
|
580
580
|
}
|
|
581
581
|
moveActive(e) {
|
|
582
582
|
const t = this, r = t.slideWrapEl.querySelector(".item.active"), l = r.previousElementSibling ? r.offsetLeft - t.el.clientWidth / 2 + r.clientWidth / 2 : 0;
|
|
@@ -604,7 +604,7 @@ class Ie {
|
|
|
604
604
|
t.slideWrapEl.addEventListener(
|
|
605
605
|
"transitionend",
|
|
606
606
|
function() {
|
|
607
|
-
switch (t.nowTranslateX = w(t.slideWrapEl).x,
|
|
607
|
+
switch (t.nowTranslateX = w(t.slideWrapEl).x, Y(t)) {
|
|
608
608
|
case "is-start":
|
|
609
609
|
t.el.classList.add("is-start"), t.el.classList.remove("is-end");
|
|
610
610
|
break;
|
|
@@ -619,7 +619,7 @@ class Ie {
|
|
|
619
619
|
!1
|
|
620
620
|
);
|
|
621
621
|
else
|
|
622
|
-
switch (t.nowTranslateX = w(t.slideWrapEl).x,
|
|
622
|
+
switch (t.nowTranslateX = w(t.slideWrapEl).x, Y(t)) {
|
|
623
623
|
case "is-start":
|
|
624
624
|
t.el.classList.add("is-start"), t.el.classList.remove("is-end");
|
|
625
625
|
break;
|
|
@@ -634,7 +634,7 @@ class Ie {
|
|
|
634
634
|
}
|
|
635
635
|
resetPos() {
|
|
636
636
|
const e = this;
|
|
637
|
-
switch (
|
|
637
|
+
switch (Y(e)) {
|
|
638
638
|
case "is-start":
|
|
639
639
|
e.el.classList.add("is-start"), e.el.classList.remove("is-end"), Object.assign(e.slideWrapEl.style, {
|
|
640
640
|
transition: `all ${e.params.speed}ms ease 0s`,
|
|
@@ -654,14 +654,14 @@ class Ie {
|
|
|
654
654
|
}
|
|
655
655
|
update() {
|
|
656
656
|
const e = this;
|
|
657
|
-
e.el.querySelector(".wrapper").removeAttribute("style"), e.slideTotalWidth =
|
|
657
|
+
e.el.querySelector(".wrapper").removeAttribute("style"), e.slideTotalWidth = T(e.el), e.translateMax = -Math.floor(
|
|
658
658
|
Math.abs(
|
|
659
|
-
|
|
659
|
+
T(e.el) - e.el.querySelector(".wrapper").getBoundingClientRect().width
|
|
660
660
|
)
|
|
661
661
|
), e.slidable = e.slideTotalWidth > Math.round(e.el.getBoundingClientRect().width) && (!e.params.breakpoint || window.innerWidth <= e.params.breakpoint), e.slidable ? (e.slideWrapEl.style.width = `${e.slideTotalWidth}px`, e.el.classList.add("slidable"), e.slideWrapEl.querySelector(".item.active") && e.moveActive()) : (e.el.classList.remove("slidable"), e.el.classList.remove("is-start"), e.el.classList.remove("is-end"), e.slideWrapEl.removeAttribute("style"));
|
|
662
662
|
}
|
|
663
663
|
}
|
|
664
|
-
const
|
|
664
|
+
const re = (s) => {
|
|
665
665
|
if (s == "facebook")
|
|
666
666
|
return "https://www.facebook.com/sharer/sharer.php?u=";
|
|
667
667
|
if (s == "line")
|
|
@@ -675,29 +675,29 @@ const ee = (s) => {
|
|
|
675
675
|
if (s == "weibo")
|
|
676
676
|
return "https://service.weibo.com/share/share.php?url=";
|
|
677
677
|
};
|
|
678
|
-
var
|
|
679
|
-
class
|
|
678
|
+
var H, ge, P, fe, j, be;
|
|
679
|
+
class He {
|
|
680
680
|
constructor(e, t = {}) {
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
681
|
+
g(this, H);
|
|
682
|
+
g(this, P);
|
|
683
|
+
g(this, j);
|
|
684
684
|
this.__storage__ = {
|
|
685
685
|
el: e,
|
|
686
686
|
options: t
|
|
687
|
-
}, h(this,
|
|
687
|
+
}, h(this, H, ge).call(this);
|
|
688
688
|
}
|
|
689
689
|
}
|
|
690
|
-
|
|
691
|
-
const { el: e, options: t } = this.__storage__, { SETTINGS: r } =
|
|
692
|
-
!
|
|
693
|
-
},
|
|
690
|
+
H = new WeakSet(), ge = function() {
|
|
691
|
+
const { el: e, options: t } = this.__storage__, { SETTINGS: r } = Le;
|
|
692
|
+
!se(e) || !G(e) || (this.elements = q(e), this.options = Object.assign({}, r, t), h(this, P, fe).call(this));
|
|
693
|
+
}, P = new WeakSet(), fe = function() {
|
|
694
694
|
const { elements: e, options: t } = this;
|
|
695
695
|
e.forEach((r) => {
|
|
696
696
|
r.querySelectorAll("[share-target]").forEach((o) => {
|
|
697
|
-
o.share = {}, o.share.instance = this, o.share.params = t, o.share.eventHandler = h(this, j,
|
|
697
|
+
o.share = {}, o.share.instance = this, o.share.params = t, o.share.eventHandler = h(this, j, be), o.addEventListener("click", o.share.eventHandler);
|
|
698
698
|
});
|
|
699
699
|
});
|
|
700
|
-
}, j = new WeakSet(),
|
|
700
|
+
}, j = new WeakSet(), be = function() {
|
|
701
701
|
const { eventHandler: e, params: t } = this.share, r = this.getAttribute("share-target"), o = {
|
|
702
702
|
source: this.getAttribute("utm-source"),
|
|
703
703
|
medium: this.getAttribute("utm-medium"),
|
|
@@ -714,56 +714,60 @@ D = new WeakSet(), he = function() {
|
|
|
714
714
|
return;
|
|
715
715
|
}
|
|
716
716
|
if (r == "url") {
|
|
717
|
-
if (
|
|
717
|
+
if (G(".copied-wrapper"))
|
|
718
718
|
return;
|
|
719
|
-
document.querySelector("body").insertAdjacentHTML(
|
|
720
|
-
const
|
|
721
|
-
l.className &&
|
|
722
|
-
const
|
|
723
|
-
if (
|
|
719
|
+
document.querySelector("body").insertAdjacentHTML(Se.append, `<div class='copied-wrapper'><div class='text'>${l.success ? l.success : ""}</div><input id='clipboard' type='text' readonly></div>`);
|
|
720
|
+
const i = document.querySelector(".copied-wrapper");
|
|
721
|
+
l.className && i.classList.add(l.className), i.style.top = this.getBoundingClientRect().top + window.scrollY + "px", i.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + "px", i.style.display = "block";
|
|
722
|
+
const a = document.querySelector("#clipboard");
|
|
723
|
+
if (a.value = l.text ?? window.location.href, a.setSelectionRange(0, 9999), a.select(), document.execCommand("copy")) {
|
|
724
724
|
document.execCommand("copy");
|
|
725
|
-
const
|
|
726
|
-
|
|
727
|
-
const
|
|
728
|
-
let
|
|
729
|
-
const
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
725
|
+
const d = document.querySelector(".copied-wrapper"), m = document.querySelector(".copied-wrapper .text");
|
|
726
|
+
m.style.display = "block", m.style.opacity = 0;
|
|
727
|
+
const f = (A, F) => {
|
|
728
|
+
let v = 0;
|
|
729
|
+
const y = 50, C = y / F, U = setInterval(function() {
|
|
730
|
+
v += C, A.style.opacity = v, v >= 1 && (clearInterval(U), setTimeout(function() {
|
|
731
|
+
x(A, 300, function() {
|
|
732
|
+
d.remove();
|
|
733
733
|
});
|
|
734
734
|
}, l.duration));
|
|
735
|
-
},
|
|
736
|
-
},
|
|
737
|
-
let
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
},
|
|
735
|
+
}, y);
|
|
736
|
+
}, x = (A, F, v) => {
|
|
737
|
+
let y = 1;
|
|
738
|
+
const C = 50, U = C / F, we = setInterval(() => {
|
|
739
|
+
y -= U, A.style.opacity = y, y <= 0 && (clearInterval(we), A.style.display = "none", v && v());
|
|
740
|
+
}, C);
|
|
741
741
|
};
|
|
742
|
-
|
|
742
|
+
f(m, 300);
|
|
743
743
|
}
|
|
744
744
|
return;
|
|
745
745
|
}
|
|
746
|
-
u = `${u}${o.source ? `?utm_source=${o.source}` : ""}${o.medium ? `&utm_medium${o.medium}` : ""}${o.campaign ? `&utm_campaign${o.campaign}` : ""}`, u = u.replace("?", "%3F").replace(new RegExp("&", "g"), "%26")
|
|
746
|
+
u = `${u}${o.source ? `?utm_source=${o.source}` : ""}${o.medium ? `&utm_medium${o.medium}` : ""}${o.campaign ? `&utm_campaign${o.campaign}` : ""}`, u = u.replace("?", "%3F").replace(new RegExp("&", "g"), "%26");
|
|
747
|
+
const p = /iPad|iPhone|iPod/.test(navigator.userAgent) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1, c = (i) => {
|
|
748
|
+
p ? window.location.href = i : window.open(i);
|
|
749
|
+
};
|
|
750
|
+
r == "line" ? c(`${re(r)}${n}`) : c(`${re(r)}${u}`), this.removeEventListener("click", e), setTimeout(() => {
|
|
747
751
|
this.addEventListener("click", e);
|
|
748
752
|
}, 100);
|
|
749
753
|
};
|
|
750
754
|
export {
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
755
|
+
Fe as Anchor4,
|
|
756
|
+
Ue as Aost4,
|
|
757
|
+
Xe as Article4,
|
|
758
|
+
De as CategorySlider,
|
|
759
|
+
Ve as Collapse4,
|
|
760
|
+
Ye as Configs,
|
|
761
|
+
ze as Detect4,
|
|
762
|
+
Ge as Dropdown4,
|
|
763
|
+
Je as ImagePreview,
|
|
764
|
+
Ke as ImageValidate,
|
|
765
|
+
Qe as Marquee4,
|
|
766
|
+
Ze as Modal4,
|
|
767
|
+
et as Multipurpose4,
|
|
768
|
+
tt as Ripple4,
|
|
769
|
+
He as Share4,
|
|
770
|
+
rt as Tab4,
|
|
771
|
+
ye as Video4
|
|
768
772
|
};
|
|
769
773
|
//# sourceMappingURL=fesd-bundle.js.map
|
package/dist/fesd-bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fesd-bundle.js","sources":["../src/fesd/detect4/detect4.js","../src/fesd/article4/article4.js","../src/fesd/category-slider/category-slider.js","../src/fesd/share4/share4.js"],"sourcesContent":["export const init = () => {\n const userAgent = navigator.userAgent;\n const browser = {\n // Firefox 1.0+\n isFirefox: typeof InstallTrigger !== 'undefined',\n // Opera 8.0+\n isOpera: (!!window.opr && !!opr.addons) || !!window.opera || userAgent.indexOf(' OPR/') >= 0,\n // Internet Explorer 6-11\n isIE: /*@cc_on!@*/ false || !!document.documentMode,\n // Edge 20+\n isEdge: !(false || !!document.documentMode) && !!window.StyleMedia,\n // Edge (based on chromium) detection\n isEdgeChromium: /\\sedg\\//i.test(userAgent) || /edg([ea]|ios)/i.test(userAgent),\n // Safari 3.0+ \"[object HTMLElementConstructor]\"\n isSafari: !/chrome|crios|crmo/i.test(userAgent) && /safari/i.test(userAgent),\n // Chrome 1 - 79\n isChrome: (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || /chrome|crios|crmo/i.test(userAgent),\n };\n const mobile = {\n // Android\n isAndroid: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1,\n // iOS | ipad\n isiOS: userAgent.indexOf('Mac') > -1 && 'ontouchend' in document,\n };\n const os = {\n // window\n isWindows: userAgent.indexOf('Win') > -1,\n // macos\n isMacOS: userAgent.indexOf('Mac') > -1,\n // UNIX\n isUNIX: userAgent.indexOf('X11') > -1,\n // Linux\n isLinux: userAgent.indexOf('Linux') > -1,\n };\n return { browser, mobile, os }\n}\n\nexport const isBrowser4 = () => {\n const { browser } = init();\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n};\n\nexport const isMobile4 = () => {\n const { mobile } = init();\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n};\n\nexport const isOs4 = () => {\n const { os } = init();\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n};\n\nexport const logs = () => console.dir(init());\n\nexport default function Detect4() {\n return {\n init,\n isBrowser4,\n isMobile4,\n isOs4,\n logs\n }\n}\n\n\n","import { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport { Swiper as SwiperV8 } from 'swiper/bundle'\nimport { configs } from '../configs'\nimport Video4 from '../video4'\n// import Swiper bundle with all modules installed\nimport {\n isString,\n isNodeList,\n isElementExist,\n getAllElements,\n createUid\n} from '../commons'\n\n// 設置 CSS 樣式\nconst setCss = (target, style, css) => {\n if (!target) return;\n\n // 若是 NodeList 則需使用 foreach set css\n if (isNodeList(target)) target.forEach(el => (el.style[style] = css));\n else target.style[style] = css;\n};\nclass Article4 {\n constructor(el, options = {}) {\n if (!isString(el) || !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-article-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS } = configs.article4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements } = this;\n\n elements.forEach(parent => {\n //wade\n parent.setAttribute(this.active, '')\n\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n el.article.methods = {};\n el.article.methods.update = this.update;\n this.#setStyle(el).#createVideo4(el).#createSwiper(el);\n // 設置表格\n this.#createTable(el);\n });\n });\n }\n\n // 取得元件上的設定值\n #getArticleData(element) {\n return {\n // 元件本身\n $selector: element,\n\n // 父層元件\n $backgroundWrap: element.querySelector('._backgroundWrap'),\n $contentWrap: element.querySelector('._contentWrap'),\n $wordCover: element.querySelector('._wordCover'),\n $buttonCover: element.querySelector('._buttonCover'),\n $imgCover: element.querySelector('._imgCover'),\n $cover: element.querySelectorAll('._cover'),\n $swiper: element.querySelector('.swiper'),\n $table: element.querySelector('._table'),\n $quote: element.querySelector('._quote'),\n $swiperButtonCover: element.querySelector('.swiper-button-cover'),\n\n // 子層元件\n $h: element.querySelector('._H'),\n $subH: element.querySelector('._subH'),\n $p: element.querySelector('._P'),\n $button: element.querySelector('._button'),\n $description: element.querySelectorAll('._description'),\n $video: element.querySelectorAll('[video-id]'),\n\n // 父層設定\n typeFullColor: element.getAttribute('typeFull-color'),\n typeFullBoxColor: element.getAttribute('typeFull-boxcolor'),\n\n // 子層設定\n hColor: element.getAttribute('h-color'),\n subHColor: element.getAttribute('subh-color'),\n pColor: element.getAttribute('p-color'),\n buttonColor: element.getAttribute('button-color'),\n buttonColorHover: element.getAttribute('button-color-hover'),\n buttonTextColor: element.getAttribute('button-textcolor'),\n descriptionColor: element.getAttribute('description-color'),\n quoteColor: element.getAttribute('quote-color'),\n markdown: element.getAttribute('data-table-markdown') ?? false,\n };\n }\n\n // 設置設定值的 CSS 樣式\n #setStyle(element) {\n const { params } = element.article;\n\n // article ._H\n setCss(params.$h, 'color', params.hColor);\n\n // article ._subH\n setCss(params.$subH, 'color', params.subHColor);\n\n // article ._P\n setCss(params.$p, 'color', params.pColor);\n\n // imgCover ._description\n setCss(params.$description, 'color', params.descriptionColor);\n\n // button background-color && text color\n setCss(params.$button, 'backgroundColor', params.buttonColor);\n setCss(params.$button, 'color', params.buttonTextColor);\n\n // button hover color\n if (params.buttonColorHover && params.$button) {\n params.$button.appendChild(document.createElement('span'));\n setCss(params.$button.querySelector('span'), 'backgroundColor', params.buttonColorHover);\n }\n\n // typeFull background-color\n setCss(params.$backgroundWrap, 'backgroundColor', params.typeFullColor);\n\n // typeFull box background-color\n setCss(params.$contentWrap, 'backgroundColor', params.typeFullBoxColor);\n\n // quote\n setCss(params.$quote, 'color', params.quoteColor);\n return this;\n }\n\n // 表格拖曳功能\n #tableDrag(element) {\n const { params } = element.article;\n const scrollContainer = params.$table;\n let isDown = false;\n let isMoved = false;\n let startX, startY;\n let scrollLeft, scrollTop;\n\n scrollContainer.addEventListener(\"mousedown\", function (event) {\n event.preventDefault();\n isMoved = false;\n isDown = true;\n\n const rect = scrollContainer.getBoundingClientRect();\n startX = event.pageX - rect.left;\n startY = event.pageY - rect.top;\n scrollLeft = scrollContainer.scrollLeft;\n scrollTop = scrollContainer.scrollTop;\n });\n\n scrollContainer.addEventListener(\"mouseleave\", function () {\n isDown = false;\n isMoved = false;\n });\n\n scrollContainer.addEventListener(\"mouseup\", function () {\n isDown = false;\n isMoved = false;\n });\n\n scrollContainer.addEventListener(\"mousemove\", function (event) {\n if (!isDown) return;\n event.preventDefault();\n isMoved = true;\n\n const rect = scrollContainer.getBoundingClientRect();\n const x = event.pageX - rect.left;\n const y = event.pageY - rect.top;\n\n const walkX = x - startX;\n const walkY = y - startY;\n\n scrollContainer.scrollLeft = scrollLeft - walkX;\n scrollContainer.scrollTop = scrollTop - walkY;\n });\n }\n\n // 設置表格凍結\n #setFreeze(table, rowCount, colCount) {\n const { basic_rwd } = this.options;\n const isSmallScreen = window.innerWidth < basic_rwd;\n const rows = [...table.querySelectorAll('tr')];\n if (isSmallScreen || !rows.length) return;\n\n const cellMap = this.#buildCellMap(rows);\n this.#applyFreezeFromMap(table, cellMap, rowCount, colCount);\n }\n\n #buildCellMap(rows) {\n const cellMap = [];\n const spanTracker = new Set();\n rows.forEach((row, r) => {\n const cells = [...row.children];\n cellMap[r] = [];\n let colPos = 0;\n cells.forEach(cell => {\n const rowspan = +cell.getAttribute('rowspan') || 1;\n const colspan = +cell.getAttribute('colspan') || 1;\n\n // 跳過已佔據位置\n while (cellMap[r][colPos] || spanTracker.has(`${r},${colPos}`)) {\n colPos++;\n }\n\n for (let rs = 0; rs < rowspan; rs++) {\n const rr = r + rs;\n cellMap[rr] ??= [];\n\n for (let cs = 0; cs < colspan; cs++) {\n const cc = colPos + cs;\n cellMap[rr][cc] = {\n el: rs === 0 && cs === 0 ? cell : null,\n topRow: r,\n leftCol: colPos,\n rowspan,\n colspan\n };\n if (rs > 0) spanTracker.add(`${rr},${cc}`);\n }\n }\n\n colPos += colspan;\n });\n });\n\n return cellMap;\n }\n\n #getRowHeights(table, cellMap) {\n const rowCount = cellMap.length;\n const rowTops = Array(rowCount).fill(0);\n const baseOffset = table.getBoundingClientRect().top;\n\n for (let r = 0; r < rowCount; r++) {\n for (let c = 0; c < (cellMap[r]?.length || 0); c++) {\n const cell = cellMap[r][c];\n if (cell?.el) {\n const elTop = cell.el.getBoundingClientRect().top;\n // 抓取相對 table 的內部 top\n rowTops[r] = elTop - baseOffset;\n break;\n }\n }\n }\n return rowTops;\n }\n\n #applyFreezeFromMap(table, cellMap, rowFreeze, colFreeze) {\n const rowTops = this.#getRowHeights(table, cellMap);\n const colCount = cellMap[0]?.length ?? 0;\n const colLefts = Array(colCount).fill(0);\n\n for (let c = 0; c < colCount; c++) {\n for (let r = 0; r < cellMap.length; r++) {\n const cell = cellMap[r][c];\n if (cell?.el) {\n colLefts[c] = cell.el.offsetLeft;\n break;\n }\n }\n }\n\n cellMap.forEach(row =>\n row.forEach(cellInfo => {\n if (!cellInfo?.el) return;\n const { el, topRow, leftCol } = cellInfo;\n const freezeRow = topRow < rowFreeze;\n const freezeCol = leftCol < colFreeze;\n el.style.position = 'sticky';\n el.style.zIndex = freezeRow && freezeCol ? 3 : freezeRow ? 2 : freezeCol ? 1 : 0;\n el.style.backgroundColor = getComputedStyle(el).backgroundColor;\n if (freezeRow) el.style.top = `${rowTops[topRow]}px`;\n if (freezeCol) el.style.left = `${colLefts[leftCol]}px`;\n })\n );\n }\n\n // Markdown 設置\n #setMarkdown(table) {\n const { markdownLink, markdownImg, markdownLinkBlank } = this.options;\n if (table.hasAttribute('data-markdown-rendered')) return;\n // 客製化 markdown\n const renderer = new marked.Renderer();\n\n marked.use({\n extensions: [\n {\n name: 'center',\n level: 'block',\n start(src) { return src.match(/@center@/)?.index; },\n tokenizer(src) {\n const rule = /^@center@(.+?)@center@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'center',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-center=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'left',\n level: 'block',\n start(src) { return src.match(/@left@/)?.index; },\n tokenizer(src) {\n const rule = /^@left@(.+?)@left@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'left',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-left=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'right',\n level: 'block',\n start(src) { return src.match(/@right@/)?.index; },\n tokenizer(src) {\n const rule = /^@right@(.+?)@right@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'right',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-right=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'sup',\n level: 'inline',\n start(src) { return src.match(/@sup@/)?.index; },\n tokenizer(src) {\n const rule = /^@sup@(.+?)@sup@/;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'sup',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<sup>${token.text}</sup>`;\n }\n },\n {\n name: 'sub',\n level: 'inline',\n start(src) { return src.match(/@sub@/)?.index; },\n tokenizer(src) {\n const rule = /^@sub@(.+?)@sub@/;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'sub',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<sub>${token.text}</sub>`;\n }\n },\n ]\n });\n\n const allowedTags = ['h2', 'h3', 'h4', 'h5', 'h6', 'b', 'del', 'i', 'em', 'strong', 'p', 'ul', 'ol', 'li', 'br', 'span', 'div', 'sup', 'sub'];\n\n const allowedAttrs = ['data-center', 'data-right', 'data-left'];\n const cleanHTML = (dirty) => DOMPurify.sanitize(dirty, {\n ALLOWED_TAGS: [\n ...allowedTags,\n ...(markdownLink ? ['a'] : []),\n ...(markdownImg ? ['img'] : [])\n ],\n ALLOWED_ATTR: [\n ...allowedAttrs,\n ...(markdownLink ? ['href', 'title', 'target'] : []),\n ...(markdownImg ? ['src', 'alt', 'title'] : [])\n ],\n RETURN_TRUSTED_TYPE: false,\n });\n\n const renderMarkdown = (mdText) => cleanHTML(marked.parse(mdText));\n\n const allCells = table.querySelectorAll('td,th');\n allCells.forEach((cell) => {\n cell.innerHTML = cell.textContent;\n const originalText = cell.textContent.trim().replace(/<[^>]*>/g, '');\n cell.innerHTML = renderMarkdown(originalText);\n\n if (markdownLinkBlank && $(cell).find('a'))\n $(cell).find('a').attr({\n target: '_blank',\n rel: 'noopener noreferrer'\n })\n });\n\n table.setAttribute('data-markdown-rendered', 'true');\n }\n\n // Navigation 設置\n #setNavigation(element) {\n const { scrollStep } = this.options;\n const wrapper = element.querySelector('._contentWrap');\n const innerTable = element.querySelector('._tableCover');\n const table = element.querySelector('._table');\n const scrollAmount = typeof scrollStep === 'number' ? scrollStep : wrapper.clientWidth * 0.5;\n if (!wrapper || !innerTable) return;\n\n // 避免重複加按鈕\n if (innerTable.querySelector('.table_navigation')) return;\n\n const navContainer = document.createElement('div');\n navContainer.className = 'table_navigation';\n\n const leftBtn = document.createElement('div');\n const rightBtn = document.createElement('div');\n leftBtn.className = 'table-nav-left';\n rightBtn.className = 'table-nav-right';\n\n navContainer.appendChild(leftBtn);\n navContainer.appendChild(rightBtn);\n innerTable.appendChild(navContainer);\n\n const updateArrowVisibility = () => {\n const scrollLeft = table.scrollLeft;\n const maxScroll = table.scrollWidth - table.clientWidth;\n leftBtn.classList.toggle('disabled', scrollLeft <= 0);\n rightBtn.classList.toggle('disabled', scrollLeft >= maxScroll - 1);\n };\n\n leftBtn.addEventListener('click', () => {\n table.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n });\n\n rightBtn.addEventListener('click', () => {\n table.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n });\n\n table.addEventListener('scroll', updateArrowVisibility);\n window.addEventListener('resize', updateArrowVisibility);\n updateArrowVisibility();\n }\n\n #createVideo4(element) {\n const { params } = element.article;\n\n //*-* satrt **//\n // if (params.$video.length) {\n // const video = new Video4(params.$video);\n // }\n //*-* 要吃到 video4 的設定//\n if (params.$video.length) {\n // 傳入 this.options.videoOptions\n // 在 new Article4({ videoOptions: {...} }) 時,這些設定會被帶入 Video4\n const video = new Video4(params.$video, this.options.videoOptions);\n }\n //*-* end **//\n return this;\n }\n\n #createSwiper(element) {\n const { basic_rwd } = this.options;\n\n const { params } = element.article;\n\n // 判斷是否擁有 swiper4 結構\n if (!params.$swiper) return;\n\n // set id\n const $id = createUid();\n\n const $this = this;\n\n // set swiper\n let $swiperSet = {\n on: {\n init(swiper) {\n const container = swiper.$el[0];\n // video4 重複綁定修正\n if (params.$video.length) {\n // 應該抓 DB 設定的 classname\n const allVideo4 = container.querySelectorAll('[video4-active]');\n [...allVideo4].forEach(element => {\n element.querySelector(configs.video4.SETTINGS.videoButton)?.remove();\n element.querySelector('.overlay')?.remove();\n element.removeAttribute('video4-active');\n });\n $this.update();\n }\n },\n observerUpdate(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n swiper.update();\n }\n },\n },\n observer: true,\n breakpoints: {},\n };\n\n params.$selector.setAttribute('img-swiper', 'on');\n params.$selector.classList.add(`swiper-${$id}`);\n\n // swiper navigation (預設為 off)\n if (params.$selector.getAttribute('swiper-arrow') !== 'off' && params.$selector.getAttribute('swiper-arrow')) {\n const next = document.createElement('div');\n next.className = `swiper-button-next swiper-${$id}`;\n params.$swiperButtonCover.appendChild(next);\n\n const prev = document.createElement('div');\n prev.className = `swiper-button-prev swiper-${$id}`;\n params.$swiperButtonCover.appendChild(prev);\n\n $swiperSet.navigation = {\n nextEl: `.swiper-button-next.swiper-${$id}`,\n prevEl: `.swiper-button-prev.swiper-${$id}`,\n };\n }\n\n // swiper pagination (預設為 on)\n if (params.$selector.getAttribute('swiper-nav') !== 'off' || !params.$selector.getAttribute('swiper-nav')) {\n const pagination = document.createElement('div');\n pagination.className = `swiper-pagination swiper-${$id}`;\n params.$swiper.appendChild(pagination);\n\n $swiperSet.pagination = {\n el: `.swiper-pagination.swiper-${$id}`,\n clickable: true,\n };\n }\n\n // slidesPerView\n if (Number.parseInt(params.$selector.getAttribute('swiper-num'))) {\n $swiperSet.breakpoints[basic_rwd] = {\n slidesPerView: params.$selector.getAttribute('swiper-num') ? (Number.parseInt(params.$selector.getAttribute('swiper-num')) > 5 ? 5 : Number.parseInt(params.$selector.getAttribute('swiper-num'))) : 1,\n };\n }\n\n // autoplay (預設為 on)\n if (params.$selector.getAttribute('swiper-autoplay') !== 'off' || !params.$selector.getAttribute('swiper-autoplay')) {\n $swiperSet.autoplay = {\n delay: 3000,\n disableOnInteraction: false,\n };\n }\n\n // loop (預設為 on)\n if (params.$selector.getAttribute('swiper-loop') !== 'off' || !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.loop = true;\n }\n\n // speed\n if (params.$selector.getAttribute('swiper-speed')) {\n $swiperSet.speed = parseInt(params.$selector.getAttribute('swiper-speed'));\n }\n\n // parallax (預設為 off)\n if (params.$selector.getAttribute('swiper-parallax') !== 'off' && !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.parallax = true;\n }\n\n // pagination dynamicBullets (預設為 off)\n if (params.$selector.getAttribute('swiper-pagination-dynamic') === 'on') {\n $swiperSet.pagination.dynamicBullets = true;\n // 20240904 Scarlett\n if ($swiperSet.pagination) {\n $swiperSet.pagination.dynamicBullets = true;\n } else {\n console.warn('pagination undefined');\n }\n }\n\n // 若 swiper 只有一筆輪播則隱藏 navigation 及 pagination\n let gate = () => (window.innerWidth > basic_rwd ? Number(params.$selector.getAttribute('swiper-num')) || 1 : 1);\n\n if (params.$swiper.querySelectorAll('.swiper-slide').length <= gate()) {\n $swiperSet.navigation = false;\n $swiperSet.pagination = false;\n $swiperSet.autoplay = false;\n $swiperSet.loop = false;\n\n params.$selector.querySelector('.swiper-button-cover').style.display = 'none';\n params.$selector.querySelector('.swiper-pagination').style.display = 'none';\n\n params.$swiper.classList.add('swiper-no-swiping');\n }\n\n const $swiper = new SwiperV8(params.$swiper, $swiperSet);\n\n element.article.swiperList = [];\n element.article.swiperList.push($swiper);\n\n return this;\n }\n\n #createTable(element) {\n const { navigation } = this.options;\n const { params } = element.article;\n if (!params.$table) return;\n\n const isFreeze = element.getAttribute('freeze-table') === 'on';\n const freezeRow = parseInt(element.getAttribute('freeze-table-row') ?? '0', 10);\n const freezeCol = parseInt(element.getAttribute('freeze-table-col') ?? '0', 10);\n const innerTable = element.querySelector('table');\n const tipText = element.querySelector('._tipText');\n const wrapperWidth = element.offsetWidth;\n const tableWidth = innerTable.offsetWidth;\n const isOverflow = wrapperWidth < tableWidth;\n const isMarkdown = params.markdown === 'on';\n\n const initTable = () => {\n // 凍結功能\n if (isFreeze) this.#setFreeze(innerTable, freezeRow, freezeCol);\n // 拖曳功能\n if (isFreeze || isOverflow) this.#tableDrag(element);\n // Markdown\n if (isMarkdown) this.#setMarkdown(innerTable);\n // navigation\n if (navigation && isOverflow) this.#setNavigation(element);\n\n // 提示文字\n if (isOverflow) {\n element.classList.add('overflow');\n tipText.style.display = 'flex';\n } else {\n element.classList.remove('overflow');\n tipText.style.display = 'none';\n }\n }\n initTable();\n window.addEventListener('resize', initTable);\n\n return this;\n }\n\n update() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#createVideo4(el);\n this.#createTable(el);\n\n });\n });\n }\n}\n\nexport default Article4;","// 判斷操作事件使用 mouse 或是 touch\nlet operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown';\nlet operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseup';\nlet operateMove = 'ontouchmove' in document.documentElement ? 'touchmove' : 'mousemove';\n\n/* ---------------------------- Function 宣告 --------------------------------- */\n\n// 獲取 translate 數值\nfunction getTranslateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.mozTransform;\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none') {\n return {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d';\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: Number(matrixValues[4]),\n y: Number(matrixValues[5]),\n z: 0,\n };\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: Number(matrixValues[12]),\n y: Number(matrixValues[13]),\n z: Number(matrixValues[14]),\n };\n }\n}\n\n// 計算輪播內容總寬度\nfunction getSlideTotalW(element) {\n const slideWrap = element.querySelector('.wrapper');\n const items = slideWrap.querySelectorAll('.item');\n let slideTotalWidth = 0; //輪播內容總寬度\n items.forEach((item) => {\n const style = getComputedStyle(item);\n const marginL = parseInt(style.marginLeft);\n const marginR = parseInt(style.marginRight);\n slideTotalWidth += item.getBoundingClientRect().width + marginL + marginR;\n });\n return slideTotalWidth;\n}\n\n// 偵測目前輪播位置\nfunction detectPos(self) {\n // 拖拉在最左邊時\n if (getTranslateValues(self.slideWrapEl).x >= self.translateMin) {\n return 'is-start';\n }\n // 拖拉在最右邊時\n else if (getTranslateValues(self.slideWrapEl).x <= self.translateMax) {\n return 'is-end';\n }\n // 拖拉在中間時\n else if (\n getTranslateValues(self.slideWrapEl).x < self.translateMin &&\n getTranslateValues(self.slideWrapEl).x > self.translateMax\n ) {\n return 'is-middle';\n }\n}\n\n// 綁定事件\nfunction eventHandler(self) {\n const element = self.el;\n const slideWrap = element.querySelector('.wrapper');\n //滑鼠按住或是行動裝置手指按住\n slideWrap.addEventListener(operateStart, function (e) {\n self.isDown = true;\n if (self.slidable) slideWrap.classList.add('dragging');\n switch (operateStart) {\n case 'mousedown':\n self.startX = e.pageX;\n break;\n case 'touchstart':\n self.startX = e.changedTouches[0].pageX;\n break;\n }\n self.nowTranslateX = getTranslateValues(slideWrap).x;\n });\n\n //滑鼠放開或是行動裝置手指放開\n slideWrap.addEventListener(operateEnd, function (e) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance === 0 && e.target.closest('.item')) {\n if (operateEnd === 'mouseup' && e.button !== 0) return;\n const items = slideWrap.querySelectorAll('.item');\n items.forEach((item) => {\n item.classList.remove('active');\n });\n e.target.closest('.item').classList.add('active');\n self.moveActive(self.params.speed);\n } else {\n if (self.slidable) self.resetPos(element);\n }\n });\n\n //滑鼠離開\n slideWrap.addEventListener('mouseleave', function () {\n if (!self.isDown) return;\n if (self.slidable) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n self.resetPos(element);\n }\n });\n\n //滑鼠移動或是行動裝置手指移動\n slideWrap.addEventListener(operateMove, function (e) {\n if (!self.draggable) return;\n if (self.slidable) {\n if (!self.isDown) return;\n e.preventDefault();\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance !== 0) {\n slideWrap.classList.add('moving');\n const styles = {\n transition: 'all 0ms ease 0s',\n transform: `translate3d(${self.nowTranslateX + moveDistance}px,0,0)`,\n };\n Object.assign(slideWrap.style, styles);\n }\n }\n });\n}\n\n// 取消 a 的拖拉\nfunction disableLinkDrag(element) {\n const aTag = element.querySelectorAll('a');\n for (var i = 0, len = aTag.length; i < len; i++) {\n aTag[i].draggable = false;\n }\n}\n\nexport default class CategorySlider {\n constructor(element, params) {\n this.el = typeof element === 'string' ? document.querySelector(element) : element;\n this.slideWrapEl = this.el.querySelector('.wrapper');\n // default params\n this.params = {\n speed: 300,\n clickSwitch: true,\n breakpoint: false,\n };\n Object.assign(this.params, params);\n\n this.draggable = true;\n this.isDown = false; //按下\n this.startX = 0; //按下初始位置\n this.nowTranslateX = getTranslateValues(this.slideWrapEl).x; //目前X軸偏移輛\n this.slideTotalWidth = getSlideTotalW(this.el);\n this.translateMin = 0;\n this.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(this.el) - this.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n this.slidable =\n this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) &&\n (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint);\n this.init();\n }\n init() {\n const self = this;\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n }\n window.addEventListener('resize', function () {\n self.update();\n });\n eventHandler(self);\n disableLinkDrag(self.el);\n }\n moveActive(speed) {\n const self = this;\n const activeItem = self.slideWrapEl.querySelector('.item.active');\n const prevItem = activeItem.previousElementSibling;\n const prevOffsetLeft = prevItem\n ? activeItem.offsetLeft - self.el.clientWidth / 2 + activeItem.clientWidth / 2\n : 0;\n if (self.slidable) {\n if (-prevOffsetLeft < 0 && -prevOffsetLeft > self.translateMax) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(-${prevOffsetLeft}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else if (-prevOffsetLeft >= 0) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(0,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n }\n if (speed) {\n self.slideWrapEl.addEventListener(\n 'transitionend',\n function () {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n },\n false\n );\n } else {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n }\n }\n }\n resetPos() {\n const self = this;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: 'translate3d(0,0,0)',\n });\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n });\n break;\n }\n }\n update() {\n const self = this;\n self.el.querySelector('.wrapper').removeAttribute('style');\n self.slideTotalWidth = getSlideTotalW(self.el);\n self.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(self.el) - self.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n self.slidable =\n self.slideTotalWidth > Math.round(self.el.getBoundingClientRect().width) &&\n (!self.params.breakpoint || window.innerWidth <= self.params.breakpoint);\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n } else {\n self.el.classList.remove('slidable');\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n self.slideWrapEl.removeAttribute('style');\n }\n }\n}\n","import { configs } from '../configs'\nimport {\n insert,\n isString,\n isElementExist,\n getAllElements\n} from '../commons'\n\nconst getTargetUrl = type => {\n // facebook\n if (type == 'facebook') {\n return 'https://www.facebook.com/sharer/sharer.php?u=';\n }\n\n // line\n if (type == 'line') {\n // desktop & mobile 網址不同\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n return 'http://line.naver.jp/R/msg/text/?';\n }\n return 'https://lineit.line.me/share/ui?url=';\n }\n\n // twitter\n if (type == 'twitter') {\n return 'https://twitter.com/intent/tweet?url=';\n }\n\n // linkedin\n if (type == 'linkedin') {\n return `http://www.linkedin.com/shareArticle?mini=true&title=${document.title}&source=${document.title}&url=`;\n // return `https://www.linkedin.com/sharing/share-offsite/?url=`;\n }\n\n // telegram\n if (type == 'telegram') {\n return 'https://telegram.me/share/url?url=';\n }\n\n // weibo\n if (type == 'weibo') {\n return 'https://service.weibo.com/share/share.php?url=';\n }\n};\n\nclass Share4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 configs 提取設定\n const { SETTINGS } = configs.share4;\n if (!isString(el) || !isElementExist(el)) return;\n\n this.elements = getAllElements(el);\n\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(targets => {\n targets.querySelectorAll('[share-target]').forEach(el => {\n el.share = {};\n el.share.instance = this;\n el.share.params = options;\n el.share.eventHandler = this.#trigger;\n el.addEventListener('click', el.share.eventHandler);\n });\n });\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { eventHandler, params } = this.share;\n const type = this.getAttribute('share-target');\n\n const utm = {\n source: this.getAttribute('utm-source'),\n medium: this.getAttribute('utm-medium'),\n campaign: this.getAttribute('utm-campaign'),\n };\n\n const copy = {\n success: this.getAttribute('copy-success') || params.success,\n text: this.getAttribute('copy-text') || params.text,\n className: this.getAttribute('copy-class') || params.className,\n duration: this.getAttribute('copy-duration') || params.duration,\n };\n\n const baseUrl = encodeURIComponent(document.URL);\n let shareUrl = baseUrl;\n\n // 若為 wechat 則另開視窗掃描 QRcode\n if (type == 'wechat') {\n // https://api.qrserver.com/v1/create-qr-code/?data=${url}&size=300x300\n window.open(`https://api.qrserver.com/v1/create-qr-code/?data=${baseUrl}&size=250x250`, 'share to wechat', 'width=300,height=300');\n return;\n }\n\n // 若為 url 則複製連結\n if (type == 'url') {\n if (isElementExist('.copied-wrapper')) return;\n\n document.querySelector('body').insertAdjacentHTML(insert.append, `<div class='copied-wrapper'><div class='text'>${copy.success ? copy.success : ''}</div><input id='clipboard' type='text' readonly></div>`);\n\n const $copied = document.querySelector('.copied-wrapper');\n\n if (copy.className) {\n $copied.classList.add(copy.className);\n }\n $copied.style.top = this.getBoundingClientRect().top + window.scrollY + 'px';\n $copied.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + 'px';\n $copied.style.display = 'block';\n\n const $clipboard = document.querySelector('#clipboard');\n\n $clipboard.value = copy.text ?? window.location.href;\n $clipboard.setSelectionRange(0, 9999);\n $clipboard.select();\n\n if (document.execCommand('copy')) {\n // 複製對應內容\n document.execCommand('copy');\n // 動畫效果\n const copiedWrapper = document.querySelector('.copied-wrapper');\n const tooltipsText = document.querySelector('.copied-wrapper .text');\n tooltipsText.style.display = 'block';\n tooltipsText.style.opacity = 0;\n const fadeIn = (element, duration) => {\n let opacity = 0;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(function () {\n opacity += gap;\n element.style.opacity = opacity;\n\n if (opacity >= 1) {\n clearInterval(fading);\n setTimeout(function () {\n fadeOut(element, 300, function () {\n copiedWrapper.remove();\n });\n }, copy.duration);\n }\n }, interval);\n };\n const fadeOut = (element, duration, callback) => {\n let opacity = 1;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(() => {\n opacity -= gap;\n element.style.opacity = opacity;\n\n if (opacity <= 0) {\n clearInterval(fading);\n element.style.display = 'none';\n if (callback) callback();\n }\n }, interval);\n };\n fadeIn(tooltipsText, 300);\n }\n\n return;\n }\n\n // 其餘則使用對應網址另開新分頁\n // url + '?utm_source=Facebook' + '&utm_medium=social' + '&utm_campaign=' + campaign\n shareUrl = `${shareUrl}${utm.source ? `?utm_source=${utm.source}` : ''}${utm.medium ? `&utm_medium${utm.medium}` : ''}${utm.campaign ? `&utm_campaign${utm.campaign}` : ''}`;\n shareUrl = shareUrl.replace('?', '%3F').replace(new RegExp('&', 'g'), '%26');\n\n if (type == 'line') {\n // line 需帶入原始網址\n window.open(`${getTargetUrl(type)}${baseUrl}`);\n } else {\n window.open(`${getTargetUrl(type)}${shareUrl}"e=${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\n"],"names":["init","userAgent","browser","mobile","os","isBrowser4","key","isMobile4","isOs4","logs","Detect4","setCss","target","style","css","isNodeList","el","Article4","options","__privateAdd","_create","_init","_getArticleData","_setStyle","_tableDrag","_setFreeze","_buildCellMap","_getRowHeights","_applyFreezeFromMap","_setMarkdown","_setNavigation","_createVideo4","_createSwiper","_createTable","isString","isElementExist","__privateMethod","create_fn","elements","parent","getArticleData_fn","createVideo4_fn","createTable_fn","SETTINGS","configs.article4","getAllElements","init_fn","_b","_a","setStyle_fn","createSwiper_fn","element","params","tableDrag_fn","scrollContainer","isDown","startX","startY","scrollLeft","scrollTop","event","rect","x","y","walkX","walkY","setFreeze_fn","table","rowCount","colCount","basic_rwd","isSmallScreen","rows","cellMap","buildCellMap_fn","applyFreezeFromMap_fn","spanTracker","row","r","cells","colPos","cell","rowspan","colspan","rs","rr","cs","cc","getRowHeights_fn","rowTops","baseOffset","c","elTop","rowFreeze","colFreeze","colLefts","cellInfo","topRow","leftCol","freezeRow","freezeCol","setMarkdown_fn","markdownLink","markdownImg","markdownLinkBlank","marked","src","match","token","allowedTags","allowedAttrs","cleanHTML","dirty","DOMPurify","renderMarkdown","mdText","originalText","$","setNavigation_fn","scrollStep","wrapper","innerTable","scrollAmount","navContainer","leftBtn","rightBtn","updateArrowVisibility","maxScroll","Video4","$id","createUid","$this","$swiperSet","swiper","container","configs.video4","next","prev","pagination","gate","$swiper","SwiperV8","navigation","isFreeze","tipText","wrapperWidth","tableWidth","isOverflow","isMarkdown","initTable","operateStart","operateEnd","operateMove","getTranslateValues","matrix","matrixType","matrixValues","getSlideTotalW","items","slideTotalWidth","item","marginL","marginR","detectPos","self","eventHandler","slideWrap","e","moveDistance","styles","disableLinkDrag","aTag","i","len","CategorySlider","speed","activeItem","prevOffsetLeft","getTargetUrl","type","Share4","_trigger","configs.share4","targets","trigger_fn","utm","copy","baseUrl","shareUrl","insert","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","duration","opacity","interval","gap","fading","fadeOut","callback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fesd-bundle.js","sources":["../src/fesd/detect4/detect4.js","../src/fesd/article4/article4.js","../src/fesd/category-slider/category-slider.js","../src/fesd/share4/share4.js"],"sourcesContent":["export const init = () => {\n const userAgent = navigator.userAgent;\n const browser = {\n // Firefox 1.0+\n isFirefox: typeof InstallTrigger !== 'undefined',\n // Opera 8.0+\n isOpera: (!!window.opr && !!opr.addons) || !!window.opera || userAgent.indexOf(' OPR/') >= 0,\n // Internet Explorer 6-11\n isIE: /*@cc_on!@*/ false || !!document.documentMode,\n // Edge 20+\n isEdge: !(false || !!document.documentMode) && !!window.StyleMedia,\n // Edge (based on chromium) detection\n isEdgeChromium: /\\sedg\\//i.test(userAgent) || /edg([ea]|ios)/i.test(userAgent),\n // Safari 3.0+ \"[object HTMLElementConstructor]\"\n isSafari: !/chrome|crios|crmo/i.test(userAgent) && /safari/i.test(userAgent),\n // Chrome 1 - 79\n isChrome: (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || /chrome|crios|crmo/i.test(userAgent),\n };\n const mobile = {\n // Android\n isAndroid: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1,\n // iOS | ipad\n isiOS: userAgent.indexOf('Mac') > -1 && 'ontouchend' in document,\n };\n const os = {\n // window\n isWindows: userAgent.indexOf('Win') > -1,\n // macos\n isMacOS: userAgent.indexOf('Mac') > -1,\n // UNIX\n isUNIX: userAgent.indexOf('X11') > -1,\n // Linux\n isLinux: userAgent.indexOf('Linux') > -1,\n };\n return { browser, mobile, os }\n}\n\nexport const isBrowser4 = () => {\n const { browser } = init();\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n};\n\nexport const isMobile4 = () => {\n const { mobile } = init();\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n};\n\nexport const isOs4 = () => {\n const { os } = init();\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n};\n\nexport const logs = () => console.dir(init());\n\nexport default function Detect4() {\n return {\n init,\n isBrowser4,\n isMobile4,\n isOs4,\n logs\n }\n}\n\n\n","import { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport { Swiper as SwiperV8 } from 'swiper/bundle'\nimport { configs } from '../configs'\nimport Video4 from '../video4'\n// import Swiper bundle with all modules installed\nimport {\n isString,\n isNodeList,\n isElementExist,\n getAllElements,\n createUid\n} from '../commons'\n\n// 設置 CSS 樣式\nconst setCss = (target, style, css) => {\n if (!target) return;\n\n // 若是 NodeList 則需使用 foreach set css\n if (isNodeList(target)) target.forEach(el => (el.style[style] = css));\n else target.style[style] = css;\n};\nclass Article4 {\n constructor(el, options = {}) {\n if (!isString(el) || !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.active = 'data-article-active'\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS } = configs.article4;\n\n //wade\n this.elements = options.state == \"not active\" ? getAllElements(el + `:not([${this.active}])`) : getAllElements(el);\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements } = this;\n\n elements.forEach(parent => {\n //wade\n parent.setAttribute(this.active, '')\n\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n el.article.methods = {};\n el.article.methods.update = this.update;\n this.#setStyle(el).#createVideo4(el).#createSwiper(el);\n // 設置表格\n this.#createTable(el);\n });\n });\n }\n\n // 取得元件上的設定值\n #getArticleData(element) {\n return {\n // 元件本身\n $selector: element,\n\n // 父層元件\n $backgroundWrap: element.querySelector('._backgroundWrap'),\n $contentWrap: element.querySelector('._contentWrap'),\n $wordCover: element.querySelector('._wordCover'),\n $buttonCover: element.querySelector('._buttonCover'),\n $imgCover: element.querySelector('._imgCover'),\n $cover: element.querySelectorAll('._cover'),\n $swiper: element.querySelector('.swiper'),\n $table: element.querySelector('._table'),\n $quote: element.querySelector('._quote'),\n $swiperButtonCover: element.querySelector('.swiper-button-cover'),\n\n // 子層元件\n $h: element.querySelector('._H'),\n $subH: element.querySelector('._subH'),\n $p: element.querySelector('._P'),\n $button: element.querySelector('._button'),\n $description: element.querySelectorAll('._description'),\n $video: element.querySelectorAll('[video-id]'),\n\n // 父層設定\n typeFullColor: element.getAttribute('typeFull-color'),\n typeFullBoxColor: element.getAttribute('typeFull-boxcolor'),\n\n // 子層設定\n hColor: element.getAttribute('h-color'),\n subHColor: element.getAttribute('subh-color'),\n pColor: element.getAttribute('p-color'),\n buttonColor: element.getAttribute('button-color'),\n buttonColorHover: element.getAttribute('button-color-hover'),\n buttonTextColor: element.getAttribute('button-textcolor'),\n descriptionColor: element.getAttribute('description-color'),\n quoteColor: element.getAttribute('quote-color'),\n markdown: element.getAttribute('data-table-markdown') ?? false,\n };\n }\n\n // 設置設定值的 CSS 樣式\n #setStyle(element) {\n const { params } = element.article;\n\n // article ._H\n setCss(params.$h, 'color', params.hColor);\n\n // article ._subH\n setCss(params.$subH, 'color', params.subHColor);\n\n // article ._P\n setCss(params.$p, 'color', params.pColor);\n\n // imgCover ._description\n setCss(params.$description, 'color', params.descriptionColor);\n\n // button background-color && text color\n setCss(params.$button, 'backgroundColor', params.buttonColor);\n setCss(params.$button, 'color', params.buttonTextColor);\n\n // button hover color\n if (params.buttonColorHover && params.$button) {\n params.$button.appendChild(document.createElement('span'));\n setCss(params.$button.querySelector('span'), 'backgroundColor', params.buttonColorHover);\n }\n\n // typeFull background-color\n setCss(params.$backgroundWrap, 'backgroundColor', params.typeFullColor);\n\n // typeFull box background-color\n setCss(params.$contentWrap, 'backgroundColor', params.typeFullBoxColor);\n\n // quote\n setCss(params.$quote, 'color', params.quoteColor);\n return this;\n }\n\n // 表格拖曳功能\n #tableDrag(element) {\n const { params } = element.article;\n const scrollContainer = params.$table;\n let isDown = false;\n let isMoved = false;\n let startX, startY;\n let scrollLeft, scrollTop;\n\n scrollContainer.addEventListener(\"mousedown\", function (event) {\n event.preventDefault();\n isMoved = false;\n isDown = true;\n\n const rect = scrollContainer.getBoundingClientRect();\n startX = event.pageX - rect.left;\n startY = event.pageY - rect.top;\n scrollLeft = scrollContainer.scrollLeft;\n scrollTop = scrollContainer.scrollTop;\n });\n\n scrollContainer.addEventListener(\"mouseleave\", function () {\n isDown = false;\n isMoved = false;\n });\n\n scrollContainer.addEventListener(\"mouseup\", function () {\n isDown = false;\n isMoved = false;\n });\n\n scrollContainer.addEventListener(\"mousemove\", function (event) {\n if (!isDown) return;\n event.preventDefault();\n isMoved = true;\n\n const rect = scrollContainer.getBoundingClientRect();\n const x = event.pageX - rect.left;\n const y = event.pageY - rect.top;\n\n const walkX = x - startX;\n const walkY = y - startY;\n\n scrollContainer.scrollLeft = scrollLeft - walkX;\n scrollContainer.scrollTop = scrollTop - walkY;\n });\n }\n\n // 設置表格凍結\n #setFreeze(table, rowCount, colCount) {\n const { basic_rwd } = this.options;\n const isSmallScreen = window.innerWidth < basic_rwd;\n const rows = [...table.querySelectorAll('tr')];\n if (isSmallScreen || !rows.length) return;\n\n const cellMap = this.#buildCellMap(rows);\n this.#applyFreezeFromMap(table, cellMap, rowCount, colCount);\n }\n\n #buildCellMap(rows) {\n const cellMap = [];\n const spanTracker = new Set();\n rows.forEach((row, r) => {\n const cells = [...row.children];\n cellMap[r] = [];\n let colPos = 0;\n cells.forEach(cell => {\n const rowspan = +cell.getAttribute('rowspan') || 1;\n const colspan = +cell.getAttribute('colspan') || 1;\n\n // 跳過已佔據位置\n while (cellMap[r][colPos] || spanTracker.has(`${r},${colPos}`)) {\n colPos++;\n }\n\n for (let rs = 0; rs < rowspan; rs++) {\n const rr = r + rs;\n cellMap[rr] ??= [];\n\n for (let cs = 0; cs < colspan; cs++) {\n const cc = colPos + cs;\n cellMap[rr][cc] = {\n el: rs === 0 && cs === 0 ? cell : null,\n topRow: r,\n leftCol: colPos,\n rowspan,\n colspan\n };\n if (rs > 0) spanTracker.add(`${rr},${cc}`);\n }\n }\n\n colPos += colspan;\n });\n });\n\n return cellMap;\n }\n\n #getRowHeights(table, cellMap) {\n const rowCount = cellMap.length;\n const rowTops = Array(rowCount).fill(0);\n const baseOffset = table.getBoundingClientRect().top;\n\n for (let r = 0; r < rowCount; r++) {\n for (let c = 0; c < (cellMap[r]?.length || 0); c++) {\n const cell = cellMap[r][c];\n if (cell?.el) {\n const elTop = cell.el.getBoundingClientRect().top;\n // 抓取相對 table 的內部 top\n rowTops[r] = elTop - baseOffset;\n break;\n }\n }\n }\n return rowTops;\n }\n\n #applyFreezeFromMap(table, cellMap, rowFreeze, colFreeze) {\n const rowTops = this.#getRowHeights(table, cellMap);\n const colCount = cellMap[0]?.length ?? 0;\n const colLefts = Array(colCount).fill(0);\n\n for (let c = 0; c < colCount; c++) {\n for (let r = 0; r < cellMap.length; r++) {\n const cell = cellMap[r][c];\n if (cell?.el) {\n colLefts[c] = cell.el.offsetLeft;\n break;\n }\n }\n }\n\n cellMap.forEach(row =>\n row.forEach(cellInfo => {\n if (!cellInfo?.el) return;\n const { el, topRow, leftCol } = cellInfo;\n const freezeRow = topRow < rowFreeze;\n const freezeCol = leftCol < colFreeze;\n el.style.position = 'sticky';\n el.style.zIndex = freezeRow && freezeCol ? 3 : freezeRow ? 2 : freezeCol ? 1 : 0;\n el.style.backgroundColor = getComputedStyle(el).backgroundColor;\n if (freezeRow) el.style.top = `${rowTops[topRow]}px`;\n if (freezeCol) el.style.left = `${colLefts[leftCol]}px`;\n })\n );\n }\n\n // Markdown 設置\n #setMarkdown(table) {\n const { markdownLink, markdownImg, markdownLinkBlank } = this.options;\n if (table.hasAttribute('data-markdown-rendered')) return;\n // 客製化 markdown\n const renderer = new marked.Renderer();\n\n marked.use({\n extensions: [\n {\n name: 'center',\n level: 'block',\n start(src) { return src.match(/@center@/)?.index; },\n tokenizer(src) {\n const rule = /^@center@(.+?)@center@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'center',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-center=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'left',\n level: 'block',\n start(src) { return src.match(/@left@/)?.index; },\n tokenizer(src) {\n const rule = /^@left@(.+?)@left@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'left',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-left=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'right',\n level: 'block',\n start(src) { return src.match(/@right@/)?.index; },\n tokenizer(src) {\n const rule = /^@right@(.+?)@right@/s;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'right',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<div data-right=\"true\">${marked.parser(token.tokens)}</div>`;\n }\n },\n {\n name: 'sup',\n level: 'inline',\n start(src) { return src.match(/@sup@/)?.index; },\n tokenizer(src) {\n const rule = /^@sup@(.+?)@sup@/;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'sup',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<sup>${token.text}</sup>`;\n }\n },\n {\n name: 'sub',\n level: 'inline',\n start(src) { return src.match(/@sub@/)?.index; },\n tokenizer(src) {\n const rule = /^@sub@(.+?)@sub@/;\n const match = rule.exec(src);\n if (match) {\n return {\n type: 'sub',\n raw: match[0],\n text: match[1],\n tokens: this.lexer.inlineTokens(match[1])\n };\n }\n },\n renderer(token) {\n return `<sub>${token.text}</sub>`;\n }\n },\n ]\n });\n\n const allowedTags = ['h2', 'h3', 'h4', 'h5', 'h6', 'b', 'del', 'i', 'em', 'strong', 'p', 'ul', 'ol', 'li', 'br', 'span', 'div', 'sup', 'sub'];\n\n const allowedAttrs = ['data-center', 'data-right', 'data-left'];\n const cleanHTML = (dirty) => DOMPurify.sanitize(dirty, {\n ALLOWED_TAGS: [\n ...allowedTags,\n ...(markdownLink ? ['a'] : []),\n ...(markdownImg ? ['img'] : [])\n ],\n ALLOWED_ATTR: [\n ...allowedAttrs,\n ...(markdownLink ? ['href', 'title', 'target'] : []),\n ...(markdownImg ? ['src', 'alt', 'title'] : [])\n ],\n RETURN_TRUSTED_TYPE: false,\n });\n\n const renderMarkdown = (mdText) => cleanHTML(marked.parse(mdText));\n\n const allCells = table.querySelectorAll('td,th');\n allCells.forEach((cell) => {\n cell.innerHTML = cell.textContent;\n const originalText = cell.textContent.trim().replace(/<[^>]*>/g, '');\n cell.innerHTML = renderMarkdown(originalText);\n\n if (markdownLinkBlank && $(cell).find('a'))\n $(cell).find('a').attr({\n target: '_blank',\n rel: 'noopener noreferrer'\n })\n });\n\n table.setAttribute('data-markdown-rendered', 'true');\n }\n\n // Navigation 設置\n #setNavigation(element) {\n const { scrollStep } = this.options;\n const wrapper = element.querySelector('._contentWrap');\n const innerTable = element.querySelector('._tableCover');\n const table = element.querySelector('._table');\n const scrollAmount = typeof scrollStep === 'number' ? scrollStep : wrapper.clientWidth * 0.5;\n if (!wrapper || !innerTable) return;\n\n // 避免重複加按鈕\n if (innerTable.querySelector('.table_navigation')) return;\n\n const navContainer = document.createElement('div');\n navContainer.className = 'table_navigation';\n\n const leftBtn = document.createElement('div');\n const rightBtn = document.createElement('div');\n leftBtn.className = 'table-nav-left';\n rightBtn.className = 'table-nav-right';\n\n navContainer.appendChild(leftBtn);\n navContainer.appendChild(rightBtn);\n innerTable.appendChild(navContainer);\n\n const updateArrowVisibility = () => {\n const scrollLeft = table.scrollLeft;\n const maxScroll = table.scrollWidth - table.clientWidth;\n leftBtn.classList.toggle('disabled', scrollLeft <= 0);\n rightBtn.classList.toggle('disabled', scrollLeft >= maxScroll - 1);\n };\n\n leftBtn.addEventListener('click', () => {\n table.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n });\n\n rightBtn.addEventListener('click', () => {\n table.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n });\n\n table.addEventListener('scroll', updateArrowVisibility);\n window.addEventListener('resize', updateArrowVisibility);\n updateArrowVisibility();\n }\n\n #createVideo4(element) {\n const { params } = element.article;\n\n //*-* satrt **//\n // if (params.$video.length) {\n // const video = new Video4(params.$video);\n // }\n //*-* 要吃到 video4 的設定//\n if (params.$video.length) {\n // 傳入 this.options.videoOptions\n // 在 new Article4({ videoOptions: {...} }) 時,這些設定會被帶入 Video4\n const video = new Video4(params.$video, this.options.videoOptions);\n }\n //*-* end **//\n return this;\n }\n\n #createSwiper(element) {\n const { basic_rwd } = this.options;\n\n const { params } = element.article;\n\n // 判斷是否擁有 swiper4 結構\n if (!params.$swiper) return;\n\n // set id\n const $id = createUid();\n\n const $this = this;\n\n // set swiper\n let $swiperSet = {\n on: {\n init(swiper) {\n const container = swiper.$el[0];\n // video4 重複綁定修正\n if (params.$video.length) {\n // 應該抓 DB 設定的 classname\n const allVideo4 = container.querySelectorAll('[video4-active]');\n [...allVideo4].forEach(element => {\n element.querySelector(configs.video4.SETTINGS.videoButton)?.remove();\n element.querySelector('.overlay')?.remove();\n element.removeAttribute('video4-active');\n });\n $this.update();\n }\n },\n observerUpdate(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n swiper.update();\n }\n },\n },\n observer: true,\n breakpoints: {},\n };\n\n params.$selector.setAttribute('img-swiper', 'on');\n params.$selector.classList.add(`swiper-${$id}`);\n\n // swiper navigation (預設為 off)\n if (params.$selector.getAttribute('swiper-arrow') !== 'off' && params.$selector.getAttribute('swiper-arrow')) {\n const next = document.createElement('div');\n next.className = `swiper-button-next swiper-${$id}`;\n params.$swiperButtonCover.appendChild(next);\n\n const prev = document.createElement('div');\n prev.className = `swiper-button-prev swiper-${$id}`;\n params.$swiperButtonCover.appendChild(prev);\n\n $swiperSet.navigation = {\n nextEl: `.swiper-button-next.swiper-${$id}`,\n prevEl: `.swiper-button-prev.swiper-${$id}`,\n };\n }\n\n // swiper pagination (預設為 on)\n if (params.$selector.getAttribute('swiper-nav') !== 'off' || !params.$selector.getAttribute('swiper-nav')) {\n const pagination = document.createElement('div');\n pagination.className = `swiper-pagination swiper-${$id}`;\n params.$swiper.appendChild(pagination);\n\n $swiperSet.pagination = {\n el: `.swiper-pagination.swiper-${$id}`,\n clickable: true,\n };\n }\n\n // slidesPerView\n if (Number.parseInt(params.$selector.getAttribute('swiper-num'))) {\n $swiperSet.breakpoints[basic_rwd] = {\n slidesPerView: params.$selector.getAttribute('swiper-num') ? (Number.parseInt(params.$selector.getAttribute('swiper-num')) > 5 ? 5 : Number.parseInt(params.$selector.getAttribute('swiper-num'))) : 1,\n };\n }\n\n // autoplay (預設為 on)\n if (params.$selector.getAttribute('swiper-autoplay') !== 'off' || !params.$selector.getAttribute('swiper-autoplay')) {\n $swiperSet.autoplay = {\n delay: 3000,\n disableOnInteraction: false,\n };\n }\n\n // loop (預設為 on)\n if (params.$selector.getAttribute('swiper-loop') !== 'off' || !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.loop = true;\n }\n\n // speed\n if (params.$selector.getAttribute('swiper-speed')) {\n $swiperSet.speed = parseInt(params.$selector.getAttribute('swiper-speed'));\n }\n\n // parallax (預設為 off)\n if (params.$selector.getAttribute('swiper-parallax') !== 'off' && !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.parallax = true;\n }\n\n // pagination dynamicBullets (預設為 off)\n if (params.$selector.getAttribute('swiper-pagination-dynamic') === 'on') {\n $swiperSet.pagination.dynamicBullets = true;\n // 20240904 Scarlett\n if ($swiperSet.pagination) {\n $swiperSet.pagination.dynamicBullets = true;\n } else {\n console.warn('pagination undefined');\n }\n }\n\n // 若 swiper 只有一筆輪播則隱藏 navigation 及 pagination\n let gate = () => (window.innerWidth > basic_rwd ? Number(params.$selector.getAttribute('swiper-num')) || 1 : 1);\n\n if (params.$swiper.querySelectorAll('.swiper-slide').length <= gate()) {\n $swiperSet.navigation = false;\n $swiperSet.pagination = false;\n $swiperSet.autoplay = false;\n $swiperSet.loop = false;\n\n params.$selector.querySelector('.swiper-button-cover').style.display = 'none';\n params.$selector.querySelector('.swiper-pagination').style.display = 'none';\n\n params.$swiper.classList.add('swiper-no-swiping');\n }\n\n const $swiper = new SwiperV8(params.$swiper, $swiperSet);\n\n element.article.swiperList = [];\n element.article.swiperList.push($swiper);\n\n return this;\n }\n\n #createTable(element) {\n const { navigation } = this.options;\n const { params } = element.article;\n if (!params.$table) return;\n\n const isFreeze = element.getAttribute('freeze-table') === 'on';\n const freezeRow = parseInt(element.getAttribute('freeze-table-row') ?? '0', 10);\n const freezeCol = parseInt(element.getAttribute('freeze-table-col') ?? '0', 10);\n const innerTable = element.querySelector('table');\n const tipText = element.querySelector('._tipText');\n const wrapperWidth = element.offsetWidth;\n const tableWidth = innerTable.offsetWidth;\n const isOverflow = wrapperWidth < tableWidth;\n const isMarkdown = params.markdown === 'on';\n\n const initTable = () => {\n // 凍結功能\n if (isFreeze) this.#setFreeze(innerTable, freezeRow, freezeCol);\n // 拖曳功能\n if (isFreeze || isOverflow) this.#tableDrag(element);\n // Markdown\n if (isMarkdown) this.#setMarkdown(innerTable);\n // navigation\n if (navigation && isOverflow) this.#setNavigation(element);\n\n // 提示文字\n if (isOverflow) {\n element.classList.add('overflow');\n tipText.style.display = 'flex';\n } else {\n element.classList.remove('overflow');\n tipText.style.display = 'none';\n }\n }\n initTable();\n window.addEventListener('resize', initTable);\n\n return this;\n }\n\n update() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#createVideo4(el);\n this.#createTable(el);\n\n });\n });\n }\n}\n\nexport default Article4;","// 判斷操作事件使用 mouse 或是 touch\nlet operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown';\nlet operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseup';\nlet operateMove = 'ontouchmove' in document.documentElement ? 'touchmove' : 'mousemove';\n\n/* ---------------------------- Function 宣告 --------------------------------- */\n\n// 獲取 translate 數值\nfunction getTranslateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.mozTransform;\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none') {\n return {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d';\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: Number(matrixValues[4]),\n y: Number(matrixValues[5]),\n z: 0,\n };\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: Number(matrixValues[12]),\n y: Number(matrixValues[13]),\n z: Number(matrixValues[14]),\n };\n }\n}\n\n// 計算輪播內容總寬度\nfunction getSlideTotalW(element) {\n const slideWrap = element.querySelector('.wrapper');\n const items = slideWrap.querySelectorAll('.item');\n let slideTotalWidth = 0; //輪播內容總寬度\n items.forEach((item) => {\n const style = getComputedStyle(item);\n const marginL = parseInt(style.marginLeft);\n const marginR = parseInt(style.marginRight);\n slideTotalWidth += item.getBoundingClientRect().width + marginL + marginR;\n });\n return slideTotalWidth;\n}\n\n// 偵測目前輪播位置\nfunction detectPos(self) {\n // 拖拉在最左邊時\n if (getTranslateValues(self.slideWrapEl).x >= self.translateMin) {\n return 'is-start';\n }\n // 拖拉在最右邊時\n else if (getTranslateValues(self.slideWrapEl).x <= self.translateMax) {\n return 'is-end';\n }\n // 拖拉在中間時\n else if (\n getTranslateValues(self.slideWrapEl).x < self.translateMin &&\n getTranslateValues(self.slideWrapEl).x > self.translateMax\n ) {\n return 'is-middle';\n }\n}\n\n// 綁定事件\nfunction eventHandler(self) {\n const element = self.el;\n const slideWrap = element.querySelector('.wrapper');\n //滑鼠按住或是行動裝置手指按住\n slideWrap.addEventListener(operateStart, function (e) {\n self.isDown = true;\n if (self.slidable) slideWrap.classList.add('dragging');\n switch (operateStart) {\n case 'mousedown':\n self.startX = e.pageX;\n break;\n case 'touchstart':\n self.startX = e.changedTouches[0].pageX;\n break;\n }\n self.nowTranslateX = getTranslateValues(slideWrap).x;\n });\n\n //滑鼠放開或是行動裝置手指放開\n slideWrap.addEventListener(operateEnd, function (e) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance === 0 && e.target.closest('.item')) {\n if (operateEnd === 'mouseup' && e.button !== 0) return;\n const items = slideWrap.querySelectorAll('.item');\n items.forEach((item) => {\n item.classList.remove('active');\n });\n e.target.closest('.item').classList.add('active');\n self.moveActive(self.params.speed);\n } else {\n if (self.slidable) self.resetPos(element);\n }\n });\n\n //滑鼠離開\n slideWrap.addEventListener('mouseleave', function () {\n if (!self.isDown) return;\n if (self.slidable) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n self.resetPos(element);\n }\n });\n\n //滑鼠移動或是行動裝置手指移動\n slideWrap.addEventListener(operateMove, function (e) {\n if (!self.draggable) return;\n if (self.slidable) {\n if (!self.isDown) return;\n e.preventDefault();\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance !== 0) {\n slideWrap.classList.add('moving');\n const styles = {\n transition: 'all 0ms ease 0s',\n transform: `translate3d(${self.nowTranslateX + moveDistance}px,0,0)`,\n };\n Object.assign(slideWrap.style, styles);\n }\n }\n });\n}\n\n// 取消 a 的拖拉\nfunction disableLinkDrag(element) {\n const aTag = element.querySelectorAll('a');\n for (var i = 0, len = aTag.length; i < len; i++) {\n aTag[i].draggable = false;\n }\n}\n\nexport default class CategorySlider {\n constructor(element, params) {\n this.el = typeof element === 'string' ? document.querySelector(element) : element;\n this.slideWrapEl = this.el.querySelector('.wrapper');\n // default params\n this.params = {\n speed: 300,\n clickSwitch: true,\n breakpoint: false,\n };\n Object.assign(this.params, params);\n\n this.draggable = true;\n this.isDown = false; //按下\n this.startX = 0; //按下初始位置\n this.nowTranslateX = getTranslateValues(this.slideWrapEl).x; //目前X軸偏移輛\n this.slideTotalWidth = getSlideTotalW(this.el);\n this.translateMin = 0;\n this.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(this.el) - this.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n this.slidable =\n this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) &&\n (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint);\n this.init();\n }\n init() {\n const self = this;\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n }\n window.addEventListener('resize', function () {\n self.update();\n });\n eventHandler(self);\n disableLinkDrag(self.el);\n }\n moveActive(speed) {\n const self = this;\n const activeItem = self.slideWrapEl.querySelector('.item.active');\n const prevItem = activeItem.previousElementSibling;\n const prevOffsetLeft = prevItem\n ? activeItem.offsetLeft - self.el.clientWidth / 2 + activeItem.clientWidth / 2\n : 0;\n if (self.slidable) {\n if (-prevOffsetLeft < 0 && -prevOffsetLeft > self.translateMax) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(-${prevOffsetLeft}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else if (-prevOffsetLeft >= 0) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(0,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n }\n if (speed) {\n self.slideWrapEl.addEventListener(\n 'transitionend',\n function () {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n },\n false\n );\n } else {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n }\n }\n }\n resetPos() {\n const self = this;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: 'translate3d(0,0,0)',\n });\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n });\n break;\n }\n }\n update() {\n const self = this;\n self.el.querySelector('.wrapper').removeAttribute('style');\n self.slideTotalWidth = getSlideTotalW(self.el);\n self.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(self.el) - self.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n self.slidable =\n self.slideTotalWidth > Math.round(self.el.getBoundingClientRect().width) &&\n (!self.params.breakpoint || window.innerWidth <= self.params.breakpoint);\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n } else {\n self.el.classList.remove('slidable');\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n self.slideWrapEl.removeAttribute('style');\n }\n }\n}\n","import { configs } from '../configs'\nimport {\n insert,\n isString,\n isElementExist,\n getAllElements\n} from '../commons'\n\nconst getTargetUrl = type => {\n // facebook\n if (type == 'facebook') {\n return 'https://www.facebook.com/sharer/sharer.php?u=';\n }\n\n // line\n if (type == 'line') {\n // desktop & mobile 網址不同\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n return 'http://line.naver.jp/R/msg/text/?';\n }\n return 'https://lineit.line.me/share/ui?url=';\n }\n\n // twitter\n if (type == 'twitter') {\n return 'https://twitter.com/intent/tweet?url=';\n }\n\n // linkedin\n if (type == 'linkedin') {\n return `http://www.linkedin.com/shareArticle?mini=true&title=${document.title}&source=${document.title}&url=`;\n // return `https://www.linkedin.com/sharing/share-offsite/?url=`;\n }\n\n // telegram\n if (type == 'telegram') {\n return 'https://telegram.me/share/url?url=';\n }\n\n // weibo\n if (type == 'weibo') {\n return 'https://service.weibo.com/share/share.php?url=';\n }\n};\n\nclass Share4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 configs 提取設定\n const { SETTINGS } = configs.share4;\n if (!isString(el) || !isElementExist(el)) return;\n\n this.elements = getAllElements(el);\n\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(targets => {\n targets.querySelectorAll('[share-target]').forEach(el => {\n el.share = {};\n el.share.instance = this;\n el.share.params = options;\n el.share.eventHandler = this.#trigger;\n el.addEventListener('click', el.share.eventHandler);\n });\n });\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { eventHandler, params } = this.share;\n const type = this.getAttribute('share-target');\n\n const utm = {\n source: this.getAttribute('utm-source'),\n medium: this.getAttribute('utm-medium'),\n campaign: this.getAttribute('utm-campaign'),\n };\n\n const copy = {\n success: this.getAttribute('copy-success') || params.success,\n text: this.getAttribute('copy-text') || params.text,\n className: this.getAttribute('copy-class') || params.className,\n duration: this.getAttribute('copy-duration') || params.duration,\n };\n\n const baseUrl = encodeURIComponent(document.URL);\n let shareUrl = baseUrl;\n\n // 若為 wechat 則另開視窗掃描 QRcode\n if (type == 'wechat') {\n // https://api.qrserver.com/v1/create-qr-code/?data=${url}&size=300x300\n window.open(`https://api.qrserver.com/v1/create-qr-code/?data=${baseUrl}&size=250x250`, 'share to wechat', 'width=300,height=300');\n return;\n }\n\n // 若為 url 則複製連結\n if (type == 'url') {\n if (isElementExist('.copied-wrapper')) return;\n\n document.querySelector('body').insertAdjacentHTML(insert.append, `<div class='copied-wrapper'><div class='text'>${copy.success ? copy.success : ''}</div><input id='clipboard' type='text' readonly></div>`);\n\n const $copied = document.querySelector('.copied-wrapper');\n\n if (copy.className) {\n $copied.classList.add(copy.className);\n }\n $copied.style.top = this.getBoundingClientRect().top + window.scrollY + 'px';\n $copied.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + 'px';\n $copied.style.display = 'block';\n\n const $clipboard = document.querySelector('#clipboard');\n\n $clipboard.value = copy.text ?? window.location.href;\n $clipboard.setSelectionRange(0, 9999);\n $clipboard.select();\n\n if (document.execCommand('copy')) {\n // 複製對應內容\n document.execCommand('copy');\n // 動畫效果\n const copiedWrapper = document.querySelector('.copied-wrapper');\n const tooltipsText = document.querySelector('.copied-wrapper .text');\n tooltipsText.style.display = 'block';\n tooltipsText.style.opacity = 0;\n const fadeIn = (element, duration) => {\n let opacity = 0;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(function () {\n opacity += gap;\n element.style.opacity = opacity;\n\n if (opacity >= 1) {\n clearInterval(fading);\n setTimeout(function () {\n fadeOut(element, 300, function () {\n copiedWrapper.remove();\n });\n }, copy.duration);\n }\n }, interval);\n };\n const fadeOut = (element, duration, callback) => {\n let opacity = 1;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(() => {\n opacity -= gap;\n element.style.opacity = opacity;\n\n if (opacity <= 0) {\n clearInterval(fading);\n element.style.display = 'none';\n if (callback) callback();\n }\n }, interval);\n };\n fadeIn(tooltipsText, 300);\n }\n\n return;\n }\n\n // 其餘則使用對應網址另開新分頁\n // url + '?utm_source=Facebook' + '&utm_medium=social' + '&utm_campaign=' + campaign\n shareUrl = `${shareUrl}${utm.source ? `?utm_source=${utm.source}` : ''}${utm.medium ? `&utm_medium${utm.medium}` : ''}${utm.campaign ? `&utm_campaign${utm.campaign}` : ''}`;\n shareUrl = shareUrl.replace('?', '%3F').replace(new RegExp('&', 'g'), '%26');\n\n const isIOS =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n const openUrl = url => {\n if (isIOS) {\n window.location.href = url;\n } else {\n window.open(url);\n }\n };\n\n if (type == 'line') {\n openUrl(`${getTargetUrl(type)}${baseUrl}`);\n } else {\n openUrl(`${getTargetUrl(type)}${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\n"],"names":["init","userAgent","browser","mobile","os","isBrowser4","key","isMobile4","isOs4","logs","Detect4","setCss","target","style","css","isNodeList","el","Article4","options","__privateAdd","_create","_init","_getArticleData","_setStyle","_tableDrag","_setFreeze","_buildCellMap","_getRowHeights","_applyFreezeFromMap","_setMarkdown","_setNavigation","_createVideo4","_createSwiper","_createTable","isString","isElementExist","__privateMethod","create_fn","elements","parent","getArticleData_fn","createVideo4_fn","createTable_fn","SETTINGS","configs.article4","getAllElements","init_fn","_b","_a","setStyle_fn","createSwiper_fn","element","params","tableDrag_fn","scrollContainer","isDown","startX","startY","scrollLeft","scrollTop","event","rect","x","y","walkX","walkY","setFreeze_fn","table","rowCount","colCount","basic_rwd","isSmallScreen","rows","cellMap","buildCellMap_fn","applyFreezeFromMap_fn","spanTracker","row","r","cells","colPos","cell","rowspan","colspan","rs","rr","cs","cc","getRowHeights_fn","rowTops","baseOffset","c","elTop","rowFreeze","colFreeze","colLefts","cellInfo","topRow","leftCol","freezeRow","freezeCol","setMarkdown_fn","markdownLink","markdownImg","markdownLinkBlank","marked","src","match","token","allowedTags","allowedAttrs","cleanHTML","dirty","DOMPurify","renderMarkdown","mdText","originalText","$","setNavigation_fn","scrollStep","wrapper","innerTable","scrollAmount","navContainer","leftBtn","rightBtn","updateArrowVisibility","maxScroll","Video4","$id","createUid","$this","$swiperSet","swiper","container","configs.video4","next","prev","pagination","gate","$swiper","SwiperV8","navigation","isFreeze","tipText","wrapperWidth","tableWidth","isOverflow","isMarkdown","initTable","operateStart","operateEnd","operateMove","getTranslateValues","matrix","matrixType","matrixValues","getSlideTotalW","items","slideTotalWidth","item","marginL","marginR","detectPos","self","eventHandler","slideWrap","e","moveDistance","styles","disableLinkDrag","aTag","i","len","CategorySlider","speed","activeItem","prevOffsetLeft","getTargetUrl","type","Share4","_trigger","configs.share4","targets","trigger_fn","utm","copy","baseUrl","shareUrl","insert","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","duration","opacity","interval","gap","fading","fadeOut","callback","isIOS","openUrl","url"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xwadex/fesd",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.64",
|
|
5
5
|
"main": "./dist/fesd-bundle.js",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"dev": "vite",
|
|
9
|
-
"build": "vite build",
|
|
10
|
-
"preview": "vite preview"
|
|
11
|
-
},
|
|
12
7
|
"files": [
|
|
13
8
|
"dist"
|
|
14
9
|
],
|
|
@@ -42,5 +37,10 @@
|
|
|
42
37
|
"dompurify": "^3.2.6",
|
|
43
38
|
"jsdom": "^26.1.0",
|
|
44
39
|
"marked": "^15.0.12"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"dev": "vite",
|
|
43
|
+
"build": "vite build",
|
|
44
|
+
"preview": "vite preview"
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|