Content added Content deleted
mNo edit summary |
mNo edit summary |
||
(19 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local getArgs = require('Module:Arguments').getArgs |
local getArgs = require('Module:Arguments').getArgs |
||
local AskBuilder = require('Module:AskBuilder') |
|||
local DatatableBuilder = require('Module:DatatableBuilder') |
local DatatableBuilder = require('Module:DatatableBuilder') |
||
local QueryBuilder = require('Module:QueryBuilder') |
local QueryBuilder = require('Module:QueryBuilder') |
||
Line 12: | Line 11: | ||
local ricon = require('Module:Rarity icon')._main |
local ricon = require('Module:Rarity icon')._main |
||
local uicon = require('Module:Unit icon')._main |
local uicon = require('Module:Unit icon')._main |
||
local VariablesLua = mw.ext.VariablesLua |
|||
local p = {} |
local p = {} |
||
Line 20: | Line 21: | ||
both = 'BOTH' |
both = 'BOTH' |
||
} |
} |
||
local function formatName(cardPage, cardName) |
|||
return string.format('[[%s|%s]]', cardPage, cardName) |
|||
end |
|||
local function formatAttribute(attribute) |
local function formatAttribute(attribute) |
||
Line 58: | Line 55: | ||
if rarity == nil or rarity == '' then return nil end |
if rarity == nil or rarity == '' then return nil end |
||
return ricon({ rarity, size='25px' }) |
return ricon({ rarity, size = '25px' }) |
||
end |
end |
||
Line 75: | Line 72: | ||
local function formatIfPretty(pretty, fn) |
local function formatIfPretty(pretty, fn) |
||
if pretty == true then |
if pretty == true then return fn end |
||
return fn |
|||
end |
|||
return nil |
return nil |
||
end |
|||
local function columnToProperty(column) |
|||
local map = { |
|||
['id'] = 'Card ID', |
|||
['character'] = 'Character', |
|||
['unit'] = 'Unit', |
|||
['support unit'] = 'Support unit', |
|||
['attribute'] = 'Attribute', |
|||
['rarity'] = 'Rarity', |
|||
['date'] = 'Release date', |
|||
['status'] = 'Card status' |
|||
} |
|||
return map[column] |
|||
end |
|||
local function isColumn(arg) |
|||
local columns = { |
|||
'__page', |
|||
'id', |
|||
'character', |
|||
'unit', |
|||
'support unit', |
|||
'attribute', |
|||
'rarity', |
|||
'date', |
|||
'status' |
|||
} |
|||
for _,column in ipairs(columns) do |
|||
if column == arg then |
|||
return true |
|||
end |
|||
end |
|||
return false |
|||
end |
end |
||
Line 129: | Line 86: | ||
local qb = QueryBuilder.new() |
local qb = QueryBuilder.new() |
||
qb |
qb |
||
:setTables(' |
:setTables('cards, card_skills, events, gachas') |
||
:setFields([[ |
: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, |
card_skills.skill_type, |
||
events._pageName = eventPageName, |
|||
events.event_id, |
|||
events.event_name, |
|||
gachas._pageName = gachaPageName, |
gachas._pageName = gachaPageName, |
||
gachas.gacha_id, |
gachas.gacha_id, |
||
gachas.gacha_name, |
gachas.gacha_name, |
||
Costumes._pageName = costumePageName, |
|||
Costumes.costume_name, |
|||
]]) |
]]) |
||
:setJoinOn([[ |
:setJoinOn([[ |
||
cards._pageID = card_skills._pageID, |
|||
cards.event_id = events.event_id, |
|||
cards.gacha_id = gachas.gacha_id |
|||
]]) |
]]) |
||
:addWhere('card_id', '>', 0) |
:addWhere('card_id', '>', 0) |
||
:setOrderBy(' |
:setOrderBy('cards.card_id ASC') |
||
:setGroupBy(' |
:setGroupBy('cards._pageID') |
||
:setLimit(args['limit'] or 500) |
:setLimit(args['limit'] or 500) |
||
:setOffset(args['offset']) |
:setOffset(args['offset']) |
||
qb |
qb |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.card_id', |
||
'=', |
'=', |
||
args['card ids'], |
args['card ids'], |
||
Line 170: | Line 128: | ||
'OR' |
'OR' |
||
) |
) |
||
:addWhere('cards.card_id', '>=', args['min card id']) |
|||
:addWhere('cards.card_id', '<=', args['max card id']) |
|||
:addWhereList( |
:addWhereList( |
||
' |
'cards.card_character', |
||
'=', |
'=', |
||
args['characters'], |
args['characters'], |
||
Line 178: | Line 138: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.unit', |
||
'=', |
'=', |
||
args['units'], |
args['units'], |
||
Line 185: | Line 145: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.support_unit', |
||
'=', |
'=', |
||
args['support units'], |
args['support units'], |
||
Line 192: | Line 152: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.attribute', |
||
'=', |
'=', |
||
args['attributes'], |
args['attributes'], |
||
Line 199: | Line 159: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.rarity', |
||
'=', |
'=', |
||
args['rarities'], |
args['rarities'], |
||
Line 205: | Line 165: | ||
'OR' |
'OR' |
||
) |
) |
||
:addWhere(' |
:addWhere('cards.release_date', '>=', args['released after']) |
||
:addWhere(' |
:addWhere('cards.release_date', '<=', args['released before']) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.status', |
||
'=', |
'=', |
||
args['statuses'], |
args['statuses'], |
||
Line 215: | Line 175: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.acquire', |
||
'HOLDS', |
'HOLDS', |
||
args['acquire'], |
args['acquire'], |
||
Line 229: | Line 189: | ||
) |
) |
||
:addWhereList( |
:addWhereList( |
||
' |
'cards.event', |
||
'=', |
'=', |
||
args['events'], |
args['events'], |
||
Line 242: | Line 202: | ||
name = 'id', |
name = 'id', |
||
header = 'ID', |
header = 'ID', |
||
dataFields = { ' |
dataFields = { 'cards.card_id' }, |
||
visible = false |
visible = false |
||
}, |
}, |
||
Line 248: | Line 208: | ||
name = 'thumbnail', |
name = 'thumbnail', |
||
header = 'Thumbnail', |
header = 'Thumbnail', |
||
dataFields = { ' |
dataFields = { 'cards.thumbnail' }, |
||
fn = DisplayFns.image('64px'), |
fn = DisplayFns.image('64px'), |
||
sortable = false |
sortable = false |
||
Line 255: | Line 215: | ||
name = 'name', |
name = 'name', |
||
header = 'Card name', |
header = 'Card name', |
||
dataFields = { 'cardPageName', ' |
dataFields = { 'cardPageName', 'cards.card_name' }, |
||
css = { ['width'] = '30em' }, |
css = { ['width'] = '30em' }, |
||
fn = |
fn = formatLink |
||
}, |
}, |
||
{ |
{ |
||
name = 'character', |
name = 'character', |
||
header = 'Character', |
header = 'Character', |
||
dataFields = { ' |
dataFields = { 'cards.card_character' }, |
||
fn = formatIfPretty(isPretty, formatCharacter), |
fn = formatIfPretty(isPretty, formatCharacter), |
||
visible = false |
visible = false |
||
Line 269: | Line 229: | ||
name = 'unit', |
name = 'unit', |
||
header = 'Unit', |
header = 'Unit', |
||
dataFields = { ' |
dataFields = { 'cards.unit' }, |
||
fn = formatIfPretty(isPretty, formatUnit), |
fn = formatIfPretty(isPretty, formatUnit), |
||
visible = false |
visible = false |
||
Line 276: | Line 236: | ||
name = 'support unit', |
name = 'support unit', |
||
header = 'Support unit', |
header = 'Support unit', |
||
dataFields = { ' |
dataFields = { 'cards.support_unit' }, |
||
fn = formatIfPretty(isPretty, formatUnit), |
fn = formatIfPretty(isPretty, formatUnit), |
||
default = '', |
default = '', |
||
Line 284: | Line 244: | ||
name = 'attribute', |
name = 'attribute', |
||
header = 'Attribute', |
header = 'Attribute', |
||
dataFields = { ' |
dataFields = { 'cards.attribute' }, |
||
fn = formatIfPretty(isPretty, formatAttribute), |
fn = formatIfPretty(isPretty, formatAttribute), |
||
css = { ['min-width'] = 'calc(25px + 6em)' }, |
css = { ['min-width'] = 'calc(25px + 6em)' }, |
||
Line 292: | Line 252: | ||
name = 'rarity', |
name = 'rarity', |
||
header = 'Rarity', |
header = 'Rarity', |
||
dataFields = { ' |
dataFields = { 'cards.rarity' }, |
||
fn = formatIfPretty(isPretty, formatRarity), |
fn = formatIfPretty(isPretty, formatRarity), |
||
visible = false |
visible = false |
||
}, |
}, |
||
{ |
{ |
||
name = 'date', |
name = 'release date', |
||
header = 'Release date', |
header = 'Release date', |
||
dataFields = { ' |
dataFields = { 'cards.release_date' }, |
||
visible = false |
visible = false |
||
}, |
}, |
||
Line 305: | Line 265: | ||
name = 'status', |
name = 'status', |
||
header = 'Status', |
header = 'Status', |
||
dataFields = { ' |
dataFields = { 'cards.status' }, |
||
visible = false |
visible = false |
||
}, |
}, |
||
Line 318: | Line 278: | ||
name = 'acquire', |
name = 'acquire', |
||
header = 'Acquisition method(s)', |
header = 'Acquisition method(s)', |
||
dataFields = { ' |
dataFields = { 'cards.acquire' }, |
||
fn = formatAcquire, |
fn = formatAcquire, |
||
visible = false |
visible = false |
||
Line 325: | Line 285: | ||
name = 'event', |
name = 'event', |
||
header = 'Associated event', |
header = 'Associated event', |
||
dataFields = { ' |
dataFields = { 'eventPageName, events.event_name' }, |
||
fn = formatLink, |
|||
default = '', |
default = '', |
||
visible = false |
visible = false |
||
Line 337: | Line 298: | ||
visible = false |
visible = false |
||
}, |
}, |
||
{ |
|||
name = 'costume', |
|||
header = 'Costume', |
|||
dataFields = { 'costumePageName', 'Costumes.costume_name' }, |
|||
fn = formatLink, |
|||
default = '', |
|||
visible = false |
|||
} |
|||
} |
|||
:setData({}) |
|||
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() .. |
|||
'<p>Data table has been disabled, see our [https://blog.sekaipedia.org/2023/04/unexpected-disruption-due-to-extension.html first] and [https://blog.sekaipedia.org/2023/04/acknowledgements-on-continued-wiki.html second] blog posts for more details.</p>' |
|||
.. |
|||
'<p>Consider using [[:Category:Cards]] instead.</p>' |
|||
end |
|||
local function defineDatatable(columns, isPretty) |
|||
local datatable = DatatableBuilder.new() |
|||
datatable |
|||
:setColumns{ |
|||
{ |
|||
name = 'id', |
|||
header = 'ID', |
|||
dataFields = { 'id' }, |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'thumbnail', |
|||
header = 'Thumbnail', |
|||
dataFields = { 'thumbnail' }, |
|||
fn = DisplayFns.image('64px'), |
|||
sortable = false |
|||
}, |
|||
{ |
|||
name = '__page', |
|||
header = 'Card name', |
|||
dataFields = { '__page', 'card name' }, |
|||
css = { ['width'] = '30em' }, |
|||
fn = formatName |
|||
}, |
|||
{ |
|||
name = 'character', |
|||
header = 'Character', |
|||
dataFields = { 'character' }, |
|||
fn = formatIfPretty(isPretty, formatCharacter), |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'unit', |
|||
header = 'Unit', |
|||
dataFields = { 'unit' }, |
|||
fn = formatIfPretty(isPretty, formatUnit), |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'support unit', |
|||
header = 'Support unit', |
|||
dataFields = { 'support unit' }, |
|||
fn = formatIfPretty(isPretty, formatUnit), |
|||
default = '', |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'attribute', |
|||
header = 'Attribute', |
|||
dataFields = { 'attribute' }, |
|||
fn = formatIfPretty(isPretty, formatAttribute), |
|||
css = { ['min-width'] = 'calc(25px + 6em)' }, |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'rarity', |
|||
header = 'Rarity', |
|||
dataFields = { 'rarity' }, |
|||
fn = formatIfPretty(isPretty, formatRarity), |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'date', |
|||
header = 'Release date', |
|||
dataFields = { 'date' }, |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'status', |
|||
header = 'Status', |
|||
dataFields = { 'status' }, |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'skill', |
|||
header = 'Skill', |
|||
dataFields = { 'skill' }, |
|||
css = { ['min-width'] = '5em' }, |
|||
visible = false |
|||
}, |
|||
{ |
|||
name = 'Acquisition method', |
|||
header = 'Acquisition method(s)', |
|||
dataFields = { 'Acquisition method' }, |
|||
fn = formatAcquire, |
|||
visible = false |
|||
}, |
|||
-- { |
|||
-- name = 'event', |
|||
-- header = 'Associated event', |
|||
-- dataFields = { 'Cards.event' }, |
|||
-- default = '', |
|||
-- visible = false |
|||
-- }, |
|||
-- { |
|||
-- name = 'gacha', |
|||
-- header = 'Debut gacha', |
|||
-- dataFields = { 'gachaPageName', 'gachas.gacha_name' }, |
|||
-- fn = formatLink, |
|||
-- default = '', |
|||
-- visible = false |
|||
-- }, |
|||
-- { |
-- { |
||
-- name = 'costume', |
-- name = 'costume', |
||
Line 472: | Line 307: | ||
-- } |
-- } |
||
} |
} |
||
:setData(qb:query()) |
|||
columns = ProcessingFns.stringToArray(',')(columns) |
|||
if columns and #columns > 0 then |
if columns and #columns > 0 then |
||
for _, column in ipairs(columns) do |
for _, column in ipairs(columns) do |
||
Line 479: | Line 316: | ||
end |
end |
||
return datatable |
return datatable:tostring() |
||
end |
|||
function p.header(frame) |
|||
local args = getArgs(frame) |
|||
local columns = args['columns'] |
|||
columns = ProcessingFns.stringToArray(',')(columns) |
|||
for column,_ in pairs(args) do |
|||
if isColumn(column) then |
|||
table.insert(columns, column) |
|||
end |
|||
end |
|||
local datatable = defineDatatable(columns, true) |
|||
if args['test'] then |
|||
return mw.text.jsonEncode(args) |
|||
end |
|||
return tostring(datatable:renderHeader()) |
|||
end |
|||
function p.row(frame) |
|||
local args = getArgs(frame) |
|||
local columns = {} |
|||
for column,_ in pairs(args) do |
|||
if isColumn(column) then |
|||
table.insert(columns, column) |
|||
end |
|||
end |
|||
local datatable = defineDatatable(columns, true) |
|||
return tostring(datatable:renderRow(args)) |
|||
end |
|||
function p.smw(frame) |
|||
local args = getArgs(frame) |
|||
local columns = args['columns'] |
|||
columns = ProcessingFns.stringToArray(',')(columns) |
|||
local properties = { |
|||
'=__page', |
|||
'Display name=card name', |
|||
'Card thumbnail=thumbnail' |
|||
} |
|||
for _,column in ipairs(columns) do |
|||
local property = columnToProperty(column) |
|||
if property then |
|||
table.insert( |
|||
properties, |
|||
string.format('%s=%s', property, column) |
|||
) |
|||
end |
|||
end |
|||
local ab = AskBuilder.new() |
|||
ab |
|||
:setCategory('Cards') |
|||
:setProperties(table.concat(properties, ',')) |
|||
:addWhere('Card ID', '>', 0) |
|||
:setOrderBy('Card ID', 'ASC') |
|||
:setLimit(args['limit'] or 700) |
|||
:setOffset(args['offset']) |
|||
ab |
|||
:addWhereList( |
|||
'Card ID', |
|||
'=', |
|||
args['card ids'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Character', |
|||
'=', |
|||
args['characters'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Unit', |
|||
'=', |
|||
args['units'], |
|||
';', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Support unit', |
|||
'=', |
|||
args['support units'], |
|||
';', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Attribute', |
|||
'=', |
|||
args['attributes'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Rarity', |
|||
'=', |
|||
args['rarities'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhere('Release date', '>=', args['released after']) |
|||
:addWhere('Release date', '<=', args['released before']) |
|||
:addWhereList( |
|||
'Card status', |
|||
'=', |
|||
args['statuses'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Acquisition method', |
|||
'HOLDS', |
|||
args['acquire'], |
|||
',', |
|||
'OR' |
|||
) |
|||
:addWhereList( |
|||
'Skill', |
|||
'=', |
|||
args['skills'], |
|||
';', |
|||
'OR' |
|||
) |
|||
ab:setPlainlistOptions(nil, 'Card datatable row', nil) |
|||
return '<table class="wikitable">' .. p.header(frame) .. ab:ask(frame) .. '</table>' |
|||
end |
end |
||
Latest revision as of 23:03, 30 April 2023
This module depends on the following other modules: |
To generate {{Card datatable}}, invoke using the main function.
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|%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