Home
Random
Recent changes
Special pages
Community portal
Settings
About Irony Wiki
Disclaimers
Irony Wiki
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Countdown
β οΈ
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 instead of your IP, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- Copied from Wikipedia, August 2 2020 edit. -- This module powers {{countdown}}. local p = {} -- Constants local lang = mw.language.getContentLanguage() local getArgs = require('Module:Arguments').getArgs local function formatMessage(secondsLeft, event, color) local timeLeft = lang:formatDuration(secondsLeft, {'years', 'weeks', 'days', 'hours', 'minutes', 'seconds'}) -- Find whether we are plural or not. local isOrAre if string.match(timeLeft, '^%d+') == '1' then isOrAre = 'is' else isOrAre = 'are' end -- Color and bold the numbers, because it makes them look important. timeLeft = string.gsub(timeLeft, '(%d+)', '<span style="color: ' .. (color or '#F00') .. '; font-weight: bold;">%1</span>') return string.format('There %s %s until %s.', isOrAre, timeLeft, event) end function p.main(frame) local args = getArgs(frame) if not (args.year and args.month and args.day) then return '<strong class="error">Error: year, month, and day must be specified</strong>' end local timeArgs = {year=args.year, month=args.month, day=args.day, hour=args.hour, min=args.minute, sec=args.second} for k,v in pairs(timeArgs) do if not tonumber(v) then error('Argument ' .. k .. ' could not be parsed as a number: ' .. v) end end local eventTime = os.time(timeArgs) local timeToStart = os.difftime(eventTime, os.time()) -- (future time - current time) local text if timeToStart > 0 then -- Event has not begun yet text = formatMessage(timeToStart, args.event or 'the event begins', args.color) elseif args.duration then local timeToEnd if args['duration unit'] then -- Duration is in unit other than seconds, use formatDate to add timeToEnd = tonumber(lang:formatDate('U', '@' .. tostring(timeToStart) .. ' +' .. tostring(args.duration) .. ' ' .. args['duration unit'])) else timeToEnd = timeToStart + (tonumber(args.duration) or error('args.duration should be a number of seconds', 0)) end if timeToEnd > 0 then -- Event is in progress text = args.eventstart or formatMessage(timeToEnd, (args.event or 'the event') .. ' ends', args.color) else -- Event had a duration and has now ended text = args.eventend or ((lang:ucfirst(args.event or 'The event')) .. ' has ended.') end else -- Event had no duration and has begun text = args.eventstart or ((lang:ucfirst(args.event or 'The event')) .. ' has started.') end local refreshLink if args.refresh == 'no' then refreshLink = '' else refreshLink = mw.title.getCurrentTitle():fullUrl({action = 'purge'}) refreshLink = string.format(' <small><span class="plainlinks">([%s refresh])</span></small>', refreshLink) end return text .. refreshLink end return p
Summary:
Please note that all contributions to Irony Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see
Irony Wiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, 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.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Countdown/doc
(
edit
)