模块:TemplateDemo:修订间差异
来自「荏苒之境」
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的27个中间版本) | |||
第15行: | 第15行: | ||
end | end | ||
local function append_argument(t, k, v, newline, last_num_param) | local function append_argument(frame, t, k, v, newline, last_num_param) | ||
local k_num = tonumber(k) | local k_num = tonumber(k) | ||
if k_num == 1 then | if k_num == 1 then | ||
return 1 | return 1 | ||
end | end | ||
t[#t+1] = "| " | if newline then | ||
t[#t+1] = "| " | |||
else | |||
t[#t+1] = "|" | |||
end | |||
if k_num == nil or last_num_param ~= k_num - 1 then | if k_num == nil or last_num_param ~= k_num - 1 then | ||
t[#t+1] = k_num and tostring(k_num - 1) or k | t[#t+1] = k_num and tostring(k_num - 1) or k | ||
t[#t+1] = " = " | if newline then | ||
t[#t+1] = " = " | |||
else | |||
t[#t+1] = "=" | |||
end | |||
end | end | ||
t[#t+1] = utils_str.trim(v) | t[#t+1] = utils_str.sub_xml_noattr(utils_str.trim(v), "call", "{{%1}}") | ||
if newline then | if newline then | ||
t[#t+1] = "\n" | t[#t+1] = "\n" | ||
第42行: | 第50行: | ||
local template_data = parse_template_data("Template:"..template_name) | local template_data = parse_template_data("Template:"..template_name) | ||
local newline = not (template_data and template_data.format | local newline = not (template_data ~= nil and template_data.format == "inline") | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local t = {"{{", utils_str.trim(template_name) | local t = {"{{", utils_str.trim(template_name)} | ||
local last_num_param = 1 | local last_num_param = 1 | ||
if newline then | |||
t[#t+1] = "\n" | |||
end | |||
if template_data ~= nil and type(template_data.paramOrder) == "table" then | if template_data ~= nil and type(template_data.paramOrder) == "table" then | ||
第58行: | 第69行: | ||
local v = args[k] | local v = args[k] | ||
if v ~= nil then | if v ~= nil then | ||
last_num_param = append_argument(t, k, v, newline, last_num_param) | last_num_param = append_argument(frame, t, k, v, newline, last_num_param) | ||
end | end | ||
appended[k] = true | appended[k] = true | ||
第64行: | 第75行: | ||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
if appended[k] == nil then | if appended[k] == nil then | ||
last_num_param = append_argument(t, k, v, newline, last_num_param) | last_num_param = append_argument(frame, t, k, v, newline, last_num_param) | ||
end | end | ||
end | end | ||
else | else | ||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
last_num_param = append_argument(t, k, v, newline, last_num_param) | last_num_param = append_argument(frame, t, k, v, newline, last_num_param) | ||
end | end | ||
end | end | ||
if | if not newline or #t ~= 3 then | ||
t[#t+1] = "}}" | t[#t+1] = "}}" | ||
else | else | ||
第80行: | 第91行: | ||
local source = table.concat(t) | local source = table.concat(t) | ||
return frame:preprocess(source).."\n\n示例代码:\n".. | mw.logObject(source) | ||
return frame:preprocess(source).."\n\n示例代码:\n\n".. | |||
frame:extensionTag("syntaxhighlight", source, { lang = "wikitext" }) | frame:extensionTag("syntaxhighlight", source, { lang = "wikitext" }) | ||
end | end | ||
return template_demo | return template_demo |
2025年8月12日 (二) 15:04的最新版本
此模块的文档可以在模块:TemplateDemo/doc创建
local utils_str = require("Module:Utils/String")
local html = mw.html
local template_demo = {}
local function parse_template_data(title)
local content = mw.title.new(title).content
local raw = utils_str.match_xml_noattr(content, "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_argument(frame, t, k, v, newline, last_num_param)
local k_num = tonumber(k)
if k_num == 1 then
return 1
end
if newline then
t[#t+1] = "| "
else
t[#t+1] = "|"
end
if k_num == nil or last_num_param ~= k_num - 1 then
t[#t+1] = k_num and tostring(k_num - 1) or k
if newline then
t[#t+1] = " = "
else
t[#t+1] = "="
end
end
t[#t+1] = utils_str.sub_xml_noattr(utils_str.trim(v), "call", "{{%1}}")
if newline then
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 newline = not (template_data ~= nil and template_data.format == "inline")
local args = frame:getParent().args
local t = {"{{", utils_str.trim(template_name)}
local last_num_param = 1
if newline then
t[#t+1] = "\n"
end
if template_data ~= nil and type(template_data.paramOrder) == "table" then
local order = template_data.paramOrder
local appended = {}
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_argument(frame, t, k, v, newline, last_num_param)
end
appended[k] = true
end
for k, v in pairs(args) do
if appended[k] == nil then
last_num_param = append_argument(frame, t, k, v, newline, last_num_param)
end
end
else
for k, v in pairs(args) do
last_num_param = append_argument(frame, t, k, v, newline, last_num_param)
end
end
if not newline or #t ~= 3 then
t[#t+1] = "}}"
else
t[#t] = "}}"
end
local source = table.concat(t)
mw.logObject(source)
return frame:preprocess(source).."\n\n示例代码:\n\n"..
frame:extensionTag("syntaxhighlight", source, { lang = "wikitext" })
end
return template_demo