模块:TemplateDemo:修订间差异
来自「荏苒之境」
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的28个中间版本) | |||
第2行: | 第2行: | ||
local template_demo = {} | local template_demo = {} | ||
local function trim(str) | |||
return string.gsub(str, "^%s*(.-)%s*$", "%1") | |||
end | |||
local function parse_template_data(title) | |||
local content = mw.title.new(title).content | |||
local raw = string.match(content, "<templatedata>(.-)</templatedata>") | |||
if raw == nil then | |||
return nil | |||
end | |||
local succ, res = pcall(mw.text.jsonDecode, raw) | |||
return succ and res or nil | |||
end | |||
local function append_template_argument(t, k, v, last_num_param) | |||
local k_num = tonumber(k) | |||
if k_num ~= nil then | |||
if k_num == 1 then | |||
k = nil | |||
else | |||
k = tostring(k_num - 1) | |||
v = trim(v) | |||
end | |||
end | |||
if k ~= nil then | |||
t[#t+1] = "| " | |||
if k_num == nil or last_num_param ~= k_num - 1 then | |||
t[#t+1] = k | |||
t[#t+1] = " = " | |||
end | |||
t[#t+1] = v | |||
t[#t+1] = "\n" | |||
end | |||
return k_num | |||
end | |||
template_demo.show = function(frame) | template_demo.show = function(frame) | ||
第12行: | 第48行: | ||
end | end | ||
local t = {"{{", template_name, "\n"} | local template_data = parse_template_data("Template:"..template_name) | ||
local args = frame:getParent().args | |||
local t = {"{{", trim(template_name), "\n"} | |||
local last_num_param = 1 | |||
t | |||
if template_data ~= nil and type(template_data.paramOrder) == "table" then | |||
local order = template_data.paramOrder | |||
for i = 1, #order do | |||
local k = order[i] | |||
local k_num = tonumber(k) | |||
k = k_num and k_num + 1 or k | |||
local v = args[k] | |||
if v ~= nil then | |||
last_num_param = | |||
append_template_argument(t, k, v, last_num_param) | |||
end | |||
end | |||
else | |||
for k, v in pairs(args) do | |||
last_num_param = | |||
append_template_argument(t, k, v, last_num_param) | |||
end | |||
end | end | ||
t[#t+1] = "}}" | t[#t+1] = "}}" | ||
local source = table.concat(t) | local source = table.concat(t) | ||
return frame:preprocess( | |||
source | |||
.."\n示例代码:\n<syntaxhighlight lang=\"wikitext\">"..source.."\n</syntaxhighlight>") | |||
end | end | ||
return template_demo | return template_demo |
2025年8月8日 (五) 10:00的最新版本
此模块的文档可以在模块:TemplateDemo/doc创建
local html = mw.html
local template_demo = {}
local function trim(str)
return string.gsub(str, "^%s*(.-)%s*$", "%1")
end
local function parse_template_data(title)
local content = mw.title.new(title).content
local raw = string.match(content, "<templatedata>(.-)</templatedata>")
if raw == nil then
return nil
end
local succ, res = pcall(mw.text.jsonDecode, raw)
return succ and res or nil
end
local function append_template_argument(t, k, v, last_num_param)
local k_num = tonumber(k)
if k_num ~= nil then
if k_num == 1 then
k = nil
else
k = tostring(k_num - 1)
v = trim(v)
end
end
if k ~= nil then
t[#t+1] = "| "
if k_num == nil or last_num_param ~= k_num - 1 then
t[#t+1] = k
t[#t+1] = " = "
end
t[#t+1] = v
t[#t+1] = "\n"
end
return k_num
end
template_demo.show = function(frame)
local args = frame.args
local template_name = args[1]
if template_name == nil or template_name == '' then
return html.create("p"):addClass("error")
:wikitext("没有指定模板名!")
end
local template_data = parse_template_data("Template:"..template_name)
local args = frame:getParent().args
local t = {"{{", trim(template_name), "\n"}
local last_num_param = 1
if template_data ~= nil and type(template_data.paramOrder) == "table" then
local order = template_data.paramOrder
for i = 1, #order do
local k = order[i]
local k_num = tonumber(k)
k = k_num and k_num + 1 or k
local v = args[k]
if v ~= nil then
last_num_param =
append_template_argument(t, k, v, last_num_param)
end
end
else
for k, v in pairs(args) do
last_num_param =
append_template_argument(t, k, v, last_num_param)
end
end
t[#t+1] = "}}"
local source = table.concat(t)
return frame:preprocess(
source
.."\n示例代码:\n<syntaxhighlight lang=\"wikitext\">"..source.."\n</syntaxhighlight>")
end
return template_demo