Module:CharacterSupportSkill
Jump to navigation
Jump to search
Documentation for this module may be created at Module:CharacterSupportSkill/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.renderSupportSkill(frame)
mw.log('render start: ' .. os.clock())
local template = frame.args.template
local characterName = frame.args.characterName
local skillIndex = frame.args.skillIndex
skillIndex = (skillIndex == "1") and "" or skillIndex
local additionalArgs = frame.args.additionalArgs
mw.log('load data: ' .. os.clock())
local title = mw.title.new(characterName)
local rawPage = title:getContent()
mw.log('find args:' .. os.clock())
local name, desc, icon, star1val, star2val, star3val
if skillIndex:lower() == "emp" then
name = 'Extended Mastery Support Skill'
desc = findArg('sa_emp_desc', rawPage)
star1val = findArg('sa_emp_1s', rawPage)
star2val = findArg('sa_emp_2s', rawPage)
star3val = findArg('sa_emp_3s', rawPage)
elseif skillIndex:lower() == "transcendence" then
name = 'Transcendence Extended Mastery Support Skill'
desc = findArg('sa2_emp_desc', rawPage)
star1val = findArg('sa2_emp_1s', rawPage)
star2val = findArg('sa2_emp_2s', rawPage)
star3val = findArg('sa2_emp_3s', rawPage)
elseif skillIndex:lower() == "domain" then
name = 'Domain Bonus Ability'
desc = findArg('perk_a5_desc', rawPage)
else
local nameArg = 'sa'..skillIndex..'_name'
local descArg = 'sa'..skillIndex..'_desc'
local iconArg = 'sa'..skillIndex..'_icon'
name = findArg(nameArg, rawPage)
desc = findArg(descArg, rawPage)
icon = findArg(iconArg, rawPage)
end
mw.log('expandTemplate')
local args = {}
local startable
if star1val ~= nil or star2val ~= nil or star3val ~= nil then
startable = string.format([[
<center><table class="wikitable" style="text-align: center;"><tr><th>★☆☆</th><th>★★☆</th><th>★★★</th></tr><tr><td>%s</td><td>%s</td><td>%s</td></tr></table></center>]],
star1val or '',
star2val or '',
star3val or ''
)
end
args['link'] = characterName
args['name'] = name
args['desc'] = frame:preprocess(stripRefTags(desc .. (startable or '')))
args['emp'] = skillIndex:lower() == "emp" or skillIndex:lower() == "transcendence"
args['domain'] = skillIndex:lower() == "domain"
args['icon'] = icon
-- 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
function p.testRender()
local frame = mw.getCurrentFrame()
frame.args.template = 'Template:CharacterSupportSkill/Template'
frame.args.characterName = 'Threo'
frame.args.skillIndex = '2'
frame.args.additionalArgs = 'large=false;noicon=false'
return p.renderSupportSkill(frame)
end
function p.testRenderEMP()
local frame = mw.getCurrentFrame()
frame.args.template = 'Template:CharacterSupportSkill/Template'
frame.args.characterName = 'Threo'
frame.args.skillIndex = 'eMp'
frame.args.additionalArgs = 'large=false;noicon=false'
return p.renderSupportSkill(frame)
end
return p