Aller au contenu

Module:Categorizer

Si Wikipedia, tasanayt tilellit.
Aceggir-agi yettwag di 30 Ctember 2020 à 21:03 sɣuṛ Sami At Ferḥat (mmeslay | attekki) (Asebtar amaynut: 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" lo…)
(Imgir) ←Lqem i yezrin | Tasiwelt n tura (Imgir) | Tasiwelt tamaynut→ (Imgir)

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