请登录
玩家共建非官方战双WIKI,做最还原游戏内UI体验的WIKI!
战双WIKI反馈留言板 · WIKI编辑教程 · BWIKI收藏到桌面的方法说明
全站通知:
模块:道具图标
刷
历
编
跳到导航
跳到搜索
感谢[风飏]大佬提供本页样式
道具标签
示例代码 | 显示为 | HTML |
---|---|---|
{{#invoke: 道具图标 | 道具标签 | 文本 = 爱芙 | 图片 = EAifuI01001Sp.png | 稀有度 = 5 | 链接 = 爱芙 }} |
||
{{#invoke: 道具图标 | 道具标签 | 文本 = 意识突破回路·高 | 图片 = ItFinalI020030Sp.png | 稀有度 = 4 | 链接 = }} |
意识突破回路·高 |
意识突破回路·高 |
意识/武器标签
示例代码 | 显示为 | HTML |
---|---|---|
{{#invoke: 道具图标 | 意识标签 | 爱迪生 }} |
[[文件:|60px|link=爱迪生]] 爱迪生 |
|
{{#invoke: 道具图标 | 武器标签 | 双手刀 }} |
[[文件:|60px|link=双手刀]] 双手刀 |
注意应当在#ask
查询中直接使用函数
道具标签
而非这两个函数,以避免重复执行查询,并节约页面的
展开后计数。
--这个模块用于生成武器、意识、道具的图标
local p = {}
--------------------------------------------------
-- 公开函数
--------------------------------------------------
p['道具标签'] = function(frame)
local args = parseArgument(frame)
local data = {
text = args['文本'];
image = args['图片'];
link = args['链接'] or args['连接'] or '';
rarity = args['稀有度'];
popover_text = args['弹出框文本'];
popover_text2 = args['弹出框文本2'];
popover_head = args['弹出框标题'];
popover_head2 = args['弹出框标题2'];
}
return parseItemLabelData(data)
end
p['意识标签'] = function(frame)
local args = parseArgument(frame)
local title = args[1] or 'UNKNOWN'
local resp = callAskQuery(
('[[分类:意识]] [[名称::%s]]'):format(title),
{
'?名称',
'?稀有度',
'?icon文件',
'?2件套效果',
'?4件套效果',
link = 'none',
headers = 'hide',
format = 'table',
limit = 10
})
if not resp[1] then
return '<span style="color:red;font-weight:bold">LUA错误:[[:分类:意识]]中未记录名为'..title..'的意识。</span>'
end
local data = {
text = resp[1]['名称'];
image = resp[1]['icon文件'];
link = resp[1][1];
rarity = resp[1]['稀有度'];
popover_text = resp[1]['2件套效果'];
popover_text2 = resp[1]['4件套效果'];
}
return parseItemLabelData(data)
end
p['武器标签'] = function(frame)
local args = parseArgument(frame)
local title = args[1] or 'UNKNOWN'
local resp = callAskQuery(
('[[分类:武器]] [[名称::%s]]'):format(title),
{
'?名称',
'?稀有度',
'?武器icon',
'?技能名',
'?技能描述',
link = 'none',
headers = 'hide',
format = 'table',
limit = 10
})
if not resp[1] then
return '<span style="color:red;font-weight:bold">LUA错误:[[:分类:武器]]中未记录名为'..title..'的武器。</span>'
end
local data = {
text = resp[1]['名称'];
image = resp[1]['武器icon'];
link = resp[1][1];
rarity = resp[1]['稀有度'];
popover_head = resp[1]['技能名'];
popover_text = resp[1]['技能描述'];
}
return parseItemLabelData(data)
end
p['授格者武器标签'] = function(frame)
local args = parseArgument(frame)
local title = args[1] or 'UNKNOWN'
local resp = callAskQuery(
('[[分类:授格者武器]] [[名称::%s]]'):format(title),
{
'?名称',
'?稀有度',
'?武器icon',
'?技能名',
'?技能描述',
link = 'none',
headers = 'hide',
format = 'table',
limit = 10
})
if not resp[1] then
return '<span style="color:red;font-weight:bold">LUA错误:[[:分类:授格者武器]]中未记录名为'..title..'的授格者武器。</span>'
end
local data = {
text = resp[1]['名称'];
image = resp[1]['武器icon'];
link = resp[1][1];
rarity = resp[1]['稀有度'];
popover_head = resp[1]['技能名'];
popover_text = resp[1]['技能描述'];
}
return parseItemLabelData(data)
end
p['HTML转义'] = function(frame)
local args = parseArgument(frame)
return mw.text.encode(args[1] or '')
end
p.Test = function()
return p['意识标签']({args={'达芬奇'}})
end
--------------------------------------------------
-- 主要过程
--------------------------------------------------
--解析道具标签HTML
function parseItemLabelData(data)
data.link = data.link or ''
--调用popover弹出框
local popover_data = (not data.popover_text or data.popover_text == '')
and ''
or ([[
data-toggle="wafer-popover"
data-head="%s"
data-text="%s"
data-head2="%s"
data-text2="%s"
]]):format(escapeTags(data.popover_head or ''),
escapeTags(data.popover_text or ''),
escapeTags(data.popover_head2 or ''),
escapeTags(data.popover_text2 or '')):gsub('data%-%w+=""','')
local template = [==[
<div class="item-label rarity{rarity}"
]==]
.. popover_data ..
[==[
>
<div class="image">
<div class="gray"></div>
[[文件:{image}|60px|link={link}]]
</div>
]==]
.. (data.link ~= '' and '[[{link}|' or '') ..
[==[
<div class="text">{text}</div>
]==]
.. (data.link ~= '' and ']]' or '') ..
[==[
<div class="stripe rarity{rarity}">
</div>
</div>
]==]
return (template:gsub('\r?\n%s*',''):gsub('%{([%w_]+)%}', data))
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)
td = tonumber(td) or 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
--对<tag>转义,防止HTML溢出
function escapeTags(s)
--gsub('</?%a.->','')
return mw.text.encode(s or '')
end
return p