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

Module:Side story datatable: Difference between revisions

From Sekaipedia
Content deleted Content added
Phantommarigold (talk | contribs)
No edit summary
Phantommarigold (talk | contribs)
No edit summary
 
(35 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 DatatableBuilder = require('Module:DatatableBuilder')
local DatatableBuilder = require('Module:DatatableBuilder')
local DisplayFns = require('Module:DisplayFunctions')
local QueryBuilder = require('Module:QueryBuilder')
local QueryBuilder = require('Module:QueryBuilder')
local Yesno = require('Module:Yesno')

local DisplayFns = require('Module:DisplayFunctions')
local ProcessingFns = require('Module:ProcessingFunctions')

local VariablesLua = mw.ext.VariablesLua


local p = {}
local p = {}


local DisplayType = {
local function formatText(card_name, tabs)
text = 'TEXT',
return string.format('[[%s]] {{Card tabs alt|%s}}', card_name, card_name)
icon = 'ICON',
both = 'BOTH'
}

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

local function story1(has_side_story_one, page)
if has_side_story_one == true then
return string.format('[[%s/Side_Story_1|Side Story 1]]', page)
end
return nil
end
end


Line 14: Line 35:
local columns = args['columns']
local columns = args['columns']
local displayType = DisplayType[args['display type']] or DisplayType.text
local qb = QueryBuilder.new()
local qb = QueryBuilder.new()
qb
qb
:setTables('cards')
:setTables('cards,card_side_stories')
:setFields([[
:setFields([[
cards._pageName = cardPageName,
card_name,
thumbnail,
cards.card_id,
card_character,
cards.thumbnail,
cards.card_name,
rarity
MAX(IF(card_side_stories.story = 1, true, false))=has_side_story_one
MAX(IF(card_side_stories.story = 2, true, false))=has_side_story_two
]])
]])
:addWhereIsNotNull( 'card_side_stories._pageID' )
:setJoinOn('cards.card_id = card_side_stories.card_id')
:setGroupBy('cards.card_id')
qb
:addWhereList(
'cards.card_id',
'=',
args['card ids'],
',',
'OR'
)
:addWhere('rarity', '=', args['rarity'])
:addWhere('rarity', '=', args['rarity'])
:addWhereList(
:addWhere('character', '=', args['card_character'])
'cards.card_character',
'=',
args['character'],
',',
'OR'
)

local datatable = DatatableBuilder.new()
local datatable = DatatableBuilder.new()
datatable
datatable
:setColumns{
:setColumns{
{
{
name = 'card',
name = 'id',
header = 'Card',
header = 'ID',
dataFields = { 'thumbnail' },
dataFields = { 'cards.card_id' },
visible = false
func = DisplayFns.image('75px'),
},
{
name = 'thumbnail',
dataFields = { 'cards.thumbnail' },
fn = DisplayFns.image('64px'),
sortable = false
sortable = false
},
},
{
{
name = 'side stories',
name = 'card',
dataFields = { 'cardPageName', 'cards.card_name' },
header = 'Side stories',
dataFields = { 'card_name' },
fn = formatLink
},
func = formatText
{
name = 'side story 1',
header = 'Side Story 1',
dataFields = { 'has_side_story_one', 'cardPageName' },
fn = story1,
visible = false
}
}
}
}
:setData(qb:query())
: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()
return datatable:tostring()
end
end

return p
return p

Latest revision as of 08:45, 13 July 2024

Documentation for this module may be created at Module:Side story datatable/doc

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 VariablesLua = mw.ext.VariablesLua

local p = {}

local DisplayType = {
	text = 'TEXT',
	icon = 'ICON',
	both = 'BOTH'
}

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

local function story1(has_side_story_one, page)
	if has_side_story_one == true then
		return string.format('[[%s/Side_Story_1|Side Story 1]]', page)
	end
	return nil
end

function p.main(frame)
	local args = getArgs(frame)
	
	local columns = args['columns']
	local displayType = DisplayType[args['display type']] or DisplayType.text
	
	local qb = QueryBuilder.new()
	qb
		:setTables('cards,card_side_stories')
		:setFields([[
			cards._pageName = cardPageName,
			cards.card_id,
			cards.thumbnail,
			cards.card_name,
			MAX(IF(card_side_stories.story = 1, true, false))=has_side_story_one
			MAX(IF(card_side_stories.story = 2, true, false))=has_side_story_two
		]])
		:addWhereIsNotNull( 'card_side_stories._pageID' )
		:setJoinOn('cards.card_id = card_side_stories.card_id')
		:setGroupBy('cards.card_id')
	qb
		:addWhereList(
			'cards.card_id',
			'=',
			args['card ids'],
			',',
			'OR'
		)
		:addWhere('rarity', '=', args['rarity'])
		:addWhereList(
			'cards.card_character',
			'=',
			args['character'],
			',',
			'OR'
		)

	local datatable = DatatableBuilder.new()
	datatable
		:setColumns{
			{
				name = 'id',
				header = 'ID',
				dataFields = { 'cards.card_id' },
				visible = false
			},
			{
				name = 'thumbnail',
				dataFields = { 'cards.thumbnail' },
				fn = DisplayFns.image('64px'),
				sortable = false
			},
			{
				name = 'card',
				dataFields = { 'cardPageName', 'cards.card_name' },
				fn = formatLink
			},
			{
				name = 'side story 1',
				header = 'Side Story 1',
				dataFields = { 'has_side_story_one', 'cardPageName' },
				fn = story1,
				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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.