Module:Sandbox/Licsth

-- Google Code-in 2017, Introduction to Lua in Wikipedia

-- Google Code-in 2017, Lua task 3: Create your own Lua module on English Wikipedia

local p = {} -- p stands for package

function p.hello( frame ) return "Hello, world!" end

p.Hi = function(frame) strName = frame.args.name or "Jimbo" return "Hello from Lua to my friend " .. strName .. ". " end

function p.temperature(frame) cel = tonumber(frame.args.celsius) or 0 fah = cel * 9 / 5 + 32 msg = cel .. " degrees Celsius is " .. fah .." degrees Fahrenheit." if cel > 9 then msg = msg .. " It is warm." else msg = msg .. " It is cold." end return msg end

p.times = function(frame) local num = tonumber( frame.args.num ) or 2 local out = num .. " times table " for i = 1, 12 do out = out .. num.. " times " .. i .. " equals " .. i * num .. " "	end return out end

p.mum = function(frame) local family = {"Dad", "Mum", "Uncle Stan", "Aunty Elsie", "Brian", "Cousin Sharon", "Bob the cat", "Grandpa Bob"} local msg = "" for i = 1, #family do msg = msg .. "Hello " .. family[i] .. " "	end return msg end

p.langnames = function( frame ) local langs = mw.language.fetchLanguageNames local langlist = "" local count = 0 for key, value in pairs( langs ) do langlist = langlist .. key .. " - " .. value .. " "		count = count + 1 end return langlist .. " = " .. count .. " languages" end

p.pageinfo = function( frame ) local ttl = frame.args.title local ttlobj = mw.title.new( ttl ) local existing = ttlobj.exists local redirected = ttlobj.isRedirect local text = ttl if existing then text = text .. " exists and is" else text = text .. " does not exist and is" end if redirected then text = text .. " a redirect." else text = text .." not a redirect." end return text end

-- Google Code-in 2017/18, Task 10

p.reign = function(frame) local text = "" local between = "– " local between2 = "– " local startdate = frame.args[1] or "?" startdate = trim(startdate) if startdate == "" then startdate = "?" end local enddate = frame.args[2] or "" enddate = trim(enddate) if string.find(startdate, " ") or string.find(enddate, " ") then between = " –  " end local startdate2 = frame.args[3] or "?" startdate2 = trim(startdate2) if startdate2 == "" then startdate2 = "?" end local enddate2 = frame.args[4] or "" enddate2 = trim(enddate2) if string.find(startdate2, " ") or string.find(enddate2, " ") then between2 = " –  " end local show = frame.args['show'] show = trim(show) local era = frame.args.era or "" era = trim(era) local label = frame.args.label label = trim(label) local post_date = frame.args['post_date'] or frame.args['post-date'] or frame.args['postdate'] post_date = trim(post_date) local pre_date = frame.args['pre_date'] or frame.args['pre-date'] or frame.args['predate'] pre_date = trim(pre_date) local single = frame.args.single single = trim(single) local wraps = frame.args['wrap'] wraps = trim(wraps) local mid_date = frame.args['mid_date'] or frame.args['mid-date'] or frame.args['middate'] mid_date = trim(mid_date) local cap = frame.args.cap cap = trim(cap) local word = "r . " if not label then if show == "word" then if cap == "y" then word = "Reigned " else word = "reigned " end elseif show == "colon" then if cap == "y" then word = "Reign: " else word = "reign: " end elseif show == "lword" then if cap == "y" then word = "Reigned " else word = "reigned " end elseif show == "lcolon" then if cap == "y" then word = "Reign: " else word = "reign: " end elseif show == "blank" then word = "" end else word = label .. " "	end if not single then if not pre_date then text = word .. startdate .. between .. enddate else text = word .. pre_date .. ", " .. startdate .. between .. enddate end if startdate2 ~= "?" or enddate2 ~= "" then if mid_date then text = text .. ", " .. mid_date end text = text .. ", " .. startdate2 .. between2 .. enddate2 end if post_date then text = text .. ", " .. post_date end else text = word .. single end if era ~= "" then text = text .. " " .. era end if wraps == "y" then text = " " .. text .. " "	else text = " " .. text .. " "	end return text end

function trim(text) if text == nil then return nil else return mw.text.trim(text) end end

return p