Module:CoAbility
Revision as of 05:58, 8 April 2020 by >Eave (adding sorting for adventurer table rows)
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 = '| data-sort-value="%s" | [[File:%s 0%s r0%s.png|36px|link=%s]] [[%s|%s]]\n| %s\n| %s'
local iconLink = 'data-sort-value="%s" | [[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 advName = unit['FullName']
local element = unit['ElementalType']
local weapon = unit['WeaponType']
local rarity = unit['Rarity']
local coabIcon = unit['coabIcon']
local coabPage = unit['coabPage']
local coabName = unit['coabName']
local ccoabIcon = unit['ccoabIcon']
local ccoabPage = unit['ccoabPage']
local ccoabName = unit['ccoabName']
result[#result+1] = filterValues:format(element, weapon, rarity, coabIcon, ccoabIcon)
result[#result+1] = row:format(
advName, unit['advId'], unit['VariationId'], rarity, advPage, advPage, advName,
iconLink:format(coabName, coabIcon, coabPage, coabPage, coabName),
iconLink:format(ccoabName, ccoabIcon, ccoabPage, ccoabPage, ccoabName)
)
end
return table.concat(result, '\n')
end
return p
--</includeonly>