Аматериал Авикипедиа а?ынт? - зхы иа??и?у аенциклопедиа
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