fix [data-totoga-hub] 按鈕加上 click,呼叫 setHubPanel

This commit is contained in:
2026-05-14 18:28:39 +08:00
parent efed0a5feb
commit 03597e1c53
6 changed files with 356 additions and 265 deletions
+44 -2
View File
@@ -796,6 +796,7 @@ a {
transform: translateX(-50%);
background: linear-gradient(180deg, #ffde5f 0%, #ffcc00 45%, #f3b700 100%);
border-radius: 8px;
pointer-events: none;
}
.story-node {
@@ -1842,6 +1843,16 @@ body.totoga2-page .bilivideo-frame iframe {
body.totoga2-page .totoga2-reader-hub {
padding-bottom: 2rem;
position: relative;
z-index: 2;
}
/* 紀實長文 hub:上方 plot 為 section(全站 section 設 z-index:10),與下方控制列重疊時會蓋住點擊 */
body.totoga2-page .totoga2-reader-hub > .chronicle-controls,
body.totoga2-page .totoga2-reader-hub > #totoga2-reader,
body.totoga2-page .totoga2-reader-hub > #totoga2-pager {
position: relative;
z-index: 12;
}
body.totoga2-page .totoga2-plot {
@@ -2153,6 +2164,37 @@ body.site-guide-page .site-guide-group {
margin-bottom: 2.75rem;
}
body.site-guide-page .site-guide-nav-sub {
display: block;
margin-top: 0.4rem;
font-size: clamp(0.62rem, 1.8vw, 0.78rem);
font-weight: 600;
letter-spacing: 0.1em;
color: #7a6a30;
line-height: 1.4;
text-transform: none;
}
body.site-guide-page .site-guide-folder-hint {
text-align: center;
margin: -0.35rem auto 1.35rem;
max-width: 44rem;
font-size: 0.84rem;
color: #6e6e6e;
line-height: 1.55;
}
body.site-guide-page .site-guide-path {
font-size: 0.82em;
font-weight: 600;
color: #888;
}
body.site-guide-page .site-guide-group--extra {
padding-top: 0.5rem;
border-top: 1px dashed rgba(255, 204, 0, 0.42);
}
body.site-guide-page .site-guide-grid {
display: grid;
gap: 1.25rem;
@@ -2228,8 +2270,8 @@ body.site-guide-page .site-guide-card code {
border-radius: 4px;
}
/* site-guide六六歌2 區(單卡寬版、頁面連結為主) */
body.site-guide-page .site-guide-group--ssg2 .site-guide-grid {
/* site-guide含 totoga2 大卡時,該區網格改為單欄置中 */
body.site-guide-page .site-guide-group:has(.site-guide-card--totoga2) .site-guide-grid {
grid-template-columns: minmax(0, min(100%, 40rem));
justify-content: center;
}
+34 -31
View File
@@ -1,11 +1,15 @@
(() => {
/**
* 導覽尚未開放連結
* 整個檔案先關COMING_SOON_PAGES目前已含演唱會典藏地圖視覺進化論等綜藝主頁已開以利子選單
* index.html 細到錨點INDEX_NAV_OPEN_HASHES
* 文案 NAV_SOON_PHRASES每次滑過或鍵盤聚焦連結時隨機擇一句不交錯只靠重整
* 浮層title 與該次互動同步無障礙用語固定尚無開放避免標籤隨機跳動
* 要調整詞句 NAV_SOON_PHRASES 即可
* 頂欄 `buildPortalNavInnerHTML`僅列站主同意掛在頂欄的分類**不含**未同意的頁例如 `member`六顆水晶
* `COMING_SOON_PAGES``INDEX_NAV_OPEN_HASHES` Set白名單外籌備中`href` `#`
* **唯一例外**`extra/site-guide.html` `<nav data-portal-nav data-portal-nav-all-open>` **不套用**籌備中索引頁預覽用頂欄連結全可點**其他任何頁**不得加 `data-portal-nav-all-open`
* 文案 NAV_SOON_PHRASES滑過聚焦時隨機一句無障礙固定尚無開放
*
* 站主規則必守未經站主**逐項口頭文字同意**不得自行
* COMING_SOON_PAGES 移除檔名擴充 INDEX_NAV_OPEN_HASHES或在導覽模板新增改為可點連結
* 頁面已存在 可開放導覽
* 完整條文與檢查清單`.cursor/rules/portal-nav-rules.mdc`Cursor 會讀取
*/
const NAV_SOON_PHRASES = ["奇蹟醞釀中", // 頁面準備中,呼應黃色奇蹟的誕生
"感動載入中", // 資料讀取中,連結入坑時的悸動
@@ -27,6 +31,8 @@
}
const COMING_SOON_PAGES = new Set([
"variety.html",
"njtw5.html",
"concert.html",
"albums.html",
"map.html",
@@ -34,7 +40,7 @@
"minister_ge.html",
]);
/** 目前先開:淪陷瞬間 #origin + 子選單三項 #start / #mission / #timeline */
/** 首頁僅下列錨點可點;其餘(如 #story)維持籌備中,須站主同意後才可加入 */
const INDEX_NAV_OPEN_HASHES = new Set(["#origin", "#start", "#mission", "#timeline"]);
function normalizePageKey(href) {
@@ -150,44 +156,39 @@
/** 全站導覽 HTML — `rp` 為站根相對前綴;僅修改此模板即可同步所有頁面 */
function buildPortalNavInnerHTML(rp) {
return `
<a class="logo" href="${rp}index.html"><img src="${rp}assets/images/logov.svg" alt="SECHSKIES Logo"></a>
<a class="logo" target="_blank" rel="noopener noreferrer" href="${rp}index.html"><img src="${rp}assets/images/logov.svg" alt="SECHSKIES Logo"></a>
<ul>
<li><a href="${rp}index.html#origin"><span class="portal-nav__label">淪陷瞬間</span><span class="portal-nav__sub"> · </span></a>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}index.html#origin"><span class="portal-nav__label">淪陷瞬間</span><span class="portal-nav__sub"> · </span></a>
<ul class="portal-submenu">
<li><a href="${rp}index.html#start"><span class="portal-nav__label">好奇的開端</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}index.html#mission"><span class="portal-nav__label">成立的初衷</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}index.html#timeline"><span class="portal-nav__label">跨時空軌跡</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}index.html#story"><span class="portal-nav__label">傳奇的轉折</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}index.html#start"><span class="portal-nav__label">好奇的開端</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}index.html#mission"><span class="portal-nav__label">成立的初衷</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}index.html#timeline"><span class="portal-nav__label">跨時空軌跡</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}index.html#story"><span class="portal-nav__label">傳奇的轉折</span><span class="portal-nav__sub"></span></a></li>
</ul>
</li>
<li><a href="${rp}variety/variety.html"><span class="portal-nav__label">瘋子與天才</span><span class="portal-nav__sub">EUN JI-WON × VARIETY GRAVITY</span></a>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}variety/variety.html"><span class="portal-nav__label">瘋子與天才</span><span class="portal-nav__sub">EUN JI-WON × VARIETY GRAVITY</span></a>
<ul class="portal-submenu">
<li><a href="${rp}variety/variety.html#variety"><span class="portal-nav__label">瘋狂出演中</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}variety/variety.html#stage"><span class="portal-nav__label">隊長的氣場</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}variety/NJTW/NJTW5.html"><span class="portal-nav__label">新西遊記</span><span class="portal-nav__sub"> · MEMBER GUIDE</span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}variety/variety.html#variety"><span class="portal-nav__label">瘋狂出演中</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}variety/variety.html#stage"><span class="portal-nav__label">隊長的氣場</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}variety/NJTW/NJTW5.html"><span class="portal-nav__label">新西遊記</span><span class="portal-nav__sub"> · MEMBER GUIDE</span></a></li>
</ul>
</li>
<li><a href="${rp}concert/concert.html"><span class="portal-nav__label">現場的震撼</span><span class="portal-nav__sub">SECHSKIES CONCERT ARCHIVE</span></a>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}concert/concert.html"><span class="portal-nav__label">現場的震撼</span><span class="portal-nav__sub">SECHSKIES CONCERT ARCHIVE</span></a>
<ul class="portal-submenu">
<li><a href="${rp}concert/concert.html#stage-now"><span class="portal-nav__label">永恆的重逢</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}concert/concert.html#stage-past"><span class="portal-nav__label">燦爛的最初</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}concert/concert.html#stage-now"><span class="portal-nav__label">永恆的重逢</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}concert/concert.html#stage-past"><span class="portal-nav__label">燦爛的最初</span><span class="portal-nav__sub"></span></a></li>
</ul>
</li>
<li><a href="${rp}albums/albums.html"><span class="portal-nav__label">黃色留聲機</span><span class="portal-nav__sub">YELLOW PHONOGRAPH</span></a>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}albums/albums.html"><span class="portal-nav__label">黃色留聲機</span><span class="portal-nav__sub">YELLOW PHONOGRAPH</span></a>
<ul class="portal-submenu">
<li><a href="${rp}albums/albums.html#new"><span class="portal-nav__label">啟動新篇章</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}albums/albums.html#classic"><span class="portal-nav__label">輝煌全盛期</span><span class="portal-nav__sub">19971999 </span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}albums/albums.html#new"><span class="portal-nav__label">啟動新篇章</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}albums/albums.html#classic"><span class="portal-nav__label">輝煌全盛期</span><span class="portal-nav__sub">19971999 </span></a></li>
</ul>
</li>
<li><a href="${rp}map/map.html"><span class="portal-nav__label">聖地巡禮</span><span class="portal-nav__sub">SECHSKIES TAIWAN ARCHIVE</span></a>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}map/map.html"><span class="portal-nav__label">聖地巡禮</span><span class="portal-nav__sub">SECHSKIES TAIWAN ARCHIVE</span></a>
<ul class="portal-submenu">
<li><a href="${rp}map/map.html#taipei"><span class="portal-nav__label">台北聖地</span><span class="portal-nav__sub"></span></a></li>
<li><a href="${rp}map/map.html#global"><span class="portal-nav__label">海外遠征</span><span class="portal-nav__sub"></span></a></li>
</ul>
</li>
<li><a href="${rp}extra/member.html"><span class="portal-nav__label">六顆水晶</span><span class="portal-nav__sub">BLACK KIES · WHITE KIES</span></a>
<ul class="portal-submenu">
<li><a href="${rp}extra/member.html#crystal-board"><span class="portal-nav__label">黑白分流</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}map/map.html#taipei"><span class="portal-nav__label">台北聖地</span><span class="portal-nav__sub"></span></a></li>
<li><a target="_blank" rel="noopener noreferrer" href="${rp}map/map.html#global"><span class="portal-nav__label">海外遠征</span><span class="portal-nav__sub"></span></a></li>
</ul>
</li>
</ul>
@@ -197,7 +198,9 @@
const rootPrefix = portalNavRootPrefix();
document.querySelectorAll("nav.portal-nav[data-portal-nav]").forEach((nav) => {
nav.innerHTML = buildPortalNavInnerHTML(rootPrefix);
applyComingSoonToNav(nav);
if (!nav.hasAttribute("data-portal-nav-all-open")) {
applyComingSoonToNav(nav);
}
});
const navs = Array.from(document.querySelectorAll(".portal-nav"));
+7
View File
@@ -10,6 +10,13 @@
});
}
hubButtons.forEach((button) => {
button.addEventListener("click", () => {
const name = button.dataset.totogaHub;
if (name) setHubPanel(name);
});
});
const reader = document.getElementById("totoga2-reader");
const chapters = reader ? Array.from(reader.querySelectorAll(".chronicle-chapter")) : [];
const modeButtons = Array.from(document.querySelectorAll("[data-totoga-reader-mode]"));