模組:沙盒/Lopullinen
外观
测试区
- 脚本错误:函数“score”不存在。
- 脚本错误:函数“level”不存在。
- 脚本错误:函数“score”不存在。
- 脚本错误:函数“score”不存在。
脚本错误:函数“ranking”不存在。
备忘录
-- 获取页面信息
mw.title.getCurrentTitle().text -- 獲取頁面標題,不含命名空間
-- 调用Mediawiki模板
mw.getCurrentFrame():expandTemplate{ title = "template", args = { "arg1", "arg2", name = "arg3" } } -- {{template|args1|args2|name=args3}}
mw.getCurrentFrame():callParserFunction{ name = "#tag", args = { "nowiki", "some text" } } -- {{#tag:nowiki|some text}}
-- 字符串处理
_, _, capture1, capture2 = mw.ustring.find(source_text, "(.+)blah blah(.+)") -- 分組捕獲
new_string = mw.ustring.gsub(old_string, ptn, replacement) -- 替换
require('Module:Log globals')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local wd = function(id)
return require('Module:WikidataIB')._getValue{id, fetchwikidata='ALL'}
end
local function has_content(arg)
if arg == nil or arg == '' then return false end
return true
end
local p = {}
local infobox_styles = {
captionstyle = 'text-align: center;' ,
subheaderstyle = 'text-align: center; vetical-align: middle; font-weight: normal;',
labelstyle = 'white-space: nowrap;',
}
local headers = function(args)
local result = {}
local all_parameters = { 'title', 'orgignal', 'japanese', 'english', 'english2' }
-- 主标题
if has_content(args.title) then
result.above = args.title
else
result.above = mw.title.getCurrentTitle().rootText
end
-- 外文标题
local foreign_titles = {}
if has_content(args.original) then
local str = args.original
if mw.ustring.find(str, ':') then
str = mw.ustring.gsub(str, '^([^:]-):(.+)$', '-{<span lang="%1" xml:lang="%1">%2</span>}-')
end
table.insert(foreign_titles, str)
end
if has_content(args.japanese) then
local str = '-{<span lang="ja" xml:lang="ja">' .. args.japanese .. '</span>}-'
table.insert(foreign_titles, str)
end
if has_content(args.english) then
local str = '-{<span lang="en" xml:lang="en">\'\'' .. args.english .. '\'\'</span>}-'
table.insert(foreign_titles, str)
end
if has_content(args.english2) then
local str = '-{<span lang="en" xml:lang="en">\'\'' .. args.english2 .. '\'\'</span>}-'
table.insert(foreign_titles, str)
end
if table.maxn(foreign_titles) > 0 then
local str = require('Module:List').unbulleted(foreign_titles)
result.subheader1 = str
end
-- Done
return result, all_parameters
end
local images = function(args)
local varieties = {'', '-hans', '-hant', '-cn', '-hk', '-mo', '-my', '-sg', '-tw'}
local result, all_parameters = {}, {}
local infobox_image_params = {}
for _, v in ipairs(varieties) do
local para = ''
para = 'image' .. v
table.insert(all_parameters, para)
infobox_image_params[v] = args[v]
para = 'alt' .. v
table.insert(all_parameters, para)
infobox_image_params[v] = args[v]
end
-- image size
local image_size_paras = {'image_size', 'image size', 'imagesize'}
for _, v in ipairs(image_size_paras) do
if has_content(args[v]) then
infobox_image_params.size = args[v]
break
end
end
for _, v in ipairs(image_size_paras) do
table.insert(all_parameters, v)
end
-- frameless
infobox_image_params.sizedefault = 'frameless'
result.image = require('Module:InfoboxImageVariant2')._main(infobox_image_params)
result.caption = args.caption
table.insert(all_parameters, 'caption')
-- Done
return result, all_parameters
end
local fields = function(args)
-- 待办:
-- 处理抓取Wikidata数据
-- 参数配置
local subgroup_header = { '街机参数' }
local params = {
official = { '[[官方译名]]', alias = {} },
common = { '常用译名', alias = {} },
genre = { '[[电子游戏类型|类型]]', alias = {}, wd = 'P136' },
platforms = { '[[系统平台|平台]]', alias = {'platform'}, wd = 'P400' },
developer = { '[[游戏开发者|开发商]]', alias = {}, wd = 'P178' },
publisher = { '[[電子遊戲發行商|发行商]]', alias = {}, wd = 'P123' },
director = { '总监', alias = {}, wd = 'P57' },
producer = { '[[電子遊戲製作人|制作人]]', alias = {}, wd = 'P162' },
designer = { '[[电子游戏设计|设计师]]' , alias = {}, wd = 'P287' },
writer = { '编剧' , alias = {}, wd = 'P50' },
programmer = { '[[游戏程序师|-{zh-cn:程序; zh-tw:程式;}-]]', alias = {}, wd = 'P943' },
artist = { '[[游戏美工|美术]]' , alias = {}, wd = 'P3080' },
composer = { '音乐', alias = {}, wd = 'P86' },
series = { '系列', alias = {}, wd = 'P179' },
engine = { '[[游戏引擎|引擎]]', alias = {}, wd = 'P408' },
modes = { '模式', alias = {}, wd = 'P404' },
released = { '发行日', alias = {'release'}, wd = 'P577' },
shutdown = { '停运日', alias = {} },
cabinet = { '框体', alias = {}, wd = 'P2670', subgroup = 1},
arcade_system = { '[[街机主板|主板]]', alias = {}, subgroup = 1 },
cpu = { '[[中央处理器|CPU]]', alias = {}, subgroup = 1 },
sound = { '音效', alias = {}, subgroup = 1 },
display = { '显示', alias = {}, subgroup = 1 },
}
local param_order = {
'official', 'common', 'genre', 'platforms', 'developer', 'publisher',
'director', 'producer', 'designer', 'writer', 'programmer', 'artist', 'composer',
'series', 'engine', 'modes', 'released', 'shutdown',
'cabinet', 'arcade_system', 'cpu', 'sound', 'display',
}
if yesno(args.onlinegame, false) then -- 启用网络游戏参数时的修正
params.publisher[1] = '-{zh-cn:运营; zh-tw:營運;}-商'
params.released[1] = '-{zh-cn:运营; zh-tw:營運;}-日'
end
-- 将使用空格分隔的字段名作为别名
for _, v in ipairs(param_order) do
local alias_temp = params[v].alias
table.insert(alias_temp, 1, v)
local alias = {}
for _, w in ipairs(alias_temp) do
table.insert(alias, w)
if mw.ustring.find(w, '_') then
local str = mw.ustring.gsub(w, '_', ' ')
table.insert(alias, str)
end
end
params[v].alias = alias
end
-- 根据参数名读取标签和资料
local function get_label_and_data(param)
local info = params[param]
local label, data, subgroup = info[1], nil, (info.subgroup or 0)
for _, v in ipairs(info.alias) do
data = args[v]
if data ~= nil then break end
end
if data == '' then
return
end
if data ~= nil then
return label, data, subgroup
end
if info.wd then
data = wd(info.wd)
if data == nil then return end
return label, data, subgroup
end
end
-- 返回给Infobox的字段信息
local result, num, previous_subgroup = {}, 0, 0
for _, v in ipairs(param_order) do
local label, data, subgroup = get_label_and_data(v)
if label ~= nil then
if subgroup > previous_subgroup then -- 处理header
num = num + 1
result['header' .. tostring(num)] = subgroup_header[subgroup]
previous_subgroup = subgroup
end
num = num + 1
result['label' .. tostring(num)] = label
result['data' .. tostring(num)] = data
end
end
-- 返回给Check for unknown parameters的合法参数名称
local all_parameters = {}
for _, v in ipairs(param_order) do
for _, w in ipairs(params[v].alias) do
table.insert(all_parameters, w)
end
end
-- Bye
return result, all_parameters
end
function p.main(frame)
local args = getArgs(frame,{
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local params, params_temp = {}, nil
-- 模板式样
for k, v in pairs(infobox_styles) do
params[k] = v
end
-- 标题参数
params_temp = headers(args)
for k, v in pairs(params_temp) do
params[k] = v
end
-- 图片参数
params_temp = images(args)
for k, v in pairs(params_temp) do
params[k] = v
end
-- 常规参数
params_temp = fields(args)
for k, v in pairs(params_temp) do
params[k] = v
end
return require('Module:Infobox').infobox(params)
end
return p