Berserk Wiki
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']
 
local epPreludial = argEp:match('0%-(%d+)')
if epVol and tonumber(epVol) then
 
  +
epVol = '[[Releases (Manga)#vol' .. epVol .. '|Volume ' .. epVol ..']]'
 
 
if tonumber(epVol) then
 
epVol = '[[Releases (Manga)#vol' .. epVol .. '|volume ' .. epVol ..']]'
 
elseif epVol then
 
elseif epVol then
epVol = 'Volume ' .. epVol
+
epVol = 'volume ' .. epVol
 
else
 
else
epVol = 'Volume ' .. 'N/A'
+
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 ', Episode ' .. argEp or '' )
+
.. ( epPreludial and ', preludial episode ' .. argEp:match('0%-(%d+)') or argEp and ', episode ' .. argEp or '' )
.. ( args['pages'] and ' (' .. args['pages'] .. ' pp.)' or '')
+
.. ( 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 .. ' #' .. epMagIssue
+
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 epNameEng
+
local epNameEn = epData['ename']
local epNameJa = epData['jname']
+
local epNameJa = epData['jname']
  +
if epData['ename'] then
 
  +
if epNameEn ~= '' then
epNameEng = '&ldquo;' .. epData['ename'] .. '&rdquo;'
 
epNameEng = epNameEng .. '{{DISPLAYTITLE:' .. epNameEng .. '}}'
+
epNameEn = '&ldquo;' .. epNameEn .. '&rdquo;'
  +
epNameEn = epNameEn .. '{{DISPLAYTITLE:' .. epNameEn .. '}}'
 
else
 
else
epNameEng = '{{PAGENAME}}'
+
epNameEn = '{{PAGENAME}}'
 
end
 
end
 
 
  +
if epNameJa ~= '' then
epNameJa = epNameJa and '<navigation><center><span style="font-weight: bold; font-size: 1.4em;">' .. epNameJa .. '</span></center></navigation>'
+
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 epPreludial = argEp:match("0-([1-9]+)")
 
 
local epKeyPrev, epKeyNext
 
local epKeyPrev, epKeyNext
 
local epKeys = {
 
local epKeys = {
['prevUnnumbered'] = epPreludial and string.format("0-%02d", tonumber(epPruludial) - 1) or '',
+
['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("0-%02d", tonumber(epPruludial) + 1) or '',
+
['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
  +
 
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
 
end
 
 
Line 118: Line 133:
 
local infobox = {
 
local infobox = {
 
'<infobox>',
 
'<infobox>',
'<title><default>' .. epNameEng .. '</default></title>',
+
'<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>',
-- Lead paragraph
+
epLeadPara,
'"<b>' .. epData['ename'] .. '</b>"' .. ' is episode ' .. argEp .. ' of the [[Berserk (Manga)|<i>Berserk</i>]] manga.'
 
 
}
 
}
   
Line 162: Line 176:
 
'{{Infobox/Episode/Manga',
 
'{{Infobox/Episode/Manga',
 
'|image=' .. ( args['image'] or '' ),
 
'|image=' .. ( args['image'] or '' ),
'|ename=' .. epNameEng,
+
'|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 = '&ldquo;' .. epNameEn .. '&rdquo;'
        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