Module:Infobox Episode
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Infobox Episode/doc
-- <nowiki>
--------------------------
-- Module for [[Template:Infobox Film]]
--------------------------
local p = {}
-- "imports"
local onmain = require('Module:Mainonly').on_main
local infobox = require('Module:Infobox')
local cleanimg = require('Module:Clean image').clean
local hexmonthconv = {
January = '1',
February = '2',
March = '3',
April = '4',
May = '5',
June = '6',
July = '7',
August = '8',
September = '9',
October = 'A',
November = 'B',
December = 'C',
}
local lang = mw.getContentLanguage()
function p.main(frame)
local args = frame:getParent().args
local ret = infobox.new(args)
p.defineParams(ret)
p.setup(ret)
p.useSMWOne(ret)
ret:defineName('Infobox Film')
p.display(ret)
ret:finish()
if onmain() then
local allargs = ret:param('all')
local catargs = ret:categoryData()
ret:wikitext(p.addcategories(allargs, catargs))
end
return ret:tostring()
end
function p.defineParams(ret)
ret:defineParams {
{ name = 'name', func = 'name' },
{ name = 'nameDisp', func = { name = nameDisp, params = { 'name', 'number' } } },
{ name = 'image', func = imgarg },
{ name = 'release', func = 'release' },
{ name = 'number', func = 'has_content' },
{ name = 'runtime', func = 'has_content' },
{ name = 'previous', func = 'has_content' },
{ name = 'next', func = 'has_content' },
}
end
function p.setup(ret)
ret:setMaxButtons(4)
ret:create()
ret:cleanParams()
ret:customButtonPlacement(true)
end
function p.useSMWOne(ret)
ret:useSMWOne({
name = 'Name',
release = 'Release date',
})
end
function p.display(ret)
ret:addClass('tsw-infobox plainlinks')
ret:attr { cellpadding = '0', cellspacing = '0' }
ret:defineLinks({ links = { { 'Template:%s', 'Infobox' },
{ 'Template_talk:%s', 'Talk page' } }, colspan = '2' })
-- PARAMETER: image
ret:addRow {
{ tag = 'argd', content = 'image', class = 'infobox-image infobox-full-width-content', colspan = '2' }
}
-- PARAMETER: name
ret:addRow {
{ tag = 'argh', content = 'nameDisp', class = 'infobox-header', colspan = '2' }
}
-- PARAMETER: release date
ret:addRow {
{ tag = 'th', content = 'Original airing date' },
{ tag = 'argd', content = 'release' }
}
-- PARAMETER: runtime
if ret:paramDefined('runtime') then
ret:addRow {
{ tag = 'th', content = 'Runtime' },
{ tag = 'argd', content = 'runtime' }
}
end
if ret:paramDefined('previous') or ret:paramDefined('next') then
ret:addRow{ { tag = 'th', content = 'Series chronology', colspan = '2', class = 'infobox-subheader' } }
end
-- PARAMETER: previous
if ret:paramDefined('previous') then
ret:addRow {
{ tag = 'th', content = 'Previous' },
{ tag = 'argd', content = 'previous' }
}
end
-- PARAMETER: next
if ret:paramDefined('next') then
ret:addRow {
{ tag = 'th', content = 'Next' },
{ tag = 'argd', content = 'next' }
}
end
end
function nameDisp(name, number)
if infobox.isDefined(name) or infobox.isDefined(number) then
local ret = {}
if infobox.isDefined(name) then
table.insert(ret, name)
end
if infobox.isDefined(number) then
table.insert(ret, '<small>(#' .. number .. ')</small>')
end
return table.concat(ret, ' ')
end
return nil
end
function imgarg(arg)
if infobox.isDefined(arg) then
return cleanimg { file = arg, width = 300, height = 444 }
end
return nil
end
function p.addcategories(args, catargs)
-- Added if the parameter has no content
local cat_map_notdefined = {
image = '[[Category:Needs image]]',
release = '[[Category:Needs episode release date added]]',
}
local ret = { '[[Category:Episodes]]' }
local release_date = args.release.d
if infobox.isDefined(release_date) then
day = lang:formatDate('j', release_date)
month = lang:formatDate('F', release_date)
year = lang:formatDate('Y', release_date)
table.insert(ret, get_time_categories(day, month, year))
end
for n, v in pairs(cat_map_notdefined) do
if catargs[n] and catargs[n].all_defined == false then
table.insert(ret, v)
end
end
for i, v in ipairs(ret) do
if (v ~= '') then
ret[i] = v
end
end
return table.concat(ret, '')
end
function get_time_categories(day, month, year)
local ret = {}
local hexmonth, dayzero
if not day or not month or not hexmonthconv[month] or not year then
table.insert(ret, '[[Category:Missing release date]]')
else
dayzero = ((tonumber(day) < 10 and '0'..day) or day)
hexmonth = hexmonthconv[month]
-- [[Category:May 4 media]], sorted by year (eg 2012)
table.insert(ret, string.format('[[Category:%s %s media|%s%s%s]]', month, day, year, hexmonth, dayzero))
-- [[Category:2012 media]], sorted by monthday, months converted to hex, eg 54 (May 4)
table.insert(ret, string.format('[[Category:%s media|%s%s]]', year, hexmonth, dayzero))
-- [[Category:Media by date]], sorted year month day
table.insert(ret, string.format('[[Category:Media by date|%s%s%s]]', year, hexmonth, dayzero))
end
return table.concat(ret)
end
return p
-- </nowiki>