Module:Interval: Difference between revisions
Jump to navigation
Jump to search
mpfae>Anomie m (Changed protection level for "Module:Interval": Syncing protection from formerly cascade-protected Template:ACEWatchlistNotice ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))) |
Storyteller (talk | contribs) m (1 revision imported: Supplementary Module/Template UL) |
(No difference)
|
Latest revision as of 09:25, 16 June 2024
Documentation for this module may be created at Module:Interval/doc
-- This module powers {{interval}}. local p = {} -- Constants local lang = mw.language.getContentLanguage() local getArgs = require('Module:Arguments').getArgs local function getArgNums(args) -- Returns an array containing the keys of all positional arguments -- that contain data (i.e. non-whitespace values). -- (from Module:Unbulleted_list) local nums = {} for k, v in pairs(args) do if type(k) == 'number' and k >= 1 and math.floor(k) == k and mw.ustring.match(v, '%S') then table.insert(nums, k) end end table.sort(nums) return nums end function p.main(frame) local args = getArgs(frame) return p._main(args) end function p._main(args) local n, rule, format = args.n, args.rule, args.format local numbers = getArgNums(args) local low, high, lowpos, highpos = nil, nil, 0, #numbers + 1 -- If comparing times, convert them all to seconds after the epoch if format == 'time' then if n then n = lang:formatDate('U', '@' .. n) else n = os.time() -- Set n to now if no time provided end end n = tonumber(n) for i, num in ipairs(numbers) do local interval if format == 'time' then interval = tonumber(lang:formatDate('U', '@' .. args[num])) else interval = tonumber(args[num]) end if n and ((n >= interval and not rule) or (n > interval and rule == '>')) then low = interval lowpos = num else high = high and math.min(interval, high) or interval if high == interval then highpos = num end end end return lowpos .. '-' .. highpos end return p