diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_01.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_01.jpg new file mode 100644 index 0000000..5334636 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_01.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_02.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_02.jpg new file mode 100644 index 0000000..19b4934 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_02.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_03.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_03.jpg new file mode 100644 index 0000000..89e4e9f Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_03.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_04.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_04.jpg new file mode 100644 index 0000000..8537e6c Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_04.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_05.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_05.jpg new file mode 100644 index 0000000..bbae847 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_05.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_06.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_06.jpg new file mode 100644 index 0000000..eb3a3a7 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_06.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_07.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_07.jpg new file mode 100644 index 0000000..98e0b62 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_07.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_08.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_08.jpg new file mode 100644 index 0000000..9a92faa Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_08.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_09.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_09.jpg new file mode 100644 index 0000000..55c240b Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_09.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_10.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_10.jpg new file mode 100644 index 0000000..0ee9928 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_10.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_11.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_11.jpg new file mode 100644 index 0000000..5f13994 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_11.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_12.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_12.jpg new file mode 100644 index 0000000..8af9a5c Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_12.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_13.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_13.jpg new file mode 100644 index 0000000..8110a6c Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_13.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_14.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_14.jpg new file mode 100644 index 0000000..9af9503 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_14.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_15.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_15.jpg new file mode 100644 index 0000000..9dd2bea Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_15.jpg differ diff --git a/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_16.jpg b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_16.jpg new file mode 100644 index 0000000..62a4e17 Binary files /dev/null and b/assets/images/totoga2/jpg/2023_電子書_無限挑戰六六歌2_final跨頁_頁面_16.jpg differ diff --git a/assets/js/totoga2.js b/assets/js/totoga2.js index a9281f6..df8f7d9 100644 --- a/assets/js/totoga2.js +++ b/assets/js/totoga2.js @@ -3,30 +3,26 @@ const hubPanels = Array.from(document.querySelectorAll("[data-totoga-panel]")); function setHubPanel(name) { + if (!hubButtons.length || !hubPanels.length) return; hubButtons.forEach((btn) => btn.classList.toggle("active", btn.dataset.totogaHub === name)); hubPanels.forEach((panel) => { panel.hidden = panel.dataset.totogaPanel !== name; }); } - hubButtons.forEach((btn) => { - btn.addEventListener("click", () => setHubPanel(btn.dataset.totogaHub)); - }); - const reader = document.getElementById("totoga2-reader"); - if (!reader) return; - - const chapters = Array.from(reader.querySelectorAll(".chronicle-chapter")); + const chapters = reader ? Array.from(reader.querySelectorAll(".chronicle-chapter")) : []; const modeButtons = Array.from(document.querySelectorAll("[data-totoga-reader-mode]")); const pager = document.getElementById("totoga2-pager"); const prevBtn = document.getElementById("totoga2-prev"); const nextBtn = document.getElementById("totoga2-next"); const indicator = document.getElementById("totoga2-chapter-indicator"); - if (!pager || !prevBtn || !nextBtn || !indicator) return; + const hasPager = Boolean(pager && prevBtn && nextBtn && indicator); let currentIndex = 0; function updatePagedView() { + if (!hasPager) return; chapters.forEach((chapter, index) => { chapter.style.display = index === currentIndex ? "" : "none"; chapter.classList.toggle("active", index === currentIndex); @@ -37,13 +33,14 @@ } function setReaderMode(mode) { + if (!reader) return; reader.dataset.mode = mode; modeButtons.forEach((btn) => btn.classList.toggle("active", btn.dataset.totogaReaderMode === mode)); - if (mode === "paged") { + if (mode === "paged" && hasPager) { pager.hidden = false; updatePagedView(); } else { - pager.hidden = true; + if (pager) pager.hidden = true; chapters.forEach((chapter) => { chapter.style.display = ""; chapter.classList.remove("active"); @@ -55,37 +52,48 @@ button.addEventListener("click", () => setReaderMode(button.dataset.totogaReaderMode)); }); - prevBtn.addEventListener("click", () => { - if (currentIndex > 0) { - currentIndex -= 1; - updatePagedView(); - } - }); + if (hasPager) { + prevBtn.addEventListener("click", () => { + if (currentIndex > 0) { + currentIndex -= 1; + updatePagedView(); + } + }); - nextBtn.addEventListener("click", () => { - if (currentIndex < chapters.length - 1) { - currentIndex += 1; - updatePagedView(); - } - }); + nextBtn.addEventListener("click", () => { + if (currentIndex < chapters.length - 1) { + currentIndex += 1; + updatePagedView(); + } + }); + } - const initialHub = - hubButtons.find((b) => b.classList.contains("active"))?.dataset.totogaHub || - hubButtons[0]?.dataset.totogaHub || - "video"; - setHubPanel(initialHub); - setReaderMode("scroll"); + if (hubButtons.length > 0) { + const initialHub = + hubButtons.find((b) => b.classList.contains("active"))?.dataset.totogaHub || + hubButtons[0]?.dataset.totogaHub || + "video"; + setHubPanel(initialHub); + } else { + hubPanels.forEach((panel) => { + panel.hidden = false; + }); + } + + if (reader) { + setReaderMode("scroll"); + } function applyLocationHashNavigation() { const hash = (location.hash || "").slice(1); - if (hash === "ebook") { + if (hash === "ebook" && hubButtons.length > 0) { setHubPanel("ebook"); return; } if (hash && document.getElementById(hash)) { - setHubPanel("reader"); + if (hubButtons.length > 0) setHubPanel("reader"); setReaderMode("scroll"); - pager.hidden = true; + if (pager) pager.hidden = true; requestAnimationFrame(() => { document.getElementById(hash)?.scrollIntoView({ behavior: "smooth", block: "start" }); }); diff --git a/extra/Untitled-1.html b/extra/Untitled-1.html new file mode 100644 index 0000000..592b4a3 --- /dev/null +++ b/extra/Untitled-1.html @@ -0,0 +1,46 @@ + + + + + + +
+ +
+
+ +
+ +
+
+ img[s] +
+
+ img[s] +
+
+ img[s] +
+
+
+
+ img[s] +
+
+ img[s] +
+
+ img[s] +
+
+ img[s] +
+
, initial-scale=1.0"> + Document + + + + + + + \ No newline at end of file diff --git a/extra/totoga2 copy.html b/extra/totoga2 copy.html new file mode 100644 index 0000000..c4d203f --- /dev/null +++ b/extra/totoga2 copy.html @@ -0,0 +1,206 @@ + + + + + + + 水晶男孩|無限挑戰六六歌2 — 紀實電子書 + + + + + + +
+
+ +

無限挑戰 · 六六歌2

+ +
+ 水晶男孩回來啦! + SECHSKIES COM' BACK +
+ +
+ INFINITE CHALLENGE · SIX SONGS 2 — E-BOOK + APRIL 14, 2016 +
+
+
+ + + + + +
+ + + +
+ + +
+
+

節目影片

+

+ 以下為 Bilibili 嵌入播放器(16:9)。若無法播放,請至站內搜尋同一 BV 號;中集、下集請將 iframe 的 bvid 換成你的分集連結。 +

+
+ +
+
+

上集

+
+ +
+
+
+

中集

+

預設與上集同一支;請替換 bvid 為中集 BV。

+
+ +
+
+
+

下集

+

預設與上集同一支;請替換 bvid 為下集 BV。

+
+ +
+
+
+
+ + + + + + + + + + + + + + + diff --git a/extra/totoga2.html b/extra/totoga2.html index 26e07fa..1cdd45b 100644 --- a/extra/totoga2.html +++ b/extra/totoga2.html @@ -8,12 +8,116 @@ +
-

無限挑戰 · 六六歌2

@@ -31,164 +135,76 @@ - -
- - - -
- - -
-
-

節目影片

-

- 以下為 Bilibili 嵌入播放器(16:9)。若無法播放,請至站內搜尋同一 BV 號;中集、下集請將 iframe 的 bvid 換成你的分集連結。 -

-
- -
-
-

上集

-
- +
+
+ +
+
+ 六六歌2 電子書跨頁圖(序號一 · 右)
-
-
-

中集

-

預設與上集同一支;請替換 bvid 為中集 BV。

-
- +
+ 六六歌2 電子書跨頁圖(序號一 · 左)
-
-
-

下集

-

預設與上集同一支;請替換 bvid 為下集 BV。

-
- +
+ +
+
+ 六六歌2 電子書跨頁圖(序號二 · 全寬)
-
-
-
- - +

04 無限挑戰

+

《無限挑戰》是韓國綜藝史上指標性的真人秀節目。「星期六星期六是歌手(六六歌)」企劃,成為水晶男孩 2016 回歸舞台的關鍵起點。

+

第一季掀起 90 年代懷舊熱潮,雖然水晶男孩未能完整出演,卻留下「總有一天要六人完整回到舞台」的遺憾伏筆。

+ - +
+

21 登場

+

眼罩揭開後,滿場黃海與哭聲同時湧現。從《請記得我》到安可,《離別曲》在那一晚變成了「重逢證詞」。

+

2000 的缺憾,在 2016 終於補上。這一頁不是結束,而是團體與粉絲共同完成的回歸章節。

+
+