Modul:category tree/root cat
A modult a Modul:category tree/root cat/doc lapon tudod dokumentálni
local export = {}
-- Category object
local Category = {}
Category.__index = Category
local function get_lang_by_name(name)
return require("Module:languages").getByCanonicalName(name) or
error('The language name "' .. name .. '" in the page title is not valid.')
end
function Category.new_main(frame)
local raw_args = mw.title.getCurrentTitle().nsText == "Module" and frame.args
or frame:getParent().args
local args = {}
for k, v in pairs(raw_args) do
args[k] = v
end
local lang, source, root, id
-- Parameters were supplied; "next" can't be called on
-- frame.args
if next(args) then
local getByCode = require("Module:languages").getByCode
lang = args[1]
if lang and lang ~= "" then
lang = getByCode(lang)
else
lang = nil
end
source = args[2]
if source and source ~= "" then
source = getByCode(source)
else
source = nil
end
root = args[3]
id = args[4]
end
if not source then error("Source language is required.") end
return Category.new{
lang = lang,
source = source,
label = root,
id = id
}
end
function Category.new(info)
local validKeys = {
lang = true,
source = true,
code = true,
label = true,
id = true,
}
for key, val in pairs(info) do
if not validKeys[key] then
error("The parameter \"" .. key .. "\" was not recognized.")
end
end
local self = setmetatable({}, Category)
self._info = info
if self._info.code or self._info.lang then
self._lang = self._info.lang
or require("Module:languages").getByCode(self._info.code)
or error("The language code \"" .. self._info.code .. "\" is not valid.")
if not self._info.code then
self._info.code = self._lang:getCode()
end
end
return self
end
export.new = Category.new
export.new_main = Category.new_main
function Category:getInfo()
return self._info
end
function Category:getBreadcrumbName()
if self._info.label then
local root = require("Module:script utilities").tag_text(
self._info.label,
self._info.lang,
nil,
"term"
)
if self._info.id then
root = root .. " (" .. self._info.id .. ")"
end
return root
else
return self:getCategoryName()
end
end
function Category:getDataModule()
return "Module:category tree/root cat"
end
function Category:canBeEmpty()
if self._lang then
return false
else
return true
end
end
function Category:isHidden()
return false
end
function Category:getCategoryName()
if self._info.label then
local shared = " derived from the " .. self._info.source:getCanonicalName() .. " root " ..
self._info.label
if self._info.id then
shared = shared .. " (" .. self._info.id .. ")"
end
if self._lang then
return self._lang:getCanonicalName() .. " terms" .. shared
else
return "Terms" .. shared
end
else
local source = self._info.source
if source then
return "Terms derived from " .. source:getCanonicalName() .. " roots"
else
return "Terms by root"
end
end
end
function Category:getDescription()
if self._info.label then
local shared = " that originate ultimately from the [[w:"
.. self._info.source:getWikipediaArticle() .. "|"
.. self._info.source:getCanonicalName() .. "]] root " ..
require("Module:links").full_link(
{
term = self._info.label,
lang = self._info.source,
id = self._info.id
},
"term"
) .. "."
mw.getCurrentFrame():callParserFunction(
"DISPLAYTITLE",
require("Module:string").plain_gsub(
"Category:" .. self:getCategoryName(),
self._info.label,
require("Module:script utilities").tag_text(
self._info.label,
self._info.source,
nil,
"term"
)
)
)
if self._lang then
return self._lang:getCanonicalName() .. " terms" .. shared
else
return "Terms" .. shared
end
else
return "Categories for terms derived from particular [[w:"
.. self._info.source:getWikipediaArticle() .. "|"
.. self._info.source:getCanonicalName() .. "]]."
end
end
function Category:getParents()
local parents = {}
if self._lang then -- langname terms derived from PIE root
if self._info.label then
table.insert(
parents,
{
name = Category.new { source = self._info.source },
-- root sortkey
sort = self._info.source:makeSortKey(self._info.label)
}
)
table.insert(
parents,
{
name = require("Module:category tree/root cat")
.new {
source = self._info.source,
label = self._info.label,
id = self._info.id
},
sort = self._lang:getCanonicalName()
}
)
else
return { "test" }
end
else -- terms derived from PIE root
if self._info.label then
table.insert(
parents,
{
name = Category.new {
code = nil,
label = nil,
id = nil,
source = self._info.source
},
-- root sortkey
sort = self._info.source:makeSortKey(self._info.label)
}
)
else
table.insert(
parents,
{
name = require("Module:category tree/poscatboiler")
.new {
code = self._info.source:getCode(),
label = "roots",
},
sort = " "
}
)
table.insert(
parents,
{
name = require("Module:category tree/derived cat")
.new {
label = self._info.source:getCode(),
},
sort = " roots"
}
)
end
end
if self._info.id then
table.insert(
parents,
{
name = Category.new {
lang = self._lang,
label = self._info.label,
id = nil,
source = self._info.source
},
sort = " " .. self._info.id
}
)
end
return parents
end
function Category:getChildren()
return nil
end
function Category:getUmbrella()
return nil
end
return export
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet: