Modul:dara kategoriyan/zıwankatbike

Seba na module şıma şenê yû pela dokumani vırazê Modul:dara kategoriyan/zıwankatbike/dok

--{{zıwankatbike}}
local export = {}

local function makeCategoryLink(object)
	return "[[:Kategoriye:" .. object:getCategoryName() .. "|" .. object:getCanonicalName() .. "]]"
end

local function edit_link(title, text)
	return '<span class="plainlinks">['
		.. tostring(mw.uri.fullUrl(title, { action = "edit" }))
		.. ' ' .. text .. ']</span>'
end

-- Should perhaps use wiki syntax.
local function infobox(lang)
	local ret = {}
	
	table.insert(ret, '<table class="wikitable language-category-info"')
	
	if type(lang.getRawData) == "function" then
		local raw_data = lang:getRawData()
		if raw_data then
			local replacements = {
				[1] = "canonical-name",
				[2] = "wikidata-item",
				[3] = "family",
			}
			local function replacer(letter1, letter2)
				return letter1:lower() .. "-" .. letter2:lower()
			end
			-- For each key in the language data modules, returns a descriptive
			-- kebab-case version (containing ASCII lowercase words separated
			-- by hyphens).
			local function kebab_case(key)
				key = replacements[key] or key
				key = key:gsub("(%l)(%u)", replacer):gsub("(%l)_(%l)", replacer)
				return key
			end
			local function html_attribute_encode(str)
				str = mw.text.jsonEncode(str)
					:gsub('"', "&quot;")
					-- & in attributes is automatically escaped.
					-- :gsub("&", "&amp;")
					:gsub("<", "&lt;")
					:gsub(">", "&gt;")
				return str
			end
			pcall(function ()
				table.insert(ret, ' data-code="' .. lang:getCode() .. '"')
				for k, v in require("Module:table").sortedPairs(lang:getRawData()) do
					table.insert(ret, " data-" .. kebab_case(k)
						.. '="'
						.. html_attribute_encode(v)
						.. '"')
				end
			end)
		end
	end
	table.insert(ret, '>\n')
	table.insert(ret, '<tr class="language-category-data">\n<th colspan="2">'
		.. edit_link("Module:" .. require("Modul:languages").getDataModuleName(lang:getCode()),
			"Dayiyanê nê zıwani bıvurne")
		.. "</th>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>Nameyê zıwani</th><td>[[" .. mw.getContentLanguage():ucfirst(lang:getCanonicalName()) .. "]]</td>\n</tr>\n")
	table.insert(ret, "<tr>\n<th>[[Modul:languages/code to canonical name|Kodê zıwani]]</th><td><code>" .. lang:getCode() .. "</code></td>\n</tr>\n")
	
	if lang._rawData.translit_module then
		local translit_module = lang._rawData.translit_module
		local translit_module_info = {}
		table.insert(translit_module_info,
			("[[Module:%s]]"):format(translit_module))
		
		if translit_module == "translit-redirect" then
			local data = mw.loadData("Module:translit-redirect/data")[lang:getCode()]
			if data then
				table.insert(translit_module_info, ":")
				local redirects_to = {}
				local m_scripts = require "Module:scripts"
				for script, data in require "Module:table".sortedPairs(data) do
					-- Skip boolean fields like "debug_mode" and "noError".
					if type(data) == "table" then
						table.insert(redirects_to,
							("\n* <code>%s</code>: %s"):format(
								script,
								data.module and ("[[Module:%s]]"):format(data.module)
									or "(Tune)"))
					end
				end
				table.insert(translit_module_info, table.concat(redirects_to))
			end
		end
		
		table.insert(ret, [=[
<tr>
<th>Modulê<br>transliterasyoni</th>
<td>]=] .. table.concat(translit_module_info) .. [=[</td>
</tr>
]=])
end
	local wikidataItem = lang:getWikidataItem()
	if lang:getWikidataItem() and mw.wikibase then
		local URL = mw.wikibase.getEntityUrl(wikidataItem)
		local link
		if URL then
			link = '[' .. URL .. ' ' .. wikidataItem .. ']'
		else
			link = '<span class="error">Invalid Wikidata item: <code>' .. wikidataItem .. '</code></span>'
		end
		table.insert(ret, "<tr><th>Wikidayi</th><td>" .. link .. "</td></tr>")
	end
	
	table.insert(ret, "</table>")
	
	return table.concat(ret)
end

local function NavFrame(content, title)
	return '<div class="NavFrame"><div class="NavHead">'
		.. (title or '{{{title}}}') .. '</div>'
		.. '<div class="NavContent" style="text-align: left;">'
		.. content
		.. '</div></div>'
end

function export.country_categories(frame)

end


-- Category object

local Category = {}
Category.__index = Category


function Category.new(info)
	for key, val in pairs(info) do
		if not (key == "code" or key == "entryname" or key == "setsister" or key == "setwiki" or key == "setwikt") then
			error("The parameter \"" .. key .. "\" was not recognized.")
		end
	end
	
	local self = setmetatable({}, Category)
	self._info = info
	
	if not self._info.code then
		error("Kodê zıwani nêameyo nuştene.")
	else
		self._lang = require("Modul:languages").getByCode(self._info.code) or error("Kodê zıwani \"" .. self._info.code .. "\" ne guncav e.")
	end
	
	return self
end

export.new = Category.new


function Category:getParents()
	local canonicalName = self._lang:getCanonicalName()
	
	local ret = {{name = "Kategoriye:Zıwani", sort = canonicalName}}
	
	return ret
end


function Category:getInfo()
	return self._info
end

function Category:getBreadcrumbName()
	return self._lang:getCanonicalName()
end


function Category:getDataModule()
	return "Modul:dara kategoriyan/zıwankatbike"
end


function Category:canBeEmpty()
	return false
end


function Category:isHidden()
	return false
end


function Category:getCategoryName()
	return mw.getContentLanguage():ucfirst(self._lang:getCategoryName())
end


function Category:getDescription()
	if self._lang:getCode() == "und" then
		return
			"Kategoriya sereka '''" .. self._lang:getCategoryName() .. "''', represented in Wiktionary by the [[Wiktionary:Languages|code]] '''" .. self._lang:getCode() .. "'''. " ..
			"This language contains terms in historical writing, whose meaning has not yet been determined by scholars."
	end
	
	local canonicalName = self._lang:getCanonicalName()
	
	local ret = "Seba zıwanê '''" .. self._lang:getCategoryName() .. "''' ra kategoriya sereka.\n\nŞınasiya zıwani:\n\n" .. infobox(self._lang)
	
	if self._lang:getType() == "reconstructed" then
		ret = ret .. "\n\n" ..
			mw.getContentLanguage():ucfirst(canonicalName) .. " yew zıwano ke newe vıraziyayo. Çıke çekuyê ke pele de hewnaw çım ra ranêvêrdiyê." ..
			" Labelê goreyê têverşanıyışi ra biyena raşt nêbiya û heni yeno bawerkerdene ke wextê de este biyê.\n\n" ..
			"Çekuyi be zıwanê " .. canonicalName ..
			" nêbo ke cayê xo hurêndiya vengiye de bıgêrên, nê qıseyi gani be [[Wikiqısebend:Reconstruction|'''Reconstruction:''']] ra bıbê, dest cı kerên."
	elseif self._lang:getType() == "appendix-constructed" then
		ret = ret .. "\n\n" ..
			canonicalName .. " is a constructed language that is only in sporadic use. " ..
			"According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in " .. canonicalName ..
			" should '''not''' be present in entries in the main namespace, but may be added to the Appendix: namespace. " ..
			"All terms in this language may be available at [[Appendix:" .. canonicalName .. "]]."
	end
	
	ret = ret .. " __EXPECTUNUSEDCATEGORY__" -- it's OK if this category is empty
	return ret
end



function Category:getUmbrella()
	return nil
end


return export