Template:Card datatable/doc

Template page
Revision as of 23:12, 28 April 2023 by ChaoticShadow (talk | contribs) (Created page with "{{documentation subpage}} {{Module:Card datatable}} {{Lua|cards|card_skills}} <includeonly>Category:Datatable templates</includeonly>")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

local getArgs = require('Module:Arguments').getArgs local DatatableBuilder = require('Module:DatatableBuilder') local QueryBuilder = require('Module:QueryBuilder') local Yesno = require('Module:Yesno')

local DisplayFns = require('Module:DisplayFunctions') local ProcessingFns = require('Module:ProcessingFunctions')

local aicon = require('Module:Attribute icon')._main local cicon = require('Module:Character icon')._main local ricon = require('Module:Rarity icon')._main local uicon = require('Module:Unit icon')._main

local VariablesLua = mw.ext.VariablesLua

local p = {}

local DisplayType = { text = 'TEXT', icon = 'ICON', both = 'BOTH' }

local function formatAttribute(attribute) if attribute == nil or attribute == then return nil end

return string.format( '%s %s', aicon({ attribute, size = '25px' }), attribute ) end

local function formatCharacter(character) if character == nil or character == then return nil end

return string.format( '%s %s', cicon({ character, size = '25px' }), character ) end

local function formatUnit(unit) if unit == nil or unit == then return nil end

return string.format( '%s %s', uicon({ unit, size = '25px' }), unit ) end

local function formatRarity(rarity) if rarity == nil or rarity == then return nil end

return ricon({ rarity, size = '25px' }) end

local function formatAcquire(acquire) local acquireArr = ProcessingFns.stringToArray(',')(acquire) return DisplayFns.list('unbulleted')(acquireArr) end

local function formatLink(page, name) if page and name then return string.format('%s', page, name) end

return nil end

local function formatIfPretty(pretty, fn) if pretty == true then return fn end return nil end


function p.main(frame) local args = getArgs(frame)

local columns = args['columns'] local isPretty = Yesno(args['pretty']) local displayType = DisplayType[args['display type']] or DisplayType.text

local qb = QueryBuilder.new() qb :setTables('cards, card_skills, events, gachas') :setFields([[ cards._pageName = cardPageName, cards.card_id, cards.card_name, cards.thumbnail, cards.card_character, cards.unit, cards.support_unit, cards.attribute, cards.rarity, cards.release_date, cards.status, cards.acquire, cards.event_id, cards.gacha_id, card_skills.skill_type, events._pageName = eventPageName, events.event_id, events.event_name, gachas._pageName = gachaPageName, gachas.gacha_id, gachas.gacha_name, ]]) :setJoinOn([[ cards._pageID = card_skills._pageID, cards.event_id = events.event_id, cards.gacha_id = gachas.gacha_id ]]) :addWhere('card_id', '>', 0) :setOrderBy('cards.card_id ASC') :setGroupBy('cards._pageID') :setLimit(args['limit'] or 500) :setOffset(args['offset']) qb :addWhereList( 'cards.card_id', '=', args['card ids'], ',', 'OR' ) :addWhere('cards.card_id', '>=', args['min card id']) :addWhere('cards.card_id', '<=', args['max card id']) :addWhereList( 'cards.card_character', '=', args['characters'], ',', 'OR' ) :addWhereList( 'cards.unit', '=', args['units'], ';', 'OR' ) :addWhereList( 'cards.support_unit', '=', args['support units'], ';', 'OR' ) :addWhereList( 'cards.attribute', '=', args['attributes'], ',', 'OR' ) :addWhereList( 'cards.rarity', '=', args['rarities'], ',', 'OR' ) :addWhere('cards.release_date', '>=', args['released after']) :addWhere('cards.release_date', '<=', args['released before']) :addWhereList( 'cards.status', '=', args['statuses'], ',', 'OR' ) :addWhereList( 'cards.acquire', 'HOLDS', args['acquire'], ',', 'OR' ) :addWhereList( 'card_skills.skill_type', '=', args['skills'], ';', 'OR' ) :addWhereList( 'cards.event', '=', args['events'], ';', 'OR' )

local datatable = DatatableBuilder.new() datatable :setColumns{ { name = 'id', header = 'ID', dataFields = { 'cards.card_id' }, visible = false }, { name = 'thumbnail', header = 'Thumbnail', dataFields = { 'cards.thumbnail' }, fn = DisplayFns.image('64px'), sortable = false }, { name = 'name', header = 'Card name', dataFields = { 'cardPageName', 'cards.card_name' }, css = { ['width'] = '30em' }, fn = formatLink }, { name = 'character', header = 'Character', dataFields = { 'cards.card_character' }, fn = formatIfPretty(isPretty, formatCharacter), visible = false }, { name = 'unit', header = 'Unit', dataFields = { 'cards.unit' }, fn = formatIfPretty(isPretty, formatUnit), visible = false }, { name = 'support unit', header = 'Support unit', dataFields = { 'cards.support_unit' }, fn = formatIfPretty(isPretty, formatUnit), default = , visible = false }, { name = 'attribute', header = 'Attribute', dataFields = { 'cards.attribute' }, fn = formatIfPretty(isPretty, formatAttribute), css = { ['min-width'] = 'calc(25px + 6em)' }, visible = false }, { name = 'rarity', header = 'Rarity', dataFields = { 'cards.rarity' }, fn = formatIfPretty(isPretty, formatRarity), visible = false }, { name = 'release date', header = 'Release date', dataFields = { 'cards.release_date' }, visible = false }, { name = 'status', header = 'Status', dataFields = { 'cards.status' }, visible = false }, { name = 'skill', header = 'Skill', dataFields = { 'card_skills.skill_type' }, css = { ['min-width'] = '5em' }, visible = false }, { name = 'acquire', header = 'Acquisition method(s)', dataFields = { 'cards.acquire' }, fn = formatAcquire, visible = false }, { name = 'event', header = 'Associated event', dataFields = { 'eventPageName, events.event_name' }, fn = formatLink, default = , visible = false }, { name = 'gacha', header = 'Debut gacha', dataFields = { 'gachaPageName', 'gachas.gacha_name' }, fn = formatLink, default = , visible = false }, -- { -- name = 'costume', -- header = 'Costume', -- dataFields = { 'costumePageName', 'Costumes.costume_name' }, -- fn = formatLink, -- default = , -- visible = false -- } } :setData(qb:query())

columns = ProcessingFns.stringToArray(',')(columns) if columns and #columns > 0 then for _, column in ipairs(columns) do datatable:setColumnVisibility(column, true) end end

return datatable:tostring() end

return p


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