如果你看到本段文字,说明该页面未正常加载全局JS,部分功能将无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:

模块:测试/用户:141211391

来自碧蓝航线WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:测试/用户:141211391/doc创建

local p = {}

--------------------------------------------------
--	公开函数
--------------------------------------------------

p['舰娘列表'] = function()

	local normal_data = callAskQuery('[[分类:舰娘||联动舰娘||META舰娘||方案舰娘]]', {
'?稀有度',
'?类型',
'?阵营',
'?分组',
'?和谐名',
link = 'none',
sort = '稀有度编号,编号',
headers = 'hide',
format = 'table',
order = 'desc',
limit = 1000
	})
	
	local result = ''
	for _, item in ipairs(normal_data) do
		result = result..normal_parseData(item)
	end

	return result
end

--------------------------------------------------
--	主要过程
--------------------------------------------------

--将舰娘数据解析为图标
function normal_parseData(item)
	local frame = mw.getCurrentFrame()
	local output = '<div class="jntj-1 divsort" data-param0="0" data-param1="'
	if item['类型'] == '驱逐' or item['类型'] == '轻巡' or item['类型'] == '重巡' or item['类型'] == '超巡' or item['类型'] == '运输' then
		output = output..'前排先锋'
	elseif item['类型'] == '潜母' or item['类型'] == '潜艇' then
		output = output..'潜艇'
	else output = output..'后排主力'
	end
	output = output..','..item['类型']..'" data-param2="'..item['稀有度']..'" data-param3="'
	if item['分组'] == 'META' then
		output = output..'其他,'
	else 
		output = output..''
	end
	output = output..''..item['阵营']..'" data-param4="'..item['分组']..'"><div class="jntj-2">[[文件:'..item[1]..'头像.jpg|60px|link='..item[1]..']]<div class="jntj-3">'
	if item['分组'] == 'META' then
		output = output..'[[文件:舰娘头像外框'..item['稀有度']..'META.png|60px|link='..item[1]..']]'
	else
		output = output..'[[文件:舰娘头像外框'..item['稀有度']..'.png|60px|link='..item[1]..']]'
	end
	output = output..'</div></div><span class="jntj-4">'
	if string.len(item['和谐名']) > 0 then
		output = output..'[['..item[1]..'|'..item[1]..'('..item['和谐名']..')]]</span></div>'
	else
		output = output..'[['..item[1]..']]</span></div>'
	end
	return output
end

p['改造舰娘列表'] = function()

	local retrofit_data = callAskQuery('[[分类:舰娘]][[分类:改造]]', {
'?改造后稀有度',
'?改造后类型',
'?阵营',
'?和谐名',
link = 'none',
sort = '稀有度编号,编号',
headers = 'hide',
format = 'table',
order = 'desc',
limit = 1000
	})
	
	local result = ''
	for _, item in ipairs(retrofit_data) do
		result = result..retrofit_parseData(item)
	end

	return result
end

--------------------------------------------------
--	主要过程
--------------------------------------------------

--将舰娘数据解析为图标
function retrofit_parseData(item)
	local frame = mw.getCurrentFrame()
	local output = '<div class="jntj-1 divsort" data-param0="0" data-param1="'
	if item['改造后类型'] == '驱逐' or item['改造后类型'] == '轻巡' or item['改造后类型'] == '重巡' or item['改造后类型'] == '超巡' or item['改造后类型'] == '运输' then
		output = output..'前排先锋'
	elseif item['改造后类型'] == '潜母' or item['改造后类型'] == '潜艇' then
		output = output..'潜艇'
	else output = output..'后排主力'
	end
	output = output..','..item['改造后类型']..'" data-param2="'..item['改造后稀有度']..'" data-param3="'..item['阵营']..'" data-param4="改造"><div class="jntj-2">[[文件:'..item[1]..'改头像.jpg|60px|link='..item[1]..']]<div class="jntj-3">[[文件:舰娘头像外框'..item['改造后稀有度']..'.png|60px|link='..item[1]..']]</div></div><span class="jntj-4">'
	if string.len(item['和谐名']) > 0 then
		output = output..'[['..item[1]..'|'..item[1]..'('..item['和谐名']..').改]]</span></div>'
	else
		output = output..'[['..item[1]..'|'..item[1]..'.改]]</span></div>'
	end
	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