Modül:kategori ağacı

Merhaba, buraya Modül:kategori ağacı kelimesinin anlamını aramaya geldiniz. DICTIOUS'da Modül:kategori ağacı kelimesinin tüm sözlük anlamlarını bulmakla kalmayacak, aynı zamanda etimolojisini, özelliklerini ve Modül:kategori ağacı kelimesinin tekil ve çoğul olarak nasıl söylendiğini de öğreneceksiniz. Modül:kategori ağacı kelimesi hakkında bilmeniz gereken her şey burada. Modül:kategori ağacı kelimesinin tanımı, konuşurken veya metinlerinizi yazarken daha kesin ve doğru olmanıza yardımcı olacaktır. XXX'in ve diğer kelimelerin tanımını bilmek, kelime dağarcığınızı zenginleştirir ve size daha fazla ve daha iyi dilsel kaynaklar sağlar.
Modül belgelemesi

Bu modül şu şablonlarda kullanılmaktadır:

Şablona girilmiş olan yanlış parametreleri takip etmeye yarayan kategoriler:

Modülün alt sayfaları:


--Gerekli modüllerdeki tabloları ve fonksiyonları aktar
local dilDuzenle = require("Modül:tr-araçlar").dilDuzenle
local araclar = require('Modül:araçlar')

--Gerekli tabloları oluştur
local tum = {kat = {}, tab = {}, gor = {}, par = {}, hiy = {}}

local function buyukHarf(x)
	return mw.getContentLanguage():ucfirst(x)
end

function getirDilAdi(x)
	return require("Modül:köken dilleri").getirKodaGore(x)
		and require("Modül:köken dilleri").getirKodaGore(x):getirAsilAd()
		or require("Modül:diller").getirKodaGore(x):getirAsilAd()
end

local function temalar(tema)
	return require("Modül:temalar").getirAsilAdaGore(tema)
		or require("Modül:diller").getirAsilAdaGore(tema)
		or require("Modül:alfabeler").getirAsilAdaGore(tema)
		or require("Modül:köken dilleri").getirAsilAdaGore(tema)
end

local function duzenleBag(altKat)
	--her kategoride "veriyi düzenle" bağlantısını eklemeye yarayan fonksiyon
	return "<div class=\"blockThis noprint plainlinks\" style=\"float: right; margin: 0.5em 0 0.5em 1em; background: #f8f9fa; clear: both; border: 1px #c8ccd1 solid; border-radius: 2px; padding: 5px; font-weight: bold;\">[" ..
		mw.getCurrentFrame():callParserFunction{name = "fullurl", args = {altKat, action = "edit"}} ..
		" Kategori verisini düzenle]</div>"
end

local function ilgiliDegisiklikler()
	--her kategoriye "ilgili değişiklikler" bağlantısını eklemeye yarayan fonksiyon
	local title = mw.title.getCurrentTitle().fullText
	return "<div class=\"blockThis noprint plainlinks\" style=\"float: right; margin: 0 0 0.5em 1em; background: #f8f9fa; clear: both; border: 1px #c8ccd1 solid; border-radius: 2px; padding: 5px; font-weight: bold;\">[" ..
		tostring(mw.uri.fullUrl("Özel:İlgiliDeğişiklikler", {
			target = title,
			showlinkedto = 0,
		}))
		.. ' <span title="' .. title .. ' sayfasına ve içerisindeki sayfalarda yapılan son değişiklikler">Son değişiklikler</span>]</div>'
end

function modulVarmi(ad)
--bir modülün sayfasının var olup olmadığını tespit ederken kullanın
  if package.loaded then
    return true
  else
    for _, searcher in ipairs(package.searchers or package.loaders) do
      local loader = searcher(ad)
      if type(loader) == 'function' then
        package.preload = loader
        return true
      end
    end
    return false
  end
end

function ters(tbl)
  --bir string'i ters çevirmeye yarıyan fonksiyon
  for i=1, math.floor(#tbl / 2) do
    tbl, tbl = tbl, tbl
  end
end

function hiyerasi(tum)
	--birçok kategori şablonunun hiyeraşisi buradadır. oldukça karmaşık olabilir
	--düzenlemeden önce tartışma sayfasında fikir belirtin
	
	--dil parametresini "dil adı" olarak getir, "nesne" olarak değil unutmayın
	local dil = tum.par and getirDilAdi(tum.par)
	local alfabe = tum.par and require("Modül:alfabeler").getirKodaGore(tum.par):getirAsilAd()
	local tema = tum.par or dil or alfabe
	local sablon = tum.par
	
	--girilen temanın tipini getir
	local tip = temalar(tema):getirTip()
	
	--dil parametresi kullanan şablonlar için
	if dil then
		--şu anda yalnızca "konu" ve "grup" şablonlarında dil adlarından
		--sonra "de, da" ekleri gelmekte, bunu ekle
		if tip == "konu" or tip == "grup" then
			ekliDil = dilDuzenle(dil)
		else
			--aksi takdirde diğer şablonlar için bu ekleri ekleme
			ekliDil = dil
		end
		--kategori dil şablonunda tema girdisi olmadığı için modül hatası
		--almamak için temayı direk dile eşitliyoruz
		if sablon == "dil" then
			tema = dil	
		end
	end
	
	--eğer bir dillerine göre kategorisi sayfasındaysak, temamızın başına
	--dillerine göre eklenmesi gerekiyor, zira şablondaki girdide bu kısım yazmıyor
	if sablon == "dillerine göre" then
		tema = temalar(tema):direktMi() and tema or "Dillerine göre " .. tema
	end
	
	--NOT: tabloya verileri tersten ekliyoruz, en sonunda da tabloyu tersine
	--çeviriyoruz, bu fonksiyonu niye böyle tersten yazmışlar diye sorgulamayın,
	--başta öyle yazılmış sonra da kalmış; bir gün daha iyi bir metod bulunursa
	--düz hâle çevrilebilir
	
	--burada asıl bulunduğumuz kategorinin adını kalın bir şekilde hiyeraşimize
	--ekliyoruz, en başta ekliyoruz bunu; çünkü daha sonra tabloyu ters çevireceğiz
	--ve bu yazı en sona gelecek
	table.insert(tum.hiy, "'''" .. temalar(tema):getirKategoriAdi() .. "'''")
	
	--girilen temanın ebeveyn kategorisinin adını tespit edelim,
	--çünkü kendisinden hemen önce ebeveynlerini tabloya eklememiz gerek
	local ebeveyn = temalar(tema):getirEbeveynler()
	--bir ebeveyn saptayabiliyorsak bu ebeveyn üzerinden işlemlerimize
	--devam edebiliriz, yoksa zaten hata alacağız
	while ebeveyn do
		--dil şablonu hariç tüm şablonlar için, eğer dil parametresi
		--girildiyse, hiyeraşide en üst kategoride, kategoride bahsi
		--geçen dil ve onun üzerinde de Tüm diller kategorisi olur
		--ama bu kısım sadece ebeveynimiz en üst kategorinin bir altıysa uygulanır
		if sablon ~= "dil" and dil and ebeveyn == "ana kategoriler" then
			table.insert(tum.hiy, "]")
			local kokenDiliMi = require("Modül:köken dilleri").getirKodaGore(tum.par)
			if kokenDiliMi then
				local kokEb = kokenDiliMi:getirEbeveynKodu()
				table.insert(tum.hiy, "]")
			end
			table.insert(tum.hiy, "]")
		end
		--kategori şablon için bir istisna
		--bu istisna da şöyle ki; normalde dil parametresi varken
		--"Türkçe şablonları" olur kategorinin adı,
		--ama yokken "Şablonları" olmaz, direk "Şablonlar" olur
		if not dil and (ebeveyn == "şablonları" or ebeveyn == "modülleri") then
			ebeveyn = "şablonlar"
		end
		--eğer dil parametremiz varsa, kategori adına dili de dahil ediyoruz,
		--mesela "Türkçe adıllar" gibi,
		--yoksa zaten direk "Adıllar" olacaktır kategori adı
		kategoriAdi = dil and temalar(ebeveyn):getirKategoriAdi(ekliDil) or temalar(ebeveyn):getirKategoriAdi()
		--hiçbir dil için "Türkçe maddeler" kategorisini kullanmıyoruz, bunun yerine
		--direk ana kategori olan "Türkçe" kategorisini kullanıyoruz, bu nedenden
		--dolayı da burada eğer kategori adı "Türkçe maddeler"e eşit olursa
		--bunu yoksayıyoruz ki böyle bir kategori oluşmasın
		karsilastirma = dil and dil ..  " maddeler" or nil
		if kategoriAdi ~= karsilastirma then
			table.insert(tum.hiy, "]")
		end
		--burada da ilk bulduğumuz ebeveyn ile ilgili tüm işlemlerimizi
		--bitirmiş bulunuyoruz, ama eğer ebeveyn kategorisinin de
		--başka bir ebeveyni varsa bu defa da o ebeveyni seçip aynı
		--işlemleri tekrar onunla yapmalıyız bu işlemler en sonda hiçbir
		--ebeveyn kalmayana kadar döngü şeklinde tekrarlayacaktır
		ebeveyn = temalar(ebeveyn):getirEbeveynler()
	end
	
	--işte burası da tüm tabloyu tersine çevirdiğimiz kısım
	ters(tum.hiy)
	
	--ve artık tabloyu yazıya dökelim
	return "<p class=\"clearThis\"><small>" .. table.concat(tum.hiy, " » ") .. "</small></p>"
end

function icerikCiz(tum)
	--dillere göre içerik çizelgesini bulup kategorilere ekleyen fonksiyon
	local dil = tum.par and getirDilAdi(tum.par)
	
	--eğer dil parametresi yoksa, bu demektir ki kategori
	--"Sözcükler" veya "Canlılar" gibi bir kategori
	--bu kategorileri biz Türkçe Vikisözlükte olduğumuz için de
	--Türkçe içerik çizelgesi ile düşünüyoruz
	--bundan dolayı da olmayan dil parametresini Türkçe'ye eşitliyoruz
	if not dil then
		dil = "Türkçe"
	end
	
	--Var olan sayfanın başlığını alıyoruz ki başlıklara bağlantı verirken kullanalım
	local baslikYazi = mw.title.getCurrentTitle().text
	local sayfaIst = mw.site.stats.pagesInCategory(baslikYazi, "pages")
	local icKategori
	
	if sayfaIst == 0 then
		icKategori = mw.site.stats.pagesInCategory(baslikYazi, "subcats")
	else
		icKategori = mw.site.stats.pagesInCategory(baslikYazi, "pages")
	end
	
	--Eğer sayfada 200'ün üzerinde eleman varsa İçerik Çizelgesi ekle
	if icKategori > 200 then
		--Sayfa çok büyükse de eğer İçerik Çizelgesi'nin geniş versiyonu varsa onu ekle
		if icKategori > 2500 then
			local TOC_genis = mw.title.new("Şablon:" .. dil .. " içerik çizelgesi/geniş")
			
			if TOC_genis.exists then
				return mw.getCurrentFrame():expandTemplate{title = TOC_genis.text, args = {}}
			end
		end
		
		local TOC_normal = mw.title.new("Şablon:" .. dil .. " içerik çizelgesi")
		local TOC_tr = mw.title.new("Şablon:Türkçe içerik çizelgesi")
		
		if TOC_normal.exists then
			return mw.getCurrentFrame():expandTemplate{title = TOC_normal.text, args = {}}
		else
			return mw.getCurrentFrame():expandTemplate{title = TOC_tr.text, args = {}}
		end
	end
	
	return nil
end

function goster(frame)
	--bütün kategori şablonlarında kullanılan parametrelerin listesi
	local all_param = {
		 = {},
		 = {},
		 = {alias_of = "tema"},
		 = {alias_of = "tema"},
		 = {alias_of = "tema"},
		 = {alias_of = "tema"},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
		 = {},
	}
	--listedeki tüm parametreleri okunur hâle getir
	tum.par = require("Modül:parameters").process(frame:getParent().args, all_param)
	--şablon parametresi yalnızca ana şablonların içerisinde bulunduğu için bunu ayrıyeten atıyoruz
	tum.par = frame.args
	tum.par = frame.args
	tum.frame = frame

	--eğer tema parametresi varsa bir tip parametremiz olabilir, ama yoksa olamaz
	if tum.par then
		if temalar(tum.par) then
			tip = temalar(tum.par):getirTip()
		else
			--eğer girilen tema henüz oluşturulmamışsa
			return "'''<span style='color:red'>HATA:</span>''' Girdiğiniz tema kategorisi henüz veri modüllerinde mevcut değil."
				.. " Eğer tema adını doğru yazdığınıza eminseniz,"
				.. " lütfen ]'ı ziyaret ederek gerekli veri sayfasına"
				.. " ekleme yapınız."
				.. "]"
		end
		gore = tip
		--normalde tipe göre ayrı ayrı alt modül oluşturmamız gerekiyor,
		--ama aşağıdaki dört şablonun biçemleri çok benzer oldukları için
		--hepsini bir "konu" ismindeki alt modülde topladık,
		--yani dördünü de konuya eşitlememizin sebebi bu
		if tip == "grup" or tip == "söz türü" or tip == "söz biçim" or tip == "şablon" then
			gore = "konu"
		end
	end
	
	--alt modülümüze erişme zamanı
	local modul = "Modül:" .. (tum.par or "kategori ağacı/" .. tum.par)
	local baglanti = tip and temalar(tum.par):getirVeriModulu() or modul
	
	--Kategori verisini düzenleme bağlantısı ekle
	table.insert(tum.tab, duzenleBag(baglanti))
	table.insert(tum.tab, ilgiliDegisiklikler())
	
	--eğer dillerine göre şablonunu kullanıyorsak kategoride, bu düzenlemeler geçerli olacak
	if tum.par == "dillerine göre" then
		--hiyeraşiyi tanımla
		table.insert(tum.gor, hiyerasi(tum))
		--bahsi geçen konunun kategorisine "+" sıra anahtarı ile ekle
		local sonTema = temalar(tum.par):direktMi() and temalar(tum.par):getirEbeveynler() or tum.par
		table.insert(tum.kat, "]")
		--daha sonra da girilen temanın tipine göre açıklama yazısı ekle
		if mw.title.new("Modül:kategori ağacı/" .. gore).exists then
			table.insert(tum.gor, require("Modül:kategori ağacı/" .. gore).gore(tum.par))
		end
	else
		--eğer alt modülümüz özel bir hiyeraşi fonksiyonuna sahipse onu aktif et
		--ama eğer değilse klasik hiyeraşi fonksiyonunu kullan
		table.insert(tum.gor, require(modul).hiyerasi and require(modul).hiyerasi(tum) or hiyerasi(tum))
		--ve alt modülümüzün ana fonksiyonu olan sonucu çalıştırabiliriz
		require(modul).kategoriAgaci(tum)
	end
	
	--Dillerine göre içerik çizelgesi ekle
	table.insert(tum.gor, icerikCiz(tum))
	
	--Dillerin yazı tiplerini ayarlar
	if tum.par and require('Modül:diller').getirKodaGore(tum.par) and tum.par ~= "alfabesi düzeltilmesi gereken sözcükler" then
		dil = require('Modül:diller').getirKodaGore(tum.par)
		table.insert(tum.gor, araclar.catfix(dil, dil:getirAlfabeler()))
	end
	
	--kategori boş mu?
	if mw.site.stats.pagesInCategory(mw.title.getCurrentTitle().text, "all") == 0 then
		table.insert(tum.kat, "]")
	end
	
	--kategori bir gizli kategori mi?
	if tum.par and temalar(tum.par):getirGizli() then
		table.insert(tum.gor, "__HIDDENCAT__")
	end
	
	--z_wikistyles'ı getiriyoruz, çünkü bu şablon ]
	--sayfasındaki css kodlarını kategori sayfasında yüklememize yardımcı oluyor
	return require("Modül:TemplateStyles")("MediaWiki:Z_wikistyles.css") ..
			table.concat(tum.tab, "\n") .. "\n" .. table.concat(tum.gor, "\n\n") .. table.concat(tum.kat, "\n")
end

return {goster = goster, getirDilAdi = getirDilAdi}