Module:Event cards: Difference between revisions

From Sekaipedia
Content added Content deleted
(Created page with "local getArgs = require('Module:Arguments').getArgs local DatatableBuilder = require('Module:DatatableBuilder') local QueryBuilder = require('Module:QueryBuilder') local VariablesLua = mw.ext.VariablesLua local function formatThumbnail(thumbnail) return string.format('64px', thumbnail) end local function formatLink(page, name) if page and name then return string.format('%s', page, name) end return nil end local function quer...")
 
No edit summary
Line 3: Line 3:
local QueryBuilder = require('Module:QueryBuilder')
local QueryBuilder = require('Module:QueryBuilder')
local VariablesLua = mw.ext.VariablesLua
local VariablesLua = mw.ext.VariablesLua

local p = {}


local function formatThumbnail(thumbnail)
local function formatThumbnail(thumbnail)
Line 120: Line 122:
return tostring(gachaCardsTable) .. tostring(shopCardsTable)
return tostring(gachaCardsTable) .. tostring(shopCardsTable)
end
end

return p

Revision as of 07:18, 13 April 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 and name then
		return string.format('[[%s|%s]]', page, name)
	end
	
	return nil
end

local function query(eventName, acquire)
	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,
			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',
			'=',
			eventName
		)
		:addWhere(
			'Cards.obtain',
			'HOLDS',
			acquire
		)
		
	return qb:query()
end

local function makeTable(data)
	local datatable = DatatableBuilder.new()
	datatable
		: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 = formatLink
			},
			{
				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' }
			},
		}
		: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 gachaCardsData = query(eventName, 'Gacha')
	local shopCardsData  = query(eventName, 'Event Shop')
	
	local gachaCardsTable = makeTable(gachaCardsData)
	local shopCardsTable = makeTable(shopCardsData)

	return tostring(gachaCardsTable) .. tostring(shopCardsTable)
end

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