More actions
Content deleted Content added
m force ignore song image as page image |
mNo edit summary Tag: Undo |
||
(19 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
------------------------ |
------------------------ |
||
local getArgs = require('Module:Arguments').getArgs |
local getArgs = require('Module:Arguments').getArgs |
||
local InfoboxBuilder = require('Module:InfoboxBuilder |
local InfoboxBuilder = require('Module:InfoboxBuilder') |
||
⚫ | |||
local ProcessingFns = require('Module:ProcessingFunctions') |
|||
local QueryBuilder = require('Module:QueryBuilder') |
local QueryBuilder = require('Module:QueryBuilder') |
||
⚫ | |||
local aicon = require('Module:Attribute icon')._main |
local aicon = require('Module:Attribute icon')._main |
||
local cicon = require('Module:Character icon')._main |
local cicon = require('Module:Character icon')._main |
||
Line 12: | Line 13: | ||
local p = {} |
local p = {} |
||
local function formatImage(image) |
|||
return string.format("[[File:%s|220px]]", image) |
|||
end |
|||
local function formatCharacters(characters) |
local function formatCharacters(characters) |
||
if characters == nil then return nil end |
|||
⚫ | |||
local resArr = {} |
local resArr = {} |
||
for _, character in ipairs(characters) do |
for _, character in ipairs(characters) do |
||
Line 26: | Line 26: | ||
local function formatAttribute(attribute) |
local function formatAttribute(attribute) |
||
if attribute == nil then return nil end |
|||
return string.format( |
return string.format( |
||
"%s %s", |
"%s %s", |
||
aicon({ attribute, size = '30px' }), |
aicon({ attribute, size = '30px' }) or '', |
||
attribute |
attribute |
||
) |
) |
||
Line 34: | Line 36: | ||
local function formatEventSong(songId) |
local function formatEventSong(songId) |
||
if songId == nil or songId == '' then return nil end |
|||
local qb = QueryBuilder.new() |
local qb = QueryBuilder.new() |
||
qb |
qb |
||
:setTables(' |
:setTables('songs') |
||
:setFields([[ |
:setFields([[ |
||
_pageName, |
_pageName, |
||
song_name, |
song_name, |
||
jacket |
|||
]]) |
]]) |
||
:addWhere('song_id', '=', songId) |
:addWhere('song_id', '=', songId) |
||
Line 55: | Line 59: | ||
}) |
}) |
||
:wikitext(string.format( |
:wikitext(string.format( |
||
'[[File:%s| |
'[[File:%s|164px|center|class=notpageimage|link=%s]][[%s|%s]]', |
||
result. |
result.jacket, |
||
result._pageName, |
result._pageName, |
||
result._pageName, |
result._pageName, |
||
Line 77: | Line 81: | ||
{ name = 'event id' }, |
{ name = 'event id' }, |
||
{ name = 'event name', default = mw.title.getCurrentTitle().text }, |
{ name = 'event name', default = mw.title.getCurrentTitle().text }, |
||
{ name = 'image' |
{ name = 'image' }, |
||
{ name = 'japanese' }, |
{ name = 'japanese' }, |
||
{ name = 'romaji' }, |
{ name = 'romaji' }, |
||
Line 84: | Line 88: | ||
{ name = 'unit focus' }, |
{ name = 'unit focus' }, |
||
{ name = 'type' }, |
{ name = 'type' }, |
||
{ name = 'characters', |
{ name = 'characters', fn = ProcessingFns.stringToArray(';') }, |
||
{ name = 'attribute' |
{ name = 'attribute' }, |
||
{ name = 'event song id' |
{ name = 'event song id' } |
||
} |
} |
||
:setArgs(args) |
:setArgs(args) |
||
Line 93: | Line 97: | ||
['type'] = { |
['type'] = { |
||
['Marathon'] = 'Marathon events', |
['Marathon'] = 'Marathon events', |
||
['Cheerful Carnival'] = 'Cheerful Carnival events' |
['Cheerful Carnival'] = 'Cheerful Carnival events', |
||
['World Link'] = 'World Link events' |
|||
}, |
}, |
||
['unit focus'] = { |
['unit focus'] = { |
||
Line 109: | Line 114: | ||
['Happy'] = 'Happy events', |
['Happy'] = 'Happy events', |
||
['Mysterious'] = 'Mysterious events', |
['Mysterious'] = 'Mysterious events', |
||
['Pure'] = 'Pure events' |
['Pure'] = 'Pure events', |
||
['All'] = 'Mixed Attribute events' |
|||
} |
} |
||
}) |
}) |
||
Line 117: | Line 123: | ||
:addHeader({ tag = 'argth', content = 'event name' }) |
:addHeader({ tag = 'argth', content = 'event name' }) |
||
:addImage({ |
:addImage({ |
||
{ tag = 'argtd', content = 'image' }, |
{ tag = 'argtd', content = 'image', fn = DisplayFns.image('220px') }, |
||
}) |
}) |
||
:addRow( |
:addRow( |
||
Line 157: | Line 163: | ||
:addRow({ |
:addRow({ |
||
{ tag = 'th', content = 'Bonus characters' }, |
{ tag = 'th', content = 'Bonus characters' }, |
||
{ tag = 'argtd', content = 'characters' } |
{ tag = 'argtd', content = 'characters', fn = formatCharacters } |
||
}) |
}) |
||
:addRow({ |
:addRow({ |
||
{ tag = 'th', content = 'Bonus attribute' }, |
{ tag = 'th', content = 'Bonus attribute' }, |
||
{ tag = 'argtd', content = 'attribute' } |
{ tag = 'argtd', content = 'attribute', fn = formatAttribute } |
||
}) |
}) |
||
:addHeader( |
:addHeader( |
||
Line 169: | Line 175: | ||
:addRow( |
:addRow( |
||
{ |
{ |
||
{ |
|||
⚫ | |||
tag = 'argtd', |
|||
content = 'event song id', |
|||
fn = formatEventSong, |
|||
⚫ | |||
} |
|||
}, |
}, |
||
{ hideIfEmpty = { 'event song id' } } |
{ hideIfEmpty = { 'event song id' } } |
||
) |
) |
||
⚫ | |||
⚫ | |||
⚫ | |||
if mw.title.getCurrentTitle().namespace == 0 then |
if mw.title.getCurrentTitle().namespace == 0 then |
||
categories = |
categories = '[[Category:Events]]' .. infobox:getCategories() |
||
local rawArgs = infobox:getRawArgs() |
local rawArgs = infobox:getRawArgs() |
||
Line 183: | Line 193: | ||
VariablesLua.vardefine('event name', rawArgs['event name']) |
VariablesLua.vardefine('event name', rawArgs['event name']) |
||
VariablesLua.vardefine('start date', rawArgs['start']) |
VariablesLua.vardefine('start date', rawArgs['start']) |
||
VariablesLua.vardefine('end date', rawArgs['end']) |
|||
VariablesLua.vardefine('characters', rawArgs['characters']) |
VariablesLua.vardefine('characters', rawArgs['characters']) |
||
VariablesLua.vardefine('attribute', rawArgs['attribute']) |
VariablesLua.vardefine('attribute', rawArgs['attribute']) |
Latest revision as of 21:17, 22 January 2024
This module depends on the following other modules: |
This module uses the following Cargo tables: |
To generate {{Infobox event}}, invoke using the main function.
--------------------------
-- Module for [[Template:Infobox event]]
------------------------
local getArgs = require('Module:Arguments').getArgs
local InfoboxBuilder = require('Module:InfoboxBuilder')
local DisplayFns = require('Module:DisplayFunctions')
local ProcessingFns = require('Module:ProcessingFunctions')
local QueryBuilder = require('Module:QueryBuilder')
local aicon = require('Module:Attribute icon')._main
local cicon = require('Module:Character icon')._main
local VariablesLua = mw.ext.VariablesLua
local p = {}
local function formatCharacters(characters)
if characters == nil then return nil end
local resArr = {}
for _, character in ipairs(characters) do
table.insert(resArr, cicon({ character, size = '30px' }))
end
return table.concat(resArr, " ")
end
local function formatAttribute(attribute)
if attribute == nil then return nil end
return string.format(
"%s %s",
aicon({ attribute, size = '30px' }) or '',
attribute
)
end
local function formatEventSong(songId)
if songId == nil or songId == '' then return nil end
local qb = QueryBuilder.new()
qb
:setTables('songs')
:setFields([[
_pageName,
song_name,
jacket
]])
:addWhere('song_id', '=', songId)
local results = qb:query()
if #results > 0 then
local result = results[1]
local root = mw.html.create('div')
:css({
['display'] = 'flex',
['flex-direction'] = 'column',
['gap'] = '10px'
})
:wikitext(string.format(
'[[File:%s|164px|center|class=notpageimage|link=%s]][[%s|%s]]',
result.jacket,
result._pageName,
result._pageName,
result.song_name
))
return tostring(root)
end
return nil
end
function p.main(frame)
local args = getArgs(frame)
local infobox = InfoboxBuilder.new()
infobox:setName('Infobox event')
:setParams{
{ name = 'event id' },
{ name = 'event name', default = mw.title.getCurrentTitle().text },
{ name = 'image' },
{ name = 'japanese' },
{ name = 'romaji' },
{ name = 'start' },
{ name = 'end' },
{ name = 'unit focus' },
{ name = 'type' },
{ name = 'characters', fn = ProcessingFns.stringToArray(';') },
{ name = 'attribute' },
{ name = 'event song id' }
}
:setArgs(args)
:processArgs()
:setCategoryMap({
['type'] = {
['Marathon'] = 'Marathon events',
['Cheerful Carnival'] = 'Cheerful Carnival events',
['World Link'] = 'World Link events'
},
['unit focus'] = {
['VIRTUAL SINGER'] = 'VIRTUAL SINGER events',
['Leo/need'] = 'Leo/need events',
['MORE MORE JUMP!'] = 'MORE MORE JUMP! events',
['Vivid BAD SQUAD'] = 'Vivid BAD SQUAD events',
['Wonderlands×Showtime'] = 'Wonderlands×Showtime events',
['25-ji, Nightcord de.'] = '25-ji, Nightcord de. events',
['Mixed'] = 'Mixed events'
},
['attribute'] = {
['Cool'] = 'Cool events',
['Cute'] = 'Cute events',
['Happy'] = 'Happy events',
['Mysterious'] = 'Mysterious events',
['Pure'] = 'Pure events',
['All'] = 'Mixed Attribute events'
}
})
infobox
:addHeader({ tag = 'argth', content = 'event name' })
:addImage({
{ tag = 'argtd', content = 'image', fn = DisplayFns.image('220px') },
})
:addRow(
{
{ tag = 'th', content = 'Japanese' },
{ tag = 'argtd', content = 'japanese' }
},
{ hideIfEmpty = { 'japanese' } }
)
:addRow(
{
{ tag = 'th', content = 'Romaji' },
{ tag = 'argtd', content = 'romaji' }
},
{ hideIfEmpty = { 'romaji' } }
)
:addHeader({ tag = 'th', content = 'Event Information' }, { subheader = true })
:addRow({
{ tag = 'th', content = 'Event ID' },
{ tag = 'argtd', content = 'event id' }
})
:addRow({
{ tag = 'th', content = 'Start date' },
{ tag = 'argtd', content = 'start' }
})
:addRow({
{ tag = 'th', content = 'End date' },
{ tag = 'argtd', content = 'end' }
})
:addRow({
{ tag = 'th', content = 'Unit focus' },
{ tag = 'argtd', content = 'unit focus' }
})
:addRow({
{ tag = 'th', content = 'Event type' },
{ tag = 'argtd', content = 'type' }
})
:addHeader({ tag = 'th', content = 'Event Bonus' }, { subheader = true })
:addRow({
{ tag = 'th', content = 'Bonus characters' },
{ tag = 'argtd', content = 'characters', fn = formatCharacters }
})
:addRow({
{ tag = 'th', content = 'Bonus attribute' },
{ tag = 'argtd', content = 'attribute', fn = formatAttribute }
})
:addHeader(
{ tag = 'th', content = 'Event Song' },
{ hideIfEmpty = { 'event song id' }, subheader = true }
)
:addRow(
{
{
tag = 'argtd',
content = 'event song id',
fn = formatEventSong,
css = { ['text-align'] = 'center' }
}
},
{ hideIfEmpty = { 'event song id' } }
)
local categories = ''
if mw.title.getCurrentTitle().namespace == 0 then
categories = '[[Category:Events]]' .. infobox:getCategories()
local rawArgs = infobox:getRawArgs()
VariablesLua.vardefine('event id', rawArgs['event id'])
VariablesLua.vardefine('event name', rawArgs['event name'])
VariablesLua.vardefine('start date', rawArgs['start'])
VariablesLua.vardefine('end date', rawArgs['end'])
VariablesLua.vardefine('characters', rawArgs['characters'])
VariablesLua.vardefine('attribute', rawArgs['attribute'])
end
return infobox:tostring() .. categories
end
return p