7.2 KiB
description, alwaysApply
| description | alwaysApply |
|---|---|
| 全站導覽與籌備中(portal-nav.js、site-guide、開放邊界、刪錨點) | true |
【全站導覽邏輯】portal-nav.js・籌備中控制・site-guide 例外
之後每新增一個要上線、可點的 HTML 頁面,請一併完成導覽更新;規則都集中在 assets/js/portal-nav.js。
0. 兩個世界(最高優先,實作前必讀)
| 誰在看 | 哪一頁/哪塊 | 行為 |
|---|---|---|
| 站主自己 | 僅 extra/site-guide.html |
頂欄必須 data-portal-nav data-portal-nav-all-open。腳本不對該頁頂欄套用籌備中;不對 <main class="site-guide-main"> 內任何 <a href> 改寫。表上連結全部要點得進(由站主在 HTML 維護)。 |
| 訪客/大家 | 除上列以外的每一頁 | 頂欄+頁內所有 <a href>(分頁列、內文等)依 COMING_SOON_PAGES、INDEX_NAV_OPEN_HASHES 鎖定;未公開者一律標示「籌備中」、不可點進。禁止在其他頁加 data-portal-nav-all-open。 |
硬規則(違反=做錯)
- 未經站主逐句同意:不得從
COMING_SOON_PAGES刪檔名、不得擴充INDEX_NAV_OPEN_HASHES、不得在buildPortalNavInnerHTML新增可點項、不得把籌備中改成真href、不得刪站主已同意列入頂欄的項。 - 「檔案在 repo」≠「可開放導覽」;不得自行推論。
totoga2/readable.html(圖文好讀版,檔名readable.html)、variety/variety.html:站主沒有明講對外開放時,檔名必須留在COMING_SOON_PAGES(訪客頂欄不可點進)。要開放時只能等站主說了再從 Set 移除。- 「刪除/拿掉/不要了」:若未寫明是單一檔案、頂欄某一列、整段子選單還是整個資料夾,一律先問站主,禁止自行擴大刪除範圍。
- 不確定是否開放、連哪、是否例外:先問站主再改,不要猜。
- 站主說刪
某頁#錨點:見下方 §8 頁面錨點刪除(先改 DOM,再修死鏈;禁止只動導覽)。
1. 必做:把頁面掛進導覽 HTML
在 buildPortalNavInnerHTML(assets/js/portal-nav.js)裡維護連結:
- 依資訊架構放在對應的
<li>底下;需要子選單時用portal-submenu。 href使用站根相對路徑(腳本會依當前頁深度加上前綴rp):例如`${rp}variety/variety.html`、`${rp}index.html#section`。- Logo 列:
`${rp}index.html`與`${rp}assets/images/logov.svg`。
新增或調整完後,所有帶 data-portal-nav 的 <nav class="portal-nav"> 都會在載入腳本時被注入同一份 HTML。
1.1 未公開=籌備中(全站一致)
- 站主沒說對外開放的頁/錨點:在訪客可見處不得留可點的真實
href(頂欄、totoga2 分頁列、首頁內文、頁尾 CTA 皆同)。 - 腳本標記為
data-coming-soon="true"時:提示與頁內按鈕須讓讀者看見 「籌備中」(portal-nav.js的COMING_SOON_LABEL),不是改寫成別的隨機句。 - 唯一例外:
extra/site-guide.html的main.site-guide-main內連結(站主索引自用);該頁頂欄data-portal-nav-all-open僅影響頂欄,不豁免主文以外區塊。
2. 可點 vs「籌備中」:COMING_SOON_PAGES
腳本會對導覽裡的連結做 applyComingSoonToNav:
- 若連結的檔名(小寫)出現在
COMING_SOON_PAGES這個Set裡,該連結會被改成href="#"、加上data-coming-soon="true",點擊無法前往(顯示隨機籌備中文案)。 - 不要出現在 Set 裡=視為已開放,維持真實
href。
因此:
| 需求 | 做法 |
|---|---|
| 新頁要正式開放 | 寫進 buildPortalNavInnerHTML(assets/js/portal-nav.js),並確認檔名不在 COMING_SOON_PAGES。若曾暫時關閉,記得從 Set 刪除該檔名。 |
| 新頁先占位、不開放 | 可選擇:仍寫進導覽,但把檔名加進 COMING_SOON_PAGES;或暫時不要放進導覽。 |
(目前 Set 內含哪些檔,以 assets/js/portal-nav.js 為準;站主明講開放後才從 Set 移除該檔名,例如 readable.html。)
3. 首頁錨點:INDEX_NAV_OPEN_HASHES
指向 index.html#... 的連結,除了檔名判斷外,還會看 錨點:
- 若
href是index.html#某錨點,且該錨點不在INDEX_NAV_OPEN_HASHES,會被當成籌備中(與整頁關閉不同,是「這個錨點未開」)。 - 新增首頁區塊且要從導覽直達時:在
INDEX_NAV_OPEN_HASHES加上對應字串,例如"#story"(僅在使用者要求開放該錨點時;若約定維持關閉則勿加入)。
3.1 索引頁頂欄全開(僅 site-guide.html)
extra/site-guide.html的<nav>使用data-portal-nav data-portal-nav-all-open時:注入後不套用籌備中,頂欄連結維持真實href。主文main.site-guide-main內連結不由腳本改寫。- 禁止在
site-guide.html以外的頁面使用data-portal-nav-all-open。
4. 新頁面 HTML 檢查清單
-
在
<body>內適當位置放:<nav class="portal-nav" aria-label="水晶男孩推廣部導覽" data-portal-nav></nav> -
在
</body>前載入(順序可與現有頁一致):<script src="assets/js/portal-nav.js"></script>內頁(例如
extra/、fallen/、member/、yellow-note/、variety/下)請用相對站根深度,例如:<script src="../assets/js/portal-nav.js"></script> -
若該頁有
assets/js/particles.js/共用樣式(assets/css/style.css等),比照其他內頁一併引入即可。
5. 刻意不進導覽的頁面
若某頁只給自己用(例如站內索引、草稿),不要寫進 buildPortalNavInnerHTML 即可;不必改 COMING_SOON_PAGES。
6. 改完請自檢
- 從導覽點進新頁是否正常。
- 若應為開放頁,確認不會變成「尚無開放」、不會被改成
href="#"。 - 若為首頁錨點,確認已加入
INDEX_NAV_OPEN_HASHES(若有需要)。
7. 頁面錨點刪除(某頁.html#id)
指該 HTML 裡 id="…" 的那一區/<section>,不是刪整檔、不是刪資料夾、不是刪頂欄整段「全員發瘋」,也不是擅自改 COMING_SOON_PAGES(除非原句一併交代)。
- 先在目標頁拿掉該 DOM。
- 再修仍指向死錨的
href(最小必要)。 - 禁止只改
portal-nav.js/site-guide.html卻不刪頁內區塊。
錨點拿掉後,書籤網址列仍可能顯示 #…,不代表 DOM 還在。header 大標 ≠ 已刪的 #id 區塊。「刪除」範圍不清 → 先問。
名詞
- 頂欄:
portal-nav.js注入的<nav class="portal-nav" data-portal-nav>。 - 全站索引:
extra/site-guide.html(可列草稿;不等於頂欄要掛)。 - 程式真值:
assets/js/portal-nav.js(COMING_SOON_LABEL=「籌備中」)。