Steven Universe Wiki

Spoilers will be present! Please browse at your own risk.

READ MORE

Steven Universe Wiki
m (hope it works.)
Tag: sourceedit
m (Fix)
Line 4: Line 4:
 
local relativeEpisode = require('Module:TabSwitch')._relativeEpisode
 
local relativeEpisode = require('Module:TabSwitch')._relativeEpisode
 
local title = mw.title.getCurrentTitle()
 
local title = mw.title.getCurrentTitle()
local basetitle = mw.title.new(title.baseText)
+
local basetitle = mw.title.new(title.fullText)
 
local episodeTerm = ' (episode)'
 
local episodeTerm = ' (episode)'
 
local shortTerm = ' (short)'
 
local shortTerm = ' (short)'

Revision as of 01:37, 20 October 2017

Documentation for this module may be created at Module:EpisodeLinks/doc

--<nowiki>
local p = {}

local relativeEpisode = require('Module:TabSwitch')._relativeEpisode
local title = mw.title.getCurrentTitle()
local basetitle = mw.title.new(title.fullText)
local episodeTerm = ' (episode)'
local shortTerm = ' (short)'
local pageType
local episode


-- Checks if page has the postfix (short) in the title
-- Returns a boolean
local function isShort(ep)
    return ep:find('%(short%)') ~= nil
end

-- Checks if page has a postfix (episode) in the title
-- Returns a boolean
local function isEpisode(ep) 
    return ep:find('%(episode%)') ~= nil
end

local function readableTitle(_title) 
    return _title:gsub(' %b()', '')
end

-- Creates the actual link for p.nextLink and p.prevLink methods

local function createLink(_episode)
    if pageType == 'Episode' then
        if isEpisode(_episode) then
            return '"[[' .. _episode .. '|' .. readableTitle(_episode) .. ']]"'
        elseif isShort(_episode) then
            return '"[[' .. _episode .. '|' .. readableTitle(_episode) .. ']]"'
        else
            return '"[[' .. readableTitle(_episode) .. ']]"'
        end
    else
        if isEpisode(_episode) then
            return '"[[' .. _episode .. '/' .. pageType .. '|' .. readableTitle(_episode) .. ']]"'
        elseif isShort(_episode) then
            return '"[[' .. _episode .. '/' .. pageType .. '|' .. readableTitle(_episode) .. ']]"'
        else
            return '"[[' .. _episode .. '/' .. pageType .. '|' .. readableTitle(_episode) .. ']]"'
        end
    end
end

-- Creates a link to the previous episode/gallery/transcript page
-- Returns empty string if wrong pagetype
-- Returns "N/A" if the previous episode is not known

local function prevLink(episodeTitle)
    if not pageType then return '' end
    local prevEpisode = relativeEpisode(episodeTitle, -1)
    if prevEpisode == 'N/A' then
        return 'N/A'
    else
        return createLink(prevEpisode)
    end
end

-- Creates a link to the next episode/gallery/transcript page
-- Returns empty string if wrong pagetype
-- Returns "N/A" if the next episode is not known

local function nextLink(episodeTitle)
    if not pageType then return '' end
    local nextEpisode = relativeEpisode(episodeTitle, 1)
    if nextEpisode == 'N/A' then
        return 'N/A'
    else
        return createLink(nextEpisode)
    end
end

function p.main()
    -- Check if it is an episode (sub)page
    -- by checking if the base page has the Episode template
    --
    -- pageType =
    -- "Episode" on episode pages,
    -- "Gallery" on gallery pages,
    -- "Transcript" on transcript pages
    if basetitle.exists then
        local basecontent = string.lower(basetitle:getContent())
        if basecontent:find('{{episode') or
           basecontent:find('{{template: ?episode') then
            if basecontent:find('season -= -shorts') then
                episodeTerm = ' (short)'
            end
            if title.text == basetitle.text then
                pageType = 'Episode'
            else
                pageType = title.subpageText
            end
        end
    end
    -- Get the current episode name based on the pagename
    -- Returns empty string if wrong pagetype
    if pageType then
        episode = readableTitle(title.baseText)
    else
        episode = ''
    end
    return episode .. ';' .. prevLink(title.baseText) .. ';' .. nextLink(title.baseText)
end
        
return p