Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Tary123
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
--Tary123 Google Code-in 2017, Introduction to Lua in Wikipedia --Lua task #3 - Create your own Lua module on English Wikipedia local p = {} function p.hello(frame) return "Hello, World!" end --Lua task #4 - Pass information to your Lua module p.Hi = function(frame) strName = frame.args.name or "Jimbo" return "Hello from Lua to my friend " .. strName .. ".<br>" end --Lua task #5 - Perform calculations in Lua function p.temperature(frame) cel = frame.args.celsius or 0 fah = cel*9/5+32 msg = cel.." degrees Celsius is "..fah.." degrees Fahrenheit." if tonumber(cel)>9 then msg = msg.." It is warm.<br>" else msg = msg.." It is cold.<br>" end return msg end --Lua task #7 - Repeating code p.times = function(frame) local num = tonumber( frame.args.num ) or 2 local out = num.." times table<br>" for i = 1, 12 do out = out .. num .. " times " .. i .. " equals " .. i * num .. "<br>" end return out end --Lua task #8 - Tables in Lua p.mum = function(frame) local family = {"Dad", "Mum", "Uncle Stan", "Aunty Elsie", "Brian", "Harriet", "Nicole", "Drew"} local msg = "" for i = 1, #family do msg = msg .. "Hello " .. family[i] .. "<br>" end return msg end --Lua task #9 - Using MediaWiki Libraries 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 .. "<br>" count = count + 1 end return langlist .. "<br>= " .. count .. " languages" end p.pageinfo = function(frame) local ttl = frame.args.title local ttlobj = mw.title.new(ttl) local txt = ttlobj.prefixedText if ttlobj.exists then txt = txt.." exists and is " else txt = txt.." does not exist and is " end if not ttlobj.isRedirect then txt = txt.."not " end txt = txt.."a redirect.<br>" return txt end --Lua task #10 - Update code of the "Reign" template on English Wikipedia function p.reign(frame) local label = frame.args.label local show = frame.args.show or frame.args.link or frame.args.lk local r = frame.args.cap and "R" or "r" local wbr = frame.args["wrap"] and "<wbr>​" or "" local text = "" if frame.args.sortable then text = "<span style='display:none; speak:none;'>" local sortdate = frame.args.sort_date or frame.args.sortdate or frame.args["sort-date"] or frame.args.single or frame.args["pre-date"] or frame.args.predate or frame.args.pre_date or frame.args[1] or frame.args[2] or frame.args["post-date"] or frame.args.postdate or frame.args.post_date sortdate = string.format("%04d", sortdate) text = text..sortdate.."</span>" end text = text.."<span style='white-space:nowrap;'>" if label then text = text..label.."" elseif show == "word" then text = text..r.."eigned" elseif show == "colon" then text = text..r.."eign:" elseif show == "lword" then text = text.."[[Reign|"..r.."eigned]]" elseif show == "lcolon" then text = text.."[[Reign|"..r.."eign]]:" elseif show == "none" or show == "no" or show == "n" or show == "off" or show == "false" or show == "0" then text = text..r.."." elseif show == "link" or show == "yes" or show == "y" or show == "on" or show == "true" or show == "1" then text = text.."[[Reign|"..r..".]]" elseif show == "blank" then else text = text.."<abbr title='reign'>"..r.."</abbr>." end if show ~= "blank" then text = text.." " end local predate = frame.args["pre-date"] or frame.args.predate or frame.args.pre_date if predate then predate = trim(predate) text = text..predate..", "..wbr end local start1 = frame.args[1] local finish1 = frame.args[2] if start1 or finish1 then start1 = start1 or "?" finish1 = finish1 or "" start1 = trim(start1) finish1 = trim(finish1) if start1 == "" then start1 = "?" end if string.find(start1, "%s") or string.find(finish1, "%s") then text = text..start1.." β "..finish1 else text = text..start1.."β"..finish1 end end local middate = frame.args["mid-date"] or frame.args.middate or frame.args.mid_date if middate and start1 then middate = trim(middate) text = text..", "..wbr..middate end local start2 = frame.args[3] local finish2 = frame.args[4] if start2 or finish2 then text = text..", "..wbr start2 = start2 or "?" finish2 = finish2 or "" start2 = trim(start2) finish2 = trim(finish2) if start2 == "" then start2 = "?" end if string.find(start2, "%s") or string.find(finish2, "%s") then text = text..start2.." β "..finish2 else text = text..start2.."β"..finish2 end end local postdate = frame.args.single or frame.args["post-date"] or frame.args.postdate or frame.args.post_date if postdate then if finish1 or finish2 then text = text..", "..wbr end postdate = trim(postdate) text = text..postdate end local era = frame.args.era if era then text = text.." "..era end text = text.."</span>" return text end function trim(s) return s:gsub("^%s+", ""):gsub("%s+$", "") end --Lua task #11 - Create a general date-handling function function p.extractdate(frame) local inputstr = frame.args[1] local dateformat = frame.args.dateformat or "dmy" local datestr -- Check for dates from 13-31 first, before 0-12 -- Necessary so as to avoid accidentally catching a month when a date is given local dateno = inputstr:match("%D(3[01])%D") or inputstr:match("^(3[01])%D") or inputstr:match("%D(3[01])$") or inputstr:match("%D(2%d)%D") or inputstr:match("^(2%d)%D") or inputstr:match("%D(2%d)$") or inputstr:match("%D(1[3-9])%D") or inputstr:match("^(1[3-9])%D") or inputstr:match("%D(1[3-9])$") or inputstr:match("%D([01]?%d)%D") or inputstr:match("^([01]?%d)%D") or inputstr:match("%D([01]?%d)$") dateno = tonumber(dateno) local month local monthno -- Date 0 is not possible if (dateno or 0) == 0 then dateno = nil end local monthlist = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} local maxdays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} local idx = #inputstr for i,mth in pairs(monthlist) do local mthabbr = mth:lower():sub(1,3) -- matches first month found in inputstr, regardless of case, but only if date is valid for that month if inputstr:lower():match(mthabbr) and inputstr:lower():find(mthabbr)<idx and (tonumber(dateno) or 0)<=maxdays[i] then month = mth monthno = i idx = inputstr:lower():find(mthabbr) end end -- If the month number is used instead of month name if not month then monthno = inputstr:match("%D(0?%d)%D") or inputstr:match("^(0?%d)%D") or inputstr:match("%D(0?%d)$") or inputstr:match("%D(1?[0-2])%D") or inputstr:match("^(1?[0-2])%D") or inputstr:match("%D(1?[0-2])$") month = monthlist[tonumber(monthno)] --Ambiguous date/month if dateno and tonumber(dateno)<=12 then month = nil monthno = nil end end -- year gives priority to numbers preceding AD/BC/CE/BCE, followed by 4- or 3-digit numbers, -- followed by numbers from 32 to 99 local year = inputstr:match("%d+%s-[ABC][DCE]") or inputstr:match("%d?%d%d%d") or inputstr:match("[4-9]%d") or inputstr:match("3[2-9]") if (dateformat ~= "y" and (not dateno or not month)) or not year then return "Invalid date" end local yearno = year:match("%d+") year = year:gsub(yearno, tonumber(yearno)) local eraformat = frame.args.eraformat or "CE" if eraformat == "AD" or eraformat == "BC" then year = year:gsub("CE", "AD") -- "BCE" is never parsed by year elseif eraformat == "CE" or eraformat == "BCE" then year = year:gsub("AD", "CE"):gsub("BC", "BCE") else return "Invalid era format" end if dateformat == "dmy" then datestr = dateno.." "..month.." "..year elseif dateformat == "mdy" then datestr = month.." "..dateno..", "..year elseif dateformat == "iso" then datestr = string.format("%04d", yearno).."-"..string.format("%02d", monthno).."-"..string.format("%02d", dateno) elseif dateformat == "y" then datestr = year else return "Invalid date format" end return datestr end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/Tary123/doc
(
edit
)