Module:EpisodeLinks

--

local p = {}

local relativeEpisode = require('Module:TabSwitch')._relativeEpisode local title = mw.title.getCurrentTitle

-- Removes content between parentheses and /Transcript or /Gallery parts in titles -- Returns a string local function readableTitle(_title) return _title:gsub(' %b', ):gsub('/%a+', ) end

-- Removes any subpage parts in the title supplied -- Returns a string local function baseTitle(_title) return _title:gsub('/%a+', '') end

-- Creates a wikilink with the arguments provided -- Returns a string local function createLink(page, displayText) if displayText ~= page and displayText then return  .. displayText ..  else return  .. page ..  end end

-- Utility function to provide easier way of calling createLink -- Returns a string local function createEpisodeLink(episode) return createLink(episode, readableTitle(episode)) end

-- Restores /Gallery or /Transcript parts in page name depending on second parameter subpage text -- Returns a string local function restoreSubpage(episode, original) local subpage = original:match('/%a+') if not subpage then return episode else return episode .. subpage end end

-- Returns relative episode link from offset number -- Returns a string local function relativeLink(episode, offset) local relEpisode = relativeEpisode(baseTitle(episode), offset) if relEpisode == 'N/A' then return relEpisode else local relTitle = restoreSubpage(relEpisode, episode) return createEpisodeLink(relTitle) end end

-- Utility function for calling relativeLink(episode, -1) -- Returns a string local function prevLink(episode) return relativeLink(episode, -1) end

-- Utility function for calling relativeLink(episode, 1) -- Returns a string local function nextLink(episode) return relativeLink(episode, 1) end

-- Main function when invoking the module through -- Takes no arguments -- Returns readable title, previous episode link and next episode link separated with semicolons function p.main if title.namespace ~= 0 then return ';;' else local name = title.fullText return readableTitle(name) .. ';"' .. prevLink(name) .. '";"' .. nextLink(name) .. '"' end end

return p