Modul:Categories by date
Aspect
Documentația acestui modul poate fi creată la Modul:Categories by date/doc
local p = {}
local getArgs = require('Modul:Arguments').getArgs
local yesno = require('Modul:Yesno')
local ordinal = require('Modul:Ordinal')._ordinal
local function pad_number(n, pad)
n = tostring(n)
return string.rep('0', pad - string.len(n)) .. n
end
function p._categories_by_date(args)
local testing = yesno(args.testing) or mw.title.getCurrentTitle().fullText == 'Format:Categorii după dată/teste'
local caption = args.descriere or '{{{descriere}}}'
local name = args.nume or '{{{nume}}}'
local supercatname = args.supercatname
local year = tonumber(args.an)
local decade = tonumber(args.deceniu)
local century = tonumber(args.secol) or 0
local era_suffix = ''
args.bce = args.era == 'î.e.n.' or args.era == 'î.Hr.' or yesno(args.ien) == true
if args.bce then
era_suffix = ' î.e.n.'
end
local century_intertext = ' '
if yesno(args['cratima-secol']) then
century_intertext = '-'
end
local supercat_century_intertext = ' '
if yesno(args['cratima-secol-supercat']) then
supercat_century_intertext = '-'
end
local year_num = 100 * century + 10 * (decade or 0) + (year or 0)
local decade_num = 100 * century + 10 * (decade or 0)
local century_num = 100 * century
local century_suffix_text = ordinal(century + 1, false, 'm')
local century_suffix_sup = ordinal(century + 1, true, 'm')
local millennium = math.floor(century/10)
local millennium_num = millennium * 1000
local millennium_suffix_text = ordinal(millennium + 1, false, 'm')
local millennium_suffix_sup = ordinal(millennium + 1, true, 'm')
local caption_text = caption .. ' în '
local parent_category = args['categorie-părinte']
local parent_category_display = args['afișaj-categorie-părinte'] or parent_category
local by_date_category = args['categorie-după-dată']
local supercat
local nearby_categories = {}
local parent_sortkey
local by_date_sortkey
if not args.bce then
parent_sortkey = ' ' .. year_num
by_date_sortkey = pad_number(year_num, 4)
else
parent_sortkey = ' -' .. year_num
by_date_sortkey = '-' .. pad_number(year_num, 4)
end
if year then
caption_text = caption_text .. 'anul ' .. year_num
parent_category = parent_category or name .. ' din anii ' .. decade_num .. era_suffix
parent_category_display = parent_category_display or parent_category
by_date_category = by_date_category or name .. ' după an'
if supercatname then
supercat = supercatname .. ' din ' .. year_num .. era_suffix
end
local start_year = math.max(decade_num, 1)
local end_year = decade_num + 9
local inc = 1
if args.bce then
start_year = decade_num + 9
end_year = math.max(decade_num, 1)
inc = -1
end
local before_start_year = start_year - inc
local after_end_year = end_year + inc
local before_start_year_text = before_start_year .. era_suffix
local after_end_year_text = after_end_year .. era_suffix
if before_start_year == 0 then
before_start_year_text = '1 î.e.n.'
end
if after_end_year == 0 then
after_end_year_text = '1'
end
table.insert(nearby_categories, {cat = name .. ' din ' .. before_start_year_text, display = '← ' .. before_start_year_text})
for y = start_year, end_year, inc do
table.insert(nearby_categories, {cat = name .. ' din ' .. y .. era_suffix, display = y .. era_suffix})
end
table.insert(nearby_categories, {cat = name .. ' din ' .. after_end_year_text, display = after_end_year_text .. ' →'})
elseif decade then
caption_text = caption_text .. 'anii ' .. decade_num
parent_category = parent_category or name .. ' din secolul ' .. century_suffix_text .. century_intertext .. era_suffix
parent_category_display = parent_category_display or name .. ' din secolul ' .. century_suffix_sup .. era_suffix
by_date_category = by_date_category or name .. ' după deceniu'
if supercatname then
supercat = supercatname .. ' din anii ' .. decade_num .. era_suffix
end
local start_year = century_num
local end_year = century_num + 90
local inc = 10
if args.bce then
start_year = century_num + 90
end_year = century_num
inc = -10
end
local before_start_year = start_year - inc
local after_end_year = end_year + inc
local before_start_year_text = 'anii ' .. before_start_year .. era_suffix
local after_end_year_text = 'anii ' .. after_end_year .. era_suffix
if before_start_year == -10 then
before_start_year_text = 'primul deceniu î.e.n.'
end
if after_end_year == -10 then
after_end_year_text = 'primul deceniu e.n.'
end
table.insert(nearby_categories, {cat = name .. ' din ' .. before_start_year_text, display = '← ' .. before_start_year_text})
for d = start_year, end_year, inc do
table.insert(nearby_categories, {cat = name .. ' din anii ' .. d .. era_suffix, display = 'anii ' .. d .. era_suffix})
end
table.insert(nearby_categories, {cat = name .. ' din ' .. after_end_year_text, display = after_end_year_text .. ' →'})
else
caption_text = caption_text .. 'secolul ' .. century_suffix_sup
parent_category = parent_category or name .. ' din mileniul ' .. millennium_suffix_text .. era_suffix
parent_category_display = parent_category_display or name .. ' din mileniul ' .. millennium_suffix_sup .. era_suffix
by_date_category = by_date_category or name .. ' după secol'
if supercatname then
supercat = supercatname .. supercat_century_intertext .. ' din secolul ' .. century_suffix_text .. era_suffix
end
if not args.bce then
by_date_sortkey = pad_number(century + 1, 2)
else
by_date_sortkey = '-' .. pad_number(century + 1, 2)
end
local start_year = millennium * 10
local end_year = millennium * 10 + 9
local inc = 1
if args.bce then
start_year = millennium * 10 + 9
end_year = millennium * 10
inc = -1
end
local before_start_year = start_year - inc
local after_end_year = end_year + inc
local before_start_year_text = 'secolul ' .. century_intertext .. ordinal(before_start_year + 1, false, 'm') .. era_suffix
local after_end_year_text = 'secolul ' .. century_intertext .. ordinal(after_end_year + 1, false, 'm') .. era_suffix
local before_start_year_display = 'secolul ' .. ordinal(before_start_year + 1, true, 'm') .. era_suffix
local after_end_year_display = 'secolul ' .. ordinal(after_end_year + 1, true, 'm') .. era_suffix
if before_start_year == -1 then
before_start_year_text = 'secolul ' .. century_intertext .. ordinal(1, false, 'm') .. ' î.e.n.'
before_start_year_display = 'secolul ' .. century_intertext .. ordinal(1, true, 'm') .. ' î.e.n.'
end
if after_end_year == -1 then
after_end_year_text = 'secolul ' .. century_intertext .. ordinal(1, false, 'm')
after_end_year_display = 'secolul ' .. ordinal(1, true, 'm')
end
table.insert(nearby_categories, {
cat = name .. ' din ' .. before_start_year_text,
display = '← ' .. before_start_year_display
})
for c = start_year, end_year, inc do
table.insert(nearby_categories, {
cat = name .. ' din secolul ' .. century_intertext .. ordinal(c + 1, false, 'm') .. era_suffix,
display = 'secolul ' .. ordinal(c + 1, true, 'm') .. era_suffix
})
end
table.insert(nearby_categories, {
cat = name .. ' din ' .. after_end_year_text,
display = after_end_year_display .. ' →'
})
end
caption_text = caption_text .. era_suffix .. '.'
nearby_category_list = mw.html.create('ul')
for i = 1, #nearby_categories do
nearby_category_list:tag('li')
:wikitext('[[:Categorie:' .. nearby_categories[i]['cat'] .. '|' .. nearby_categories[i]['display'] .. ']]')
end
local cats = {}
if testing or mw.title.getCurrentTitle():inNamespace(14) then
table.insert(cats, '[[Categorie:' .. by_date_category .. '|' .. by_date_sortkey .. ']]')
if parent_category ~= by_date_category then
table.insert(cats, '[[Categorie:' .. parent_category .. '|' .. parent_sortkey .. ']]')
end
if supercat then
table.insert(cats, '[[Categorie:' .. supercat .. '|' .. name .. ']]')
end
end
local cats_by_date_div = mw.html.create('div')
:tag('p')
:wikitext(caption_text)
:done()
:tag('table')
:addClass('toccolours plainlinks wst-cats-by-date-table')
:tag('tr')
:tag('td')
:addClass('wst-cats-by-date-parent')
:wikitext('[[:Categorie:' .. parent_category .. '|' .. parent_category_display .. ']]:')
:done()
:tag('td')
:tag('div')
:addClass('wst-flatlist')
:node(nearby_category_list)
:done()
:done()
:done()
:wikitext(table.concat(cats))
:allDone()
return cats_by_date_div
end
function p.categories_by_date(frame)
return p._categories_by_date(getArgs(frame))
end
return p