Modulu:UKB irizpide

Wikipedia, Entziklopedia askea

Documentation for this module may be created at Modulu:UKB irizpide/dok

uk = {}

local messages = {
    ['or'] = 'edo',
    ['error_no_x_given'] = 'Ez da %s eman',
    ['error_no_valid_criterion_given'] = 'Ez da kriterio baliagarrik eman',

    ['templates'] = 'txantiloiak',
    ['template_criterion_singular'] = '%s txantiloia dutenak',
    ['template_criterion_plural'] = 'gutxienez %s txantiloietako bat dutenak',

    ['categories'] = 'kategoriak',
    ['category_criterion_singular'] = '%s kategorian',
    ['category_criterion_plural'] = 'hauetariko %s kategorietako batean',
    ['category_criterion_ignore'] = ', baina ez %s kategorian',

    ['backlinks'] = 'lotuta dago',
    ['backlink_criterion_singular'] = '%s artikulutik lotuta',
    ['backlink_criterion_plural'] = '%s artikuluetatik lotuta',

    ['forwardlinks'] = 'lotzen du',
    ['forwardlink_criterion_singular'] = '%s artikulura lotzen duena',
    ['forwardlink_criterion_plural'] = '%s artikuluetara lotzen duena',

    ['pages'] = 'orrialdeak',
    ['page_criterion_singular'] = '%s',
    ['page_criterion_plural'] = '%s',

    ['sparql_criterion'] = 'has a wikidata item matching [%s this SPARQL query]',
    ['sparql_criterion_with_explanation'] = '%s ([%s show SPARQL query])',
    ['bytes_criterion'] = 'gutxienez %s bytekin hedatua',
    ['namespace_criterion_singular'] = 'honako hau da %s',
    ['namespace_criterion_plural'] = 'honako hau da %s',
    ['namespace_main'] = 'artikulua',
    ['new_criterion'] = 'lehiaketan zehar sortua',
    ['new_criterion_with_redirects'] = 'lehiaketan zehar sortua (birzuzenketak barne)',
    ['existing_criterion'] = 'lehiaketa hasi aurretik sortua (bazeuden orrialdeak)',
    ['stub_criterion'] = 'zirriborro txantiloia kendu zaio',

}
local config = {
    ['template_link_template'] = 'Tx',
    ['error_message_template'] = 'Akatsa',
    ['arguments'] = {
        ['new'] = 'berria',
        ['existing'] = 'bazegoen',
        ['stub'] = 'zirriborroa',
        ['bytes'] = 'byte',
        ['namespace'] = 'izen-tartea',
        ['category'] = 'kategoria',
        ['template'] = 'txantiloia',
        ['backlink'] = 'lotuta dago',
        ['forwardlink'] = 'lotzen du',
        ['page'] = 'orrialdeak',
        ['sparql'] = 'sparql',
    }
}

local category_prefix = {
    ['eu'] = 'eu:Kategoria',
    ['commons'] = 'commons:Category',
    ['default'] = 'Kategoria'
}

-- format_kriterium
local function 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

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 = '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

-- kriterium_maler
local function 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 format_criterion('template', 'templates', r)
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


-- kriterium_kategorier
local function criterion_categories(args, ignore)
    local r = {}
    for i, v in ipairs(args) do
        v = mw.text.trim(v)
        if v ~= '' then
            table.insert(r, make_category_link(v))
        end
    end

    local msg = 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] = 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
local function criterion_backlinks(args)
    return format_criterion('backlink', 'backlinks', pagelist(args))
end

-- kriterium_fremlenke
local function criterion_forwardlinks(args)
    return format_criterion('forwardlink', 'forwardlinks', pagelist(args))
end

-- kriterium_enkeltsider
local function criterion_pages(args)
    return format_criterion('page', 'pages', pagelist(args))
end

-- kriterium_sparql
local function criterion_sparql(frame, query, explanation)
	query = 'SELECT ?item WHERE {\n  ' .. query .. '\n}'
	local url = 'http://query.wikidata.org/#' .. frame:callParserFunction('urlencode', { query, 'PATH' })
    if explanation ~= nil then
	    return string.format(messages['sparql_criterion_with_explanation'], explanation, url)
	else
	    return string.format(messages['sparql_criterion'], url)
	end
end

-- kriterium_bytes
local function criterion_bytes(args)
   return string.format(messages['bytes_criterion'], args[1])
end

-- kriterium_navnerom
local function criterion_namespaces(args, site)
    site = site:expand()
    local msg = format_criterion('namespace', 'namespaces', nslist(args, site))
    if site ~= nil then
        site = mw.text.trim(site)
        if site ~= '' then
            return string.format('%s at [https://%s %s]', msg, site, site)
        end
    end
    return msg
end

-- kriterium_ny
local function 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 description = frame:getArgument('description'):expand()
    if description ~= nil and mw.text.trim(description) ~= '' then
        if frame.args.criterion == 'sparql' then
            return criterion_sparql(frame, frame:getArgument('query'):expand(), description)
        else
	        return description
	    end
    end
    local t = {
        [config['arguments']['new']] = function(args) return criterion_new(frame:getArgument('redirects')) end,
        [config['arguments']['existing']] = messages['existing_criterion'],
        [config['arguments']['stub']] = messages['stub_criterion'],
        [config['arguments']['bytes']] = function(args) return criterion_bytes(args) end,
        [config['arguments']['namespace']] = function(args) return criterion_namespaces(args, frame:getArgument('site')) end,
        [config['arguments']['template']] = function(args) return criterion_templates(args) end,
        [config['arguments']['category']] = function(args) return criterion_categories(args, frame:getArgument('ignore')) end,
        [config['arguments']['backlink']] = function(args) return criterion_backlinks(args) end,
        [config['arguments']['forwardlink']] = function(args) return criterion_forwardlinks(args) end,
        [config['arguments']['page']] = function(args) return criterion_pages(args) end,
        [config['arguments']['sparql']] = function(args) return criterion_sparql(frame, frame:getArgument('query'):expand()) 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