Модуль:Інтэрвал
Выгляд
Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Інтэрвал/Дакумэнтацыя
-- Гэты модуль патрэбны для {{Інтэрвал}}.
local p = {}
-- Канстанты
local lang = mw.language.getContentLanguage()
local getArgs = require('Модуль:Аргумэнты').getArgs
local function getArgNums(args)
-- Вяртае масіў з ключамі ўсіх пазыцыйных аргумэнтаў,
-- якія зьмяшчаюць інфармацыю (т. б. непустыя значэньі).
-- (з 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 format == 'time' then
if n then
n = lang:formatDate('U', '@' .. n)
else
n = os.time() -- Прысвоіць n цяперашні час, калі яго не перадалі
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