◆42Lab是非盈利性、非官方的云图计划维基百科。
◆诚邀指挥官们加入编辑部共同建设wiki。点这里加入42Lab
如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!
◆有任何意见、建议、纠错,欢迎在任意评论区评论
◆编辑讨论QQ群741423564 微博@GFwiki少前百科 欢迎您

模块:AvgNav

来自42LAB

可在模块:AvgNav/doc创建此模块的帮助文档

local p = {}
local data
local root
local f

local function filepath(scriptId)
	return f:callParserFunction('filepath', 'Avg_' .. scriptId .. '.json')
end

local function label(name, describe)
	if describe == nil then
		return '<span>' .. name .. '</span>'
	end
	return f:expandTemplate{title = 'popup', args = {
		['替代文字'] = name, ['内容'] = describe
	}}
end

local function list(avg, parent)
	for _, story in ipairs(avg) do
		if story.script_id then
			(parent or root):tag('div'):addClass('avg-entrance'):attr{
				['data-src'] = filepath(story.script_id),
				['data-number'] = story.number
			}:wikitext(label(story.name, story.describe))
		elseif story.script_ids then
			local group = (parent or root):tag('div'):addClass('avg-entrance-group')
			group:wikitext(label(story.name, story.describe))
			for i, script_id in ipairs(story.script_ids) do
				group:tag('div'):addClass('avg-entrance')
					:attr('data-src', filepath(script_id))
					:wikitext('<span>' .. tostring(i) .. '</span>')
			end
		end
	end
end

local function listChapters()
	for i, chapter in ipairs(data.avg) do
		root:tag('div'):addClass('avg-chapter-title'):wikitext(data.chapter_names[i])
		list(chapter)
	end
end

local function main()
	f = mw.getCurrentFrame()
	root = mw.html.create('div'):addClass('avg-entrances')
	root:tag('div')
		:addClass('avg-nav-header')
		:attr('data-name-en', data.name_en)
		:wikitext(data.name)
	local isMain = data.id > 0 and data.id < 100
	if isMain then
		root:tag('div'):addClass('avg-nav-subheader'):wikitext('标准')
		local line = root:tag('div'):addClass('avg-storyline')
		list(data.avg, line)
		root:tag('div'):addClass('avg-nav-subheader'):wikitext('暗域')
		line = root:tag('div'):addClass('avg-storyline')
		list(data.hard_avg, line)
	elseif data.chapter_names then
		listChapters()
	else
		list(data.avg)
	end
	return tostring(root)
end

function p.main(frame)
	data = mw.text.jsonDecode(frame.args[1])
	return main()
end
return p