Content added Content deleted
m (fix function call) |
mNo edit summary |
||
(16 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
local DatatableBuilder = require('Module:DatatableBuilder') |
local DatatableBuilder = require('Module:DatatableBuilder') |
||
local QueryBuilder = require('Module:QueryBuilder') |
local QueryBuilder = require('Module:QueryBuilder') |
||
⚫ | |||
local DisplayFns = require('Module:DisplayFunctions') |
|||
⚫ | |||
local p = {} |
local p = {} |
||
local function formatThumbnail(thumbnail) |
|||
return string.format('[[File:%s|64px]]', thumbnail) |
|||
end |
|||
local function formatLink(page, name) |
local function formatLink(page, name) |
||
if page |
if page == nil or page == '' then return end |
||
return string.format('[[%s|%s]]', page, name or page) |
|||
end |
|||
return nil |
|||
end |
end |
||
local function makeBasicQueryBuilder( |
local function makeBasicQueryBuilder(eventId) |
||
local qb = QueryBuilder.new() |
local qb = QueryBuilder.new() |
||
qb |
qb |
||
:setTables(' |
:setTables('cards, card_skills') |
||
:setFields([[ |
:setFields([[ |
||
cards._pageName = cardPageName, |
|||
cards.card_name, |
|||
cards.thumbnail, |
|||
cards.card_character, |
|||
cards.status, |
|||
⚫ | |||
Cards.attribute, |
|||
Cards.rarity, |
|||
Cards.status, |
|||
⚫ | |||
]]) |
]]) |
||
:setJoinOn([[ |
:setJoinOn([[ |
||
cards._pageID = card_skills._pageID |
|||
]]) |
]]) |
||
:addWhere('card_id', '>', 0) |
:addWhere('card_id', '>', 0) |
||
:setOrderBy(' |
:setOrderBy('cards.card_id ASC') |
||
:setGroupBy(' |
:setGroupBy('cards._pageID') |
||
:setLimit( |
:setLimit(5) |
||
qb |
qb |
||
:addWhere( |
:addWhere('cards.event_id', '=', eventId) |
||
'Cards.event', |
|||
'=', |
|||
eventName |
|||
) |
|||
return qb |
return qb |
||
Line 55: | Line 44: | ||
:setCaption(caption) |
:setCaption(caption) |
||
:setColumns{ |
:setColumns{ |
||
{ |
|||
name = 'id', |
|||
header = 'ID', |
|||
dataFields = { 'Cards.card_id' } |
|||
}, |
|||
{ |
{ |
||
name = 'thumbnail', |
name = 'thumbnail', |
||
header = 'Thumbnail', |
header = 'Thumbnail', |
||
dataFields = { ' |
dataFields = { 'cards.thumbnail' }, |
||
fn = DisplayFns.image('64px'), |
|||
sortable = false |
sortable = false |
||
}, |
}, |
||
Line 70: | Line 54: | ||
name = 'name', |
name = 'name', |
||
header = 'Card name', |
header = 'Card name', |
||
dataFields = { 'cardPageName', ' |
dataFields = { 'cardPageName', 'cards.card_name' }, |
||
fn = formatLink |
|||
}, |
}, |
||
{ |
{ |
||
name = 'character', |
name = 'character', |
||
header = 'Character', |
header = 'Character', |
||
dataFields = { ' |
dataFields = { 'cards.card_character' } |
||
}, |
|||
{ |
|||
name = 'attribute', |
|||
header = 'Attribute', |
|||
dataFields = { 'Cards.attribute' } |
|||
}, |
|||
{ |
|||
name = 'rarity', |
|||
header = 'Rarity', |
|||
dataFields = { 'Cards.rarity' } |
|||
}, |
}, |
||
{ |
{ |
||
name = 'status', |
name = 'status', |
||
header = 'Status', |
header = 'Status', |
||
dataFields = { ' |
dataFields = { 'cards.status' } |
||
}, |
}, |
||
{ |
{ |
||
name = 'skill', |
name = 'skill', |
||
header = 'Skill', |
header = 'Skill', |
||
dataFields = { ' |
dataFields = { 'card_skills.skill_type' }, |
||
fn = formatLink |
|||
}, |
}, |
||
} |
} |
||
Line 103: | Line 78: | ||
return datatable |
return datatable |
||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
local args = getArgs(frame) |
local args = getArgs(frame) |
||
local |
local eventId = args['event id'] or VariablesLua.var('event id') |
||
local |
local gachaId = args['debut gacha id'] |
||
local gachaName = args['gacha name'] |
|||
local gachaId = args['gacha id'] |
|||
local gachaCardsQuery = makeBasicQueryBuilder( |
local gachaCardsQuery = makeBasicQueryBuilder(eventId) |
||
:addWhere( |
:addWhere('cards.gacha_id', '=', gachaId) |
||
⚫ | |||
'Cards.banner', |
|||
:addWhere('cards.acquire', 'HOLDS', 'Event Exchange Shop') |
|||
'=', |
|||
gachaName |
|||
) |
|||
⚫ | |||
:addWhere( |
|||
'Cards.obtain', |
|||
'HOLDS', |
|||
'Event Shop' |
|||
) |
|||
local gachaCardsTable = makeTable( |
local gachaCardsTable = makeTable('Gacha cards', gachaCardsQuery:query()) |
||
local shopCardsTable = makeTable( |
local shopCardsTable = makeTable('Event Exchange Shop cards', shopCardsQuery:query()) |
||
return gachaCardsTable:tostring() .. shopCardsTable:tostring() |
return gachaCardsTable:tostring() .. shopCardsTable:tostring() |
||
end |
end |
||
Latest revision as of 17:03, 30 April 2023
This module depends on the following other modules: |
To generate {{Event cards}}, invoke using the main function.
local getArgs = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local QueryBuilder = require('Module:QueryBuilder')
local DisplayFns = require('Module:DisplayFunctions')
local VariablesLua = mw.ext.VariablesLua
local p = {}
local function formatLink(page, name)
if page == nil or page == '' then return end
return string.format('[[%s|%s]]', page, name or page)
end
local function makeBasicQueryBuilder(eventId)
local qb = QueryBuilder.new()
qb
:setTables('cards, card_skills')
:setFields([[
cards._pageName = cardPageName,
cards.card_name,
cards.thumbnail,
cards.card_character,
cards.status,
card_skills.skill_type
]])
:setJoinOn([[
cards._pageID = card_skills._pageID
]])
:addWhere('card_id', '>', 0)
:setOrderBy('cards.card_id ASC')
:setGroupBy('cards._pageID')
:setLimit(5)
qb
:addWhere('cards.event_id', '=', eventId)
return qb
end
local function makeTable(caption, data)
local datatable = DatatableBuilder.new()
datatable
:setCaption(caption)
:setColumns{
{
name = 'thumbnail',
header = 'Thumbnail',
dataFields = { 'cards.thumbnail' },
fn = DisplayFns.image('64px'),
sortable = false
},
{
name = 'name',
header = 'Card name',
dataFields = { 'cardPageName', 'cards.card_name' },
fn = formatLink
},
{
name = 'character',
header = 'Character',
dataFields = { 'cards.card_character' }
},
{
name = 'status',
header = 'Status',
dataFields = { 'cards.status' }
},
{
name = 'skill',
header = 'Skill',
dataFields = { 'card_skills.skill_type' },
fn = formatLink
},
}
:setData(data)
return datatable
end
function p.main(frame)
local args = getArgs(frame)
local eventId = args['event id'] or VariablesLua.var('event id')
local gachaId = args['debut gacha id']
local gachaCardsQuery = makeBasicQueryBuilder(eventId)
:addWhere('cards.gacha_id', '=', gachaId)
local shopCardsQuery = makeBasicQueryBuilder(eventId)
:addWhere('cards.acquire', 'HOLDS', 'Event Exchange Shop')
local gachaCardsTable = makeTable('Gacha cards', gachaCardsQuery:query())
local shopCardsTable = makeTable('Event Exchange Shop cards', shopCardsQuery:query())
return gachaCardsTable:tostring() .. shopCardsTable:tostring()
end
return p