Module:SummonAura

From Granblue Fantasy Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:SummonAura/doc

local p = {}

local function stripRefTags(wikitext)
	local w = wikitext:gsub("<ref%s[^>]*/>", "")
	w = w:gsub("<ref[^>]*>.-</ref>", "")
	return w
end

function findArg(needle, haystack)
	local pattern = '|'..needle..'='
	
	local startIndex = haystack:find(pattern, 0, true)
	if startIndex == nil then
		return 'Not Found'
	end
	startIndex = startIndex + pattern:len()
	
	local endIndex = haystack:find('\n|', startIndex, true)
	endIndex = endIndex - 1
	
	local result = haystack:sub(startIndex,endIndex)
	return mw.text.trim(result)
end

function p.renderCall(frame)
	mw.log('render start: ' .. os.clock())
	local template = frame.args.template
	local summonName= frame.args.summonName
	local auraIndex= frame.args.auraIndex
	local subaura= frame.args.subaura
	local additionalArgs = frame.args.additionalArgs

	mw.log('load data: ' .. os.clock())
	local title = mw.title.new(summonName)
	local rawPage = title:getContent()
	
	mw.log('find args:' .. os.clock())
	local descArg
	if subaura == 'true' then
		descArg = 'subaura'..auraIndex
	else
		descArg = 'aura'..auraIndex
	end
	local desc = findArg(descArg, rawPage)

	mw.log('expandTemplate')
	local args = {}
	args['link']    = summonName
	args['desc']    = frame:preprocess(stripRefTags(desc))
	args['subaura'] = frame.args.subaura

	-- Pass `frame.args.additionalArgs` to `args`
	if additionalArgs ~= nil then
		for arg in (additionalArgs):gmatch('[^;]+') do
			local i = arg:find('=')
			args[arg:sub(0, i-1)] = arg:sub(i+1)
		end
	end

	mw.log('done: ' .. os.clock())
	return frame:expandTemplate{ title = template, args = args }
end

return p