Mòdul:Proves/Joutbis
Aparença

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Funcionalitat de {{Proves/Joutbis}}.
Ús
[modifica]Codi | Resultat |
---|---|
{{#invoke:Proves/Joutbis|criterion|nou}}
|
creat durant el concurs |
{{#invoke:Proves/Joutbis|criterion|nou|redirects=true}}
|
creades durant el concurs (redireccions incloses) |
{{#invoke:Proves/Joutbis|criterion|existeix}}
|
creat abans de l'inici del concurs (pàgines existents) |
{{#invoke:Proves/Joutbis|criterion|esborrany}}
|
nil |
{{#invoke:Proves/Joutbis|criterion|bytes|1000}}
|
ampliat amb almenys 1000 bytes |
{{#invoke:Proves/Joutbis|criterion|espai de noms|0|10}}
|
és un article o plantilla |
{{#invoke:Proves/Joutbis|criterion|espai de noms|0|10|site=www.wikidata.org}}
|
és un article o plantilla a www.wikidata.org |
{{#invoke:Proves/Joutbis|criterion|espai de noms|0}}
|
és un article |
{{#invoke:Proves/Joutbis|criterion|backlink|Llista de presidents de Catalunya}}
|
enllaçat des de Llista de presidents de Catalunya |
{{#invoke:Proves/Joutbis|criterion|forwardlink|Bergen}}
|
enllaç a Bergen |
{{#invoke:Proves/Joutbis|criterion|plantilla|Millorar ortografia}}
|
conté la plantilla {{Millorar ortografia}} |
{{#invoke:Proves/Joutbis|criterion|plantilla|Citació necessària|Falten referències}}
|
conté almenys una de les plantilles {{Citació necessària}} o {{Falten referències}} |
{{#invoke:Proves/Joutbis|criterion|plantilla|Millorar|no:Opprydning|se:Neutralitehta}}
|
conté almenys una de les plantilles {{Millorar}}, {{Opprydning|no}} o {{Neutralitehta|se}} |
{{#invoke:Proves/Joutbis|criterion|categoria|Islàndia}}
|
a la categoria Islàndia |
{{#invoke:Proves/Joutbis|criterion|categoria|Islàndia|nn:Island|se:Islánda}}
|
conté almenys una de les categories Islàndia, Island o Islánda |
{{#invoke:Proves/Joutbis|criterion|categoria|Hominoïdeus|ignore=Humans,Hominoïdeus a la ficció}}
|
a la categoria Hominoïdeus, però no és present a Humans o Hominoïdeus a la ficció |
{{#invoke:Proves/Joutbis|criterion|pàgines|Islàndia|Groenlàndia}}
|
Islàndia o Groenlàndia |
{{#invoke:Proves/Joutbis|criterion|sparql|query=?item wdt:P31 wd:Q146. }}
|
té un ítem a Wikidata que encaixa amb aquesta consulta SPARQL |
{{#invoke:Proves/Joutbis|criterion|sparql|query=?item wdt:P31 wd:Q146. |description=que siguin gats }}
|
que siguin gats (consulta a Wikidata) |
Si el text generat no s'adequa a les necessitats es pot sobreescriure utilitzant |description=
:
Codi | Resultat |
---|---|
{{#invoke:Proves/Joutbis|criterion|espai de noms|0|10|description=a l'espai de noms Principal}}
|
a l'espai de noms Principal |
Funcionalitat per als punts
[modifica]Codi | Resultat |
---|---|
{{#invoke:Proves/Joutbis|rule|nou|20}}
|
20 punts atorgats per crear una pàgina nova (que no sigui una redirecció) |
{{#invoke:Proves/Joutbis|rule|nou|10|site=commons.wikimedia.org}} Encara no funciona
|
10 punts atorgats per crear una pàgina nova (que no sigui una redirecció) |
{{#invoke:Proves/Joutbis|rule|nou|10|site=commons.wikimedia.org|description=penjar imatges}} Encara no funciona
|
10 punts atorgats per crear una pàgina nova (que no sigui una redirecció) |
{{#invoke:Proves/Joutbis|rule|redirecció|1}}
|
1 punts atorgats per crear una nova redirecció |
{{#invoke:Proves/Joutbis|rule|qualificada|2}}
|
2 punts atorgats per cada pàgina qualificada |
{{#invoke:Proves/Joutbis|rule|edició|1}}
|
1 punts atorgats per cada edició |
{{#invoke:Proves/Joutbis|rule|byte|0,1}}
|
0,1 punts atorgats per cada octet afegit |
{{#invoke:Proves/Joutbis|rule|wikidata|2|properties=P18,P2096}}
|
2 punts atorgats per afegir P18 o P2096 a elements que encara no en tenien |
{{#invoke:Proves/Joutbis|rule|wikidata|2|properties=P569|require_reference=yes}}
|
2 punts atorgats per afegir P569 a elements que encara no en tenien (només si estan referenciats) |
{{#invoke:Proves/Joutbis|rule|wikidata|2|max=10|properties=P569|all=yes}}
|
2 punts atorgats per cada P569 afegida, però com a màxim 10 punts per pàgina |
{{#invoke:Proves/Joutbis|rule|wikidata|2|labels=nb,nn,se}}
|
2 punts atorgats per afegir etiqueta de Wikidata (nb, nn o se) a elements que encara no en tenien |
{{#invoke:Proves/Joutbis|rule|wikidata|2|aliases=nb,nn,se}}
|
2 punts atorgats per afegir àlies de Wikidata (nb, nn o se) a elements que encara no en tenien |
{{#invoke:Proves/Joutbis|rule|wikidata|2|descriptions=nb,nn,se}}
|
2 punts atorgats per afegir descripció de Wikidata (nb, nn o se) a elements que encara no en tenien |
uk = {}
local messages = {
['and'] = 'i',
['or'] = 'o',
['page_at_site'] = '%(page)s a %(site)s',
['argument_missing'] = 'Falta un argument: %s',
['anon_argument_missing'] = 'No s\'ha especificat %s',
['invalid_criterion'] = '"%s" no és un criteri vàlid',
['invalid_rule'] = '"%s" no és una regla de punts vàlida',
-- Criteria
['templates'] = 'plantilles',
['templates_criterion_singular'] = 'conté la plantilla %s',
['templates_criterion_plural'] = 'conté almenys una de les plantilles %s',
['categories'] = 'categories',
['categories_criterion_singular'] = 'a la categoria %s',
['categories_criterion_plural'] = 'conté almenys una de les categories %s',
['categories_criterion_ignore'] = ', però no és present a %s',
['backlinks'] = 'enllaçat',
['backlinks_criterion_singular'] = 'enllaçat des de %s',
['backlinks_criterion_plural'] = 'enllaçats des de %s',
['forwardlinks'] = 'enllaç',
['forwardlinks_criterion_singular'] = 'enllaç a %s',
['forwardlinks_criterion_plural'] = 'enllaços a %s',
['pages'] = 'pàgines',
['pages_criterion_singular'] = '%s',
['pages_criterion_plural'] = '%s',
['sparql_criterion'] = 'té un ítem a Wikidata que encaixa amb [%(queryLink)s aquesta consulta SPARQL]',
['sparql_criterion_with_explanation'] = '%(description)s ([%(queryLink)s consulta a Wikidata])',
['bytes_criterion'] = 'ampliat amb almenys %s bytes',
['namespaces_criterion_singular'] = 'és un %s',
['namespaces_criterion_plural'] = 'és un %s',
['article'] = 'article',
['new_criterion'] = 'creat durant el concurs',
['new_criterion_with_redirects'] = 'creades durant el concurs (redireccions incloses)',
['existing_criterion'] = 'creat abans de l\'inici del concurs (pàgines existents)',
-- Rules
['base_rule_max'] = '%(baserule)s, però com a màxim %(maxpoints)s punts per pàgina',
['newpage_rule'] = '%(points)s punts atorgats per crear una pàgina nova (que no sigui una redirecció)',
['newredirect_rule'] = '%(points)s punts atorgats per crear una nova redirecció',
['page_rule'] = '%(points)s punts atorgats per cada pàgina qualificada',
['edit_rule'] = '%(points)s punts atorgats per cada edició',
['byte_rule'] = '%(points)s punts atorgats per cada octet afegit',
['listbyte_rule'] = '%(points)s punts atorgats per cada octet afegit a un article de llista',
['word_rule'] = '%(points)s punts atorgats per cada paraula afegida al cos de l\'article (excloent plantilles, taules etc.)',
['image_rule'] = '%(points)s points atorgats per cada fitxer multimèdia afegit',
['image_rule_limited'] = '%(points)s punts atorgats per cada fitxer multimèdia afegit a pàgines que no tenien més de %(initialimagelimit)s abans de l\'edició',
['image_rule_own'] = '(%(ownimage)s si és propi)',
['reference_rule'] = '%(points)s punts atorgats per cada referència afegida, i %(refpoints)s punts per reutilitzar una referència ja existent',
['templateremoval_rule'] = '%(points)s punts atorgats per treure la plantilla %(templates)s',
['categoryremoval_rule'] = '%(points)s punts atorgats per treure la categoria %(categories)s',
['exlink_rule'] = '%(points)s punts atorgats per cada [[VP:EE|enllaç extern]] afegit',
['wikidata_rule_first'] = '%(points)s punts atorgats per afegir %(thing)s a elements que encara no en tenien',
['wikidata_rule_all'] = '%(points)s punts atorgats per cada %(thing)s afegida',
['wikidata_rule_require_reference'] = '(només si estan referenciats)',
['properties'] = 'propietats',
['labels'] = 'etiquetes',
['aliases'] = 'àlies',
['descriptions'] = 'descriptcons',
['label'] = 'etiqueta de Wikidata',
['alias'] = 'àlies de Wikidata',
['description'] = 'descripció de Wikidata',
['bytebonus_rule'] = '%(points)s punts de bonificació quan s\'afegeixen més de %(bytes)d a una pàgina',
['wordbonus_rule'] = '%(points)s punts de bonificació per %(action)s més de %(words)d paraules a una pàgina',
}
local config = {
['decimal_separator'] = '.',
['template_link_template'] = 'Tl',
['error_message_template'] = 'Error',
-- Map localized argument values for the criterion template
['criteria'] = {
['nou'] = 'new',
['existeix'] = 'existing',
['esborrany'] = 'stub',
['bytes'] = 'bytes',
['espai de noms'] = 'namespaces',
['categoria'] = 'categories',
['plantilla'] = 'templates',
['backlink'] = 'backlinks',
['forwardlink'] = 'forwardlinks',
['pàgines'] = 'pages',
['sparql'] = 'sparql',
},
-- Localized argument values for the rule template
['rules'] = {
['nou'] = 'newpage',
['redirecció'] = 'newredirect',
['qualificada'] = 'page',
['edició'] = 'edit',
-- ['stub'] = '(deprecated)',
['byte'] = 'byte',
['listbyte'] = 'listbyte',
['paraula'] = 'word',
['imatge'] = 'image',
['referència'] = 'ref',
['bytebonus'] = 'bytebonus',
['paraulabonus'] = 'wordbonus',
['treure plantilla'] = 'templateremoval',
['treure categoria'] = 'categoryremoval',
['enllaç extern'] = 'exlink',
['wikidata'] = 'wikidata'
}
}
local category_prefix = {
['se'] = 'se:Kategoriija',
['sv'] = 'sv:Kategori',
['nn'] = 'nn:Kategori',
['no'] = 'no:Kategori',
['en'] = 'en:Category',
['ca'] = 'ca:Categoria',
['oc'] = 'oc:Categoria',
['commons'] = 'commons:Category',
['default'] = 'Categoria'
}
--[ Helper methods ] ------------------------------------------------------------------
--[[ Named Parameters with Formatting Codes
Source: <http://lua-users.org/wiki/StringInterpolation>, author:RiciLake ]]
local function sprintf(s, tab)
return (s:gsub('%%%((%a%w*)%)([-0-9%.]*[cdeEfgGiouxXsq])',
function(k, fmt) return tab[k] and ("%"..fmt):format(tab[k]) or
'%('..k..')'..fmt end))
end
local function make_error(template, arg)
return string.format(
'{{%s|%s}}',
config['error_message_template'],
string.format(messages[template], arg)
)
end
local function parse_args(frame)
local args = {}
local kwargs = {}
for k, v in pairs(frame.args) do
v = mw.text.trim(frame:preprocess(v))
if v ~= '' then
if type(k) == 'number' then
args[k] = v
else
kwargs[k] = v
end
end
end
return args, kwargs
end
local function shift_args(in_args)
local args = {}
for i, v in ipairs(in_args) do
if i > 1 then
args[i - 1] = v
end
end
return in_args[1], args
end
local function format_plural(items, item_type)
if #items == 0 then
return make_error('anon_argument_missing', messages[item_type])
end
if #items == 1 then
return items[1]
end
return mw.text.listToText(items, ', ', ' ' .. messages['or'] .. ' ')
end
local function format_plural_criterion(items, item_type)
local value = format_plural(items, item_type)
if #items == 0 then
return value
end
if #items == 1 then
return string.format(messages[item_type .. '_criterion_singular'], value)
end
return string.format(messages[item_type .. '_criterion_plural'], value)
end
local function make_template_list(args)
local templates = {}
for i, v in ipairs(args) do
local lang, link = string.match(v, '^([a-z]+):(.+)$')
if lang then
table.insert(templates, string.format('{{%s|%s|%s}}', config['template_link_template'], link, lang))
else
table.insert(templates, string.format('{{%s|%s}}', config['template_link_template'], v))
end
end
return templates
end
local function 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)
end
local function make_category_list(args)
local category_links = {}
for i, v in ipairs(args) do
v = mw.text.trim(v)
if v ~= '' then
table.insert(category_links, make_category_link(v))
end
end
return category_links
end
local function 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
local function nslist(args)
local r = {}
local namespaceName = messages['article']
for i, namespaceId in ipairs(args) do
namespaceId = mw.text.trim(namespaceId)
if namespaceId ~= '' then
if namespaceId ~= "0" then
namespaceName = '{{lc:{{ns:' .. namespaceId .. '}}}}'
end
table.insert(r, namespaceName)
end
end
return r
end
--[ Criterion format methods ]-------------------------------------------------------------
local criterion = {}
function criterion.backlinks(args, kwargs, frame)
return format_plural_criterion(pagelist(args), 'backlinks')
end
function criterion.bytes(args, kwargs, frame)
return string.format(messages['bytes_criterion'], args[1])
end
function criterion.categories(args, kwargs, frame)
local msg = format_plural_criterion(make_category_list(args), 'categories')
if kwargs.ignore ~= nil then
r = mw.text.split(kwargs.ignore, ',')
for i, v in ipairs(r) do
v = mw.text.trim(v)
r[i] = make_category_link(v)
end
msg = msg .. string.format(messages['categories_criterion_ignore'], mw.text.listToText(r, ', ', ' ' .. messages['or'] .. ' '))
end
return msg
end
function criterion.existing(args, kwargs, frame)
return messages['existing_criterion']
end
function criterion.forwardlinks(args, kwargs, frame)
return format_plural_criterion(pagelist(args), 'forwardlinks')
end
function criterion.namespaces(args, kwargs, frame)
local site = kwargs.site
local msg = format_plural_criterion(nslist(args, site), 'namespaces')
if site ~= nil then
return sprintf(messages['page_at_site'], {
['page'] = msg,
['site'] = string.format('[https://%s %s]', site, site),
})
end
return msg
end
function criterion.new(args, kwargs, frame)
local msg = messages['new_criterion']
if kwargs.redirects ~= nil then
msg = messages['new_criterion_with_redirects']
end
return msg
end
function criterion.pages(args, kwargs, frame)
return format_plural_criterion(pagelist(args), 'pages')
end
function criterion.sparql(args, kwargs, frame)
local query = 'SELECT ?item WHERE {\n ' .. kwargs.query .. '\n}'
local url = 'http://query.wikidata.org/#' .. frame:callParserFunction('urlencode', { query, 'PATH' })
local vizUrl = 'https://tools.wmflabs.org/hay/vizquery/#' .. frame:callParserFunction('urlencode', { query, 'PATH' })
if kwargs.description ~= nil then
return sprintf(messages['sparql_criterion_with_explanation'], {
description = kwargs.description,
queryLink = url,
vizQueryLink = vizUrl
})
end
return sprintf(messages['sparql_criterion'], {
queryLink=url,
vizQueryLink=vizUrl
})
end
function criterion.stub(args, kwargs, frame)
-- deprecated
return messages['stub_criterion']
end
function criterion.templates(args, kwargs, frame)
return format_plural_criterion(make_template_list(args), 'templates')
end
function criterion.format(frame)
local args, kwargs = parse_args(frame)
local criterion_arg, args = shift_args(args)
-- Try to find the corresponding formatter or bail out if not found
if criterion_arg == nil then
return frame:preprocess(make_error('argument_missing', 'criterion'))
end
local formatter = config.criteria[criterion_arg]
if formatter == nil or criterion[formatter] == nil then
return frame:preprocess(make_error('invalid_criterion', criterion_arg))
end
-- Use manual description if given
if kwargs.description ~= nil and formatter ~= 'sparql' then
return kwargs.description
end
-- Generate auto-generated description
return frame:preprocess(criterion[formatter](args, kwargs, frame))
end
--[ Rule format methods ]-------------------------------------------------------------
local rule = {}
function rule.image(points, args, kwargs)
local out
local tplargs = {
['points'] = points,
}
if kwargs.initialimagelimit ~= nil then
out = messages['image_rule_limited']
tplargs['initialimagelimit'] = kwargs.initialimagelimit
else
out = messages['image_rule']
end
if kwargs.ownimage ~= nil then
out = out .. ' ' .. messages['image_rule_own']
tplargs['ownimage'] = kwargs.ownimage
end
return sprintf(out, tplargs)
end
function rule.wikidata(points, args, kwargs)
local out
local params
local arg_types = { messages['properties'], messages['labels'], messages['aliases'], messages['descriptions'] }
local results = {}
if kwargs.properties == nil and kwargs.labels == nil and kwargs.aliases == nil and kwargs.descriptions == nil then
return make_error(
'argument_missing',
mw.text.listToText( arg_types, ', ', ' ' .. messages['or'] .. ' ' )
)
end
if kwargs.properties ~= nil then
params = mw.text.split(kwargs.properties, ',')
for k, v in pairs(params) do
params[k] = string.format('[[:d:Property:%s|%s]]', v, v)
end
table.insert(results, mw.text.listToText( params, ', ', ' ' .. messages['or'] .. ' ' ))
end
if kwargs.labels ~= nil then
params = mw.text.split(kwargs.labels, ',')
table.insert(results, messages['label'] .. ' (' .. mw.text.listToText( params, ', ', ' ' .. messages['or'] .. ' ' ) .. ')')
end
if kwargs.aliases ~= nil then
params = mw.text.split(kwargs.aliases, ',')
table.insert(results, messages['alias'] .. ' (' .. mw.text.listToText( params, ', ', ' ' .. messages['or'] .. ' ' ) .. ')')
end
if kwargs.descriptions ~= nil then
params = mw.text.split(kwargs.descriptions, ',')
table.insert(results, messages['description'] .. ' (' .. mw.text.listToText( params, ', ', ' ' .. messages['or'] .. ' ' ) .. ')')
end
results = table.concat( results, ' ' .. messages['and'] .. ' ' )
if kwargs.all ~= nil then
out = messages['wikidata_rule_all']
else
out = messages['wikidata_rule_first']
end
if kwargs.require_reference ~= nil then
out = out .. ' ' .. messages['wikidata_rule_require_reference']
end
return sprintf(out, {
['points'] = points,
['thing'] = results,
})
end
function rule.reference(points, args, kwargs)
return sprintf(messages['reference_rule'], {
['points'] = points,
['refpoints'] = args[1],
})
end
function rule.templateremoval(points, args, kwargs)
local templates = format_plural(make_template_list(args), 'templates')
return sprintf(messages['templateremoval_rule'], {
['points'] = points,
['templates'] = templates,
})
end
function rule.categoryremoval(points, args, kwargs)
local categories = format_plural(make_category_list(args), 'categories')
return sprintf(messages['categoryremoval_rule'], {
['points'] = points,
['categories'] = categories,
})
end
function rule.bytebonus(points, args, kwargs)
return sprintf(messages['bytebonus_rule'], {
['points'] = points,
['bytes'] = args[1],
})
end
function rule.wordbonus(points, args, kwargs)
return sprintf(messages['wordbonus_rule'], {
['points'] = points,
['words'] = args[1],
})
end
function rule.format(frame)
-- Make tables of anonymous and named arguments
local args, kwargs = parse_args(frame)
rule_arg, args = shift_args(args)
points, args = shift_args(args)
-- Try to find the corresponding formatter or bail out if not found
if rule_arg == nil then
return frame:preprocess(make_error('argument_missing', 'rule'))
end
local formatter = config.rules[rule_arg]
if formatter == nil then
return frame:preprocess(make_error('invalid_rule', rule_arg))
end
-- All rules requires argument 1: number of points awarded
if points == nil then
return frame:preprocess(make_error('argument_missing', '1 (number of points)'))
end
points = points:gsub( '%.', config['decimal_separator'])
-- If there's a rule formatter function, use it.
-- Otherwise, use the string from the messages table.
local out
if rule[formatter] ~= nil then
out = rule[formatter](points, args, kwargs)
else
out = sprintf(messages[formatter .. '_rule'], {
['points'] = points,
})
end
if kwargs.max ~= nil then
out = sprintf(messages['base_rule_max'], {
['baserule'] = out,
['maxpoints'] = kwargs.max:gsub( '%.', config['decimal_separator']),
})
end
return frame:preprocess(out)
end
-- Export
return {
['criterion'] = criterion.format,
['rule'] = rule.format,
}