Files
sechskies/.cursor/rules/portal-nav-rules.mdc
T

139 lines
7.3 KiB
Plaintext
Raw Normal View History

---
description: 全站頂欄導覽 portal-nav.jsbuildPortalNavInnerHTML、COMING_SOON_PAGES、INDEX_NAV_OPEN_HASHES、籌備中、新頁檢查清單);與 user-scope-and-nav 搭配。
alwaysApply: true
---
# 全站導覽列規則(`assets/js/portal-nav.js`
之後**每新增一個要上線、可點的 HTML 頁面**,請一併完成導覽更新;規則都集中在 **`assets/js/portal-nav.js`**。
---
2026-05-15 02:00:02 +08:00
## 0. 兩個世界(最高優先,實作前必讀)
2026-05-15 02:00:02 +08:00
| 誰在看 | 哪一頁/哪塊 | 行為 |
|--------|----------------|------|
| **站主自己** | 僅 **`extra/site-guide.html`** | 頂欄必須 **`data-portal-nav data-portal-nav-all-open`**。腳本**不**對該頁頂欄套用籌備中;**不**對 `<main class="site-guide-main">` 內任何 `<a href>` 改寫。表上連結**全部要點得進**(由站主在 HTML 維護)。 |
| **訪客/大家** | **除上列以外**的每一頁 | 頂欄一律套用 `applyComingSoonToNav``COMING_SOON_PAGES`、`INDEX_NAV_OPEN_HASHES` 說不能點就不能點。**禁止**在其他頁加 `data-portal-nav-all-open`。 |
**硬規則(違反=做錯)**
1. **未經站主逐句同意**:不得從 `COMING_SOON_PAGES` **刪**檔名、不得擴充 `INDEX_NAV_OPEN_HASHES`、不得在 `buildPortalNavInnerHTML` **新增**可點項、不得把籌備中改成真 `href`、不得刪站主已同意列入頂欄的項。
2. **「檔案在 repo」≠「可開放導覽」**;不得自行推論。
2026-05-15 02:47:26 +08:00
3. **`fallen/totoga2.html`(整合頁)**、**`variety/variety.html`**:站主**沒有明講對外開放**時,檔名**必須**留在 `COMING_SOON_PAGES`(訪客頂欄不可點進)。要開放時**只**能等站主說了再從 Set 移除。
2026-05-15 02:00:02 +08:00
4. **「刪除/拿掉/不要了」**:若未寫明是**單一檔案**、**頂欄某一列**、**整段子選單**還是**整個資料夾**,**一律先問站主**,禁止自行擴大刪除範圍。
5. **不確定**是否開放、連哪、是否例外:**先問站主再改**,不要猜。
6. 站主說要刪的是 **`某頁#錨點`**(頁內區塊)時:先改該頁 DOM,再修死錨連結;**不要**只動導覽、也不要把「刪區塊」擴成刪頂欄整段。細節見 **`user-scope-and-nav.mdc`**(§ 頁面錨點刪除)。
## 0.1 站主同意(細項)
- **未經站主明確同意**,不得自行:從 `COMING_SOON_PAGES` 移除檔名、擴充 `INDEX_NAV_OPEN_HASHES`、在 `buildPortalNavInnerHTML` **新增**導覽項目、**刪除站主已同意列入頂欄**的項目、或把籌備中連結改成可點(**全站導覽頁頂欄例外見 §0**)。
- **`extra/site-guide.html`**:站主自用;條件同 §0 表格。(僅此頁可加 `data-portal-nav-all-open`。)
- 頂欄模板**不含**未同意掛列的頁;該頁仍可由 `site-guide` 主文或網址直開(站主自用)。
---
## 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。
---
## 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`;或暫時不要放進導覽。 |
2026-05-15 02:00:02 +08:00
(目前 Set 內含哪些檔,以 `assets/js/portal-nav.js` 為準;站主明講開放後才從 Set 移除該檔名,例如 `totoga2.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`
2026-05-15 02:00:02 +08:00
- **`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>` 內適當位置放:
```html
<nav class="portal-nav" aria-label="水晶男孩推廣部導覽" data-portal-nav></nav>
```
- 在 `</body>` 前載入(順序可與現有頁一致):
```html
<script src="assets/js/portal-nav.js"></script>
```
2026-05-15 02:47:26 +08:00
內頁(例如 `extra/`、`fallen/`、`member/`、`yellow-note/`、`variety/` 下)請用相對站根深度,例如:
```html
<script src="../assets/js/portal-nav.js"></script>
```
- 若該頁有 **`assets/js/particles.js`**/共用樣式(`assets/css/style.css` 等),比照其他內頁一併引入即可。
---
## 5. 刻意不進導覽的頁面
若某頁只給自己用(例如站內索引、草稿),**不要**寫進 `buildPortalNavInnerHTML` 即可;不必改 `COMING_SOON_PAGES`。
---
## 6. 改完請自檢
1. 從導覽點進新頁是否正常。
2. 若應為開放頁,確認不會變成「尚無開放」、不會被改成 `href="#"`。
3. 若為首頁錨點,確認已加入 `INDEX_NAV_OPEN_HASHES`(若有需要)。
---
## 7. 與使用者約定:開放範圍
- **不要**在未經使用者**明確交代**的情況下,自行把導覽改為「可點進入」或更換目標頁(例如把「傳奇的轉折」改成連到 `totoga2.html`)。
- 「傳奇的轉折」是否開放、連到哪裡,**只依使用者指示**;意圖與邊界亦見 **`.cursor/rules/user-scope-and-nav.mdc`**。
---
## 相關檔案
| 檔案 | 用途 |
|------|------|
| `assets/js/portal-nav.js` | `buildPortalNavInnerHTML`、`COMING_SOON_PAGES`、`INDEX_NAV_OPEN_HASHES`、籌備中邏輯 |
| `assets/css/style.css` | `.portal-nav`、子選單、`.nav-current` 等樣式 |
| `.cursor/rules/user-scope-and-nav.mdc` | 意圖與導覽開放(與本規則搭配) |
| `.cursor/rules/ai-change-boundaries.mdc` | 變更範圍與共用 CSS 邊界 |
| `docs/CHANGESET-review.md` | 歷次變更檢查清單筆記(非程式真值來源) |
2026-05-15 02:47:26 +08:00
| `docs/sql/` | SQL 練習/筆記(`sql_plan.md`、`.sql` 腳本與匯出) |
(導覽文案隨機句:`NAV_SOON_PHRASES`,僅影響籌備中連結的提示,與新頁是否開放無關。)