uk = {}
local messages = {
['or'] = 'tai',
['error_no_x_given'] = 'No %s given',
['error_no_valid_criterion_given'] = 'Virheellinen/tuntematon kriteeri',
['templates'] = 'templates',
['template_criterion_singular'] = 'jotka on merkitty mallineella %s',
['template_criterion_plural'] = 'jotka on merkitty mallineella %s',
['categories'] = 'categories',
['category_criterion_singular'] = 'jotka sijaitsevat luokassa %s',
['category_criterion_plural'] = 'jotka sijaitsevat luokissa %s',
['category_criterion_ignore'] = ', paitsi luokassa %s',
['backlinks'] = 'backlinks',
['backlink_criterion_singular'] = 'joihin johtaa linkki sivulta %s',
['backlink_criterion_plural'] = 'joihin johtaa linkki sivuilta %s',
['forwardlinks'] = 'forwardlinks',
['forwardlink_criterion_singular'] = 'joissa on linkki sivulle %s',
['forwardlink_criterion_plural'] = 'joissa on linkki sivuille %s',
['pages'] = 'pages',
['page_criterion_singular'] = 'yksittäiseen sivuun %s',
['page_criterion_plural'] = 'sivuihin %s',
['bytes_criterion'] = 'joita laajennetaan vähintään %s tavulla',
['namespace_criterion'] = 'jotka sijaitsevat nimiavaruudessa %s',
['namespace_criterion_articles'] = 'artikkeleihin',
['new_criterion'] = 'jotka aloitetaan kilpailun aikana',
['new_criterion_with_redirects'] = 'jotka aloitetaan kilpailun aikana (sisältää myös ohjaussivut)',
['existing_criterion'] = 'jotka ovat olemassa ennen kilpailun aloituspäivämäärää',
['stub_criterion'] = 'joista poistetaan tynkämalline',
}
local config = {
['template_link_template'] = 'Tl',
['error_message_template'] = 'Virhe',
['arguments'] = {
['new'] = 'uusi',
['existing'] = 'löytyvä',
['stub'] = 'tynkä',
['bytes'] = 'tavut',
['namespace'] = 'nimiavaruus',
['category'] = 'luokka',
['template'] = 'malline',
['backlink'] = 'takaisinlinkitys',
['forwardlink'] = 'edelleenlinkitys',
['page'] = 'sivut',
}
}
local category_prefix = {
['be'] = 'be:Катэгорыя',
['se'] = 'se:Kategoriija',
['nn'] = 'nn:Kategori',
['no'] = 'no:Kategori',
['default'] = 'Luokka'
}
-- format_kriterium
function uk.format_criterion(singular, plural, items)
if #items > 1 then
return string.format(messages[singular .. '_criterion_plural'],
mw.text.listToText(items, ', ', ' ' .. messages['or'] .. ' '))
elseif #items == 1 then
return string.format(messages[singular .. '_criterion_singular'], items[1])
else
return string.format('{{%s|' .. messages['error_no_x_given'] .. '}}',
config['error_message_template'], messages[plural])
end
end
function uk.pagelist(args)
local r = {}
for i, v in ipairs(args) do
v = mw.text.trim(v)
if v ~= '' then
local lang, page = string.match(v, '^([a-z\]+):(.+)$')
if lang then
table.insert(r, string.format('[[:%s:%s|%s]]', lang, page, page))
else
table.insert(r, string.format('[[:%s]]', v))
end
end
end
return r
end
-- kriterium_maler
function uk.criterion_templates(args)
local r = {}
for i, v in ipairs(args) do
v = mw.text.trim(v)
if v ~= '' then
local m, n = string.match(v, '^([a-z\]+):(.+)$')
if m then
table.insert(r, string.format('{{%s|%s|%s}}', config['template_link_template'], n, m))
else
table.insert(r, string.format('{{%s|%s}}', config['template_link_template'], v))
end
end
end
return uk.format_criterion('template', 'templates', r)
end
function uk.make_category_link(v)
local lang = 'default'
local name = v
local m, n = string.match(v, '^([a-z\]+):(.+)$')
if m then
lang = m
name = n
end
return string.format('[[:%s:%s|%s]]', category_prefix[lang], name, name, name)
end
-- kriterium_kategorier
function uk.criterion_categories(args, ignore)
local r = {}
for i, v in ipairs(args) do
v = mw.text.trim(v)
if v ~= '' then
table.insert(r, uk.make_category_link(v))
end
end
local msg = uk.format_criterion('category', 'categories', r)
ignore = ignore:expand()
if ignore ~= nil and mw.text.trim(ignore) ~= '' then
r = mw.text.split(ignore, ',')
for i, v in ipairs(r) do
v = mw.text.trim(v)
r[i] = uk.make_category_link(v)
end
msg = msg .. string.format(messages['category_criterion_ignore'], mw.text.listToText(r, ', ', ' ' .. messages['or'] .. ' '))
end
return msg
end
-- kriterium_tilbakelenke
function uk.criterion_backlinks(args)
return uk.format_criterion('backlink', 'backlinks', uk.pagelist(args))
end
-- kriterium_fremlenke
function uk.criterion_forwardlinks(args)
return uk.format_criterion('forwardlink', 'forwardlinks', uk.pagelist(args))
end
-- kriterium_enkeltsider
function uk.criterion_pages(args)
return uk.format_criterion('page', 'pages', uk.pagelist(args))
end
-- kriterium_bytes
function uk.criterion_bytes(args)
return string.format(messages['bytes_criterion'], args[1])
end
-- kriterium_navnerom
function uk.criterion_namespace(args)
if args[1] == '0' then
return messages['namespace_criterion_articles']
else
return string.format(messages['namespace_criterion'], '{{ns:' .. args[1] .. '}}')
end
end
-- kriterium_ny
function uk.criterion_new(redirects)
redirects = redirects:expand()
local msg = messages['new_criterion']
if redirects ~= nil and mw.text.trim(redirects) ~= '' then
msg = messages['new_criterion_with_redirects']
end
return msg
end
--kriterium
function uk.criterion(frame)
local t = {
[config['arguments']['new']] = function(args) return uk.criterion_new(frame:getArgument('redirects')) end,
[config['arguments']['existing']] = messages['existing_criterion'],
[config['arguments']['stub']] = messages['stub_criterion'],
[config['arguments']['bytes']] = function(args) return uk.criterion_bytes(args) end,
[config['arguments']['namespace']] = function(args) return uk.criterion_namespace(args) end,
[config['arguments']['template']] = function(args) return uk.criterion_templates(args) end,
[config['arguments']['category']] = function(args) return uk.criterion_categories(args, frame:getArgument('ignore')) end,
[config['arguments']['backlink']] = function(args) return uk.criterion_backlinks(args) end,
[config['arguments']['forwardlink']] = function(args) return uk.criterion_forwardlinks(args) end,
[config['arguments']['page']] = function(args) return uk.criterion_pages(args) end
}
local args = {}
for i, v in ipairs(frame.args) do
if tonumber(i) ~= nil then
args[i] = v
end
end
local k = frame.args.criterion
local s = type(t[k]) == "function" and t[k](args) or t[k] or string.format('{{%s|%s}}', config['error_message_template'], messages['error_no_valid_criterion_given'])
return frame:preprocess(s)
end
return uk