Module:Card Table

From Sekaipedia

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

local getArgs   = require('Module:Arguments').getArgs
local yesno     = require('Module:Yesno')
local navbar    = require('Module:Navbar')._navbar
local icons     = require('Module:Icons')._main
local constants = require('Module:Constants')
local utils     = require('Module:Utilities')
local cargo     = mw.ext.cargo

local p = {}

local function cargoQuery(cargo_args)
	local wheres = {
		'card_id > 0'
	}
	
	if cargo_args.status then
		table.insert(
			wheres,
			string.format(
				'status = "%s"',
				cargo_args.status
			)
		)
	end
	
	local tables = 'Cards'
	local fields = [[
		card_id,
		_pageName,
		thumbnail,
		card_name,
		card_character,
		unit,
		support_unit,
		attribute,
		rarity,
		date,
		status
	]]
	local args = {
        where = table.concat(wheres, ' AND '),
        orderBy = 'card_id ASC',
        limit = cargo_args['limit'] or 600,
        offset = cargo_args['offset']
    }
	    
    return cargo.query( tables, fields, args )
end

function p.main(frame)
	local args = getArgs(frame)
	
	return p._main(args)
end

function p._main(args)
	
	local cargo_args = {
		['characters'] = args['characters'],
		['units'] = args['units'],
		['support_units'] = args['support units'],
		['attributes'] = args['attributes'],
		['rarities'] = args['rarities'],
		['status'] = args['status'],
		['limit'] = args['limit'],
		['offset'] = args['offset']
	}
	
	local results = cargoQuery(cargo_args)
	
	local hide_status = yesno(args['hide status'], false)
	
	local root = mw.html.create()
	local root_table = root:tag('table')
		:addClass('wikitable'):addClass('sortable')
		:css({
			['margin-bottom'] = '0',
			['width'] = '100%',
			['text-align'] = 'center'
		})
	local table_header = root_table:tag('tr')
			:tag('th')
				:attr('width', '25px')
				:wikitext('ID')
				:done()
			:tag('th')
				:attr('width', '96px')
				:wikitext('Thumbnail')
				:done()
			:tag('th')
				:wikitext('Card Name')
				:done()
			:tag('th')
				:attr('width', '200px')
				:wikitext('Character')
				:done()
			:tag('th')
				:attr('width', '200px')
				:wikitext('Unit')
				:done()
			:tag('th')
				:attr('width', '200px')
				:wikitext('Support Unit')
				:done()
			:tag('th')
				:attr('width', '150px')
				:wikitext('Attribute')
				:done()
			:tag('th')
				:attr('width', '150px')
				:wikitext('Rarity')
				:done()
			:tag('th')
				:attr('width', '150px')
				:wikitext('Date Added')
				:done()
		
		if not hide_status then
			table_header:tag('th')
				:attr('width', '150px')
				:wikitext('Status')
				:done()
		end
		
			
	if #results > 0 then
		for k,v in ipairs(results) do
			local _row = root_table:tag('tr')
			
			_row:tag('td')
				:wikitext(v.card_id)
				:done()
			
			_row:tag('td')
				:wikitext(string.format('[[File:%s|96px]]', v.thumbnail))
				:done()
					
			_row:tag('td')
				:wikitext(string.format('[[%s|%s]]', v._pageName, v.card_name))
				:done()
					
			_row:tag('td')
				:wikitext('[[' .. v.card_character .. ']]')
				:done()
					
			_row:tag('td')
				:wikitext(string.format(
					'%s [[%s]]',
					icons({ v.unit, size = '25px' }),
					constants.get_unit(v.unit)
				))
				:done()
				
			if v.support_unit and v.support_unit ~= '' then
				_row:tag('td')
					:wikitext(string.format(
						'%s [[%s]]',
						icons({ v.support_unit, size = '25px' }),
						v.support_unit
					))
					:done()
			else
				_row:tag('td')
					:wikitext()
					:done()
			end
			
			_row:tag('td')
				:wikitext(
					icons({ v.attribute, size = '25px' }) ..
					' ' ..
					utils.capitalize(v.attribute)
				)
				:done()
				
			if tonumber(v.rarity) and tonumber(v.rarity) > 0 then
				_row:tag('td')
					:wikitext(icons({ v.rarity .. ' star', size = '25px' }))
					:done()
			else
				_row:tag('td')
					:wikitext(icons({ 'birthday', size = '25px' }))
					:done()
			end
			
			_row:tag('td')
				:wikitext(v.date)
				:done()
			
			if not hide_status then
				_row:tag('td')
					:wikitext(v.status)
					:done()
			end
			
		end
	else
		root_table:tag('tr')
			:tag('td'):attr('colspan', 10):wikitext('No cards')
			:done()
		:done()
	end

	return tostring(root).. tostring(navbar({ 'Card Table', plain = 1, noedit = 1, brackets = 1 }))
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.