Content added Content deleted
mNo edit summary |
(use id instead of name) |
||
Line 6: | Line 6: | ||
local p = {} |
local p = {} |
||
local function formatThumbnail(thumbnail) |
local function formatThumbnail( thumbnail ) |
||
return string.format('[[File:%s|64px]]', thumbnail) |
return string.format( '[[File:%s|64px]]', thumbnail ) |
||
end |
end |
||
local function formatPageLink(page, name) |
local function formatPageLink( page, name ) |
||
if page and name then |
if page and name then |
||
return string.format('[[%s|%s]]', page, name) |
return string.format( '[[%s|%s]]', page, name ) |
||
end |
end |
||
Line 18: | Line 18: | ||
end |
end |
||
local function formatLink(page) |
local function formatLink( page ) |
||
if page then |
if page then |
||
return string.format('[[%s]]', page) |
return string.format( '[[%s]]', page ) |
||
end |
end |
||
Line 27: | Line 27: | ||
local function makeBasicQueryBuilder( |
local function makeBasicQueryBuilder( eventId ) |
||
local qb = QueryBuilder.new() |
local qb = QueryBuilder.new() |
||
qb |
qb |
||
:setTables('Cards, Card_Skills') |
:setTables( 'Cards, Card_Skills' ) |
||
:setFields([[ |
:setFields( [[ |
||
Cards._pageName = cardPageName, |
Cards._pageName = cardPageName, |
||
Cards.card_id, |
Cards.card_id, |
||
Line 41: | Line 41: | ||
Cards.status, |
Cards.status, |
||
Card_Skills.skill_type |
Card_Skills.skill_type |
||
]]) |
]] ) |
||
:setJoinOn([[ |
:setJoinOn( [[ |
||
Cards._pageID = Card_Skills._pageID |
Cards._pageID = Card_Skills._pageID |
||
]]) |
]] ) |
||
:addWhere('card_id', '>', 0) |
:addWhere( 'card_id', '>', 0 ) |
||
:setOrderBy('Cards.card_id ASC') |
:setOrderBy( 'Cards.card_id ASC' ) |
||
:setGroupBy('Cards._pageID') |
:setGroupBy( 'Cards._pageID' ) |
||
:setLimit(10) |
:setLimit( 10 ) |
||
qb |
qb |
||
:addWhere( |
:addWhere( |
||
'Cards. |
'Cards.event_id', |
||
'=', |
'=', |
||
eventId |
|||
) |
) |
||
Line 59: | Line 59: | ||
end |
end |
||
local function makeTable(caption, data) |
local function makeTable( caption, data ) |
||
local datatable = DatatableBuilder.new() |
local datatable = DatatableBuilder.new() |
||
datatable |
datatable |
||
:setCaption(caption) |
:setCaption( caption ) |
||
:setColumns{ |
:setColumns{ |
||
{ |
{ |
||
Line 109: | Line 109: | ||
}, |
}, |
||
} |
} |
||
:setData(data) |
:setData( data ) |
||
return datatable |
return datatable |
||
Line 115: | Line 115: | ||
function p.main(frame) |
function p.main( frame ) |
||
local args = getArgs(frame) |
local args = getArgs( frame ) |
||
local eventName = args['event name'] or VariablesLua.var( 'event name' ) |
local eventName = args['event name'] or VariablesLua.var( 'event name' ) |
||
Line 124: | Line 124: | ||
local gachaId = args['debut gacha id'] |
local gachaId = args['debut gacha id'] |
||
local gachaCardsQuery = makeBasicQueryBuilder( |
local gachaCardsQuery = makeBasicQueryBuilder( eventId, 'Gacha' ) |
||
:addWhere( |
:addWhere( |
||
'Cards. |
'Cards.gacha_id', |
||
'=', |
'=', |
||
gachaId |
|||
) |
) |
||
local shopCardsQuery = makeBasicQueryBuilder( |
local shopCardsQuery = makeBasicQueryBuilder( eventId ) |
||
:addWhere( |
:addWhere( |
||
'Cards.obtain', |
'Cards.obtain', |
Revision as of 01:51, 14 April 2022
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 VariablesLua = mw.ext.VariablesLua
local p = {}
local function formatThumbnail( thumbnail )
return string.format( '[[File:%s|64px]]', thumbnail )
end
local function formatPageLink( page, name )
if page and name then
return string.format( '[[%s|%s]]', page, name )
end
return nil
end
local function formatLink( page )
if page then
return string.format( '[[%s]]', page )
end
return nil
end
local function makeBasicQueryBuilder( eventId )
local qb = QueryBuilder.new()
qb
:setTables( 'Cards, Card_Skills' )
:setFields( [[
Cards._pageName = cardPageName,
Cards.card_id,
Cards.card_name,
Cards.thumbnail,
Cards.card_character,
Cards.attribute,
Cards.rarity,
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( 10 )
qb
:addWhere(
'Cards.event_id',
'=',
eventId
)
return qb
end
local function makeTable( caption, data )
local datatable = DatatableBuilder.new()
datatable
:setCaption( caption )
:setColumns{
{
name = 'id',
header = 'ID',
dataFields = { 'Cards.card_id' }
},
{
name = 'thumbnail',
header = 'Thumbnail',
dataFields = { 'Cards.thumbnail' },
func = formatThumbnail,
sortable = false
},
{
name = 'name',
header = 'Card name',
dataFields = { 'cardPageName', 'Cards.card_name' },
func = formatPageLink
},
{
name = 'character',
header = 'Character',
dataFields = { 'Cards.card_character' }
},
{
name = 'attribute',
header = 'Attribute',
dataFields = { 'Cards.attribute' }
},
{
name = 'rarity',
header = 'Rarity',
dataFields = { 'Cards.rarity' }
},
{
name = 'status',
header = 'Status',
dataFields = { 'Cards.status' }
},
{
name = 'skill',
header = 'Skill',
dataFields = { 'Card_Skills.skill_type' },
func = formatLink
},
}
:setData( data )
return datatable
end
function p.main( frame )
local args = getArgs( frame )
local eventName = args['event name'] or VariablesLua.var( 'event name' )
local eventId = args['event id'] or VariablesLua.var( 'event id' )
local gachaName = args['debut gacha name']
local gachaId = args['debut gacha id']
local gachaCardsQuery = makeBasicQueryBuilder( eventId, 'Gacha' )
:addWhere(
'Cards.gacha_id',
'=',
gachaId
)
local shopCardsQuery = makeBasicQueryBuilder( eventId )
:addWhere(
'Cards.obtain',
'HOLDS',
'Event Shop'
)
local gachaCardsTable = makeTable( 'Gacha cards', gachaCardsQuery:query() )
local shopCardsTable = makeTable( 'Event Shop cards', shopCardsQuery:query() )
return gachaCardsTable:tostring() .. shopCardsTable:tostring()
end
return p