Модул:category tree/derivcatboiler

Документација модула[прикажи] [уреди] [историја] [освежи]

This module implements {{derivcatboiler}}. The documentation here describes how the module works, and how to add, modify or remove information from the category tree. For information on how to use the template itself, see its documentation.

This module does not use a data module with recognised labels. Instead, the labels are taken directly from Module:languages, Module:families and Module:etymology languages. Thus, any valid language, family or etymology language code is a valid label. For the top-level category, the label ROOT is used.

local export = {}

-- Category object

local Category = {}
Category.__index = Category


function Category.new_main(frame)
	local params = {
		[1] = {},
		[2] = {required = true},
[3] = {},[4] = {},	
}
	
	args = require("Модул:parameters").process(frame:getParent().args, params)
	
	return Category.new({code = args[1], label = args[2], label1 = args[3], label2 = args[4]})
end


function Category.new(info)
	for key, val in pairs(info) do
		if not (key == "code" or key == "label") then
			error("Параметар \"" .. key .. "\" није препознат.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info
	
	if not self._info.label then
		error("Ниједна ознака није наведена.")
	end
	
	self._lang = self._info.code and (require("Модул:languages").getByCode(self._info.code) or error("The language code \"" .. self._info.code .. "\" is not valid.")) or nil
	self._source = 
		require("Модул:families").getByCode(self._info.label) or
		require("Модул:etymology languages").getByCode(self._info.label) or
		require("Модул:languages").getByCode(self._info.label) or 
		error("\"" .. self._info.label .. "\" није ваљани језик, породични језик или етимологија.")
	
	return self
end

export.new = Category.new
export.new_main = Category.new_main


function Category:getInfo()
	return self._info
end


function Category:getBreadcrumbName()
	local ret = nil
	
	if self._source:getType() == "family" then
		ret = self._source:getCategoryName()
	else
		ret = self._source:getCanonicalName()
	end
	
	return (not self._lang and "изрази добијени од " or "") .. ret
end


function Category:getDataModule()
	return "Модул:category tree/derivcatboiler"
end


function Category:canBeEmpty()
	return false
end


function Category:isHidden()
	return false
end


function Category:getCategoryName()
	local ret = nil

	if self._source:getType() == "family" then
		ret = self._source:getCategoryName()
	else
		if self._source:getCode() == "mul-tax" then
			ret = "taxonomic names"
		else
			ret = self._source:getCanonicalName()
label1=[[{{{3|ret}}}]]
label2=[[{{{4|ret}}}]]	
end
	end
	
	if self._lang then
		return mw.getContentLanguage():ucfirst(self._lang:getCanonicalName() .. " појмови изведени из " .. ret  )
	else
		return "Појмови изведени из " .. ret   
	end
end


function Category:getDescription()
	local ret = nil
	
	if not self._lang then
		if self._source:getType() == "family" then
			return "Категорије са условима изведеним из " .. self._source:getCategoryName() .. " на разним специфичним језицима."
		else
			return "Категорије са условима изведеним из " .. self._source:getCanonicalName() .. " на разним специфичним језицима."
		end
	else
		if self._source:getType() == "family" then
			return
				"Појмови из " .. self._lang:getCanonicalName() .. " потичу из " ..
				"[[:Категорија:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()) .. "|" .. self._source:getCategoryName() .. "]].\n\n" ..
				"Ова категорија идеално би требало да садржи само друге категорије. Записи могу бити категоризирани и овде, када је нека тачна подкатегорија нејасна. " ..
				"Ако знате тачан језик из којег је изведен унос који је категоризиран овде, молимо вас уредите његов одговарајући унос."
		elseif self._source:getType() == "etymology language" then
			return "Појмови из " .. self._lang:getCanonicalName() .. " потичу од " .. self._source:getCanonicalName() .. "."
		else
			return "Појмови из " .. self._lang:getCanonicalName() .. " потичу од [[:Категорија:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()) .. "|" .. self._source:getCategoryName() .. "]]."
		end
	end
end


function Category:getParents()
	if self._lang then
		local parent = {}
		
		local pinfo = {
			code = self._lang:getCode()
		}
		local sortkey = nil
		
		if self._source:getType() == "family" then
			local fam = self._source:getFamily()
			
			if not fam or fam:getCode() == "qfa-iso" or fam:getCode() == "qfa-not" then
				pinfo.label = nil
			else
				pinfo.label = fam:getCode()
			end
			
			sortkey = self._source:getCategoryName()
		elseif self._source:getType() == "etymology language" then
			if self._source:getParentCode() == "qfa-iso" or self._source:getParentCode() == "qfa-not" or self._source:getParentCode() == "qfa-und" then
				pinfo.label = nil
			elseif self._source:getParentCode() == self._lang:getCode() then
				error("A language can't derive terms from a subvariety of itself.")
				--pinfo.label = self._lang:getFamily():getCode()
			else
				pinfo.label = self._source:getParentCode()
			end
			
			sortkey = self._source:getCanonicalName()
		else
			local fam = self._source:getFamily()
			
			if not fam or fam:getCode() == "qfa-iso" or fam:getCode() == "qfa-not" then
				pinfo.label = nil
			else
				pinfo.label = fam:getCode()
			end
			
			sortkey = self._source:getCanonicalName()
		end
		
		if not pinfo.label then
			return {{name = require("Модул:category tree/poscatboiler").new({code = self._info.code, label = "термини изведени од осталих језика"}), sort = sortkey}}
		else
			return {{name = Category.new(pinfo), sort = sortkey}}
		end
	else
		if self._source:getType() == "family" then
			return {{name = require("Модул:category tree/famcatboiler").new({code = self._info.label}), sort = " "}}
		elseif self._source:getType() == "etymology language" then
			return {{name = "Категорија:" .. mw.getContentLanguage():ucfirst(self._source:getCategoryName()), sort = "изрази добијени од"}}
		else
			return {{name = require("Модул:category tree/langcatboiler").new({code = self._info.label}), sort = "изрази добијени од"}}
		end
	end
end

function Category:getChildren()
	return nil
end


function Category:getUmbrella()
	if not self._lang then
		return nil
	end
	
	return Category.new({label = self._source:getCode()})
end


return export