Модуль:Песочница/Putnik
Перейти к навигации
Перейти к поиску
Документация
local p = {}
function p.test( frame )
return mw.getContentLanguage():formatDate( 'j xg Y', '@1575638868' )
end
function p.test2( frame )
return mw.getContentLanguage():formatDate( 'j xg Y', 'now' )
end
function p.rank( frame )
return mw.wikibase.entity.claimRanks.RANK_TRUTH;
end
local function splitISO8601(str)
if 'table' == type(str) then
if str.args and str.args[1] then
str = '' .. str.args[1]
else
return 'unknown argument type: ' .. type( str ) .. ': ' .. table.tostring( str )
end
end
local Y, M, D = (function(str)
local pattern = "(%-?%d+)%-(%d+)%-(%d+)T"
local Y, M, D = mw.ustring.match( str, pattern )
return tonumber(Y), tonumber(M), tonumber(D)
end) (str);
local h, m, s = (function(str)
local pattern = "T(%d+):(%d+):(%d+)%Z";
local H, M, S = mw.ustring.match( str, pattern);
return tonumber(H), tonumber(M), tonumber(S);
end) (str);
local oh,om = ( function(str)
if str:sub(-1)=="Z" then return 0,0 end; -- ends with Z, Zulu time
-- matches ±hh:mm, ±hhmm or ±hh; else returns nils
local pattern = "([-+])(%d%d):?(%d?%d?)$";
local sign, oh, om = mw.ustring.match( str, pattern);
sign, oh, om = sign or "+", oh or "00", om or "00";
return tonumber(sign .. oh), tonumber(sign .. om);
end )(str)
return {year=Y, month=M, day=D, hour=(h+oh), min=(m+om), sec=s};
end
local function splitDate( str )
local Y, M, D = ( function( str )
local pattern = "^(%d+)%-(%d+)%-(%d+)$"
local Y, M, D = mw.ustring.match( str, pattern )
return tonumber( Y ), tonumber( M ), tonumber( D )
end )( str );
return { year=Y, month=M, day=D, hour=0, min=0, sec=0 };
end
function p.flag( frame )
local wikidataFlags = require( 'Модуль:Песочница/Putnik/Wikidata/Flags' )
local parseTimeFromSnak = function( snak )
if ( snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value.time ) then
return tonumber( os.time( splitISO8601( tostring( snak.datavalue.value.time ) ) ) ) * 1000;
end
return nil;
end
local timestamp = tonumber( os.time( splitDate( frame.args[2] ) ) ) * 1000
return wikidataFlags.getFlag( parseTimeFromSnak, frame.args[1], timestamp )
end
return p