Module:Infobox album

-- -- Module for Template:Infobox Album

local getArgs  = require('Module:Arguments').getArgs local InfoboxBuilder = require('Module:InfoboxBuilder') local DisplayFns    = require('Module:DisplayFunctions') local constants = require('Module:Constants')

local p = {}

local function formatUnit(unit_name) local unit = constants.get_unit(unit_name) local unit_image = constants.get_unit_image(unit) if unit and unit_image then return string.format(			"",			unit_image,			unit		) end return nil end

local function formatType(val) if val == 'Album' then return 'Album Information' elseif val == 'Single' then return 'Single Information' end return '? Information' end

local function formatPrice(price) if price then return string.format('¥%s (before tax)', price) end return price end

function p.main(frame) local args = getArgs(frame, { wrappers = 'Template:Infobox album' }) local infobox = InfoboxBuilder.new infobox:setName('Infobox album') :setParams{ { name = 'type', default = '' }, { name = 'album name', default = mw.title.getCurrentTitle.text }, { name = 'image', default = 'Dummyalbumart.png' }, { name = 'japanese' }, { name = 'romaji' }, { name = 'english' }, { name = 'unit' }, { name = 'price' }, { name = 'label' }, { name = 'product number' }, { name = 'date' }, }		:setArgs(args) :processArgs :setCategoryMap({			['type'] = {				['Album'] = 'Albums',				['Single'] = 'Singles'			}		})

infobox :addHeader({ tag = 'argth', content = 'album 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' } }		) :addRow(			{				{ tag = 'th', content = 'English' },				{ tag = 'argtd', content = 'english' }			},			{ hideIfEmpty = { 'english' } }		) :addHeader(			{ tag = 'th', content = 'Unit' }, 			{ hideIfEmpty = { 'unit' }, subheader = true }		) :addImage(			{				{ tag = 'argtd', content = 'unit', fn = formatUnit }			},			{ hideIfEmpty = { 'unit' } }		) :addHeader({ tag = 'argth', content = 'type', fn = formatType }, { subheader = true }) :addRow(			{				{ tag = 'th', content = 'Price' },				{ tag = 'argtd', content = 'price', fn = formatPrice }			}		) :addRow(			{				{ tag = 'th', content = 'Label' },				{ tag = 'argtd', content = 'label' }			}		) :addRow(			{				{ tag = 'th', content = 'Product number' },				{ tag = 'argtd', content = 'product number' }			}		) :addRow(			{				{ tag = 'th', content = 'Release date' },				{ tag = 'argtd', content = 'date' }			}		) local categories = "" if mw.title.getCurrentTitle.namespace == 0 then categories = "" .. infobox:getCategories end

return infobox:tostring .. categories end

return p