More actions
Content deleted Content added
No edit summary |
No edit summary |
||
(47 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 |
local QueryBuilder = require('Module:QueryBuilder') |
||
local |
local Yesno = require('Module:Yesno') |
||
local |
local DisplayFns = require('Module:DisplayFunctions') |
||
local ProcessingFns = require('Module:ProcessingFunctions') |
|||
local VariablesLua = mw.ext.VariablesLua |
|||
local p = {} |
local p = {} |
||
local DisplayType = { |
|||
⚫ | |||
text = 'TEXT', |
|||
⚫ | |||
icon = 'ICON', |
|||
⚫ | |||
both = 'BOTH' |
|||
card_name) |
|||
} |
|||
⚫ | |||
if page and name then |
|||
⚫ | |||
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 18: | 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, |
|||
cards.card_id, |
|||
cards.thumbnail, |
|||
⚫ | |||
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( |
:addWhereList( |
||
' |
'cards.card_character', |
||
' |
'=', |
||
args[' |
args['character'], |
||
',', |
|||
'OR' |
|||
⚫ | |||
) |
|||
local datatable = DatatableBuilder.new() |
local datatable = DatatableBuilder.new() |
||
datatable |
datatable |
||
:setColumns{ |
:setColumns{ |
||
{ |
{ |
||
name = ' |
name = 'id', |
||
header = ' |
header = 'ID', |
||
dataFields = { ' |
dataFields = { 'cards.card_id' }, |
||
visible = false |
|||
⚫ | |||
}, |
|||
{ |
|||
name = 'thumbnail', |
|||
dataFields = { 'cards.thumbnail' }, |
|||
⚫ | |||
sortable = false |
sortable = false |
||
}, |
}, |
||
{ |
{ |
||
name = ' |
name = 'card', |
||
dataFields = { 'cardPageName', 'cards.card_name' }, |
|||
⚫ | |||
fn = formatLink |
|||
}, |
|||
func = formatText |
|||
{ |
|||
name = '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