Jump to content

Module:Interval: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
 
use lang:formatDate
Line 2: Line 2:


local p = {}
local p = {}

-- Constant
local lang = mw.language.getContentLanguage()


local function getArgNums(args)
local function getArgNums(args)
Line 29: Line 32:
if format == 'time' then
if format == 'time' then
if n then
if n then
n = frame:callParserFunction('#time:U', n)
n = tonumber(lang:formatDate('U', n))
else
else
n = os.time() -- Set n to now if no time provided
n = os.time() -- Set n to now if no time provided
Line 40: Line 43:
local interval
local interval
if format == 'time' then
if format == 'time' then
interval = tonumber(frame:callParserFunction('#time:U', args[num]))
interval = tonumber(lang:formatDate('U', args[num]))
else
else
interval = tonumber(args[num])
interval = tonumber(args[num])

Revision as of 21:13, 8 December 2013

-- This module powers {{interval}}.

local p = {}

-- Constant
local lang = mw.language.getContentLanguage()

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 = frame:getParent().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 = tonumber(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 >= 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