Content added Content deleted
mNo edit summary |
(Blanked the page) Tag: Blanking |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
-------------------------- |
|||
-- Module for [[Template:Infobox card]] |
|||
------------------------ |
|||
local getArgs = require('Module:Arguments').getArgs |
|||
local QueryBuilder = require('Module:QueryBuilder') |
|||
local InfoboxBuilder = require('Module:InfoboxBuilder new') |
|||
local DisplayFns = require('Module:InfoboxBuilderDisplayFunctions') |
|||
local ProcessingFns = require('Module:InfoboxBuilderProcessingFunctions') |
|||
local aicon = require('Module:Attribute icon')._main |
|||
local cicon = require('Module:Character icon')._main |
|||
local ricon = require('Module:Rarity icon')._main |
|||
local uicon = require('Module:Unit icon')._main |
|||
local VariablesLua = mw.ext.VariablesLua |
|||
local p = {} |
|||
local function formatAttribute(attribute) |
|||
if attribute and attribute ~= '' then |
|||
return string.format( |
|||
"%s [[%s]]", |
|||
aicon({ attribute, size = '20px' }), |
|||
attribute |
|||
) |
|||
end |
|||
return nil |
|||
end |
|||
local function formatCharacter(character) |
|||
if character and charater ~= '' then |
|||
return string.format( |
|||
"%s [[%s]]", |
|||
cicon({ character, size = '20px' }), |
|||
character |
|||
) |
|||
end |
|||
return nil |
|||
end |
|||
local function formatRarity(rarity) |
|||
if rarity and rarity ~= '' then |
|||
return ricon({ rarity, '20px' }) |
|||
end |
|||
return nil |
|||
end |
|||
local function formatUnit(unit) |
|||
if unit and unit ~= '' then |
|||
return string.format( |
|||
"%s [[%s]]", |
|||
uicon({ unit, size = '20px' }) or unit, |
|||
unit |
|||
) |
|||
end |
|||
return nil |
|||
end |
|||
local function formatEventId(id) |
|||
local qb = QueryBuilder.new() |
|||
qb |
|||
:setTables('events') |
|||
:setFields([[ |
|||
_pageName, |
|||
event_name, |
|||
]]) |
|||
:setGroupBy('_pageName') |
|||
:setLimit(1) |
|||
:addWhere('event_id', '=', id) |
|||
local result = qb:query()[1] |
|||
if result then |
|||
return string.format('[[%s|%s]]', result._pageName, result.event_name) |
|||
end |
|||
return nil |
|||
end |
|||
local function formatGachaId(id) |
|||
local qb = QueryBuilder.new() |
|||
qb |
|||
:setTables('gachas') |
|||
:setFields([[ |
|||
_pageName, |
|||
gacha_name, |
|||
]]) |
|||
:setGroupBy('_pageName') |
|||
:setLimit(1) |
|||
:addWhere('gacha_id', '=', id) |
|||
local result = qb:query()[1] |
|||
if result then |
|||
return string.format('[[%s|%s]]', result._pageName, result.gacha_name) |
|||
end |
|||
return nil |
|||
end |
|||
function p.main(frame) |
|||
local args = getArgs(frame, { wrappers = 'Template:Infobox card' }) |
|||
local infobox = InfoboxBuilder.new() |
|||
infobox:setName('Infobox card') |
|||
:setParams{ |
|||
{ name = 'card id' }, |
|||
{ name = 'card name', default = mw.title.getCurrentTitle().text }, |
|||
{ name = 'thumbnail' }, |
|||
{ name = 'thumbnail trained' }, |
|||
{ name = 'japanese' }, |
|||
{ name = 'romaji' }, |
|||
{ name = 'character' }, |
|||
{ name = 'attribute' }, |
|||
{ name = 'rarity' }, |
|||
{ name = 'unit' }, |
|||
{ name = 'support unit' }, |
|||
{ name = 'status' }, |
|||
{ name = 'date' }, |
|||
{ name = 'acquire', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'event id', dFunc = formatEventId }, |
|||
{ name = 'gacha id', dFunc = formatGachaId }, |
|||
-- Compatability args |
|||
{ name = 'obtain', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'event' }, |
|||
{ name = 'banner' }, |
|||
{ name = 'gacha' }, |
|||
} |
|||
:setArgs(args) |
|||
:processArgs() |
|||
:setCategoryMap({ |
|||
['character'] = { |
|||
-- VIRTUAL SINGER |
|||
['Hatsune Miku'] = 'Hatsune Miku cards', |
|||
['Kagamine Rin'] = 'Kagamine Rin cards', |
|||
['Kagamine Len'] = 'Kagamine Len cards', |
|||
['Megurine Luka'] = 'Megurine Luka cards', |
|||
['MEIKO'] = 'MEIKO cards', |
|||
['KAITO'] = 'KAITO cards', |
|||
-- Leo/need |
|||
['Hoshino Ichika'] = 'Hoshino Ichika cards', |
|||
['Tenma Saki'] = 'Tenma Saki cards', |
|||
['Mochizuki Honami'] = 'Mochizuki Honami cards', |
|||
['Hinomori Shiho'] = 'Hinomori Shiho cards', |
|||
-- MORE MORE JUMP! |
|||
['Hanasato Minori'] = 'Hanasato Minori cards', |
|||
['Kiritani Haruka'] = 'Kiritani Haruka cards', |
|||
['Momoi Airi'] = 'Momoi Airi cards', |
|||
['Hinomori Shizuku'] = 'Hinomori Shizuku cards', |
|||
-- Vivid BAD SQUAD |
|||
['Azusawa Kohane'] = 'Azusawa Kohane cards', |
|||
['Shiraishi An'] = 'Shiraishi An cards', |
|||
['Shinonome Akito'] = 'Shinonome Akito cards', |
|||
['Aoyagi Toya'] = 'Aoyagi Toya cards', |
|||
-- Wonderlands×Showtime |
|||
['Tenma Tsukasa'] = 'Tenma Tsukasa cards', |
|||
['Otori Emu'] = 'Otori Emu cards', |
|||
['Kusanagi Nene'] = 'Kusanagi Nene cards', |
|||
['Kamishiro Rui'] = 'Kamishiro Rui cards', |
|||
-- 25-ji, Night Code de. |
|||
['Yoisaki Kanade'] = 'Yoisaki Kanade cards', |
|||
['Asahina Mafuyu'] = 'Asahina Mafuyu cards', |
|||
['Shinonome Ena'] = 'Shinonome Ena cards', |
|||
['Akiyama Mizuki'] = 'Akiyama Mizuki cards', |
|||
}, |
|||
['attribute'] = { |
|||
['Cool'] = 'Cool cards', |
|||
['Cute'] = 'Cute cards', |
|||
['Happy'] = 'Happy cards', |
|||
['Mysterious'] = 'Mysterious cards', |
|||
['Pure'] = 'Pure cards', |
|||
}, |
|||
['rarity'] = { |
|||
['1'] = '1☆ cards', |
|||
['2'] = '2☆ cards', |
|||
['3'] = '3☆ cards', |
|||
['4'] = '4☆ cards', |
|||
['Birthday'] = 'Birthday cards', |
|||
}, |
|||
['status'] = { |
|||
['Permanent'] = 'Permanent cards', |
|||
['Limited'] = 'Limited cards', |
|||
['Colorful Festival limited'] = 'Colorful Festival limited cards', |
|||
['Birthday limited'] = 'Birthday limited cards', |
|||
} |
|||
}) |
|||
infobox |
|||
:addHeader({ tag = 'argth', content = 'card name' }) |
|||
:addImage({ |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'thumbnail', |
|||
tabName = 'Untrained', |
|||
fn = DisplayFns.generateImage('156px') |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'thumbnail trained', |
|||
tabName = 'Trained', |
|||
fn = DisplayFns.generateImage('156px') |
|||
} |
|||
}) |
|||
: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 = 'Card Information' }, { subheader = true }) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Card ID' }, |
|||
{ tag = 'argtd', content = 'card id' } |
|||
}) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Character' }, |
|||
{ tag = 'argtd', content = 'character', fn = formatCharacter } |
|||
}) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Attribute' }, |
|||
{ tag = 'argtd', content = 'attribute', fn = formatAttribute } |
|||
}) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Rarity' }, |
|||
{ tag = 'argtd', content = 'rarity', fn = formatRarity } |
|||
}) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Unit' }, |
|||
{ tag = 'argtd', content = 'unit', fn = formatUnit } |
|||
}) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Support unit' }, |
|||
{ tag = 'argtd', content = 'support unit', fn = formatUnit } |
|||
}, |
|||
{ hideIfEmpty = { 'support unit' } } |
|||
) |
|||
:addHeader({ tag = 'th', content = 'Acquisition Information' }, { subheader = true }) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Status' }, |
|||
{ tag = 'argtd', content = 'status' } |
|||
}) |
|||
:addRow({ |
|||
{ tag = 'th', content = 'Release date' }, |
|||
{ tag = 'argtd', content = 'date' } |
|||
}) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Acquisition method(s)' }, |
|||
{ tag = 'argtd', content = 'obtain', fn = DisplayFns.list('unbulleted') } |
|||
}, |
|||
{ hideIfEmpty = { 'obtain' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ |
|||
tag = 'argth', |
|||
content = 'acquire', |
|||
fn = DisplayFns.pluralHeader({ 'Acquisition method', 'Acquisition methods' }) |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'acquire', |
|||
fn = DisplayFns.list('unbulleted') |
|||
} |
|||
}, |
|||
{ hideIfEmpty = { 'acquire' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Associated event' }, |
|||
{ tag = 'argtd', content = 'event', fn = DisplayFns.link } |
|||
}, |
|||
{ hideIfEmpty = { 'event' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Debut gacha' }, |
|||
{ tag = 'argtd', content = 'banner', fn = DisplayFns.link } |
|||
}, |
|||
{ hideIfEmpty = { 'banner' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Debut gacha' }, |
|||
{ tag = 'argtd', content = 'gacha', fn = DisplayFns.link } |
|||
}, |
|||
{ hideIfEmpty = { 'gacha' } } |
|||
) |
|||
local categories = "" |
|||
if mw.title.getCurrentTitle().namespace == 0 then |
|||
categories = "[[Category:Cards]]" .. infobox:getCategories() |
|||
local rawArgs = infobox:getRawArgs() |
|||
VariablesLua.vardefine( 'card id', rawArgs['card id'] ) |
|||
VariablesLua.vardefine( 'rarity', rawArgs['rarity'] ) |
|||
VariablesLua.vardefine( 'character', rawArgs['character'] ) |
|||
VariablesLua.vardefine( 'support unit', rawArgs['support unit'] ) |
|||
VariablesLua.vardefine( 'attribute', rawArgs['attribute'] ) |
|||
VariablesLua.vardefine( 'date', rawArgs['date'] ) |
|||
VariablesLua.vardefine( 'event id', rawArgs['event id'] ) |
|||
end |
|||
local viewerLink = '' |
|||
if tonumber(args['card id']) then |
|||
viewerLink = frame:expandTemplate{ |
|||
title = 'Sekai Viewer card link' |
|||
} |
|||
end |
|||
return infobox:tostring() .. categories .. viewerLink |
|||
end |
|||
return p |
Latest revision as of 03:40, 18 October 2022
Documentation for this module may be created at Module:Infobox card/sandbox/doc