Module:Interval
MyWikiBiz, Author Your Legacy — Thursday November 14, 2024
Jump to navigationJump to searchTemplate:Used in system Template:Module rating
This module implements the {{interval}} template. Please see the template page for documentation.
-- 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