请登录
玩家共建非官方战双WIKI,做最还原游戏内UI体验的WIKI!    
战双WIKI反馈留言板 · WIKI编辑教程 · BWIKI收藏到桌面的方法说明

全站通知:

模块:道具图标

来自战双帕弥什WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

感谢[风飏]大佬提供本页样式


道具标签

示例代码 显示为 HTML
{{#invoke: 道具图标
	| 道具标签
	| 文本 = 爱芙
	| 图片 = EAifuI01001Sp.png
	| 稀有度 = 5
	| 链接 = 爱芙
}}
{{#invoke: 道具图标
	| 道具标签
	| 文本 = 意识突破回路·高
	| 图片 = ItFinalI020030Sp.png
	| 稀有度 = 4
	| 链接 = 
}}
ItFinalI020030Sp.png
意识突破回路·高
ItFinalI020030Sp.png
意识突破回路·高

意识/武器标签

示例代码 显示为 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