Module:Event countdown

From MOASSpedia
Jump to navigation Jump to search

Usage

  • For a one-day event:
event_date
{{ #invoke: Event countdown | countdown | yyyy | mm | dd }}
  • For a multiple-day event:
start_date end_date
{{ #invoke: Event countdown | countdown | yyyy | mm | dd | yyyy | mm | dd }}
  • For an unconfirmed event:
{{ #invoke: Event countdown | countdown | text=Unconfirmed }}

Examples

  • Future event: {{#invoke:Event countdown|countdown|2025|1|1}}187 days to go
  • Current event: {{#invoke:Event countdown|countdown|2024|06|28}}Live Event
  • Past event: {{#invoke:Event countdown|countdown|2018|11|25}}End of Event
  • "Month of May" event: {{#invoke:Event countdown|countdown|2024|5|1|2024|5|31}}End of Event
  • Unconfirmed event: {{#invoke:Event countdown|countdown|text=Unconfirmed}}Unconfirmed



local p = {}

function p.countdown(frame)
	local year1 = tonumber(frame.args.year1 or frame.args[1])
	local month1 = tonumber(frame.args.month1 or frame.args[2])
	local day1 = tonumber(frame.args.day1 or frame.args[3])
	local year2 = tonumber(frame.args.year2 or frame.args[4])
	local month2 = tonumber(frame.args.month2 or frame.args[5])
	local day2 = tonumber(frame.args.day2 or frame.args[6])
	local endtext = frame.args.endtext or "End of Event"
	local livetext = frame.args.livetext or "Live Event"
	local text = frame.args.text
	
	local time1 = nil
	local time2 = nil
	local bgcolor = "#666666"
	local textcolor = "#DDDDDD"
	
	local span = mw.html.create("span")
	span:css{
		["display"] = "inline-block",
		["font-weight"] = "bold",
		["font-style"] = "italic",
		["padding-left"] = "0.5em",
		["padding-right"] = "0.5em",
		["margin-bottom"] = "0.4em"
	}
	
	if text ~= nil or day1 == nil or month1 == nil or year1 == nil then
		span
			:css{background = bgcolor, color = textcolor}
			:wikitext(text or "Invalid input")
		return tostring(span)
	end
	
	time1 = frame:expandTemplate{title = "Age in days", args = {
		year2 = year1,
		month2 = month1,
		day2 = day1
	}}
	
	time1 = tonumber(time1:gsub("−", "-") .. "")
	
	if day2 == nil or month2 == nil or year2 == nil then
		time2 = time1
	else
		time2 = frame:expandTemplate{title = "Age in days", args = {
			year2 = year2,
			month2 = month2,
			day2 = day2
		}}
		time2 = tonumber(time2:gsub("−", "-") .. "")
	end
	
	if time1 > 0 then
		bgcolor = "#C66320"
		text = time1 .. " day"
		if time1 > 1 then text = text .. "s" end
		text = text .. " to go"
	elseif time2 < 0 then
		bgcolor = "#AA1111"
		text = endtext
	else
		bgcolor = "#00B000"
		text = livetext
	end
	
	textcolor = "#FFFFFF"
	
	span
		:css{background = bgcolor, color = textcolor}
		:wikitext(text)
	
	return tostring(span)
end

return p