Difference between revisions of "Module:Interval"

From blackwiki
Jump to navigation Jump to search
blackwiki>Theopolisme
(use lang:formatDate)
blackwiki>Theopolisme
(Use formatDate)
Line 32: Line 32:
 
     if format == 'time' then
 
     if format == 'time' then
 
         if n then
 
         if n then
             n = tonumber(lang:formatDate('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 43: Line 43:
 
         local interval
 
         local interval
 
         if format == 'time' then
 
         if format == 'time' then
             interval = tonumber(lang:formatDate('U', args[num]))
+
             interval = tonumber(lang:formatDate('U', '@' .. args[num]))
 
         else
 
         else
 
             interval = tonumber(args[num])
 
             interval = tonumber(args[num])

Revision as of 23:00, 8 December 2013

This module implements the {{interval}} template. Please see the template page for documentation.


-- 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