置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Housamo/research

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local research = { }

local umatch = mw.ustring.match
local uformat = mw.ustring.format

local match="(.+)(%d+)"

local procMap = 
{
	profile = 
	{
		uAlias = 'p', 
		fallback = [[''~该角色调查资料待补充~'']],
	},
	image = 
	{
		uAlias = 'i', 
		fallback = [['''未指定该调查资料的立绘图像''']],
	},
	affiliation=
	{
		uAlias = 'a',
		fallback = [[???]]
	}
}
procMap.info = procMap.profile
procMap.img = procMap.image
procMap.aff = procMap.affiliation

function TryGet(s,f)
	if s == nil or s == [[]] then return f
	else return s end
end

function EmptyOrNil(s)
	return s == nil or s == [[]]
end

function RepackArgs(t)
	if t == nil then return nil end
    local pack = { contents = {} }
    pack.aff = t.affiliation or t.aff or procMap.affiliation.fallback
    for k,v in pairs(t) do 
        local typ,ind = string.match(k,match)
        mw.log(typ,ind)
        if typ and ind then 
        	
			ind = tonumber(ind) or 0
			typ = string.lower(typ)
			if procMap[typ] then 
				if not pack.contents[ ind ] then pack.contents[ ind ] = { } end
				pack.contents[ ind ][ procMap[typ].uAlias ] = v
			else
				mw.log("UNKNOWN TYPE=" .. typ)
			end
        end
	end
	mw.logObject(pack)
	return pack
end

function ImageBlock(imgsrc)
	local root = 
		mw.html.create("div")
		:addClass("image")
	if EmptyOrNil(imgsrc) then
		root:wikitext(procMap.image.fallback)
	else
		root:wikitext(uformat("[[File:%s|450x312px]]",imgsrc))
	end
	root:done()
	return root
end

function ProfileBlock(profile)
	local root =
		mw.html.create("div")
		:addClass("info")
	if EmptyOrNil(profile) then
		root:wikitext(procMap.profile.fallback)
	else
		root:wikitext(profile)
	end
	root:done()
	return root
end

function AffiliationBlock(aff)
	local root =
		mw.html.create("div")
		:addClass("affiliation")
		:css{width="fit-content"}
	if EmptyOrNil(aff) then
		root:wikitext("隶属:" .. procMap.aff.fallback)
	else
		root:wikitext("隶属:" .. aff)
	end
	root:done()
	return root
end

--[[Test with:
	=p.Main( 
    	mw.getCurrentFrame() 
    	: newChild{
    	    args=
    	    {
    	        profile1="a",image1="b",
    	        info2="aaaa",img2="s"
    	    } 
    	} 
    	: newChild{  } 
	)
	=p.Main(mw.getCurrentFrame():newChild{args={aff="affff",profile1="a",image1="b",aff1="cccc",info2="aaaa"}}:newChild())
--]]
function research.Main(frame)
	local args = RepackArgs(frame:getParent().args or frame.args)
	if not args then return [[]] end
	local root = 
		mw.html.create("div")
		:addClass("research-wrapper")
	local html =
		mw.html.create("div")
		:addClass("Tabs")
		:addClass("blue")
		:attr( {
			["data-label-side"]="top",
			["data-label-color-side-reverse"]="",
			["data-divider-size"]="",
			["data-text-background-color"]="#e6f5ff",
			["data-auto-width"]="yes",
		} )
	
	for k,v in pairs(args.contents) do
		local blkImg = ImageBlock(v.i)
		local blkPrf = ProfileBlock(v.p)
		local blkAff = AffiliationBlock(v.a or args.aff or procMap.affiliation.fallback)
		local grid =
			mw.html.create("div")
			:addClass("research-grid"):newline()
				:node(blkImg):done():newline()
				:node(blkPrf):done():newline()
			:allDone()
		local label = 
			mw.html.create("div")
			:addClass("TabLabelText"):wikitext(uformat("调查资料%d",k)):done()
		local content =
			mw.html.create("div"):addClass("TabContentText"):newline()
				:node(blkAff):done():newline()
				:node(grid):done()
			:allDone()
		local tab = 
			mw.html.create("div")
			:addClass("Tab"):newline()
				:node(label):newline()
				:node(content):newline()
			:allDone()
		html:node(tab)
	end
	root:node(html):allDone()
	return frame:extensionTag{ name="templatestyles", args={ src = 'Template:东放调查资料/style.css' } } 
			..'\n' .. tostring(root:allDone())
end

return research