跳至內容

模組:Namespace pagename/data/doc

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

此頁面為 Module:Namespace pagename/data 的說明文件

本頁是 Module:Namespace pagename 的資料頁,以 mw.loadData 載入,存放頁面類型的名稱、各命名空間的預設字尾,以及各種判定規則。本頁只有資料,判斷邏輯在 Module:Namespace pagename;命名空間本身的名稱在 Module:Namespace/data。

各項設定的使用時機與先後順序見 Module:Namespace pagename#判定順序。

資料結構

[編輯]

NS

[編輯]

命名空間編號常量,供本頁其他設定以名稱而非數字索引使用。主模組也會讀取,但目前只用到 NS.USER 與 NS.MODULE_TALK。

EVENT(1728)與 EVENT_TALK(1729)雖已定義,但 Module:Namespace/data 未收錄其名稱,因此這兩個命名空間的輸出目前是空字串。

ContentModelMap

[編輯]

內容模型到頁面類型的直接映射,命中後不再檢查重新導向、子頁面與頁面內容。

內容模型 頁面類型 輸出(繁體)
css、sanitized-css style 樣式
javascript script 工具
json json 數據

NamespaceSuffixConfig

[編輯]

DefaultSuffixList

[編輯]

每個命名空間在沒有判斷出頁面類型時附加的字尾。鍵是命名空間編號,值為 false 表示不加字尾;未列出的命名空間同樣不加字尾。

字尾本身由本頁開頭的區域變數 suffixTemplates 定義:

名稱 en zh-hans zh-hant 使用者
page page 頁 頁 介面、幫助與各討論命名空間
pageWithSpace page 頁 頁 目前未被使用
pageName page 頁面 頁面 特殊
pageNameWithSpace page 頁面 頁面 專案
userPage page 頁 頁面 用戶
  • 「不加字尾」的命名空間:媒體、條目、檔案、模板、分類、主題、維基專題、草稿、MOS、字幕、模組、結構式討論。
  • 英文輸出的特殊處理:page 與 pageName 的英文值沒有前置空白,因此英文會輸出 Talkpage、Helppage、MediaWikipage、Specialpage、User talkpage。要修正請改用帶空白的 pageWithSpace/pageNameWithSpace。

EnablePageTypeNamespaces

[編輯]

會進一步檢測頁面類型(內容模型、重新導向、子頁面名稱、頁面內容)的命名空間白名單。不在此列的命名空間一律只輸出「命名空間名稱+預設字尾」。

目前為:用戶(2)、專案(4)、檔案(6)、模板(10)、草稿(118)、模組(828)。

此白名單不影響固定沙盒(SandboxPageNames)與編輯提示(NoticeRules),這兩項在白名單檢查之前就已判斷。

AllowTemplateType

[編輯]

允許判定為文件、沙盒、測試樣例的命名空間。目前為:用戶(2)、模板(10)、模組(828)。

AllowTempType

[編輯]

允許判定為臨時頁的命名空間。目前為:用戶(2)、專案(4)、模板(10)、草稿(118)、模組(828)。

Error

[編輯]

錯誤訊息,%s 會替換成使用者的輸入值。

鍵 用途
pg-error 第二參數無法解析成合法頁面名稱時輸出。
ns-error 目前未被主模組使用。

SandboxPageNames

[編輯]

各命名空間的固定沙盒頁名。鍵是命名空間編號,值是「頁面名稱 → true」的表,比對的是 title.text(不含命名空間前綴的完整頁面名)。

命名空間 頁面名稱
專案(4) 沙盒、重定向沙盒
用戶討論(3) Sandbox for user warnings~zhwiki
模板(10) 沙盒、X1、X2、X3
分類(14) 沙盒
草稿(118) 沙盒
檔案(6) 沙盒.png、沙盒.svg

此外主模組另有一條硬編碼規則:用戶命名空間下符合 ×××/沙盒(僅一層子頁面)的頁面也視為沙盒。更深層的 ×××/×××/沙盒 則由 SubpageRules 的 sandbox 規則命中。

SubpageRules

[編輯]

依子頁面名稱判定頁面類型。鍵是頁面類型(須在 #Type 中有對應項),值可包含:

欄位 說明
names 子頁面名稱的清單。比對前會把 title.subpageText 的第一個字轉成小寫,因此 /Doc 會命中而 /DOC 不會。
matcher.allowNs 允許的命名空間清單。
matcher.subpageOnly 是否只匹配子頁面。

未設 matcher 的規則只在子頁面上生效,且命名空間須在 AllowTemplateType(temp 則是 AllowTempType)之中。

目前規則:

類型 names matcher
doc doc -
sandbox sandbox、沙盒 -
testcases testcases、测试样例、測試樣例 -
temp temp、temporary -
intro intro、introduction、说明、說明 模板命名空間,且必須是子頁面

NoticeRules

[編輯]

編輯提示類頁面的判定規則。matcher 以命名空間編號為鍵,每項可包含:

欄位 說明
rootText 根頁面名稱須等於此值。
subpageText 最後一層子頁面名稱須等於此值(區分大小寫)。
onlyFirstLevel 只匹配第一層子頁面(title.rootText == title.baseText)。

目前規則:

類型 命中的頁面
editnotice Template:Editnotices/×××、User:×××/Editnotice、User talk:×××/Editnotice
mailnotice User:×××/Emailnotice

命中後輸出會直接取代整個結果,不附加命名空間名稱;#Type 中的 %u 會換成指向 title.rootText 的用戶連結。

ContentRules

[編輯]

依頁面內容判定類型,是判定順序中的最後一步。鍵是頁面類型,值是陣列,每項可以是 mw.ustring.match 的 Lua 模式,或接受 (nsid, content) 的函數。

sandbox 不受 AllowTemplateType 限制(只要命名空間在 EnablePageTypeNamespaces 之中即會檢測),doc 與 testcases 則另須命名空間在 AllowTemplateType 之中。

類型 偵測的標記
sandbox {{Sandbox…}}、{{Template sandbox notice}},以及簡繁兩種「請在這行文字底下進行您的測試……」提示
doc {{Documentation subpage}}、{{Template doc inline}}、{{Template doc viewed directly}}
testcases {{Template testcases notice}}、{{Test cases notice}}、{{测试样例}}、{{測試樣例}}

讀取頁面內容會用到 title:getContent(),計入解析器的昂貴函數配額,因此主模組提供 skipCheckContent 參數可略過這一步。

Type

[編輯]

頁面類型的顯示名稱,格式與 Module:Namespace/data 的語言表相同,由 Module:Lan2 依使用者語言回退挑選。分兩類:

接在命名空間名稱後面當字尾,英文值開頭的空白請勿刪除:

類型 en zh-hans zh-hant
style styles 樣式 樣式
script scripts 腳本 工具
json data 數據 數據(zh-tw:資料)
redirect redirect 重定向 重新導向
doc documentation 文檔 文件
sandbox sandbox 沙盒 沙盒
testcases testcases 測試樣例 測試樣例
temp temporary page 臨時頁 臨時頁
intro introductory page 說明頁 說明頁

直接取代整個輸出,英文值不需要前置空白:

類型 en zh-hans zh-hant 備註
external Interlanguage link 跨語言鏈接 跨語言連結
editnotice editnotice 編輯提示 編輯提示
mailnotice %u's mailnotice %u的電郵提示 %u的電郵提示 %u 會換成用戶連結
shortcut Shortcut of %s %s快捷方式 %s捷徑 目前未被主模組使用

shortcut 之所以未被使用,是因為偽命名空間的顯示已交由 Module:Namespace 依 Module:Namespace/data 的 PseudoNamespace.messages 產生。

編輯指引

[編輯]
  • 新增頁面類型時,須同時在 Type 加入名稱,並在 SubpageRules、ContentRules 或 NoticeRules 加入對應的判定規則;字尾型的類型記得在英文值前面留一個空白。
  • 讓既有類型適用於更多命名空間時,改 EnablePageTypeNamespaces、AllowTemplateType 或 AllowTempType,不要在主模組裡加特例。
  • 新增命名空間時,除了本頁的 NS 與 DefaultSuffixList,還要在 Module:Namespace/data 補上名稱,否則輸出會缺少命名空間名稱。
  • 改動後請用 Template:Namespace pagename/testcases 驗證,該頁已涵蓋各命名空間與各頁面類型的組合。

參見

[編輯]