Module:Organization

From TwogPedia
Revision as of 07:52, 10 October 2022 by Couchor (talk | contribs)

Documentation for this module may be created at Module:Organization/doc

local getArgs = require('Module:Arguments').getArgs

local Flags = require('Module:Flags')
local Organization = {}

local VariablesLua = mw.ext.VariablesLua

function Organization.main(frame)
	local args = getArgs(frame)
	-- Get all unique properties from Person templates
	properties = {}
	for key, value in ipairs (args) do
		local values = mw.text.jsonDecode(value)
		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)
	end
	
	local titleRow = mw.html.create('tr')
	titleRow:addClass('headerRow')

	
	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')
	
	if ( string.find(properties, '"id"') ) then
		local idCell = mw.html.create('th')
			idCell:wikitext('ID')
		titleRow:node(idCell)
	end
	
	titleRow: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, '"newcompany"') ) then
			local newCompany = mw.html.create('th')
				newCompany:wikitext('New company')
				titleRow:node(newCompany)
		end
	end
	
	titleRow:node(titleHeader)
	
	tableContainer:node(titleRow)
	
	-- Go through all the Person template instances
	for key, value in ipairs (args) do
		local values = mw.text.jsonDecode(value)
		
		local personRow = mw.html.create('tr')
			personRow:addClass('bodyRow')
			
		if ( string.find(properties, '"id"') ) then
			local idCell = mw.html.create('th')
				idCell:wikitext('ID')
			titleRow:node(idCell)
		end
		
		if values.id then
			local flagDiv = mw.html.create('div'):addClass('flag')
			local id = mw.html.create('td')
				:addClass('linkID')
				:node(flagDiv)
			if ( values.flag ) then
				local flag = Flags.icon(values.flag, 'Management')
				flagDiv:wikitext(flag)
			end
			flagDiv:wikitext('<span>[[' .. values.id .. ']]</span>')
		end
		
		if values.name then
			local flagDiv = mw.html.create('div'):addClass('flag')
			local name = mw.html.create('td')
				:addClass('playerName')
				:node(flagDiv)
				
			if values.flag and values.id == nil then
				local flag = Flags.icon(values.flag, 'Management')
				flagDiv:wikitext(flag)
			end
			
			flagDiv:wikitext(values.name)
			
			if string.find(properties, '"id"') == nil and values.id then
				name:attr('colspan', 2)
			end
			personRow:node(name)
		end
		
		
		local position = mw.html.create('td')
			:addClass('tc')
			:wikitext(values.position)
		local joindate = mw.html.create('td')
			joindate:wikitext(values.joindate)
		
		personRow: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(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, '"newcompany"')) then
				local newComapny = mw.html.create('td')
				if values.newteam then
					newComapny:wikitext('[[' .. values.newteam .. ']]')
				end
				personRow:node(newComapny)
			end
		end
		
		titleRow:node(personRow)
	end
	
	return tableContainer
end

return Organization