Module:CoAbility
Revision as of 05:51, 8 April 2020 by >Eave (increase icon size)
This module abstracts away some of the logical complexity that is difficult to represent in pure Wikitext when it comes to displaying information about co-abilities and chain co-abilities.
Parameters & Invocation
{{#invoke:CoAbility|Filter}}
No arguments, populates the arguments for and calls the Co-ability filter header used in Widget:CoAbilityListFilter.
{{#invoke:CoAbility|AdventurerTableEntries}}
No arguments, populates the table rows used in Adventurer Co-abilities List.
-- <includeonly> (prevents literal interpretation of links or categories within the module code)
-- Lua Templating for Co-ability (and chain co-ability) related displays
local p = {}
local cargo = mw.ext.cargo
-- Usage: {{#invoke:CoAbility|Filter}}
-- Filter header for coability lists
function p.Filter(frame)
local md5 = require('Module:Md5')
local filterWidget = '{{#widget:CoAbilityListFilter|%s}}'
local coabFilterValues = 'coabs=%s|coabImages=%s'
local chainCoabFilterValues = 'chainCoabs=%s|chainCoabImages=%s'
local imageUrl = '/images/%s/%s/%s.png'
local result = {}
local coabs = cargo.query('CoAbilities', 'AbilityIconName', {
groupBy = 'AbilityIconName',
orderBy = 'Id',
})
for i, coab in ipairs(coabs) do
local icon = coab['AbilityIconName']
local iconHash = md5.sumhexa(icon..'.png'):sub(1, 2)
local iconPath = string.format(imageUrl, iconHash:sub(1,1), iconHash, icon)
result[#result+1] = string.format(coabFilterValues, icon, iconPath)
end
local chainCoabs = cargo.query('ChainCoAbilities', 'AbilityIconName', {
groupBy = 'AbilityIconName',
orderBy = 'AbilityIconName',
})
for i, coab in ipairs(chainCoabs) do
local icon = coab['AbilityIconName']
local iconHash = md5.sumhexa(icon..'.png'):sub(1, 2)
local iconPath = string.format(imageUrl, iconHash:sub(1,1), iconHash, icon)
result[#result+1] = string.format(chainCoabFilterValues, icon, iconPath)
end
return frame:preprocess(string.format(filterWidget, table.concat(result, '|')))
end
-- Usage: {{#invoke:CoAbility|AdventurerTableEntries}}
-- Entries for Adventurer Coability lists
function p.AdventurerTableEntries(frame)
local filterValues = '|- class="grid-entry" data-element="%s" data-weapon="%s" '..
'data-rarity="%s" data-coab="%s" data-chaincoab="%s"'
local row = '| [[File:%s 0%s r0%s.png|36px|link=%s]] [[%s|%s]] || %s || %s'
local iconLink = '[[File:%s.png|36px|link=%s]] [[%s|%s]]'
local result = {}
local fields = 'Adventurers._pageName=advPage, Adventurers.Id=advId, VariationId,'..
'FullName, ElementalType, WeaponType, Rarity,'..
'CoAbilities._pageName=coabPage, CoAbilities.Name=coabName, CoAbilities.AbilityIconName=coabIcon,'..
'ChainCoAbilities._pageName=ccoabPage, ChainCoAbilities.Name=ccoabName, ChainCoAbilities.AbilityIconName=ccoabIcon'
local units = cargo.query('Adventurers, CoAbilities, ChainCoAbilities', fields, {
join = 'Adventurers.ExAbilityData5=CoAbilities.Id, Adventurers.ExAbility2Data5=ChainCoAbilities.Id',
where = 'IsPlayable!=0 AND ReleaseDate <= NOW()',
groupBy = 'Adventurers._pageName',
orderBy = 'ElementalTypeId ASC, WeaponTypeId ASC, Rarity DESC, IdLong DESC, FullName ASC',
limit = 999
})
for i, unit in ipairs(units) do
local advPage = unit['advPage']
local element = unit['ElementalType']
local weapon = unit['WeaponType']
local rarity = unit['Rarity']
local coabIcon = unit['coabIcon']
local coabPage = unit['coabPage']
local ccoabIcon = unit['ccoabIcon']
local ccoabPage = unit['ccoabPage']
result[#result+1] = filterValues:format(element, weapon, rarity, coabIcon, ccoabIcon)
result[#result+1] = row:format(
unit['advId'], unit['VariationId'], rarity, advPage, advPage, unit['FullName'],
iconLink:format(coabIcon, coabPage, coabPage, unit['coabName']),
iconLink:format(ccoabIcon, ccoabPage, ccoabPage, unit['ccoabName'])
)
end
return table.concat(result, '\n')
end
return p
--</includeonly>