Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Event cards: Difference between revisions

From Sekaipedia
Content added Content deleted
mNo edit summary
(cleaned some stuff up)
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 formatLink(page, name)
if page and name then
if page == nil or page == '' then return end
return string.format( '[[%s|%s]]', page, name )
return string.format('[[%s|%s]]', page, name or page)
end
return nil
end

local function formatLink( page )
if page then
return string.format( '[[%s]]', page )
end
return nil
end
end




local function makeBasicQueryBuilder( eventId )
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_name,
Cards.card_name,
Line 40: Line 29:
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(5)
qb
qb
:addWhere(
:addWhere('Cards.event_id', '=', eventId)
'Cards.event_id',
'=',
eventId
)


return qb
return qb
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 74: Line 59:
header = 'Card name',
header = 'Card name',
dataFields = { 'cardPageName', 'Cards.card_name' },
dataFields = { 'cardPageName', 'Cards.card_name' },
func = formatPageLink
func = formatLink
},
},
{
{
Line 93: Line 78:
},
},
}
}
:setData( data )
:setData(data)


return datatable
return datatable
Line 99: Line 84:




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


local eventId = args['event id'] or VariablesLua.var( 'event id' )
local eventId = args['event id'] or VariablesLua.var('event id')
local gachaId = args['debut gacha id']
local gachaId = args['debut gacha id']
local gachaCardsQuery = makeBasicQueryBuilder( eventId, 'Gacha' )
local gachaCardsQuery = makeBasicQueryBuilder(eventId, 'Gacha')
:addWhere(
:addWhere('Cards.gacha_id', '=', gachaId)
local shopCardsQuery = makeBasicQueryBuilder(eventId)
'Cards.gacha_id',
:addWhere('Cards.acquire', 'HOLDS', 'Event Shop')
'=',
gachaId
)
local shopCardsQuery = makeBasicQueryBuilder( eventId )
:addWhere(
'Cards.acquire',
'HOLDS',
'Event Shop'
)
local gachaCardsTable = makeTable( 'Gacha cards', gachaCardsQuery:query() )
local gachaCardsTable = makeTable('Gacha cards', gachaCardsQuery:query())
local shopCardsTable = makeTable( 'Event Shop cards', shopCardsQuery:query() )
local shopCardsTable = makeTable('Event Shop cards', shopCardsQuery:query())


return gachaCardsTable:tostring() .. shopCardsTable:tostring()
return gachaCardsTable:tostring() .. shopCardsTable:tostring()

Revision as of 04:41, 14 July 2022


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 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.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(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' },
				func = formatThumbnail,
				sortable = false
			},
			{
				name = 'name',
				header = 'Card name',
				dataFields = { 'cardPageName', 'Cards.card_name' },
				func = 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' },
				func = 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, 'Gacha')
		:addWhere('Cards.gacha_id', '=', gachaId)
	local shopCardsQuery = makeBasicQueryBuilder(eventId)
		:addWhere('Cards.acquire', '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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.