Modul:Határos
Megjelenés
Határos[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
local getArgs = require('Modul:Arguments').getArgs
local bordersProperty = 'P47'
local p = {}
local replace = {
['községekkel'] = '^(.+) község$',
['megyékkel'] = '^(.+) megye$',
['járásokkal'] = '^(.+) járás$',
['kistérségekkel'] = '^(.+) kistérség$'
}
local singular = {
['községekkel'] = 'községgel',
['megyékkel'] = 'megyével',
['járásokkal'] = 'járással',
['kistérségekkel'] = 'kistérséggel'
}
local function getWdData(id)
local function processStatement(statement)
local snak = statement.mainsnak
if not snak or snak.snaktype ~= 'value' then
return nil
end
local value = snak.datavalue.value
if value['entity-type'] == 'item' then
return 'Q' .. value['numeric-id']
else
return nil
end
end
local entity = mw.wikibase.getEntity(id)
if not entity then
return nil
end
local statements = entity:getBestStatements(bordersProperty)
local results = {}
for _, statement in pairs(statements) do
local result = processStatement(statement)
if result then
table.insert(results, result)
end
end
return results
end
local function formatEntityId(entityId, unitType)
local link = mw.wikibase.sitelink(entityId)
local label = mw.wikibase.label(entityId)
if replace[unitType] and label then
local label2 = string.match(label, replace[unitType])
if label2 then
label = label2
end
end
if link then
if label then
if mw.ustring.sub(label, 2) == mw.ustring.sub(link, 2) and
mw.ustring.lower(mw.ustring.sub(label, 1, 1)) == mw.ustring.lower(mw.ustring.sub(link, 1, 1)) then
return '[[' .. label .. ']]'
else
return '[[' .. link .. '|' .. label .. ']]'
end
else
return '[[' .. link .. ']]'
end
else
return label or link --TODO what if no links and label + fallback language?
end
end
function p.main(frame)
local args = getArgs(frame)
local unitType = args[1] or 'községekkel'
local wdData = getWdData(args.id)
if not wdData or #wdData == 0 then
return nil
end
local result = {}
for _, v in pairs(wdData) do
local formattedStatement = formatEntityId(v, unitType)
if formattedStatement then
table.insert(result, formattedStatement)
end
end
local list = mw.text.listToText(result)
if list ~= '' then
local formatString = require('Modul:String').simpletitle() .. ' %s %s határos.'
if #result == 1 then
unitType = singular[unitType] and singular[unitType] or unitType
return formatString:format(list, unitType) .. '[[Kategória:Egyetlen határos egységgel rendelkező lapok]]'
else
return formatString:format(list, unitType)
end
else
return nil
end
end
return p