Module:Infobox Spell
Jump to navigation
Jump to search
Module documentation
This documentation is transcluded from Module:Infobox Spell/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Infobox Spell/doc. [edit]
Module:Infobox Spell's function main is invoked by Template:Infobox Spell.
Module:Infobox Spell requires Module:Arguments.
Module:Infobox Spell requires Module:Clean image.
Module:Infobox Spell requires Module:InfoboxBuilder.
Module:Infobox Spell requires Module:Paramtest.
local getArgs = require('Module:Arguments').getArgs
local InfoboxBuilder = require('Module:InfoboxBuilder')
local cleanImage = require('Module:Clean image').clean
local edit = require('Module:Paramtest').editbtn
local p = {}
function on_main()
return mw.title.getCurrentTitle().namespace == 0
end
function unlink(value)
if value ~= nil then
return value:gsub('%[',''):gsub('%]','')
end
end
-- linkifies and removes double square brackets
function link(value)
if value ~= nil and value ~= "" then
return string.format("[[%s]]", unlink(value))
end
end
function table_keys(t)
local ret = {}
for k, _ in pairs(t) do
table.insert(ret, k)
end
return ret
end
function parse_runes(runes_string)
local ret = {}
for count, rune in runes_string:gmatch("<sup>(%d+)</sup><span>%[%[File:(.-)%.png") do
local key = rune:gsub("^%s*(.-)%s*$", "%1") -- lowercase and trim
ret[key] = tonumber(count)
end
return ret
end
function p.main(frame)
return p._main(getArgs(frame))
end
function p._main(args)
local page = mw.title.getCurrentTitle()
local ib = InfoboxBuilder()
args.name = args.name or page.fullText
local ret = tostring(ib
:title(args.name)
:image({image=cleanImage{file = args.image, width = args.imagesize or 300}})
:row({label="Released", value=ib:releaseDate(args.release, args.update, page.fullText)})
:row({label="[[Skill]]", value=link(args.skill) or edit(page.fullText)})
:row({label="Level", value=args.level or edit(page.fullText)})
:row({label="[[Runes]]", value=args.runes or edit(page.fullText)})
:row({label="Cooldown", value=args.cooldown or edit(page.fullText)})
:row({label="Description", value=args.description})
:done())..ib:addCats({"Spells"})
if page.namespace == 10 and page.text:lower():find("infobox") and page.subpageText == page.text then
ret = ret..ib:addTemplateCats({"Infoboxes"})
end
local spell_object = {
name = args.name,
image = cleanImage{ file = args.image, width = 32 },
image_raw = args.image,
description = args.description,
runes = args.runes and parse_runes(args.runes),
cooldown = args.cooldown,
skill = unlink(args.skill),
level = args.level,
}
if on_main() then
bucket('infobox_spell').put({
uses_rune = table_keys(spell_object.runes or {}),
json = mw.text.jsonEncode(spell_object)
})
end
return ret
end
return p