(Created page with "local Class = require('Module:Class') local Arguments = require('Module:Arguments') local String = require('Module:StringUtils') local Squad = Class.new() Squad.TYPE_ACTIVE = 0 Squad.TYPE_INACTIVE = 1 Squad.TYPE_FORMER = 2 Squad.TYPE_FORMER_INACTIVE = 3 function Squad:init(frame) self.frame = frame self.args = Arguments.getArgs(frame) self.root = mw.html.create('div') self.root :addClass('table-responsive') -- TODO: is this needed? :css('margin-bottom', '1...") |
mNo edit summary |
||
(40 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local | local getArgs = require('Module:Arguments').getArgs | ||
local | local cargo = mw.ext.cargo | ||
local | local Flags = require('Module:Flags') | ||
local Squad = {} | |||
local stringifyDate = require('Module:Functions').stringifyDate | |||
local | local VariablesLua = mw.ext.VariablesLua | ||
Squad. | function Squad.main(frame) | ||
local args = getArgs(frame) | |||
if VariablesLua.varexists('Members') == false then return '' end | |||
local tables = mw.text.split(VariablesLua.var( 'Members' ), '&&&') | |||
-- Get all unique properties from Member templates | |||
properties = {} | |||
for i = 1, #tables do | |||
local values = mw.text.jsonDecode(tables[i]) | |||
for key2, value2 in pairs ( values ) do | |||
if string.find(mw.text.jsonEncode(properties), '"' .. key2 .. '"') then | |||
else | |||
table.insert(properties, key2) | |||
end | |||
end | |||
end | end | ||
local | properties = mw.text.jsonEncode(properties) | ||
if | local tableContainer = mw.html.create('table') | ||
tableContainer:addClass('striped-table') | |||
if args.title then | |||
local title = mw.html.create('tr') | |||
:addClass('headerRow'):node(mw.html.create('th'):addClass('table-title'):attr('colspan', 10):wikitext(args.title)) | |||
tableContainer:node(title):node(mw.html.create('tr')) | |||
end | end | ||
local titleRow = mw.html.create('tr') | |||
titleRow:addClass('headerRow') | |||
local idCell = mw.html.create('th') | |||
idCell:wikitext('ID') | |||
local nameCell = mw.html.create('th') | |||
nameCell:wikitext('Name') | |||
local | local positionCell = mw.html.create('th') | ||
positionCell:addClass('position') | |||
positionCell:wikitext('Position') | |||
local joindateCell = mw.html.create('th') | |||
joindateCell:wikitext('Join Date') | |||
titleRow:node(idCell):node(nameCell):node(positionCell):node(joindateCell) | |||
-- If status is not active, then see what other th tags need to be added | |||
if ( args.status ~= 'active' ) then | |||
if ( string.find(properties, '"leavedate"') ) then | |||
local leaveDate = mw.html.create('th') | |||
leaveDate:wikitext('Leave Date') | |||
titleRow:node(leaveDate) | |||
end | |||
if ( string.find(properties, '"inactivedate"') ) then | |||
local inactiveDate = mw.html.create('th') | |||
inactiveDate:wikitext('Inactive Since') | |||
titleRow:node(inactiveDate) | |||
end | |||
if ( string.find(properties, '"newteam"') ) then | |||
local newTeam = mw.html.create('th') | |||
newTeam:wikitext('New team') | |||
titleRow:node(newTeam) | |||
end | |||
end | end | ||
titleRow:node(titleHeader) | |||
tableContainer:node(titleRow) | |||
local currentTitle = mw.title.getCurrentTitle().text | |||
local gameCategory = mw.text.split(currentTitle, '/')[1] | |||
local cargoCaptain = '' | |||
local cargoCoach = '' | |||
local cargoManager = '' | |||
local cargoAnalyst = '' | |||
local orgStaff = {} | |||
-- Go through all the Person template instances | |||
for i = 1, #tables do | |||
local values = mw.text.jsonDecode(tables[i]) | |||
local tables = 'People' | |||
local fields = '_pageName, nationality, name, romanized' | |||
local cargoArgs = { | |||
where = '_pageName="People/' .. values.id .. '"' | |||
} | |||
local results = cargo.query(tables, fields, cargoArgs) | |||
local personRow = mw.html.create('tr') | |||
personRow:addClass('bodyRow') | |||
local id = mw.html.create('td') | |||
id:addClass('linkID') | |||
if values.flag then | |||
flag = Flags.icon(values.flag, gameCategory) | |||
id:wikitext(flag) | |||
elseif ( #results > 0 and results[1].nationality ) then | |||
flag = Flags.icon(mw.text.split(results[1].nationality, ',')[1], gameCategory) | |||
id:wikitext(flag) | |||
end | |||
if ( #results > 0 ) then | |||
id:wikitext('<span>[[People/' .. values.id .. ']]</span>') | |||
else | |||
id:wikitext('<span>'..values.id ..'</span>') | |||
end | |||
if ( values.captain == 'Yes' ) then | |||
-- Add captain to cargo table if it's active roster | |||
if args.status == 'active' then | |||
cargoCaptain = 'People/' .. values.id | |||
end | |||
id:wikitext('<span class="captain light">[[File:Captain light.png|18px|link=|Captain]]</span>') | |||
id:wikitext('<span class="captain dark-inline">[[File:Captain dark.png|18px|link=|Captain]]</span>') | |||
end | |||
local name = mw.html.create('td') | |||
name:addClass('playerName') | |||
: | if values.name then | ||
name:wikitext(values.name) | |||
elseif ( #results > 0 and (results[1].name or results[1].romanized) ) then | |||
name:wikitext(results[1].romanized or results[1].name) | |||
end | |||
: | |||
:addClass(' | local role = '' | ||
:wikitext( | if values.role then | ||
role = ' (' .. values.role .. ')' | |||
end | |||
-- Add coach and manager to cargo table if exist | |||
if string.find(string.upper(values.position), 'COACH')and args.status == 'active' then | |||
cargoCoach = cargoCoach .. 'People/' .. values.id .. ',' | |||
end | |||
if string.find(string.upper(values.position), 'MANAGER') and args.status == 'active' then | |||
cargoManager = cargoManager .. 'People/' .. values.id .. ',' | |||
end | |||
if string.find(string.upper(values.position), 'ANALYST') and args.status == 'active' then | |||
cargoAnalyst = cargoAnalyst .. 'People/' .. values.id .. ',' | |||
end | |||
local position = mw.html.create('td') | |||
:addClass('tc') | |||
:wikitext(values.position .. role) | |||
local joindate = mw.html.create('td') | |||
joindate:wikitext(stringifyDate(values.joindate)) | |||
personRow:node(id):node(name):node(position):node(joindate) | |||
-- If not active squad, then go add additional columns to table | |||
if ( args.status ~= 'active' ) then | |||
if ( string.find(properties, '"leavedate"') ) then | |||
local leaveText = mw.html.create('td') | |||
:addClass('tc') | |||
:wikitext(stringifyDate(values.leavedate) or '-') | |||
personRow:node(leaveText) | |||
end | |||
if ( string.find(properties, '"inactivedate"') ) then | |||
local inactiveDate = mw.html.create('td') | |||
:addClass('tc') | |||
:wikitext(values.inactivedate or '-') | |||
personRow:node(inactiveDate) | |||
end | |||
if ( string.find(properties, '"newteam"')) then | |||
local newTeam = mw.html.create('td') | |||
if values.newteam then | |||
--Check if page newteam exists and if it does, then link to it, otherwise string only | |||
local pageExists = frame:callParserFunction('#ifexist', gameCategory .. '/' .. values.newteam, 'yes', 'no' ) | |||
if ( pageExists == 'yes' ) then | |||
newTeam:wikitext('<span>[[' .. gameCategory .. '/' .. values.newteam .. '|' .. values.newteam .. ']]</span>') | |||
else | |||
newTeam:wikitext(values.newteam) | |||
end | |||
else | |||
newTeam:wikitext('') | |||
end | |||
personRow:node(newTeam) | |||
end | |||
end | end | ||
-- If position indicates being part of the org rather than a player | |||
if string.find(string.upper(values.position), 'MANAGER') or string.find(string.upper(values.position), 'COACH') or string.find(string.upper(values.position), 'ANALYST') or string.find(string.upper(values.position), 'MANAGER') then | |||
table.insert(orgStaff, personRow) | |||
else | |||
tableContainer:node(personRow) | |||
end | |||
end | end | ||
-- If had non-players | |||
if #orgStaff > 0 then | |||
tableContainer:node(mw.html.create('tr'):addClass('headerRow'):node(mw.html.create('th'):attr('colspan', 10):addClass('table-title'):wikitext('Staff'))) | |||
for i = 1, #orgStaff do | |||
tableContainer:node(orgStaff[i]) | |||
end | |||
end | |||
if args.status == 'active' then | |||
-- remove excess comma from cargoCoach and cargoManager | |||
local length = string.len(cargoCoach) | |||
if length > 0 and string.sub(cargoCoach, length) == "," then | |||
cargoCoach = string.sub(cargoCoach , 1, length - 1) | |||
end | |||
local length = string.len(cargoManager) | |||
if length > 0 and string.sub(cargoManager, length) == "," then | |||
cargoManager = string.sub(cargoManager, 1, length - 1) | |||
end | |||
local length = string.len(cargoAnalyst) | |||
if length > 0 and string.sub(cargoAnalyst, length) == "," then | |||
cargoAnalyst = string.sub(cargoAnalyst, 1, length - 1) | |||
end | |||
frame:callParserFunction{name = '#cargo_store:', args = {_table = 'Squads', captain = cargoCaptain, coach = cargoCoach, manager = cargoManager, analyst = cargoAnalyst}} | |||
end | end | ||
VariablesLua.vardefine( 'Members', nil ) | |||
return tableContainer | |||
return | |||
end | end | ||
return Squad | return Squad |
Latest revision as of 16:57, 9 April 2024
Documentation for this module may be created at Module:Squad/doc
local getArgs = require('Module:Arguments').getArgs
local cargo = mw.ext.cargo
local Flags = require('Module:Flags')
local Squad = {}
local stringifyDate = require('Module:Functions').stringifyDate
local VariablesLua = mw.ext.VariablesLua
function Squad.main(frame)
local args = getArgs(frame)
if VariablesLua.varexists('Members') == false then return '' end
local tables = mw.text.split(VariablesLua.var( 'Members' ), '&&&')
-- Get all unique properties from Member templates
properties = {}
for i = 1, #tables do
local values = mw.text.jsonDecode(tables[i])
for key2, value2 in pairs ( values ) do
if string.find(mw.text.jsonEncode(properties), '"' .. key2 .. '"') then
else
table.insert(properties, key2)
end
end
end
properties = mw.text.jsonEncode(properties)
local tableContainer = mw.html.create('table')
tableContainer:addClass('striped-table')
if args.title then
local title = mw.html.create('tr')
:addClass('headerRow'):node(mw.html.create('th'):addClass('table-title'):attr('colspan', 10):wikitext(args.title))
tableContainer:node(title):node(mw.html.create('tr'))
end
local titleRow = mw.html.create('tr')
titleRow:addClass('headerRow')
local idCell = mw.html.create('th')
idCell:wikitext('ID')
local nameCell = mw.html.create('th')
nameCell:wikitext('Name')
local positionCell = mw.html.create('th')
positionCell:addClass('position')
positionCell:wikitext('Position')
local joindateCell = mw.html.create('th')
joindateCell:wikitext('Join Date')
titleRow:node(idCell):node(nameCell):node(positionCell):node(joindateCell)
-- If status is not active, then see what other th tags need to be added
if ( args.status ~= 'active' ) then
if ( string.find(properties, '"leavedate"') ) then
local leaveDate = mw.html.create('th')
leaveDate:wikitext('Leave Date')
titleRow:node(leaveDate)
end
if ( string.find(properties, '"inactivedate"') ) then
local inactiveDate = mw.html.create('th')
inactiveDate:wikitext('Inactive Since')
titleRow:node(inactiveDate)
end
if ( string.find(properties, '"newteam"') ) then
local newTeam = mw.html.create('th')
newTeam:wikitext('New team')
titleRow:node(newTeam)
end
end
titleRow:node(titleHeader)
tableContainer:node(titleRow)
local currentTitle = mw.title.getCurrentTitle().text
local gameCategory = mw.text.split(currentTitle, '/')[1]
local cargoCaptain = ''
local cargoCoach = ''
local cargoManager = ''
local cargoAnalyst = ''
local orgStaff = {}
-- Go through all the Person template instances
for i = 1, #tables do
local values = mw.text.jsonDecode(tables[i])
local tables = 'People'
local fields = '_pageName, nationality, name, romanized'
local cargoArgs = {
where = '_pageName="People/' .. values.id .. '"'
}
local results = cargo.query(tables, fields, cargoArgs)
local personRow = mw.html.create('tr')
personRow:addClass('bodyRow')
local id = mw.html.create('td')
id:addClass('linkID')
if values.flag then
flag = Flags.icon(values.flag, gameCategory)
id:wikitext(flag)
elseif ( #results > 0 and results[1].nationality ) then
flag = Flags.icon(mw.text.split(results[1].nationality, ',')[1], gameCategory)
id:wikitext(flag)
end
if ( #results > 0 ) then
id:wikitext('<span>[[People/' .. values.id .. ']]</span>')
else
id:wikitext('<span>'..values.id ..'</span>')
end
if ( values.captain == 'Yes' ) then
-- Add captain to cargo table if it's active roster
if args.status == 'active' then
cargoCaptain = 'People/' .. values.id
end
id:wikitext('<span class="captain light">[[File:Captain light.png|18px|link=|Captain]]</span>')
id:wikitext('<span class="captain dark-inline">[[File:Captain dark.png|18px|link=|Captain]]</span>')
end
local name = mw.html.create('td')
name:addClass('playerName')
if values.name then
name:wikitext(values.name)
elseif ( #results > 0 and (results[1].name or results[1].romanized) ) then
name:wikitext(results[1].romanized or results[1].name)
end
local role = ''
if values.role then
role = ' (' .. values.role .. ')'
end
-- Add coach and manager to cargo table if exist
if string.find(string.upper(values.position), 'COACH')and args.status == 'active' then
cargoCoach = cargoCoach .. 'People/' .. values.id .. ','
end
if string.find(string.upper(values.position), 'MANAGER') and args.status == 'active' then
cargoManager = cargoManager .. 'People/' .. values.id .. ','
end
if string.find(string.upper(values.position), 'ANALYST') and args.status == 'active' then
cargoAnalyst = cargoAnalyst .. 'People/' .. values.id .. ','
end
local position = mw.html.create('td')
:addClass('tc')
:wikitext(values.position .. role)
local joindate = mw.html.create('td')
joindate:wikitext(stringifyDate(values.joindate))
personRow:node(id):node(name):node(position):node(joindate)
-- If not active squad, then go add additional columns to table
if ( args.status ~= 'active' ) then
if ( string.find(properties, '"leavedate"') ) then
local leaveText = mw.html.create('td')
:addClass('tc')
:wikitext(stringifyDate(values.leavedate) or '-')
personRow:node(leaveText)
end
if ( string.find(properties, '"inactivedate"') ) then
local inactiveDate = mw.html.create('td')
:addClass('tc')
:wikitext(values.inactivedate or '-')
personRow:node(inactiveDate)
end
if ( string.find(properties, '"newteam"')) then
local newTeam = mw.html.create('td')
if values.newteam then
--Check if page newteam exists and if it does, then link to it, otherwise string only
local pageExists = frame:callParserFunction('#ifexist', gameCategory .. '/' .. values.newteam, 'yes', 'no' )
if ( pageExists == 'yes' ) then
newTeam:wikitext('<span>[[' .. gameCategory .. '/' .. values.newteam .. '|' .. values.newteam .. ']]</span>')
else
newTeam:wikitext(values.newteam)
end
else
newTeam:wikitext('')
end
personRow:node(newTeam)
end
end
-- If position indicates being part of the org rather than a player
if string.find(string.upper(values.position), 'MANAGER') or string.find(string.upper(values.position), 'COACH') or string.find(string.upper(values.position), 'ANALYST') or string.find(string.upper(values.position), 'MANAGER') then
table.insert(orgStaff, personRow)
else
tableContainer:node(personRow)
end
end
-- If had non-players
if #orgStaff > 0 then
tableContainer:node(mw.html.create('tr'):addClass('headerRow'):node(mw.html.create('th'):attr('colspan', 10):addClass('table-title'):wikitext('Staff')))
for i = 1, #orgStaff do
tableContainer:node(orgStaff[i])
end
end
if args.status == 'active' then
-- remove excess comma from cargoCoach and cargoManager
local length = string.len(cargoCoach)
if length > 0 and string.sub(cargoCoach, length) == "," then
cargoCoach = string.sub(cargoCoach , 1, length - 1)
end
local length = string.len(cargoManager)
if length > 0 and string.sub(cargoManager, length) == "," then
cargoManager = string.sub(cargoManager, 1, length - 1)
end
local length = string.len(cargoAnalyst)
if length > 0 and string.sub(cargoAnalyst, length) == "," then
cargoAnalyst = string.sub(cargoAnalyst, 1, length - 1)
end
frame:callParserFunction{name = '#cargo_store:', args = {_table = 'Squads', captain = cargoCaptain, coach = cargoCoach, manager = cargoManager, analyst = cargoAnalyst}}
end
VariablesLua.vardefine( 'Members', nil )
return tableContainer
end
return Squad