如果你看到本段文字,说明该页面未正常加载全局JS,部分功能无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:
模块:舰娘列表
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:舰娘列表/doc创建
local p = {}
--------------------------------------------------
-- 公开函数
--------------------------------------------------
p['舰娘列表'] = function(frame)
local category = '[[分类:舰娘]]'
local retrofit = false
local args = parseArgument(frame)
if args['分类'] == '联动' then
category = '[[分类:联动舰娘]]'
elseif args['分类'] == '方案' then
category = '[[分类:方案舰娘]]'
elseif args['分类'] == 'META' then
category = '[[分类:META舰娘]]'
elseif args['分类'] == '改造' then
category = '[[分类:舰娘]][[分类:改造]]'
retrofit = true
else
category = '[[Category:舰娘||方案舰娘||META舰娘||联动舰娘]][[分类:'..args['分类']..']]'
end
local data = callAskQuery(category, {
'?稀有度',
'?编号',
'?改造后稀有度',
'?分组',
'?稀有度编号',
link = 'none',
sort = '稀有度编号,编号',
headers = 'hide',
format = 'table',
order = 'desc',
limit = 1000
})
local result = ''
for _, item in ipairs(data) do
result = result..parseData(item, retrofit)
end
return result
end
--------------------------------------------------
-- 主要过程
--------------------------------------------------
--将舰娘数据解析为图标
function parseData(item, retrofit, category)
local frame = mw.getCurrentFrame()
local rarity = item['稀有度']
if retrofit then
rarity = item['改造后稀有度']
end
local output = '<div class="jntj-1"><div class="jntj-2">[[文件:'..item[1]
if retrofit then
output = output..'改'
end
output = output..'头像.jpg|60px|link='..item[1]..']]<div class="jntj-3">'
if item['分组'] == 'META' then
output = output..'[[文件:舰娘头像外框'..rarity..'META.png|60px|link='..item[1]..']]'
else
output = output..'[[文件:舰娘头像外框'..rarity..'.png|60px|link='..item[1]..']]'
end
output = output..'</div></div><span class="jntj-4">[['..item[1]..'|'..frame:expandTemplate{title='AF',args={item[1]}}
if retrofit then
output = output..'.改'
end
output = output..']]</span></div>'
return output
end
--------------------------------------------------
-- 私有函数
--------------------------------------------------
--解析传入参数——去空白符+转换数字
function parseArgument(frame)
local arg = {}
for k, v in pairs(frame.args) do
arg[k] = tonumber(v) or mw.text.trim(v)
end
return arg
end
--调用#ask语义查询,并将结果解析为table
function callAskQuery(title, args)
local frame = mw.getCurrentFrame()
args.format = 'table'
local html = frame:callParserFunction('#ask:'..title, args)
--返回解析结果的key
local keys = {}
keys[1] = '' --#ask的参数#1是title
for i, v in ipairs(args) do
keys[i+1] = mw.text.trim(v:sub(2))
end
local data = {}
for tr in html:gmatch('<tr .-</tr>') do
if tr:match('smwfooter') then break end
local item = {}
local i = 1 --#1单元格是页面名称
for td in tr:gmatch('<td.->(.-)</td>') do
td = mw.text.trim(td)
item[i] = td
if keys[i] then item[ keys[i] ] = td end
i = i + 1
end
table.insert(data, item)
end
return data
end
return p