Module:Sandbox

local p = {}

function p.test(frame) local number_of_args = "" for k,v in pairs(frame.args) do number_of_args = number_of_args .. k .. ": " .. v .. ", "	end return number_of_args end

function p.Sandbox(frame) local title = mw.title.new("asdf") local content = title:getContent local length = string.len(content) return length end

-- begin navbox local function renderTitleRow(tbl, title) if title ~= nil then local titleRow = tbl:tag('tr') -- this will probably always be 2 in our stripped-down implementation local colspan = 2 local titleCell = titleRow:tag('th') :attr('colspan', colspan) :css('text-align', 'center') :wikitext(title) end end

local function renderListRow(tbl, groupX, listX) if listX ~= nil then local listRow = tbl:tag('tr') local listCell if groupX ~= nil then local groupCell = listRow:tag('th') :attr('colspan', 1) :css('text-align', 'right') :wikitext(groupX) listCell = listRow:tag('td') :attr('colspan', 1) :css('text-align', 'left') :css('border-left', '1px #9ca6c2 solid') else listCell = listRow:tag('td') :attr('colspan', 2) :css('text-align', 'center') end -- args are automatically trimmed, so we need to insert newline to make lists work properly listCell:wikitext('\n' .. listX) end end

local function renderTable(args, listnums) local tbl = mw.html.create('table') :addClass('article-table') :addClass('hlist') :addClass('nowraplinks') :css('border', '2px solid #9ca6c2')

if args.title ~= nil then renderTitleRow(tbl, args.title) end for i, listnum in ipairs(listnums) do renderListRow(tbl, args["group" .. tostring(listnum)], args["list" .. tostring(listnum)]) end return tbl end

function whitespace_sanitize(parameter_string) -- trying to clear out the leading and trailing whitespace that comes from block formatting. local results = nil if parameter_string ~= nil then results = string.match(parameter_string, "^[\n\r%s]*(.+)[\n\r%s]*$") -- I'm pretty new to regex stuff, this probably doesn't actually work. if results == "" then results = nil end end return results end

function name_replace(sender, autocat) local results = nil if sender ~= nil or sender == "" then

local replace_list = { ["Rachel Spurling"] = "Rachel Rosing", ["Emma Kantt"] = "Ben Kantt", ["JPhonic"] = "Jordan Mallory", ["ActionAlan"] = "Alan Black", }		-- remove any trailing refs (or any ) -- append them back on later local sender_orig local additional for name, addtl in string.gmatch(sender, "([^<]+)(.*)$") do			sender_orig = whitespace_sanitize(name) additional = addtl end local sender_repl = replace_list[sender_orig] or sender_orig if mw.title.new(sender_repl).exists then -- just ignore the original value altogether results = "" .. sender_repl .. "" --			if sender_orig ~= sender_repl then --				-- page exists, needs replacement --				results = "" .. sender_orig .. "" --			else --				-- page exists, no replacement --				results = "" .. sender_repl .. "" --			end end results = results .. additional

if autocat then results = results .. ""		end end

return results end

function time_stamping(timestamp) -- timestamping should be a pretty universal element to these segments, handle that here local results if timestamp ~= nil then timestamp = whitespace_sanitize(timestamp) -- automatically convert h:mm:ss format to (m)mm:ss format. -- if string doesn't match regex, it'll just continue as usual results = string.gsub(timestamp, "([0-9]+):([0-9]+):([0-9]+)", function(h,m,s) return string.format("%d:%s", tonumber(h) * 60 + tonumber(m), s) end) else -- default value results = "??:??" end results = results .. " - "	return results end

function p.segment(frame) -- Like Template:Segment, handle any segments that don't have specific handling here. local title = whitespace_sanitize(frame.args["Title"]) local body = whitespace_sanitize(frame.args["Body"]) local sender = name_replace(whitespace_sanitize(frame.args["Sender"]), nil) local segment_title

-- still using a string, because I think lua sets are ugly local segments_without_category = "Intro, Email, Question, Housekeeping, Quote" local question_segments = "Question, Email, Formspring, Twitter" -- timestamp local wikitext = time_stamping(frame.args["TimeStamp"]) -- title -- uncaught error when title is not provided local link_start = string.find(title, "%[") if link_start == nil then if mw.title.new(title).exists then wikitext = wikitext .. "" .. title .. "" else wikitext = wikitext .. "'''" .. title .. "'''"		end segment_title = title else -- if you give it "Munch Squad Jr" -- or "Second Munch Squad" -- it will add the correct category -- if you give it "Munch Squad]" -- it will only add it as wikitext with no additional processing -- this is not recommended behavior, but the code falls here as a failsafe wikitext = wikitext .. "'''" .. title .. "'''"		-- unhandled behavior: multiple links for match in string.gmatch(title, "%[%[([^%|%]]*)") do			segment_title = match end end -- body if body ~= nil then wikitext = wikitext .. " - " .. body end -- sender if sender ~= nil then if string.find(question_segments, segment_title) ~= nil then wikitext = wikitext .. " -- " .. sender else -- addtl context for other segments where someone may send something in (eg Munch Squad) wikitext = wikitext .. " -- Sent in by " .. sender end end if string.find(segments_without_category, segment_title) == nil then wikitext = wikitext .. ""	end return wikitext end

return p