Mòdul:Proves/Vriullop
![Icona de documentació de mòdul](http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Test_Template_Info-Icon.svg/50px-Test_Template_Info-Icon.svg.png)
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
local p = {}
local query = {}
query.infobox = {
["Q5"] = "person",
["Q11424"] = "film",
["Q1002697"] = "periodical",
["Q41176"] = "building",
["default"] = "generic"
}
-- removes duplicate values from an array
local function removeDuplicates(t)
local ret, exists = {}, {}
for _, v in ipairs(t) do
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
return ret
end
-- get safely a serialized snak
local function getSnak(statement, snaks)
local ret = statement
for i, v in ipairs(snaks) do
if not ret then return end
ret = ret[v]
end
return ret
end
local function getValues(qid, pid)
local statements = mw.wikibase.getAllStatements(qid, pid)
local ret = {}
for _, statement in ipairs(statements) do
if statement.rank ~= "deprecated" then
local value_id = getSnak(statement, {"mainsnak", "datavalue", "value", "id"})
if value_id then
table.insert(ret, value_id)
end
end
end
return ret
end
function p.main(frame)
local args = frame.args or frame -- via invoke or require
local item = args.item or mw.wikibase.getEntityIdForCurrentPage()
local items = {item}
local pid = args.pid or 'P31'
local my_query = args.query or 'infobox'
for iter = 1, 5 do -- arbitrary max iter set heuristically
local next_items = {}
if iter == 2 and pid == 'P31' then
pid = 'P279' -- subclass of
end
for _, item in ipairs(items) do
local ids = getValues(item, pid)
for _, id in ipairs(ids) do
if query[my_query][id] then
return query[my_query][id] -- first value id found, that's all
else
table.insert(next_items, id) -- save for next iteration
end
end
end
items = removeDuplicates(next_items)
end
return query[my_query]['default']
end
return p