What:CONTENTS 成為第 15 種頁面類型,解析鏈為 JSC_WIKI_REPO_CONTENTS 到 JSC_WIKI_REPO,刻意不退回型別變數。hash-id 拿掉 8 碼截短與 H 前綴改寫,只留大寫 轉換,輸出完整 40 碼;空輸入改成用法錯誤。新增 page-name.sh、wiki-contents.sh、 migrate-wiki.sh 與 wiki-delete 子命令。 Why:H 前綴會命中 16 個首碼裡的 13 個,還丟掉第 8 碼,把有效熵壓到 28 位元,而且 全庫查不到任何理由紀錄。目錄頁的整列 upsert 原本 14 處只有一處寫成程式,同一段判斷 做 14 次,錯一次就少一筆紀錄。 How:頁名樣式仍收 H 加 7 碼的舊頁,遷移期間讀得到舊頁。wiki-contents.sh 建新頁時 剝掉範本的示範列,否則每個目錄頁第一次建立都會留一列佔位死連結。migrate-wiki.sh 預設只印對照表,--apply 先寫新頁、確認寫成、才刪舊頁;孤兒頁只列不猜,因為 SHA-1 不可逆,新頁名只能靠候選鍵正推。 Who:jsc-gitea
28 lines
2.2 KiB
Markdown
28 lines
2.2 KiB
Markdown
# Wiki 頁之間的連結
|
||
|
||
寫 wiki 頁才需要這份規則。兩條規則任一條寫錯,連結會指向一個不存在的頁,畫面上看不出異常。
|
||
|
||
## 方向:顯示文字在左,頁名在右
|
||
|
||
Gitea 採 GitHub/Gollum 慣例:`[[顯示文字|頁名]]`。方向與 MediaWiki 相反。Gitea 原始碼(`modules/markup/html_link.go`)寫得很清楚:
|
||
|
||
> MediaWiki uses [[link|text]], while GitHub uses [[text|link]] … we prefer GitHub syntax
|
||
|
||
所以 `[[PLAN_CONTENTS|我的計畫]]` 會顯示成文字 `PLAN_CONTENTS`,連到一個叫「我的計畫」的頁——這是壞連結。要寫 `[[我的計畫|PLAN_CONTENTS]]`。
|
||
|
||
顯示文字與頁名相同時,用不帶豎線的 `[[PLAN_CONTENTS]]`,這種寫法不會寫錯。
|
||
|
||
## 範圍:`[[...]]` 只在同一個 wiki 內解析
|
||
|
||
`[[...]]` 與 markdown 相對連結都只在目前這個 wiki 內解析。跨存取庫沒有 wiki 連結語法。
|
||
|
||
目錄頁全部住在 CONTENTS 專用存取庫,內容頁住在自己型別的存取庫。所以「同型別」不再等於「同存取庫」,判斷要看兩端各自解析到哪一個存取庫。
|
||
|
||
| 連結 | 同一個 wiki? | 寫法 |
|
||
| --- | --- | --- |
|
||
| 目錄頁之間(例:`PLAN_CONTENTS` → `LOG_CONTENTS`) | 一定同一個:目錄頁都在 CONTENTS 存取庫 | `[[顯示文字\|頁名]]` 或 `[[頁名]]` |
|
||
| 同型別的內容頁之間(例:`PLAN_{HASH}` → 另一頁 `PLAN_{HASH}`) | 一定同一個:一個型別一個存取庫 | `[[顯示文字\|頁名]]` 或 `[[頁名]]` |
|
||
| 目錄頁與內容頁之間,以及跨型別(例:`PLAN_CONTENTS` → `PLAN_{HASH}`、`LOG_{HASH}` → `PLAN_{HASH}`) | **不保證**:兩端各自解析,可能不同 | `wiki-url` 給的絕對網址:`[顯示文字](https://…/wiki/PLAN_…)` |
|
||
|
||
目錄頁解 `JSC_WIKI_REPO_CONTENTS`,內容頁解自己的 `JSC_WIKI_REPO_{TYPE}`,兩端各解各的。只設 `JSC_WIKI_REPO` 時兩端會落在同一個存取庫,多設一個型別變數就分開了。所以這兩種連結**一律**用絕對網址:兩邊剛好同存取庫也照樣正確,不必分兩種寫法,也不必跟著環境變數改寫法。網址一律取自 `tools/gitea.sh wiki-url`,不要自己組路徑。
|