Content added Content deleted
mNo edit summary |
(Blanked the page) Tag: Blanking |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
-------------------------- |
|||
-- Module for [[Template:Infobox Song]] |
|||
------------------------ |
|||
local getArgs = require('Module:Arguments').getArgs |
|||
local InfoboxBuilder = require('Module:InfoboxBuilder new') |
|||
local DisplayFns = require('Module:InfoboxBuilderDisplayFunctions') |
|||
local ProcessingFns = require('Module:InfoboxBuilderProcessingFunctions') |
|||
local constants = require('Module:Constants') |
|||
local VariablesLua = mw.ext.VariablesLua |
|||
local p = {} |
|||
local contentLang = mw.getContentLanguage() |
|||
local function getMvClass(mv) |
|||
-- probably should not use == with bool, but this is more explicit |
|||
if mv == true then |
|||
return 'true-cell' |
|||
elseif mv == false then |
|||
return 'false-cell' |
|||
end |
|||
return nil |
|||
end |
|||
local function difficultiesRow() |
|||
local difficulties = { 'Easy', 'Normal', 'Hard', 'Expert', 'Master' } |
|||
local row = {} |
|||
for _,v in ipairs(difficulties) do |
|||
table.insert(row, |
|||
{ |
|||
content = v, |
|||
tag = 'th', |
|||
css = { ['border-bottom-color'] = constants.get_difficulty_color(v) } |
|||
} |
|||
) |
|||
end |
|||
return row |
|||
end |
|||
local function generateUnitsHeader(units) |
|||
return contentLang:convertPlural(#(units or {}), { 'Unit', 'Units' }) |
|||
end |
|||
function p.main(frame) |
|||
local args = getArgs(frame) |
|||
local infobox = InfoboxBuilder.new(); |
|||
infobox:setName('Infobox song new') |
|||
:setParams{ |
|||
{ name = 'song id' }, |
|||
{ name = 'song name', default = mw.title.getCurrentTitle().text }, |
|||
{ name = 'jacket', default = 'Dummyalbumart.png' }, |
|||
{ name = 'jacket alt' }, |
|||
{ name = 'jacket alt 2' }, |
|||
{ name = 'japanese' }, |
|||
{ name = 'romaji' }, |
|||
{ name = 'english' }, |
|||
{ name = 'singers', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'producers', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'duration' }, |
|||
{ name = 'units', fn = ProcessingFns.stringToArray(';') }, |
|||
{ name = 'unlock' }, |
|||
{ name = 'arrangers', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'composers', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'lyricists', fn = ProcessingFns.stringToArray(',') }, |
|||
{ name = 'commissioned', fn = ProcessingFns.stringToBoolOrNil }, |
|||
{ name = 'contest winner', fn = ProcessingFns.stringToBoolOrNil, default = false }, |
|||
{ name = 'bpm' }, |
|||
{ name = 'game duration' }, |
|||
{ name = 'date' }, |
|||
{ name = '3d mv', fn = ProcessingFns.stringToBoolOrNil }, |
|||
{ name = '2d mv', fn = ProcessingFns.stringToBoolOrNil }, |
|||
{ name = 'original mv', fn = ProcessingFns.stringToBoolOrNil }, |
|||
{ name = 'easy difficulty' }, |
|||
{ name = 'normal difficulty' }, |
|||
{ name = 'hard difficulty' }, |
|||
{ name = 'expert difficulty' }, |
|||
{ name = 'master difficulty' }, |
|||
{ name = 'easy notes' }, |
|||
{ name = 'normal notes' }, |
|||
{ name = 'hard notes' }, |
|||
{ name = 'expert notes' }, |
|||
{ name = 'master notes' }, |
|||
} |
|||
:setArgs(args) |
|||
:processArgs() |
|||
:setCategoryMap({ |
|||
['units'] = { |
|||
['VIRTUAL SINGER'] = 'VIRTUAL SINGER songs', |
|||
['Leo/need'] = 'Leo/need songs', |
|||
['MORE MORE JUMP!'] = 'MORE MORE JUMP! songs', |
|||
['Vivid BAD SQUAD'] = 'Vivid BAD SQUAD songs', |
|||
['Wonderlands×Showtime'] = 'Wonderlands×Showtime songs', |
|||
['25-ji, Nightcord de.'] = '25-ji, Nightcord de. songs', |
|||
['Other'] = 'Other songs' |
|||
}, |
|||
['unlock'] = { |
|||
['Automatic'] = 'Songs unlocked automatically', |
|||
['Music Shop'] = 'Songs unlocked from the Music Shop', |
|||
['Present Box'] = 'Songs unlocked from the Present Box', |
|||
}, |
|||
['commissioned'] = { |
|||
[true] = 'Commissioned songs', |
|||
}, |
|||
['contest winner'] = { |
|||
[true] = 'Contest winning songs' |
|||
}, |
|||
['3d mv'] = { |
|||
[true] = 'Songs with 3D MV' |
|||
}, |
|||
['2d mv'] = { |
|||
[true] = 'Songs with 2D MV' |
|||
}, |
|||
['original mv'] = { |
|||
[true] = 'Songs with Original MV' |
|||
}, |
|||
}) |
|||
infobox |
|||
:addHeader({ tag = 'argth', content = 'song name' }) |
|||
:addImage({ |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'jacket', |
|||
fn = DisplayFns.image('220px'), |
|||
tabName = 'Original' |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'jacket alt', |
|||
fn = DisplayFns.image('220px'), |
|||
tabName = 'Alternate' |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'jacket alt 2', |
|||
fn = DisplayFns.image('220px'), |
|||
tabName = 'Alternate #2' |
|||
}, |
|||
}) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Japanese' }, |
|||
{ tag = 'argtd', content = 'japanese' } |
|||
}, |
|||
{ hideIfEmpty = { 'japanese' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Romaji' }, |
|||
{ tag = 'argtd', content = 'romaji' } |
|||
}, |
|||
{ hideIfEmpty = { 'romaji' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'English' }, |
|||
{ tag = 'argtd', content = 'english' } |
|||
}, |
|||
{ hideIfEmpty = { 'english' } } |
|||
) |
|||
:addHeader({ tag = 'th', content = 'Song Information' }, { subheader = true }) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Original singer(s)' }, |
|||
{ tag = 'argtd', content = 'singers', fn = DisplayFns.list('unbulleted') } |
|||
}, |
|||
{ hideIfEmpty = { 'singers' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Producer(s)' }, |
|||
{ tag = 'argtd', content = 'producers', fn = DisplayFns.list('unbulleted') } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Duration' }, |
|||
{ tag = 'argtd', content = 'duration' } |
|||
}, |
|||
{ hideIfEmpty = { 'duration' } } |
|||
) |
|||
:addHeader({ tag = 'th', content = 'In-game Information' }, { subheader = true }) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Song ID' }, |
|||
{ tag = 'argtd', content = 'song id' } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'argth', content = 'units', fn = generateUnitsHeader }, |
|||
{ tag = 'argtd', content = 'units', fn = DisplayFns.list('unbulleted') } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'How to unlock' }, |
|||
{ tag = 'argtd', content = 'unlock' } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Arranger(s)' }, |
|||
{ tag = 'argtd', content = 'arrangers', fn = DisplayFns.list('unbulleted') } |
|||
}, |
|||
{ hideIfEmpty = { 'arrangers' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Composer(s)' }, |
|||
{ tag = 'argtd', content = 'composers', fn = DisplayFns.list('unbulleted') } |
|||
}, |
|||
{ hideIfEmpty = { 'composers' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Lyricist(s)' }, |
|||
{ tag = 'argtd', content = 'lyricists', fn = DisplayFns.list('unbulleted') } |
|||
}, |
|||
{ hideIfEmpty = { 'lyricists' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Commissioned?' }, |
|||
{ tag = 'argtd', content = 'commissioned', fn = DisplayFns.yesAndNo } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'BPM' }, |
|||
{ tag = 'argtd', content = 'bpm' } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Duration (game)' }, |
|||
{ tag = 'argtd', content = 'game duration' } |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = 'Release date' }, |
|||
{ tag = 'argtd', content = 'date' } |
|||
} |
|||
) |
|||
:addHeader({ tag = 'th', content = 'Music Video' }, { subheader = true }) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'th', content = '3D' }, |
|||
{ tag = 'th', content = '2D' }, |
|||
{ tag = 'th', content = 'Original' } |
|||
}, |
|||
{ defaultCss = { ['text-align'] = 'center' } } |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ |
|||
tag = 'argtd', |
|||
content = '3d mv', |
|||
fn = DisplayFns.checkAndX, |
|||
classFns = { getMvClass } |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = '2d mv', |
|||
fn = DisplayFns.checkAndX, |
|||
classFns = { getMvClass } |
|||
}, |
|||
{ |
|||
tag = 'argtd', |
|||
content = 'original mv', |
|||
fn = DisplayFns.checkAndX, |
|||
classFns = { getMvClass } |
|||
}, |
|||
}, |
|||
{ defaultCss = { ['text-align'] = 'center' } } |
|||
) |
|||
:addHeader({ tag = 'th', content = 'Difficulties' }, { subheader = true }) |
|||
:addRow( |
|||
difficultiesRow(), |
|||
{ |
|||
defaultCss = { |
|||
['text-align'] = 'center', |
|||
['border-bottom-style'] = 'solid' |
|||
} |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'argtd', content = 'easy difficulty' }, |
|||
{ tag = 'argtd', content = 'normal difficulty' }, |
|||
{ tag = 'argtd', content = 'hard difficulty' }, |
|||
{ tag = 'argtd', content = 'expert difficulty' }, |
|||
{ tag = 'argtd', content = 'master difficulty' } |
|||
}, |
|||
{ defaultCss = { ['text-align'] = 'center' } } |
|||
) |
|||
:addHeader({ tag = 'th', content = 'Notes' }, { subheader = true }) |
|||
:addRow( |
|||
difficultiesRow(), |
|||
{ |
|||
defaultCss = { |
|||
['text-align'] = 'center', |
|||
['border-bottom-style'] = 'solid' |
|||
} |
|||
} |
|||
) |
|||
:addRow( |
|||
{ |
|||
{ tag = 'argtd', content = 'easy notes' }, |
|||
{ tag = 'argtd', content = 'normal notes' }, |
|||
{ tag = 'argtd', content = 'hard notes' }, |
|||
{ tag = 'argtd', content = 'expert notes' }, |
|||
{ tag = 'argtd', content = 'master notes' } |
|||
}, |
|||
{ defaultCss = { ['text-align'] = 'center' } } |
|||
) |
|||
local categories = "" |
|||
if mw.title.getCurrentTitle().namespace == 0 then |
|||
categories = "[[Category:Songs]]" .. infobox:getCategories() |
|||
local rawArgs = infobox:getRawArgs() |
|||
VariablesLua.vardefine( 'song id', rawArgs['song id'] ) |
|||
end |
|||
return infobox:tostring() .. categories |
|||
end |
|||
return p |
Latest revision as of 02:27, 18 October 2022
Documentation for this module may be created at Module:Infobox song/sandbox/doc