mNo edit summary |
mNo edit summary |
||
(11 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
]]-- |
]]-- |
||
local epVol, epArc = epData['volume'], args['arc'] |
local epVol, epArc = epData['volume'], args['arc'] |
||
⚫ | |||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
⚫ | |||
elseif epVol then |
elseif epVol then |
||
− | epVol = ' |
+ | epVol = 'volume ' .. epVol |
else |
else |
||
− | epVol = ' |
+ | epVol = 'volume ' .. 'N/A' |
end |
end |
||
Line 35: | Line 37: | ||
'<i>[[Berserk (Manga)|Berserk]]</i>' |
'<i>[[Berserk (Manga)|Berserk]]</i>' |
||
.. ( epVol and ', ' .. epVol or '' ) |
.. ( epVol and ', ' .. epVol or '' ) |
||
− | .. ( argEp and ', |
+ | .. ( epPreludial and ', preludial episode ' .. argEp:match('0%-(%d+)') or argEp and ', episode ' .. argEp or '' ) |
− | .. ( args['pages'] and ' |
+ | .. ( args['pages'] and ', ' .. args['pages'] .. ' pages' or '') |
--[[ |
--[[ |
||
− | Handle publication date and magazine issue |
+ | Handle publication date and magazine issue info |
]]-- |
]]-- |
||
local epPubFull |
local epPubFull |
||
+ | |||
if args['pub date'] and args['magazine'] then |
if args['pub date'] and args['magazine'] then |
||
local dateY, dateM, dateD = args['pub date']:match('([0-9]*)-([0-9]*)-([0-9]*)') |
local dateY, dateM, dateD = args['pub date']:match('([0-9]*)-([0-9]*)-([0-9]*)') |
||
Line 48: | Line 51: | ||
local epMagName, epMagIssue = args['magazine']:match('([AHY]*) #([^ ]*)') |
local epMagName, epMagIssue = args['magazine']:match('([AHY]*) #([^ ]*)') |
||
epMagName = ({['AH'] = '<i>Animal House</i>', ['YA'] = '<i>Young Animal</i>'})[epMagName] |
epMagName = ({['AH'] = '<i>Animal House</i>', ['YA'] = '<i>Young Animal</i>'})[epMagName] |
||
− | local epMagInfo = epMagName .. ' |
+ | local epMagInfo = epMagName .. ' No. ' .. epMagIssue |
epPubFull = epMagInfo .. '<br>' .. epPubDate |
epPubFull = epMagInfo .. '<br>' .. epPubDate |
||
Line 56: | Line 59: | ||
--[[ |
--[[ |
||
− | Handle English and Japanese names |
+ | Handle English and Japanese episode names |
]]-- |
]]-- |
||
− | local |
+ | local epNameEn = epData['ename'] |
− | local epNameJa = epData['jname'] |
+ | local epNameJa = epData['jname'] |
+ | |||
⚫ | |||
+ | if epNameEn ~= '' then |
||
− | epNameEng = '“' .. epData['ename'] .. '”' |
||
− | + | epNameEn = '“' .. epNameEn .. '”' |
|
+ | epNameEn = epNameEn .. '{{DISPLAYTITLE:' .. epNameEn .. '}}' |
||
else |
else |
||
− | + | epNameEn = '{{PAGENAME}}' |
|
end |
end |
||
+ | if epNameJa ~= '' then |
||
− | epNameJa = |
+ | epNameJa = '<navigation><center><span style="font-weight: bold; font-size: 1.4em;">' .. epNameJa .. '</span></center></navigation>' |
+ | end |
||
--[[ |
--[[ |
||
Line 74: | Line 80: | ||
-- Find prev and next episode keys |
-- Find prev and next episode keys |
||
⚫ | |||
local epKeyPrev, epKeyNext |
local epKeyPrev, epKeyNext |
||
local epKeys = { |
local epKeys = { |
||
− | ['prevUnnumbered'] = epPreludial and string.format( |
+ | ['prevUnnumbered'] = epPreludial and string.format('0-%d', tonumber(argEp:match('0%-(%d+)')) - 1) or '', |
['prevNumbered'] = tostring( (tonumber(argEp) or 1) - 1 ), |
['prevNumbered'] = tostring( (tonumber(argEp) or 1) - 1 ), |
||
− | ['nextUnnumbered'] = epPreludial and string.format( |
+ | ['nextUnnumbered'] = epPreludial and string.format('0-%d', tonumber(argEp:match('0%-(%d+)')) + 1) or '', |
− | ['nextNumbered'] = tostring( (tonumber(argEp) or -1) + 1 ) |
+ | ['nextNumbered'] = tostring( (tonumber(argEp) or -1) + 1 ), |
} |
} |
||
− | |||
-- Test for key episode's existence in episodesManga (Module:Episodes/mangaData) |
-- Test for key episode's existence in episodesManga (Module:Episodes/mangaData) |
||
Line 111: | Line 115: | ||
elseif epNext then |
elseif epNext then |
||
epNext = '"[[Episode ' .. epKeyNext .. " (Manga)|" .. epNext['ename'] .. ']]"' |
epNext = '"[[Episode ' .. epKeyNext .. " (Manga)|" .. epNext['ename'] .. ']]"' |
||
+ | end |
||
+ | |||
+ | --[[ |
||
+ | Lead paragraph |
||
+ | ]]-- |
||
+ | local epLeadPara |
||
+ | |||
⚫ | |||
⚫ | |||
+ | else |
||
+ | epLeadPara = '<b>"' .. epData['ename'] .. '"</b>' .. ' is episode ' .. argEp .. ' of the [[Berserk (Manga)|<i>Berserk</i>]] manga series.' |
||
end |
end |
||
Line 118: | Line 133: | ||
local infobox = { |
local infobox = { |
||
'<infobox>', |
'<infobox>', |
||
− | '<title><default>' .. |
+ | '<title><default>' .. epNameEn .. '</default></title>', |
'<image><default>' .. ( args['image'] or '' ) .. '</default></image>', |
'<image><default>' .. ( args['image'] or '' ) .. '</default></image>', |
||
epNameJa, |
epNameJa, |
||
Line 128: | Line 143: | ||
infoboxCreateDataItem( 'Next', epNext ), |
infoboxCreateDataItem( 'Next', epNext ), |
||
'</infobox>', |
'</infobox>', |
||
− | + | epLeadPara, |
|
⚫ | |||
} |
} |
||
Line 162: | Line 176: | ||
'{{Infobox/Episode/Manga', |
'{{Infobox/Episode/Manga', |
||
'|image=' .. ( args['image'] or '' ), |
'|image=' .. ( args['image'] or '' ), |
||
− | '|ename=' .. |
+ | '|ename=' .. epNameEn, |
'|jname=' .. epNameJa, |
'|jname=' .. epNameJa, |
||
'|rname=' .. epRomName, |
'|rname=' .. epRomName, |
Latest revision as of 03:50, 30 April 2023
Documentation for this module may be created at Module:Infobox/doc
local p = {}
local episodesManga = mw.loadData( 'Module:Episodes/mangaData' )
function infoboxCreateDataItem(label, data)
if data then
return '<data><label>' .. label .. '</label><default>' .. data .. '</default></data>'
else
return '' -- No data (i.e. data is nil), no infobox row created
end
end
function p.infoboxEpisodeManga(frame)
local args = frame:getParent().args
local argEp = args['episode']
local epData = episodesManga[argEp]
local months = {[1] = 'January', [2] = 'February', [3] = 'March', [4] = 'April', [5] = 'May', [6] = 'June', [7] = 'July', [8] = 'August', [9] = 'September', [10] = 'October', [11] = 'November', [12] = 'December'}
--[[
Handle installation info (e.g. vol, ep, arc, chapter)
]]--
local epVol, epArc = epData['volume'], args['arc']
local epPreludial = argEp:match('0%-(%d+)')
if tonumber(epVol) then
epVol = '[[Releases (Manga)#vol' .. epVol .. '|volume ' .. epVol ..']]'
elseif epVol then
epVol = 'volume ' .. epVol
else
epVol = 'volume ' .. 'N/A'
end
if epArc then
epArc = '[[' .. epArc .. ']][[Category:' .. epArc .. ' Episodes]]'
end
local epInstall =
'<i>[[Berserk (Manga)|Berserk]]</i>'
.. ( epVol and ', ' .. epVol or '' )
.. ( epPreludial and ', preludial episode ' .. argEp:match('0%-(%d+)') or argEp and ', episode ' .. argEp or '' )
.. ( args['pages'] and ', ' .. args['pages'] .. ' pages' or '')
--[[
Handle publication date and magazine issue info
]]--
local epPubFull
if args['pub date'] and args['magazine'] then
local dateY, dateM, dateD = args['pub date']:match('([0-9]*)-([0-9]*)-([0-9]*)')
local epPubDate = tonumber(dateD) .. ' ' .. months[ tonumber(dateM) ] .. ' '.. dateY
local epMagName, epMagIssue = args['magazine']:match('([AHY]*) #([^ ]*)')
epMagName = ({['AH'] = '<i>Animal House</i>', ['YA'] = '<i>Young Animal</i>'})[epMagName]
local epMagInfo = epMagName .. ' No. ' .. epMagIssue
epPubFull = epMagInfo .. '<br>' .. epPubDate
else
epPubFull = args['full pub']
end
--[[
Handle English and Japanese episode names
]]--
local epNameEn = epData['ename']
local epNameJa = epData['jname']
if epNameEn ~= '' then
epNameEn = '“' .. epNameEn .. '”'
epNameEn = epNameEn .. '{{DISPLAYTITLE:' .. epNameEn .. '}}'
else
epNameEn = '{{PAGENAME}}'
end
if epNameJa ~= '' then
epNameJa = '<navigation><center><span style="font-weight: bold; font-size: 1.4em;">' .. epNameJa .. '</span></center></navigation>'
end
--[[
Search for prev and next episodes
]]--
-- Find prev and next episode keys
local epKeyPrev, epKeyNext
local epKeys = {
['prevUnnumbered'] = epPreludial and string.format('0-%d', tonumber(argEp:match('0%-(%d+)')) - 1) or '',
['prevNumbered'] = tostring( (tonumber(argEp) or 1) - 1 ),
['nextUnnumbered'] = epPreludial and string.format('0-%d', tonumber(argEp:match('0%-(%d+)')) + 1) or '',
['nextNumbered'] = tostring( (tonumber(argEp) or -1) + 1 ),
}
-- Test for key episode's existence in episodesManga (Module:Episodes/mangaData)
if episodesManga[ epKeys['prevNumbered'] ] then
epKeyPrev = epKeys['prevNumbered']
elseif episodesManga[ epKeys['prevUnnumbered'] ] then
epKeyPrev = epKeys['prevUnnumbered']
end
if episodesManga[ epKeys['nextUnnumbered'] ] then
epKeyNext = epKeys['nextUnnumbered']
elseif episodesManga[ epKeys['nextNumbered'] ] then
epKeyNext = epKeys['nextNumbered']
end
-- Set prev and next episode variables
local epPrev = episodesManga[epKeyPrev]
local epNext = episodesManga[epKeyNext]
if args['prev'] then
epPrev = args['prev']
elseif epPrev then
epPrev = '"[[Episode ' .. epKeyPrev .. " (Manga)|" .. epPrev['ename'] .. ']]"'
end
if args['next'] then
epNext = args['next']
elseif epNext then
epNext = '"[[Episode ' .. epKeyNext .. " (Manga)|" .. epNext['ename'] .. ']]"'
end
--[[
Lead paragraph
]]--
local epLeadPara
if epPreludial then
epLeadPara = '<b>"' .. epData['ename'] .. '"</b>' .. ' is preludial episode ' .. argEp:match('0%-(%d+)') .. ' of the [[Berserk (Manga)|<i>Berserk</i>]] manga series.'
else
epLeadPara = '<b>"' .. epData['ename'] .. '"</b>' .. ' is episode ' .. argEp .. ' of the [[Berserk (Manga)|<i>Berserk</i>]] manga series.'
end
--[[
Generate infobox
]]--
local infobox = {
'<infobox>',
'<title><default>' .. epNameEn .. '</default></title>',
'<image><default>' .. ( args['image'] or '' ) .. '</default></image>',
epNameJa,
infoboxCreateDataItem( 'Installment', epInstall ),
infoboxCreateDataItem( 'Story arc', epArc ),
infoboxCreateDataItem( 'Chapter', ( args['chapter'] ) ),
infoboxCreateDataItem( 'Publication', epPubFull ),
infoboxCreateDataItem( 'Previous', epPrev ),
infoboxCreateDataItem( 'Next', epNext ),
'</infobox>',
epLeadPara,
}
--[[
SubstInfobox stuff
]]--
--[[
local epTlPub =
'|magazine=' .. ( epData['magazine'] or '' )
.. '\n|pub date=' .. ( epData['pub date'] or '' )
.. '\n|full pub=' .. ( epData['full pub'] or '')
if epData['full pub'] == nil then
epTlPub = '|magazine=' .. ( epData['magazine'] or '' ) .. '\n|pub date=' .. ( epData['pub date'] or '' )
else
epTlPub = '|magazine=\n|pub date=\n|full pub=' .. epData['full pub']
end
local epTlPrev, epTlNext = '', ''
if args['prev'] == nil then
epTlPrev = ''
else
epTlPrev = '|prev=' .. args['prev']
end
if args['next'] == nil then
epTlNext = ''
else
epTlNext = '|next=' .. args['next']
end
local substInfobox = {
'{{Infobox/Episode/Manga',
'|image=' .. ( args['image'] or '' ),
'|ename=' .. epNameEn,
'|jname=' .. epNameJa,
'|rname=' .. epRomName,
'|volume=' .. epData['volume']
'|episode=' .. argEp,
'|pages=' .. ( args['pages'] or '' ),
'|arc=' .. ( args['arc'] or '' ),
'|chapter=' .. ( args['chapter'] or '' ),
epTlPub .. epTlPrev .. epTlNext,
'}}'
}
]]--
return frame:preprocess( table.concat(infobox, '\n') )
end
return p