Modul:Infocards/qaralama
Diqqət! Bu, ən çox işlənən modullardan biridir (qoşulma sayı 20 mindən az olmayan). Şablonda hər hansı dəyişiklik etdikdə Vikimedia Fondunun serverlərində əhəmiyyətli yüklənmə yaranır. Lütfən, dəyişikliklərinizin adekvatlığına və düzgünlüyünə əmin olun, onları əvvəlcə istifadəçi səhifəsi və ya qaralama səhifələrində sınaqdan keçirin. |
dateOfBirth funksiyası nümunələri
- {{#invoke:Infocards/qaralama|dateOfBirth|-382|−336}} → e.ə. 382
- {{#invoke:Infocards/qaralama|dateOfBirth|11.1|}} → 11 yanvar
- {{#invoke:Infocards/qaralama|dateOfBirth|24.12.3|15.01.69}} → 24 dekabr 3
- {{#invoke:Infocards/qaralama|dateOfBirth|23.09.-63|19.08.14}} → 23 sentyabr e.ə. 63
- {{#invoke:Infocards/qaralama|dateOfBirth|42|9.6.42}} → 42
- {{#invoke:Infocards/qaralama|dateOfBirth|870|13.8.900}} → 870
- {{#invoke:Infocards/qaralama|dateOfBirth||22.01.984}} →
- {{#invoke:Infocards/qaralama|dateOfBirth|16.06.1066|vəfat tarixi bilinmir}} → 16 iyun 1066
- {{#invoke:Infocards/qaralama|dateOfBirth|8.2.1834 (27.1)|2.2.1907 (20.1)}} → 27 yanvar (8 fevral) 1834
- {{#invoke:Infocards/qaralama|dateOfBirth|29.06.1844 (17)|28.10.1883 (16)}} → 17 (29) iyun 1844
- {{#invoke:Infocards/qaralama|dateOfBirth|19.7.1893 (7)|}} → 7 (19) iyul 1893
- {{#invoke:Infocards/qaralama|dateOfBirth|3.10.1895 (21.9)|28.12.1925}} → 21 sentyabr (3 oktyabr) 1895
- {{#invoke:Infocards/qaralama|dateOfBirth|4.10.1916|8.11.2009}} → 4 oktyabr 1916
- {{#invoke:Infocards/qaralama|dateOfBirth|09.06.1942|}} → 9 iyun 1942 (82 yaş)
- {{#invoke:Infocards/qaralama|dateOfBirth|1955|}} → 1955
- {{#invoke:Infocards/qaralama|dateOfBirth|4.1955|}} → aprel 1955
- {{#invoke:Infocards/qaralama|dateOfBirth|6.8|}} → 6 avqust
- {{#invoke:Infocards/qaralama|dateOfBirth|29.02.1984|}} → 29 fevral 1984 (40 yaş)
- {{#invoke:Infocards/qaralama|dateOfBirth||}} →
- {{#invoke:Infocards/qaralama|dateOfBirth|4.1.1885 (23.12.1884)|17.5.1951}} → 23 dekabr 1884 (4 yanvar 1885)
dateOfDeath funksiyası nümunələri
- {{#invoke:Infocards/qaralama|dateOfDeath|-382|−336}} → e.ə. 336
- {{#invoke:Infocards/qaralama|dateOfDeath|24.12.3|15.01.69}} → 15 yanvar 69 (65 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|23.09.-63|19.08.14}} → 19 avqust 14 (76 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|42|9.6.42}} → 9 iyun 42
- {{#invoke:Infocards/qaralama|dateOfDeath|870|13.8.900}} → 13 avqust 900
- {{#invoke:Infocards/qaralama|dateOfDeath||22.01.984}} → 22 yanvar 984
- {{#invoke:Infocards/qaralama|dateOfDeath|16.06.1066|vəfat tarixi bilinmir}} → vəfat tarixi bilinmir
- {{#invoke:Infocards/qaralama|dateOfDeath|8.2.1834 (27.1)|2.2.1907 (20.1)}} → 20 yanvar (2 fevral) 1907 (72 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|29.06.1844 (17)|28.10.1883 (16)}} → 16 (28) oktyabr 1883 (39 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|19.7.1893 (7)|}} → 14 aprel 1930 (36 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|3.10.1895 (21.9)|28.12.1925}} → 28 dekabr 1925 (30 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|4.10.1916|8.11.2009}} → 8 noyabr 2009 (93 yaşında)
- {{#invoke:Infocards/qaralama|dateOfDeath|09.06.1942|}} →
- {{#invoke:Infocards/qaralama|dateOfDeath|1955|}} →
- {{#invoke:Infocards/qaralama|dateOfDeath|29.02.1984|}} →
- {{#invoke:Infocards/qaralama|dateOfDeath||}} →
isDate funksiyası nümunələri
- {{#invoke:Infocards/qaralama|isDate||TRUE|FALSE}} → FALSE
- {{#invoke:Infocards/qaralama|isDate|-382|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards/qaralama|isDate|−336|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards/qaralama|isDate|24.12.3|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards/qaralama|isDate|19.7.1893 (7)|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards/qaralama|isDate|19.7.67.18/93 (7)|TRUE|FALSE}} → FALSE
- {{#invoke:Infocards/qaralama|isDate|13 декабря 2005|TRUE|FALSE}} → FALSE
- {{#invoke:Infocards/qaralama|isDate|vəfat tarixi bilinmir|TRUE|FALSE}} → FALSE
local infocards = {};
local calculateAge = true;
local Ordinal = require 'Module:Ordinal'
function infocards._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
function infocards.isBlank( someString )
return someString == nil or mw.ustring.match(someString, '^%s*$') ~= nil;
end
function infocards.isDate ( frame )
local new_args = infocards._getParameters( frame.args, {'s', 't', 'f'} );
local s = new_args['s'] or '';
local t = new_args['t'] or '';
local f = new_args['f'] or '';
local result = infocards.isDateImpl ( s )
if (result) then
return t
else
return f
end
end
function infocards.isDateImpl ( s )
local converted = infocards.convertToDate ( s );
return converted ~= nil
end
function infocards.dateOfBirth( frame )
local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );
local dateOfBirth = new_args['dateOfBirth'] or '';
local dateOfDeath = new_args['dateOfDeath'] or '';
local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;
return infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat );
end
function infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat )
local appendToCategory = infocards.isBlank( nocat );
if ( infocards.isBlank( dateOfBirth ) ) then
if ( appendToCategory ) then
return '[[Kateqoriya:Doğum tarixi bilinməyənlər]]'
else
return ''
end
end
if ( mw.ustring.match( dateOfBirth, '^%s*bilinmir.%s*$' ) ~= nil
or mw.ustring.match( dateOfBirth, '^%s*%?%s*$' ) ~= nil ) then
if ( appendToCategory ) then
return "''bilinmir''[[Kateqoriya:Doğum tarixi bilinməyənlər]]"
else
return "''bilinmir''"
end
end
local appendAge = calculateAge and infocards.isBlank( dateOfDeath );
local parsedDate = infocards.convertToDate ( dateOfBirth )
if ( parsedDate == nil ) then
local bDateStart = '<span class="no-wikidata" data-wikidata-property-id="P569">'
local bDateEnd = '</span>'
if ( appendToCategory ) then
return bDateStart .. dateOfBirth .. bDateEnd .. ''
else
return bDateStart .. dateOfBirth .. bDateEnd
end
end
local result = infocards.formatDateImpl ( parsedDate, 'bday', appendToCategory and 'doğulanlar' or nil )
if ( appendAge ) then
local age = infocards.age ( parsedDate, os.date("*t") )
if ( age and age > 0 and age < 125) then
result = result .. ' <span class="nowrap">(' .. age .. ' ' .. mw.language.new( 'az' ):plural( age, 'yaş') .. ')</span>'
end
if ( appendToCategory ) then
if ( age and age > 100 ) then
result = result .. '[[Kateqoriya:Yaşayan uzunömürlülər]]'
elseif ( age or ( parsedDate and parsedDate.year and os.date('*t').year - parsedDate.year <= 100 ) ) then
result = result .. '[[Kateqoriya:Yaşayan insanlar]]'
end
end
end
return result
end
function infocards.dateOfDeath( frame )
local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );
local dateOfBirth = new_args['dateOfBirth'] or '';
local dateOfDeath = new_args['dateOfDeath'] or '';
local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;
return infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat );
end
function infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat )
if ( infocards.isBlank( dateOfDeath ) ) then
return ''
end
local appendToCategory = infocards.isBlank( nocat );
if ( mw.ustring.match( dateOfDeath, '^%s*bilinmir%s*$' ) ~= nil
or mw.ustring.match( dateOfDeath, '^%s*%?%s*$' ) ~= nil ) then
if ( appendToCategory ) then
return "''bilinmir''[[Kateqoriya:Vəfat tarixi bilinməyənlər]]"
else
return "''bilinmir''"
end
end
local parsedDateOfBirth = infocards.convertToDate ( dateOfBirth )
local parsedDateOfDeath = infocards.convertToDate ( dateOfDeath )
if ( parsedDateOfDeath == nil ) then
local dDateStart = '<span class="no-wikidata" data-wikidata-property-id="P570">'
local dDateEnd = '</span>'
if ( appendToCategory ) then
return dDateStart .. dateOfDeath .. dDateEnd .. ''
else
return dDateStart .. dateOfDeath .. dDateEnd
end
end
local result = infocards.formatDateImpl ( parsedDateOfDeath, 'dday', appendToCategory and 'vəfat edənlər' or nil )
if ( calculateAge ) then
local age = infocards.age ( parsedDateOfBirth, parsedDateOfDeath )
if ( age and age > 0 ) then
result = result .. ' <span class="nowrap">(' .. age .. ' ' .. mw.language.new( 'az' ):plural( age, 'yaşında') .. ')</span>'
end
local unixAvailable, unixDateOfDeath = pcall(function()
local r = os.time(parsedDateOfDeath)
if ( r ~= os.time() ) then
return r
end
error()
end)
if ( unixAvailable and os.time() - unixDateOfDeath < 31536000 and appendToCategory ) then
result = result .. '[[Kateqoriya:Son bir ildə vəfat etmiş şəxslər]]'
end
end
return result
end
function infocards.age( parsedBirthDate, parsedFinishDate )
if ( parsedBirthDate == nil or parsedFinishDate == nil ) then
return nil
end
local bd = parsedBirthDate["day"]
local bm = parsedBirthDate["month"]
local by = parsedBirthDate["year"]
local dd = parsedFinishDate["day"];
local dm = parsedFinishDate["month"];
local dy = parsedFinishDate["year"];
if ( bd and bm and by and dd and dm and dy ) then
if ( dm > bm or ( dm == bm and dd >= bd ) ) then
return dy - by
else
return dy - by - 1
end
else
return nil
end
end
local nominativeMonthes = {'yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun',
'iyul', 'avqust', "sentyabr", "oktyabr", "noyabr", "dekabr"}
local genitivusMonthes = {'yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun',
'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'}
local genitivusMonthes2 = {'yanvarda', 'fevralda', 'martda', 'apreldə', 'mayda', 'iyunda',
'iyulda', 'avqustda', 'sentyabrda', 'oktyabrda', 'noyabrda', 'dekabrda'}
function infocards.nominativeYear( year )
if ( year >= 0 ) then
return '[[' .. year .. '|' .. year .. ']]'
else
return '[[e.ə. ' .. ( 0 - year ) .. ' |e.ə. ' .. ( 0 - year ) .. ']]'
end
end
function infocards.formatDateImpl( parsedDate, infocardClass, categoryNamePrefix, brts)
local nd = parsedDate["day"];
local nm = parsedDate["month"];
local ny = parsedDate["year"];
local od = parsedDate["osday"];
local om = parsedDate["osmonth"];
local oy = parsedDate["osyear"];
local bracket1 = "(";
local bracket2 = ")";
if ( brts == 1 ) then
bracket1 = "["
bracket2 = "]"
end
local JulianComment = function(s)
return tostring(mw.html.create("abbr")
:attr("title","yuli təqvimi ilə")
:wikitext(s)
:done())
end
local template =
(nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "") ..
(od ~= nil and "4" or "") .. (om ~= nil and "5" or "") .. (oy ~= nil and "6" or "")
local datePart = '<span class="nowrap">'
if (infocardClass == "bday") then
datePart = '<span class="no-wikidata" data-wikidata-property-id="P569">'
elseif (infocardClass == "dday") then
datePart = '<span class="no-wikidata" data-wikidata-property-id="P570">'
end
if (template == "12") then
datePart = datePart .. string.format( "[[%d %s]]",
nd, genitivusMonthes[nm] )
elseif (template == "23") then
datePart = datePart .. string.format( "[[%s]] %s",
nominativeMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "3") then
datePart = datePart .. infocards.nominativeYear( ny )
elseif (template == "123") then
datePart = datePart .. string.format( "[[%d %s]] %s",
nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "124") then
datePart = datePart .. JulianComment(string.format( "%d", od )
).. string.format( " [[%d %s|" .. bracket1 .. "%d" .. bracket2 .. " %s]]",
nd, genitivusMonthes[nm], nd, genitivusMonthes[nm] )
elseif (template == "1234") then
datePart = datePart .. JulianComment(string.format( "%d", od )
).. string.format( " [[%d %s|" .. bracket1 .. "%d" .. bracket2 .. " %s]] %s",
nd, genitivusMonthes[nm], nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "1245") then
datePart = datePart .. JulianComment(string.format( "%d %s", od, genitivusMonthes[om] )
).. string.format(" " .. bracket1 .. "[[%d %s]]" .. bracket2 .. "", nd, infocards.nominativeYear( ny ) )
elseif (template == "12345") then
datePart = datePart .. JulianComment(string.format( "%d %s", od, genitivusMonthes[om] )
).. string.format(" " .. bracket1 .. "[[%d %s]]" .. bracket2 .. " %s", nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "123456") then
datePart = datePart .. JulianComment(string.format( "%d %s %d", od, genitivusMonthes[om], oy ))
.. '</span> <span class="nowrap">'
.. string.format(" " .. bracket1 .. "[[%d %s]] %s" .. bracket2 , nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
else
datePart = datePart .. 'format yanlışdır'
end
datePart = datePart .. '</span>'
local infocardTemplate =
(nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "")
if infocardClass then
if (infocardTemplate == "123") then
datePart = datePart .. string.format('<span style="display:none">(<span class="%s">%04d-%02d-%02d</span>)</span>', infocardClass , ny , nm , nd )
elseif (infocardTemplate == "23") then
datePart = datePart .. string.format('<span style="display:none">(<span class="%s">%04d-%02d</span>)</span>', infocardClass , ny , nm )
elseif (infocardTemplate == "3") then
datePart = datePart .. string.format('<span style="display:none;">(<span class="%s">%04d</span>)</span>', infocardClass , ny )
end
end
if categoryNamePrefix then
if ( nd ~= nil and nm ~= nil) then
datePart = datePart .. '[[Kateqoriya:' .. nd .. ' ' .. genitivusMonthes2[nm] .. ' ' .. categoryNamePrefix .. ']]'
end
if ( ny ~= nil) then
datePart = datePart .. '[[Kateqoriya:' .. inYear( ny ) .. ' ildə ' .. categoryNamePrefix .. ']]'
end
end
return datePart
end
function infocards.convertToDate( possibleDateString )
possibleDateString = mw.ustring.gsub( possibleDateString, '−', '-')
local simpleDate = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*$', 0)
if ( simpleDate ) then
return infocards.convertToDateNewStylePart( simpleDate );
end
local complexDate1, complexDate2 = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*%(([%-%d%.]+)%)%s*$', 0)
if ( complexDate1 and complexDate2) then
local table1 = infocards.convertToDateNewStylePart( complexDate1 );
local table2 = infocards.convertToDateOldStylePart( complexDate2 );
if ( table1 and table2 ) then
return {
year = table1["year"], month = table1["month"], day = table1["day"],
osyear = table2["year"], osmonth = table2["month"], osday = table2["day"]
}
else
return nil
end
end
return nil
end
function infocards.convertToDateNewStylePart( possibleDateString )
local ny = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)
if (ny ~= nil) then
return {year = tonumber(ny)}
end
return infocards.convertToDateCommonPart( possibleDateString )
end
function infocards.convertToDateOldStylePart( possibleDateString )
local nd = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)
if (nd ~= nil) then
return {day = tonumber(nd)}
end
return infocards.convertToDateCommonPart( possibleDateString )
end
function infocards.convertToDateCommonPart( possibleDateString )
local nd, nm
= mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)$', 0)
if (nd ~= nil and nm ~= nil) then
return {day = tonumber(nd), month = tonumber(nm)}
end
local nm, ny
= mw.ustring.match(possibleDateString, '^(%d?%d)%.(%-?%d+)$', 0)
if (nm ~= nil and ny ~= nil) then
local nmn = tonumber(nm)
local nyn = tonumber(ny)
if (nmn > 0 and nmn < 13) then
return {month = nmn, year = nyn}
end
end
local nd, nm, ny
= mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)%.(%-?%d+)$', 0)
if (nd ~= nil and nm ~= nil and ny ~= nil) then
local ndn = tonumber(nd)
local nmn = tonumber(nm)
local nyn = tonumber(ny)
if (ndn > 0 and ndn < 33 and nmn > 0 and nmn < 13) then
return {day = ndn, month = nmn, year = nyn}
end
end
return nil
end
return infocards