<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FTary123</id>
	<title>Module:Sandbox/Tary123 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FTary123"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Tary123&amp;action=history"/>
	<updated>2026-04-21T17:54:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Tary123&amp;diff=146282&amp;oldid=prev</id>
		<title>imported&gt;Tary123 at 19:10, 29 December 2017</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Tary123&amp;diff=146282&amp;oldid=prev"/>
		<updated>2017-12-29T19:10:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--Tary123 Google Code-in 2017, Introduction to Lua in Wikipedia&lt;br /&gt;
&lt;br /&gt;
--Lua task #3 - Create your own Lua module on English Wikipedia&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.hello(frame)&lt;br /&gt;
	return &amp;quot;Hello, World!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Lua task #4 - Pass information to your Lua module&lt;br /&gt;
&lt;br /&gt;
p.Hi = function(frame)&lt;br /&gt;
	strName = frame.args.name or &amp;quot;Jimbo&amp;quot;&lt;br /&gt;
	return &amp;quot;Hello from Lua to my friend &amp;quot; .. strName .. &amp;quot;.&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Lua task #5 - Perform calculations in Lua&lt;br /&gt;
&lt;br /&gt;
function p.temperature(frame)&lt;br /&gt;
	cel = frame.args.celsius or 0&lt;br /&gt;
	fah = cel*9/5+32&lt;br /&gt;
	msg = cel..&amp;quot; degrees Celsius is &amp;quot;..fah..&amp;quot; degrees Fahrenheit.&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if tonumber(cel)&amp;gt;9 then&lt;br /&gt;
		msg = msg..&amp;quot; It is warm.&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		msg = msg..&amp;quot; It is cold.&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
--Lua task #7 - Repeating code	&lt;br /&gt;
	&lt;br /&gt;
p.times = function(frame)&lt;br /&gt;
	local num = tonumber( frame.args.num ) or 2&lt;br /&gt;
	local out = num..&amp;quot; times table&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	for i = 1, 12 do&lt;br /&gt;
		out = out .. num .. &amp;quot; times &amp;quot; .. i .. &amp;quot; equals &amp;quot; .. i * num .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
--Lua task #8 - Tables in Lua&lt;br /&gt;
&lt;br /&gt;
p.mum = function(frame)&lt;br /&gt;
	local family = {&amp;quot;Dad&amp;quot;, &amp;quot;Mum&amp;quot;, &amp;quot;Uncle Stan&amp;quot;, &amp;quot;Aunty Elsie&amp;quot;, &amp;quot;Brian&amp;quot;, &amp;quot;Harriet&amp;quot;, &amp;quot;Nicole&amp;quot;, &amp;quot;Drew&amp;quot;}&lt;br /&gt;
	local msg = &amp;quot;&amp;quot;&lt;br /&gt;
	for i = 1, #family do&lt;br /&gt;
		msg = msg .. &amp;quot;Hello &amp;quot; .. family[i] .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	end	&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Lua task #9 - Using MediaWiki Libraries	&lt;br /&gt;
	&lt;br /&gt;
p.langnames = function( frame )&lt;br /&gt;
	local langs = mw.language.fetchLanguageNames()&lt;br /&gt;
	local langlist = &amp;quot;&amp;quot;&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for key, value in pairs( langs ) do&lt;br /&gt;
		langlist = langlist .. key .. &amp;quot; - &amp;quot; .. value .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
		count = count + 1&lt;br /&gt;
	end&lt;br /&gt;
	return langlist .. &amp;quot;&amp;lt;br&amp;gt;= &amp;quot; .. count .. &amp;quot; languages&amp;quot;&lt;br /&gt;
end	&lt;br /&gt;
	&lt;br /&gt;
p.pageinfo = function(frame)&lt;br /&gt;
	local ttl = frame.args.title&lt;br /&gt;
	local ttlobj = mw.title.new(ttl)&lt;br /&gt;
	local txt = ttlobj.prefixedText&lt;br /&gt;
	&lt;br /&gt;
	if ttlobj.exists then&lt;br /&gt;
		txt = txt..&amp;quot; exists and is &amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		txt = txt..&amp;quot; does not exist and is &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not ttlobj.isRedirect then&lt;br /&gt;
		txt = txt..&amp;quot;not &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	txt = txt..&amp;quot;a redirect.&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return txt&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
--Lua task #10 - Update code of the &amp;quot;Reign&amp;quot; template on English Wikipedia&lt;br /&gt;
&lt;br /&gt;
function p.reign(frame)&lt;br /&gt;
	local label = frame.args.label&lt;br /&gt;
	local show = frame.args.show or frame.args.link or frame.args.lk&lt;br /&gt;
	local r = frame.args.cap and &amp;quot;R&amp;quot; or &amp;quot;r&amp;quot;&lt;br /&gt;
	local wbr = frame.args[&amp;quot;wrap&amp;quot;] and &amp;quot;&amp;lt;wbr&amp;gt;&amp;amp;#8203;&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
	local text = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if frame.args.sortable then&lt;br /&gt;
		text = &amp;quot;&amp;lt;span style=&amp;#039;display:none; speak:none;&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
		local sortdate = frame.args.sort_date or frame.args.sortdate or&lt;br /&gt;
		frame.args[&amp;quot;sort-date&amp;quot;] or 	frame.args.single or&lt;br /&gt;
		frame.args[&amp;quot;pre-date&amp;quot;] or frame.args.predate or frame.args.pre_date or &lt;br /&gt;
		frame.args[1] or frame.args[2] or&lt;br /&gt;
		frame.args[&amp;quot;post-date&amp;quot;] or frame.args.postdate or frame.args.post_date&lt;br /&gt;
		sortdate = string.format(&amp;quot;%04d&amp;quot;, sortdate)&lt;br /&gt;
		text = text..sortdate..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	text = text..&amp;quot;&amp;lt;span style=&amp;#039;white-space:nowrap;&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
	if label then text = text..label..&amp;quot;&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;word&amp;quot; then	text = text..r..&amp;quot;eigned&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;colon&amp;quot; then	text = text..r..&amp;quot;eign:&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;lword&amp;quot; then	text = text..&amp;quot;[[Reign|&amp;quot;..r..&amp;quot;eigned]]&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;lcolon&amp;quot; then text = text..&amp;quot;[[Reign|&amp;quot;..r..&amp;quot;eign]]:&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;none&amp;quot; or show == &amp;quot;no&amp;quot; or show == &amp;quot;n&amp;quot; or show == &amp;quot;off&amp;quot; or show == &amp;quot;false&amp;quot; or show == &amp;quot;0&amp;quot; then text = text..r..&amp;quot;.&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;link&amp;quot; or show == &amp;quot;yes&amp;quot; or show == &amp;quot;y&amp;quot; or show == &amp;quot;on&amp;quot; or show == &amp;quot;true&amp;quot; or show == &amp;quot;1&amp;quot; then text = text..&amp;quot;[[Reign|&amp;quot;..r..&amp;quot;.]]&amp;quot;&lt;br /&gt;
	elseif show == &amp;quot;blank&amp;quot; then&lt;br /&gt;
	else text = text..&amp;quot;&amp;lt;abbr title=&amp;#039;reign&amp;#039;&amp;gt;&amp;quot;..r..&amp;quot;&amp;lt;/abbr&amp;gt;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if show ~= &amp;quot;blank&amp;quot; then text = text..&amp;quot;&amp;amp;nbsp;&amp;quot; end&lt;br /&gt;
	&lt;br /&gt;
	local predate = frame.args[&amp;quot;pre-date&amp;quot;] or frame.args.predate or frame.args.pre_date&lt;br /&gt;
	if predate then&lt;br /&gt;
		predate = trim(predate)&lt;br /&gt;
		text = text..predate..&amp;quot;,&amp;amp;nbsp;&amp;quot;..wbr&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local start1 = frame.args[1]&lt;br /&gt;
	local finish1 = frame.args[2]&lt;br /&gt;
	if start1 or finish1 then&lt;br /&gt;
		start1 = start1 or &amp;quot;?&amp;quot;&lt;br /&gt;
		finish1 = finish1 or &amp;quot;&amp;quot;&lt;br /&gt;
		start1 = trim(start1)&lt;br /&gt;
		finish1 = trim(finish1)&lt;br /&gt;
		if start1 == &amp;quot;&amp;quot; then start1 = &amp;quot;?&amp;quot; end&lt;br /&gt;
		if string.find(start1, &amp;quot;%s&amp;quot;) or string.find(finish1, &amp;quot;%s&amp;quot;) then text = text..start1..&amp;quot;&amp;amp;nbsp;–&amp;amp;nbsp;&amp;quot;..finish1&lt;br /&gt;
		else text = text..start1..&amp;quot;–&amp;quot;..finish1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local middate = frame.args[&amp;quot;mid-date&amp;quot;] or frame.args.middate or frame.args.mid_date&lt;br /&gt;
	if middate and start1 then&lt;br /&gt;
		middate = trim(middate)&lt;br /&gt;
		text = text..&amp;quot;,&amp;amp;nbsp;&amp;quot;..wbr..middate&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	local start2  = frame.args[3]&lt;br /&gt;
	local finish2 = frame.args[4]&lt;br /&gt;
	if start2 or finish2 then&lt;br /&gt;
		text = text..&amp;quot;,&amp;amp;nbsp;&amp;quot;..wbr&lt;br /&gt;
		start2 = start2 or &amp;quot;?&amp;quot;&lt;br /&gt;
		finish2 = finish2 or &amp;quot;&amp;quot;&lt;br /&gt;
		start2 = trim(start2)&lt;br /&gt;
		finish2 = trim(finish2)&lt;br /&gt;
		if start2 == &amp;quot;&amp;quot; then start2 = &amp;quot;?&amp;quot; end&lt;br /&gt;
		if string.find(start2, &amp;quot;%s&amp;quot;) or string.find(finish2, &amp;quot;%s&amp;quot;) then text = text..start2..&amp;quot;&amp;amp;nbsp;–&amp;amp;nbsp;&amp;quot;..finish2&lt;br /&gt;
		else text = text..start2..&amp;quot;–&amp;quot;..finish2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local postdate = frame.args.single or frame.args[&amp;quot;post-date&amp;quot;] or frame.args.postdate or frame.args.post_date&lt;br /&gt;
	if postdate then&lt;br /&gt;
		if finish1 or finish2 then text = text..&amp;quot;,&amp;amp;nbsp;&amp;quot;..wbr end&lt;br /&gt;
		postdate = trim(postdate)&lt;br /&gt;
		text = text..postdate&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local era = frame.args.era&lt;br /&gt;
	if era then text = text..&amp;quot;&amp;amp;nbsp;&amp;quot;..era end&lt;br /&gt;
	&lt;br /&gt;
	text = text..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end	&lt;br /&gt;
	&lt;br /&gt;
function trim(s)&lt;br /&gt;
	return s:gsub(&amp;quot;^%s+&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;%s+$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
--Lua task #11 - Create a general date-handling function&lt;br /&gt;
	&lt;br /&gt;
function p.extractdate(frame)&lt;br /&gt;
	local inputstr = frame.args[1]&lt;br /&gt;
	local dateformat = frame.args.dateformat or &amp;quot;dmy&amp;quot;&lt;br /&gt;
	local datestr&lt;br /&gt;
	&lt;br /&gt;
	-- Check for dates from 13-31 first, before 0-12&lt;br /&gt;
	-- Necessary so as to avoid accidentally catching a month when a date is given&lt;br /&gt;
	local dateno = inputstr:match(&amp;quot;%D(3[01])%D&amp;quot;) or inputstr:match(&amp;quot;^(3[01])%D&amp;quot;) or inputstr:match(&amp;quot;%D(3[01])$&amp;quot;) or&lt;br /&gt;
				inputstr:match(&amp;quot;%D(2%d)%D&amp;quot;) or inputstr:match(&amp;quot;^(2%d)%D&amp;quot;) or inputstr:match(&amp;quot;%D(2%d)$&amp;quot;) or&lt;br /&gt;
				inputstr:match(&amp;quot;%D(1[3-9])%D&amp;quot;) or inputstr:match(&amp;quot;^(1[3-9])%D&amp;quot;) or inputstr:match(&amp;quot;%D(1[3-9])$&amp;quot;) or&lt;br /&gt;
				inputstr:match(&amp;quot;%D([01]?%d)%D&amp;quot;) or inputstr:match(&amp;quot;^([01]?%d)%D&amp;quot;) or inputstr:match(&amp;quot;%D([01]?%d)$&amp;quot;)&lt;br /&gt;
	dateno = tonumber(dateno)			   &lt;br /&gt;
	local month&lt;br /&gt;
	local monthno&lt;br /&gt;
	&lt;br /&gt;
	-- Date 0 is not possible&lt;br /&gt;
	if (dateno or 0) == 0 then dateno = nil end&lt;br /&gt;
	&lt;br /&gt;
	local monthlist = {&amp;quot;January&amp;quot;, &amp;quot;February&amp;quot;, &amp;quot;March&amp;quot;, &amp;quot;April&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;June&amp;quot;, &amp;quot;July&amp;quot;, &amp;quot;August&amp;quot;, &amp;quot;September&amp;quot;, &amp;quot;October&amp;quot;, &amp;quot;November&amp;quot;, &amp;quot;December&amp;quot;}&lt;br /&gt;
	local maxdays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}&lt;br /&gt;
	&lt;br /&gt;
	local idx = #inputstr&lt;br /&gt;
	for i,mth in pairs(monthlist) do&lt;br /&gt;
		local mthabbr = mth:lower():sub(1,3)&lt;br /&gt;
		-- matches first month found in inputstr, regardless of case, but only if date is valid for that month&lt;br /&gt;
		if inputstr:lower():match(mthabbr) and inputstr:lower():find(mthabbr)&amp;lt;idx and (tonumber(dateno) or 0)&amp;lt;=maxdays[i] then&lt;br /&gt;
			month = mth&lt;br /&gt;
			monthno = i&lt;br /&gt;
			idx = inputstr:lower():find(mthabbr)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If the month number is used instead of month name&lt;br /&gt;
	if not month then&lt;br /&gt;
		monthno = inputstr:match(&amp;quot;%D(0?%d)%D&amp;quot;) or inputstr:match(&amp;quot;^(0?%d)%D&amp;quot;) or inputstr:match(&amp;quot;%D(0?%d)$&amp;quot;) or&lt;br /&gt;
				inputstr:match(&amp;quot;%D(1?[0-2])%D&amp;quot;) or inputstr:match(&amp;quot;^(1?[0-2])%D&amp;quot;) or inputstr:match(&amp;quot;%D(1?[0-2])$&amp;quot;)&lt;br /&gt;
		month = monthlist[tonumber(monthno)]&lt;br /&gt;
		&lt;br /&gt;
		--Ambiguous date/month&lt;br /&gt;
		if dateno and tonumber(dateno)&amp;lt;=12 then&lt;br /&gt;
			month = nil&lt;br /&gt;
			monthno = nil&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
	-- year gives priority to numbers preceding AD/BC/CE/BCE, followed by 4- or 3-digit numbers,&lt;br /&gt;
	-- followed by numbers from 32 to 99&lt;br /&gt;
	local year = inputstr:match(&amp;quot;%d+%s-[ABC][DCE]&amp;quot;) or inputstr:match(&amp;quot;%d?%d%d%d&amp;quot;) &lt;br /&gt;
				or inputstr:match(&amp;quot;[4-9]%d&amp;quot;) or inputstr:match(&amp;quot;3[2-9]&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if (dateformat ~= &amp;quot;y&amp;quot; and (not dateno or not month)) or not year then&lt;br /&gt;
		return &amp;quot;Invalid date&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local yearno = year:match(&amp;quot;%d+&amp;quot;)&lt;br /&gt;
	year = year:gsub(yearno, tonumber(yearno))&lt;br /&gt;
	&lt;br /&gt;
	local eraformat = frame.args.eraformat or &amp;quot;CE&amp;quot;&lt;br /&gt;
	if eraformat == &amp;quot;AD&amp;quot; or eraformat == &amp;quot;BC&amp;quot; then&lt;br /&gt;
		year = year:gsub(&amp;quot;CE&amp;quot;, &amp;quot;AD&amp;quot;)		-- &amp;quot;BCE&amp;quot; is never parsed by year&lt;br /&gt;
	elseif eraformat == &amp;quot;CE&amp;quot; or eraformat == &amp;quot;BCE&amp;quot; then&lt;br /&gt;
		year = year:gsub(&amp;quot;AD&amp;quot;, &amp;quot;CE&amp;quot;):gsub(&amp;quot;BC&amp;quot;, &amp;quot;BCE&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Invalid era format&amp;quot;&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	if dateformat == &amp;quot;dmy&amp;quot; then&lt;br /&gt;
		datestr = dateno..&amp;quot; &amp;quot;..month..&amp;quot; &amp;quot;..year&lt;br /&gt;
	elseif dateformat == &amp;quot;mdy&amp;quot; then&lt;br /&gt;
		datestr = month..&amp;quot; &amp;quot;..dateno..&amp;quot;, &amp;quot;..year&lt;br /&gt;
	elseif dateformat == &amp;quot;iso&amp;quot; then&lt;br /&gt;
		datestr = string.format(&amp;quot;%04d&amp;quot;, yearno)..&amp;quot;-&amp;quot;..string.format(&amp;quot;%02d&amp;quot;, monthno)..&amp;quot;-&amp;quot;..string.format(&amp;quot;%02d&amp;quot;, dateno)&lt;br /&gt;
	elseif dateformat == &amp;quot;y&amp;quot; then&lt;br /&gt;
		datestr = year&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Invalid date format&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Tary123</name></author>
	</entry>
</feed>