وحدة:category tree/topic cat
يمكن إنشاء صفحة توثيق الوحدة في وحدة:category tree/topic cat/شرح
local export = {}
local labels = require("Module:category tree/topic cat/data")
-- Category object
local Category = {}
Category.__index = Category
function Category.new(info)
local self = setmetatable({}, Category)
assert(type(info) == "table", "The \"info\" parameter must be a table.")
self._info = {}
for key, val in pairs(info) do
if key == "code" then
self._info.code = val
self._lang = require("Module:languages").getByCode(val) or error("The language code \"" .. val .. "\" is not valid.")
elseif key == "label" then
local lowercase_label = mw.getContentLanguage():lcfirst(val)
if labels[lowercase_label] then
self._info.label = lowercase_label
else
self._info.label = val
end
self._data = labels[self._info.label]
else
error("The parameter \"" .. key .. "\" was not recognized.")
end
self._info[key] = val
end
-- Check if the label exists
if not self._info.label then
error("No label was specified.")
elseif not self._data then
return nil
end
return self
end
export.new = Category.new
function Category:getBreadcrumbName()
return self._info.label
end
function Category:getDataModule()
return self._data["edit"]
end
function Category:canBeEmpty()
return false
end
function Category:getCategoryName()
if self._lang then
return self._lang:getCode() .. ":" .. mw.getContentLanguage():ucfirst(self._info.label)
else
return mw.getContentLanguage():ucfirst(self._info.label)
end
end
function Category:getDescription()
if self._lang then
local ret = self._data["description"]
-- TODO: Should probably find a better way to do this
if ret == "default" then
ret = "{{{langname}}} terms related to {{{label_lc}}}."
elseif ret == "default with capital" then
ret = "{{{langname}}} terms related to {{{label_uc}}}."
elseif ret == "default with the" then
ret = "{{{langname}}} terms related to the {{{label_uc}}}."
elseif ret == "default with the lower" then
ret = "{{{langname}}} terms related to the {{{label_lc}}}."
elseif ret == "default with topic" then
ret = "{{{langname}}} terms related to {{{label_lc}}} topics."
end
if ret then
ret = ret:gsub("{{{langname}}}", self._lang:getCanonicalName())
ret = ret:gsub("{{{langcat}}}", self._lang:getCategoryName())
if ret:find("{{{label_uc}}}") then
local label_entry_name = mw.getContentLanguage():ucfirst(self._info.label)
local label_entry = mw.title.new(label_entry_name)
if label_entry.exists then
ret = ret:gsub("{{{label_uc}}}", "[[" .. label_entry_name .. "]]")
else
ret = ret:gsub("{{{label_uc}}}", label_entry_name)
end
end
if ret:find("{{{label_lc}}}") then
local label_entry_name = mw.getContentLanguage():lcfirst(self._info.label)
local label_entry = mw.title.new(label_entry_name)
if label_entry.exists then
ret = ret:gsub("{{{label_lc}}}", "[[" .. label_entry_name .. "]]")
else
ret = ret:gsub("{{{label_lc}}}", label_entry_name)
end
end
end
return ret
else
local eninfo = mw.clone(self._info)
eninfo.code = "en"
local en = Category.new(eninfo)
return
"هذا التصنيف متداخل فقط مع تصنيفات أخرى، فهو مدخل غير قاموسي. التصنيفات الفرعية للمواضيع منفصلة. " ..
"يمكن للإداريين تعديل شجرة التصنيف بالضغط على الزر التالي: "
end
end
function Category:getParents()
local parents = self._data["parents"]
if not parents or #parents == 0 then
return nil
end
local ret = {}
for key, parent in ipairs(parents) do
parent = mw.clone(parent)
if type(parent) == "table" then
if self._lang then
parent.sort = parent.sort:gsub("{{{langname}}}", self._lang:getCanonicalName())
parent.sort = parent.sort:gsub("{{{langcat}}}", self._lang:getCategoryName())
elseif parent.sort:find("{{{langname}}}") or parent.sort:find("{{{langcat}}}") then
return nil
end
else
parent = {name = parent, sort = self._info.label}
end
if not self._lang then
parent.sort = "*" .. parent.sort
end
if parent.name:find("^Category:") then
if self._lang then
parent.name = parent.name:gsub("{{{langname}}}", self._lang:getCanonicalName())
parent.name = parent.name:gsub("{{{langcat}}}", self._lang:getCategoryName())
elseif parent.name:find("{{{langname}}}") or parent.name:find("{{{langcat}}}") then
return nil
end
else
local pinfo = mw.clone(self._info)
pinfo.label = parent.name
parent.name = Category.new(pinfo)
end
table.insert(ret, parent)
end
if self._info.label ~= "قائمة المواضيع" then
local pinfo = mw.clone(self._info)
pinfo.label = "قائمة المواضيع"
table.insert(ret, {name = Category.new(pinfo), sort = (not self._lang and "*" or "") .. self._info.label})
end
return ret
end
function Category:getChildren()
return nil
end
function Category:getUmbrella()
if not self._lang then
return nil
end
local uinfo = mw.clone(self._info)
uinfo.code = nil
return Category.new(uinfo)
end
return export