No edit summary |
mNo edit summary |
||
Line 46: | Line 46: | ||
table.insert(t, str) |
table.insert(t, str) |
||
end |
end |
||
− | + | arg_source = t[1] |
|
− | + | arg_name = t[2] |
|
− | assert(arg_source, i18n.error.missing_input) |
+ | assert(arg_source and arg_name, i18n.error.missing_input) |
end |
end |
||
Revision as of 11:08, 22 December 2020
▶️
Planeshift.
The documentation for this module can be found at Template:Ability ID.
You may be forwarded to another wiki language, in case a translation is not available.
Dependencies
local p = {}
local cargo = mw.ext.cargo
local aicon = require( 'Module:Ability icon' )._main
local caching = require( 'Module:Cache' ).auto
local getArgs = require( 'Module:Arguments' ).getArgs
local default = {
icon = 'File:Unknown icon.png',
icon_size = '16px',
}
local i18n = {
error = {
missing_input = 'Hero or ability parameter missing',
no_cargo_data = 'Could not find Cargo data for "%s"',
},
old_abilities_page = 'Old Abilities',
}
function p.main(frame)
local args = getArgs(frame, {
wrappers = {
'Template:Ability ID'
}
})
return caching(p._main, args, 'abilityid')
end
local function cargo_query( page, ability )
return cargo.query( 'abilities', 'image, title, type', { where='_pageName LIKE "%'..page..'" AND title="'..ability..'"', groupBy='source, title', orderBy='game' } )[1]
end
function p._main( args )
assert(args and args[1], i18n.error.missing_input)
local arg_name = ''
local arg_source = ''
if args[2] ~= nil then
arg_name = args[1]
arg_source = args[2]
end
if args[2] == nil then
local t={}
for str in string.gmatch(args[1], "([^&]+)") do
table.insert(t, str)
end
arg_source = t[1]
arg_name = t[2]
assert(arg_source and arg_name, i18n.error.missing_input)
end
-- Try to get the ability cargo data from the page.
local page = arg_source
local cargo_output = cargo_query( page, arg_name )
if cargo_output == nil then
-- If no data is found look on the /Old Abilities subpage.
page = page .. '/' .. i18n.old_abilities_page
cargo_output = cargo_query( page, arg_name )
assert( cargo_output, string.format(i18n.error.no_cargo_data, arg_name) )
end
local icon = aicon({source = arg_source, name = arg_name}, cargo_output)
return string.format( '<span class="image-link">[[%s|%s|link=%s|alt=|class=noprint]] [[%s#%s|%s]]</span>', icon, (args[3] or default.icon_size), page, page, arg_name, (args['text'] or cargo_output['title']) )
end
return p