Module:Databox/categories
Appearance
Documentation for this module may be created at Module:Databox/categories/doc
local human_ids = {
'Q5' -- human
}
local language_ids = {
'Q34770', -- language
'Q33742' -- natural language
}
local lanfamily_ids = {
'Q25295' -- language family
}
local taxon_ids = {
'Q16521', -- taxon
'Q713623', -- clade
'Q23038290', -- fossil taxon
'Q310890' -- Q310890
}
local country_ids = {
'Q6256', -- country
'Q3624078' -- sovereign state
}
local city_ids = {
'Q5119', -- capital
'Q515', -- city
'Q2264924', -- port city
'Q2989398', -- municipality of Algeria
'Q484170', -- commune of France
'Q1549591', -- big city
'Q1093829', -- city of the United States
'Q15253706', -- like a city
'Q3327870', -- municipal corporation in the United States
'Q21518270', -- state or insular area capital in the United States
'Q174844', -- megacity
'Q200250', -- metropolis
'Q41067667', -- Q41067667
'Q3327862', -- urban commune of Morocco
'Q2989470', -- commune of Mauritania
'Q17318027' -- rural commune of Morocco
}
local categories = {
human_ids = human_ids,
language_ids = language_ids,
lanfamily_ids = lanfamily_ids,
taxon_ids = taxon_ids,
country_ids = country_ids,
city_ids = city_ids,
}
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.find(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
return p