Module:Ep ref

local p = {} -- function to create and format the reference function p.epRef(frame) local reference = true local epSwitcher = require('Module:Ep/Switcher') -- receiving parameters local ep = frame.args["ep"] or "" local part = frame.args["part"] or nil local intro = frame.args["intro"] or nil local more = frame.args["more"] or nil local vod = frame.args["vod"] or nil local group = frame.args["group"] or nil local name = frame.args["name"] or nil local startTime = frame.args[1] or nil local endTime = frame.args[2] or nil local cite = frame.args["cite"] or nil local nsfw = frame.args["nsfw"] or nil local epName, CxEE = epSwitcher.epSwitcher(frame, reference) if isnotempty(CxEE) then epName = "\"" .. epName .. "\"" end -- (CxEE) local small = mw.html.create('small') small :wikitext("(" .. CxEE .. ")")   if isnotempty(CxEE) then fullEpName = epName .. " " .. tostring(small) else fullEpName = epName end -- Set empty CxEE value to 0x00 for the purposes of the "Articles needing citations/0x00" category if not isnotempty(CxEE) then CxEE = "0x00" end -- if part was used to define a Trial of the Take episode, remove part from final reference if CxEE == "1x18" or CxEE == "1x19" or CxEE == "1x20" or CxEE == "1x21" then part = "" end -- get YouTube URL from Module:Ep/YTURLSwitcher/URLs local ytURL = mw.loadData('Module:Ep/YTURLSwitcher/URLs') local url if isnotempty(vod) then url = vod elseif isnotempty(part) then url = ytURL[CxEE .. part] else url = ytURL[CxEE] or ytURL["default"] end --add timestamp to youtube URL local timeSnippet local timedURL local longURL = false local timeLength if isnotempty(url) then longURL = string.find(url, "?") end -- split timestamp at colons if isnotempty(startTime) then timeSnippet = split(startTime, ":") end if isnotempty(timeSnippet) then timeLength = #timeSnippet end -- adding time to standard ("long") YouTube URLs if isnotempty(timeSnippet) and longURL and timeLength == 3 then timedURL = "[" .. url .. "&amp;t=0" .. timeSnippet[1] .. "h0" .. timeSnippet[2] .. "m0" .. timeSnippet[3] .. "s " .. startTime .. "]"   elseif isnotempty(timeSnippet) and longURL and timeLength == 2 then timedURL = "[" .. url .. "&amp;t=0" .. timeSnippet[1] .. "m0" .. timeSnippet[2] .. "s " .. startTime .. "]"   elseif isnotempty(timeSnippet) and longURL and timeLength == 1 then timedURL = "[" .. url .. "&amp;t=0" .. timeSnippet[1] .. "s " .. startTime .. "]" end -- adding time to shortened URLS if isnotempty(url) and isnotempty(timeSnippet) and not longURL and timeLength == 3 then timedURL = "[" .. url .. "?t=0" .. timeSnippet[1] .. "h0" .. timeSnippet[2] .. "m0" .. timeSnippet[3] .. "s " .. startTime .. "]"   elseif isnotempty(url) and isnotempty(timeSnippet) and not longURL and timeLength == 2 then timedURL = "[" .. url .. "?t=0" .. timeSnippet[1] .. "m0" .. timeSnippet[2] .. "s " .. startTime .. "]"   elseif isnotempty(url) and isnotempty(timeSnippet) and not longURL and timeLength == 1 then timedURL = "[" .. url .. "?t=0" .. timeSnippet[1] .. "s " .. startTime .. "]" end if isnotempty(timedURL) then startTime = timedURL end local refText = 'See ' .. fullEpName if isnotempty(part) then refText = refText .. ", part " .. part end if isnotempty(part) and isnotempty(startTime) then refText = refText .. "," end if isnotempty(startTime) and isnotempty(endTime) then refText = refText .. " from " .. startTime .. " through " .. endTime .. "."   elseif isnotempty(startTime) then refText = refText .. " at " .. startTime .. "."   else refText = refText .. "." end -- citation format local supCite = mw.html.create('sup') supCite :wikitext("[citation needed]") local citeCategory if isnotempty(cite) then citeCategory = "" end if isnotempty(intro) then refText = intro .. " " .. refText end if isnotempty(cite) then refText = refText .. tostring(supCite) .. citeCategory end if isnotempty(more) then refText = refText .. " " .. more end if isnotempty(nsfw) then nsfw = " NSFW ." end if isnotempty(nsfw) then refText = refText .. nsfw end -- create wikitext reference local reference = "" .. refText .. " "   -- Temporary category for the purposes of transitioning the timecodes from Campaign 1, Episode 1 up to and including Campaign 2, Episode 50. Episodes were moved (only 2x20 to, including, 2x50 at the time of writing, other episodes presumably will be moved too) from the G&S channel to the CR channel. We needed a list of all articles referencing these episodes to update timestamps because the breaks were removed. -- reference = reference .. ""   return frame:preprocess(reference) end -- function to split a string at a specified character function split(s, delimiter) result = {}; for match in (s..delimiter):gmatch("(.-)"..delimiter) do       table.insert(result, match); end return result; end -- function to determine that a string is not empty function isnotempty(s) return s ~= nil and s~= '' end return p