Module:Categorizer
Apparence
La documentation pour ce module peut être créée à Module:Categorizer/doc
function valuesToKeys(array)
local result = {}
for _, v in pairs(array) do
result[v] = true
end
return result
end
local p = {}
local lualinq = require "Module:LuaLinq"
local categories = { }
local function loadCategories()
local exist, res = pcall(require, "Module:Categorizer/categories")
categories = res
end
loadCategories()
function belongsTo(item_ids, category_ids)
return lualinq.main(category_ids):any(function(x) return lualinq.main(item_ids):any(function(y) return x == y; end) end)
end
function findCategoryName(item_ids)
for k, v in pairs(categories) do
if belongsTo(item_ids, v) then return k end
end
return "generic"
end
function p.findCategory(frame)
local args = frame:getParent().args
local itemId = nil
if args.item then
itemId = args.item
end
local item = mw.wikibase.getEntity(itemId)
if item == nil or item.claims == nil then
return nil
end
local ids = lualinq.main(item.claims["P31"]):select(function(c) return c.mainsnak.datavalue.value['id']; end)
if not lualinq.main(ids):any() then
return nil
end
local name = findCategoryName(ids)
if name == "generic" then --try once more with parent
name = findCategoryName(lualinq.main(mw.wikibase.getEntity(lualinq.main(ids):first()).claims["P279"]):select(function(c) return c.mainsnak.datavalue.value['id']; end):toArray())
end
return name
end