Module:Sandbox/Userring

--Userring Google Code-in 2019, Introduction to Lua in Wikipedia
--Lua Task 2 - Working with modules

local p = {}

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

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

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

-- Task 4
function p.timestable(frame)
	local numb = tonumber( frame.args.numb ) or 2
	local out = numb .. " Times table<br>"
	for i = 1, 12 do
		currentout = i * numb
		currentmsg = numb .. " times by " .. i .. " equals " .. currentout
		out = out .. currentmsg .. "<br>"
	end
	return out
end

function p.people(frame)
	local friends = {"Agnetha", "Betty", "Carlos", "Davinder", "Eloise", "Name", "Namer", "Naming"}
	local msg = "The index iterating way:" .. "<br>"
	for i = 1, #friends do
		msg = msg .. "Hello " .. friends[i] .. "<br>"
	end
	msg = msg .. "<br>" .. "The ipairs() way: " .. "<br>"
	for i, friend in ipairs(friends) do 
		msg = msg .. "Hello " .. friends[i] .. "<br>"
	end
	return msg
end

function p.sent(frame)
	local txt = frame.args.text or ""
	local cap = string.upper(string.sub(txt, 1, 1))
	local uncap = string.sub(txt, 2)
	local out = cap .. uncap
	return out
end

function p.unpack(frame)
	local dmy = frame.args.dmydate or ""
	local d, m, y = string.match(dmy, "(%d+) (%w+) (%d+)")
	return "Year = " .. y .. "<br>Day = " .. d .. "<br>Month = " .. m
end

function p.langs(frame)
	local langslist = mw.language.fetchLanguageNames()
	local out = ""
	local count = 0
	for k, v in pairs(langslist) do
		out = out .. k .. " - " .. v .. "<br>"
		count = count + 1
	end
	return out .. "<br>= " .. count .. " languages"
end

function p.fallbacklangs(frame)
	local fallbacklangcode = frame.args.langcode
	local fallbacklanglist = mw.language.getFallbacksFor(fallbacklangcode)
	local fallbackout = ""
	for a, b in pairs(fallbacklanglist) do
		fallbackout = fallbackout .. a .." - " .. b .. "<br>"
	end
	return fallbackout
end

p.pgtitle = function( frame )
	local title = frame.args.title
	local ttlobj = mw.title.new( title )
	local txt = ttlobj.text
	return txt
end

function p.pginfo(frame)
	local title = frame.args.title or "User:Userring" 
	if title == nil or title == "" then
		title = "User:Userring"
	end
	local ttlobj = mw.title.new(title)
	if ttlobj == nil or ttlobj == "" then
		ttlobj = mw.title.new("User:Userring")
	end
	local txt = ttlobj.text
	local ex = ttlobj.exists
	local isr = ttlobj.isRedirect
	exout = " does not exist"
	isrout = " and is not a redirect"
	if ex == true then
		exout = " does exist"
	end
	if isr == true then
		isrout = " and is a redirect"
	end
	return txt .. exout .. isrout
end

-- Get date

function p.getdate(frame)
	local qid = frame.args.qid
	local prop = frame.args.prop
	local valtbl = mw.wikibase.getBestStatements(qid, prop)
	local timestamp = valtbl[1].mainsnak.datavalue.value.time
	timestamp = string.sub(timestamp, 2, 11)
	return timestamp
end

function p.getfulldate(frame)
	local qid = frame.args.qid
	local prop = frame.args.prop
	local monthname = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }
	local valtbl = mw.wikibase.getBestStatements(qid, prop)
	local timestamp = valtbl[1].mainsnak.datavalue.value.time
	timestamp = string.sub(timestamp, 2, 11)
	local year = string.sub(timestamp, 1, 4)
	local month = monthname[tonumber(string.sub(timestamp, 6, 7))]
	local day = string.sub(timestamp, 9, 10)
	return day .." ".. month .. " " .. year
end

function p.getitem(frame)
	local qid = frame.args.qid
	local prop = frame.args.prop
	local valtbl = mw.wikibase.getBestStatements(qid, prop)
	local id = valtbl[1].mainsnak.datavalue.value.id
	local id_in_words = mw.wikibase.getLabel(id)
	return id_in_words
end
return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.