模組:Special wikitext
外观
![]() | 此模块有一个JavaScript实现,功能為在頁面預覽時運作同本模块一样的效果。 |
![]() | 此模块被引用於MediaWiki:Gadget-SpecialWikitext.js與MediaWiki:Clearyourcache中。 任何對此模块的修改會立即反映於維基百科的用户介面。 為了避免造成大規模的影響,编者可以在本模块的沙盒 和测试样例 页面进行实验。2 測試後無誤的版本可以一次性地加入此模块中,但是修改前請務必於討論頁發起討論。 |
由於MediaWiki的設定,JSON頁面無法解析任何wikitext,速刪時速刪模板只能放在討論頁,因此管理員常將討論頁速刪而未將目標頁面速刪。
因此在2021年的討論中參考英文維基百科的en:Module:Module wikitext開發了此模組,使模組可以在JSON、JavaScript和CSS頁上方加入wikitext,以實現讓速刪模板不用放在討論頁中。
使用方法
- 請根據頁面的格式放置適當的語法:[编辑]
內容模型 | 插入Wikitext的語法 | 內容模型 | 插入Wikitext的語法 | ||
---|---|---|---|---|---|
JSON頁面 (名稱以.json結尾) |
Array模式 | [...
{"_addText":"{{Delete|O1}}"},
...]
|
JavaScript頁面 (名稱以.js結尾) |
_addText="{{Delete|O1}}";
| |
Object模式 | {...
"_addText":"{{Delete|O1}}",
...}
|
Module:名字空間的頁面 | require('Module:Module wikitext')._addText('{{Delete|O1}}')
| ||
CSS頁面 (名稱以.css結尾) |
._addText{
content:"{{Delete|O1}}";
}
|
通用模式 (JSON除外) |
/* _addText : "{{Delete|O1}}" */
|
- ※技術限制1:由於以上主要是在介面層面上顯示內容,故某些情形下頁面分類可能會無法正常運作。目前已知頁面分類無法正常運作的頁面內容模型包括JSON及純文字。
- ※技術限制2:
-{}-
模式的繁簡轉換無法在介面層面上生效,請考慮使用{{Lan}}做繁簡轉換。
- 例如某個JSON頁內容為:
[ "foo", "bar" ]
若要將此JSON透過{{Delete|G10}}
速刪掉可以將目標JSON頁改為:
[ {"_addText": "{{Delete|G10}}"}, "foo", "bar" ]
參見
local p={}
function p.check()
local file_name = mw.title.getCurrentTitle().fullText
local file_name_spilt = mw.text.split(file_name, "%.")
local file_ext = file_name_spilt[#file_name_spilt]
if #file_name_spilt < 2 then return '' end
if mw.ustring.lower(file_ext) == 'json' then
return p.getJSONwikitext()
elseif mw.ustring.lower(file_ext) == 'js' then
return p.getJSwikitext()
elseif mw.ustring.lower(file_ext) == 'css' then
return p.getCSSwikitext()
end
end
function p.getCSSwikitext()
local this_frame = mw.getCurrentFrame()
local wikitext = ''
xpcall( function()
local css_data = mw.title.getCurrentTitle():getContent()
local it=mw.ustring.gmatch(css_data, "_addText%s*%{[^c%}]*content%s*:%s*[\"\'][^\n]*")
local text=it()
while text do
--不支持非字串的模式
if mw.ustring.match(mw.ustring.sub(mw.text.trim(text),1,1),"[\"']") then
wikitext = wikitext .. '\n' .. mw.ustring.sub(mw.ustring.gsub(mw.text.trim(
mw.ustring.match(text,"content%s*:%s*[\"\'][^\n]*"), "\t\r\n\f ;}"
),"%s*content%s*:%s*",""),2,-2)
end
text=it()
end
end, function()end )
return this_frame:preprocess(wikitext)
end
function p.getJSwikitext()
local this_frame = mw.getCurrentFrame()
local wikitext = ''
xpcall( function()
local js_data = mw.title.getCurrentTitle():getContent()
local it=mw.ustring.gmatch(js_data, "_addText%s*%=%s*[\"\'][^\n]*")
local text=it()
while text do
wikitext = wikitext .. '\n' .. mw.ustring.sub(mw.ustring.gsub(
mw.text.trim(text, "\t\r\n\f ;}"),
"_addText%s*%=%s*",""),2,-2)
text=it()
end
end, function()end )
return this_frame:preprocess(wikitext)
end
function p.getJSONwikitext()
local this_frame = mw.getCurrentFrame()
local wikitext = ''
xpcall( function()
local json_data = mw.text.jsonDecode(mw.title.getCurrentTitle():getContent())
for k,v in pairs(json_data) do
if k == '_addText' and type(v) == type('')then
wikitext = wikitext .. '\n' .. v
end
if v._addText and type(v._addText) == type('')then
wikitext = wikitext .. '\n' ..v._addText
end
end
end, function()end )
return this_frame:preprocess(wikitext)
end
return p