Bu modül şu şablonlarda kullanılmaktadır:
{{kategori dillerine göre}}
{{kategori tema}}
{{kategori köken}}
{{kategori dil}}
{{kategori aile}}
{{kategori alfabe}}
{{kategori karakter}}
Ş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}