Modül:Ototaksonkutu/şablon arayüzü

Vikipedi, özgür ansiklopedi
Gezinti kısmına atla Arama kısmına atla
Modül belgelemesi[gör] [değiştir] [geçmiş] [temizle]
Otomatik taksonkutu sistemi belgelemesi

Şablonlar

Modüller

Bu modül, Modül:Ototaksonkutu'da bulunan fonksiyonları kullanarak {{otomatik taksonkutu}}'yu oluşturmaya yarar. Yaptığı asıl işlem, şablona girilen parametreleri tanıyıp, Ototaksonkutu modülündeki fonksiyonlarda bu parametreleri işletip, sonrasında da bilgi kutusu oluşturmaktır.

Bu parametreleri işlerken Modül:Ototaksonkutu'dan farklı olarak yaptığı şey ise, alt cins ve altındaki taksonomik basamakları tanımaktır. Şu anda tanıdığı ekstra basamaklar: tür, alt tür, varyete basamaklarıdır. Ayrıca virüsler için mutasyon (İngilizcestrain) basamağıdır.

Bilgi kutusunun bilimsel sınıflandırma başlığı altında bu ekstra basamakları tanıyarak eklemelerini yapar. Ayrıca Modül:Jeolojik aralık ve Modül:Korunma durumu modüllerini de kullanır.

Jeolojik aralık modülü üzerinden, eğer belirtildiyse mevcut taksonun yaşam aralığını gösteren tabloyu oluşturur. Korunma durumu modülü üzerinden ise eğer belirtildiyse mevcut taksonun korunma durumunu gösterir.

require('Modül:Küresel değil')
local ItalikTakson = require('Modül:Taksonİtalik')
local Ototaksonkutu = require('Modül:Ototaksonkutu')
local ItalikBaslik = require('Modül:Eğik sayfa adı')
local p = {}

-- tükenmiş simgesi
local hancer = '<span style="font-style:normal;font-weight:normal;">†</span>'

-- tür, alt tür, varyete ve mutasyon sıraları için tabloda satır oluşturan fonksiyon
local function tabloSatiri(args, sira, renk)
	local son = {}
	local t1, t2, t3 = args["takson"], args["tür"], sira == "alt_tür" and args["alt_tür"] or args["varyete"]
	sira = mw.ustring.sub(mw.ustring.gsub(sira, "%_", " "), 1, -1)
	
	table.insert(son, "\n|-\n|"..mw.getContentLanguage():ucfirst(sira)..":\n|")
	local bir = t1 and mw.ustring.sub(t1, 1, 1) .. ". "
	local iki = t2 and mw.ustring.sub(t2, 1, 1) .. ". "
	local kis = renk == "rgb(180,250,180)" and (sira == "varyete" and "var. " or "subsp. ") or ""
	
	local takson = sira == "tür" and (args["virüs"] == "evet" and "" or bir) .. t2 or (sira == "mutasyon" and args["mutasyon"] or bir .. iki .. kis .. t3)
	local bag = sira == "tür" and args["tür_bağ"] or (sira == "alt tür" and args["alt_tür_bağ"])
	local baglanti = bag or (sira == "tür" and (args["virüs"] == "evet" and "" or t1 .." ").. t2 or (sira == "mutasyon" and t1 or t1.." "..t2.." "..kis .. t3))
	
	local turK = sira == "tür" and (args["mutasyon"] or args["alt_tür"] or args["varyete"])
	local altturK = sira == "alt tür" and (args["varyete"])
	
	if turK or altturK then table.insert(son, "''[[" .. baglanti .. "|")
	elseif args["mutasyon"] then table.insert(son, "'''")
	else table.insert(son, "'''''")
	end
	
	table.insert(son, (args["tükenmiş"] and hancer or "")..takson)
	
	if turK or altturK then table.insert(son, "]]''")
	elseif args["mutasyon"] then table.insert(son, "'''")
	else table.insert(son, "'''''") end
	
	if sira == "tür" and args["varyete"] and args["alt_tür"] then
		if args["büst_sıralama"] then
			table.insert(son, "<br><small>"..args["büst_sıralama"].."</small>")
		end
	elseif sira == "tür" and (args["varyete"] or args["alt_tür"])
		or (sira == "alt tür" and args["varyete"]) then
		if args["üst_sıralama"] then
			table.insert(son, "<br><small>"..args["üst_sıralama"].."</small>")
		end
	end
	
	return table.concat(son)
end

-- =============================================================================
-- Şablon:Otomatik taksonkutu'nun çıktısını verir; şablon hakkındaki detaylar
-- için şablonun belgeleme sayfasına bakabilirsiniz.
-- =============================================================================

function p.otomatikTaksonkutu(frame)
	local args
	local kategoriler = {}
	if frame.args['doğrudan'] == 'evet' then args = frame.args
	else args = frame:getParent().args end
	
	-- ---------------------------------------------------------------------
	-- işleme sokulması gereken parametreleri toplayalım;
	-- yine de birçoğu değişmeden aktarılıyor
	-- ---------------------------------------------------------------------
	local sayfaadi = args['sayfaadı'] or mw.title.getCurrentTitle().text
	local italikBaslik = args['italik_başlık'] or ''
	local ad = args['ad'] or mw.title.getCurrentTitle().text
	local fosilAralik = (args['en_eski_fosil'] and args['en_genç_fosil']) and
		require("Modül:Jeolojik aralık")._goster({args['en_eski_fosil'], args['en_genç_fosil'], en_erken=args['en_erken'], en_son=args['en_son'], ["not"]=args["fosil_kaynak"]}) or ''
	local takson = args['takson'] or ''
	local altbolum = args['altbölüm'] or ''
	local altbolumKay = args['altbölüm_kaynak'] or ''
	local altbolumSira = args['altbölüm_sıra'] or ''
	local ikiliad = args['ikili_ad']
	local ikiliadSira = args['ikili_ad_sıra']
	local ucluad = args['üçlü_ad']
	local ucluadSira = args['üçlü_ad_sıra']
	local siralama = args['alt_sıralama'] or args['sıralama']

	-- ------------------------------------------------------
	-- taksonkutu parametrelerinin düzenlenmesi
	-- ------------------------------------------------------
	local asilSayfaadi = mw.ustring.gsub(sayfaadi, '%s+%b()$', '', 1)
	
	-- sayfa adının ve taksonkutu adının italik olup olmamasına karar ver;
	-- eğer italik_başlık girilmediyse, adlar takson ile eşleştiyse, taksonun sırasına göre karar ver
	local ok, taksonSira = Ototaksonkutu.getirTaksonBilgiOgesi(frame, takson, 'sıra') -- taksonSıra burada olmasa da ileride lazım olacak
	if args["varyete"] then taksonSira = "varyete"
	elseif args["alt_tür"] then taksonSira = "alt tür"
	elseif args["mutasyon"] then taksonSira = "mutasyon"
	elseif args["tür"] then taksonSira = "tür"
	end
	if italikBaslik == '' then
		if not (ok and taksonSira ~= '' and Ototaksonkutu.getirItalikTakson(taksonSira) == 'evet') then
			italikBaslik = 'hayır'
		end
	end
	
	--   taksonun adından herhangi " (ANLAM AYRIMI)" veya "/AYIRICI" kısımları kaldır;
	--   eğer sayfanın adıyla taksonun adı aynı ise, italikleştirme uygulanabilir
	local asilTakson = mw.ustring.gsub(mw.ustring.gsub(takson, '%s+%b()$', '', 1), '/.*$', '', 1)
	if italikBaslik == '' and asilSayfaadi == asilTakson then
		italikBaslik = 'evet'
	end
	
	-- eğer gerekliyse sayfa adını italikleştir
	if italikBaslik == 'evet' and mw.title.getCurrentTitle().namespace == 0 then
		ItalikBaslik._main({})
	end
	
	-- eğer hala bir taksonkutu adı yoksa, gerekliyse italikleştirerek ekle.
	if ad == '' then
		ad = asilSayfaadi
	end
	if italikBaslik == 'evet' then
		ad = ItalikTakson.italicizeTaxonName(ad, false, false)
	end
	
	if args["otomatik"] == "hayır" then
		takson = "incertae sedis"
	end
	
	-- taksonun tükenmiş olup olmadığını sapta
	local ok2, taksonTukenmis = Ototaksonkutu.getirTaksonBilgiOgesi(frame, takson, 'tükenmiş')
	if ok2 and taksonTukenmis == "evet" then
		args["tükenmiş"] = "evet"
	end
	
	-- taksonkutu rengini belirle
	local renkPara = args['renk'] and args['renk'] or takson
	if mw.ustring.find(taksonSira, "^ikno") then renkPara = "ikno" end
	local colour = Ototaksonkutu.getirTaksonkutuRengi(frame, renkPara, kategoriler)

	-- girilmediyse eğer, altbölüm_sıra parametresini belirle
	if altbolum ~= '' and altbolumSira == '' and ok and taksonSira ~= '' then
		altbolumSira =  Ototaksonkutu.getirCogulSira(Ototaksonkutu.getirAltSira(taksonSira))
	end
	
	-- elle girilen sıraları hallet
	local boldFirst = ''
	
	-- tabloya girmeden son çıkışta bunları düzeltelim
	-- eğer varyete, alt_tür veya tür parametrelerinden biri veya hepsi varsa
	-- durumlara göre yazarları kaydırmamız gerekmekte
	local offset = (args["varyete"] and args["alt_tür"] and args["tür"]) and 3
			or (((args["varyete"] or args["alt_tür"]) and args["tür"]) and 2
			or (args["tür"] and 1 or 0))
	
	-- eğer takson bir virüs türü ise, tür adı ikili ad şeklinde olmayacak
	-- fakat virüs değil ise tür adını ikili ada çevir
	if args['virüs'] then else
		-- ya da alt tür mevcut ise tür adını değil de alt tür adını
		-- üçlü ada dönüştürmemiz gerekiyor
		if args["alt_tür"] or args["varyete"] then
			if ucluad then else
				ucluad = (args["tükenmiş"] and hancer or "")
					.."''" .. args["takson"] .. " " .. args["tür"] .. " "
					.. (args["varyete"] and "var. " or 
					   (colour == "rgb(180,250,180)" and "subsp. " or ""))
					.. (args["varyete"] or args["alt_tür"]) .. "''"
			end
			if ucluadSira then else
				ucluadSira = siralama
			end
		elseif args["tür"] then
			if ikiliad then else
				ikiliad = (args["tükenmiş"] and hancer or "")
					.."''" .. args["takson"] .. " " .. args["tür"] .. "''"
			end
			if ikiliadSira then else
				ikiliadSira = siralama
			end
		end
	end
	
	-- anne ya da baba parametrelerini eşitlememiz gerekli
	if args["anne"] and args["baba"] then
		args["tür1"], args["tür2"] = args["anne"], args["baba"]
		args["bağ1"], args["bağ2"] = args["anne_bağ"], args["baba_bağ"]
	end
	
	-- parafiletik gruplarda en alttaki takson her zaman bağlantı olarak görünmeli
	if args["içerdiği_gruplar"] or args["içermediği_gruplar"] or
	   args["tür"] or args["tür1"] or args["tür2"] then
		boldFirst = "link"
	end
	
	-- çeşitlilik kullanan taksonkutulara izleme kategorisi ekle
	if args["çeşitlilik"] then
		table.insert(kategoriler, "[[Kategori:Çeşitlilik kullanan taksonkutular]]")
	end
	
	-- buradaki kısım bilimsel sınıflandırmanın son satırını oluşturur
	local tabloSonSatir = ""
	-- tür ve aşağısındaki sıralar
	local turAlti = {"tür", "alt_tür", "mutasyon", "varyete"}
	for _,i in ipairs(turAlti) do
		if args[i] then
			tabloSonSatir = tabloSonSatir .. tabloSatiri(args, i, colour)
		end
	end
	
	-- eğer melez bir türse
	if args["tür1"] and args["tür2"] then
		tabloSonSatir = tabloSonSatir ..
			"\n|Tür:\n|" .. "'''''"
			.. (args["bağ1"] and "[[" .. args["bağ1"] .. "|" or "")
			.. mw.ustring.sub(args["takson"], 1, 1) .. ". " .. args["tür1"] .. (args["bağ1"] and "]]"or "")
			.. "''" .. (args["anne"] and "♀" or "") .. " × ''"
			.. (args["bağ2"] and "[[" .. args["bağ2"] .. "|" or "")
			.. mw.ustring.sub(args["takson"], 1, 1) .. ". " .. args["tür2"] .. (args["bağ2"] and "]]"or "")
			.. "''" .. (args["baba"] and "♂" or "") .. "'''"
	end

	-- ------------------------------------------------
	-- Burada bilgi kutusu şablonu oluşturuyoruz
	-- ------------------------------------------------
	local res = frame:expandTemplate{ title = 'Bilgi kutusu', args =
		{ ["gövdebiçimi"] = "font-size: 100%; width: 200px;", ["veribiçimi"] = "text-align: center;",
			["üst"] = ad .. (fosilAralik ~= "" and "<br/><div style='font-size: 80%;'>"..fosilAralik.."</div>" or ""),
			["üstbiçim"] = "font-size: 100%; background-color: " .. (colour) .. ";",
			resim = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['resim'] or '',
					size=args['resim_genişlik'] or '',
					sizedefault='frameless',
					upright=args['sağüst'] or '1',
					alt=args['resim_alt'] or '',
				}}),
			["altyazıbiçimi"] = "font-size: 88%;",
			["altyazı"] = args['resim_altyazı'],
			resim2 = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['resim2'] or '',
					size=args['resim2_genişlik'] or '',
					sizedefault='frameless',
					upright=args['resim2_sağüst'] or args['sağüst'] or '1',
					alt=args['resim2_alt'] or '',
				}}),
			["altyazı2"] = args['resim2_altyazı'],
			["başlıkbiçimi"] = "background-color: "..(colour)..";",
			["başlık1"] = args["durum"] and "[[Korunma durumu]]",
			etiket2 = "",
			veri2 = require("Modül:Korunma durumu").durum({
					args["durum_sistemi"],
					args["durum"],
					args["durum_kaynak"],
					["tükenmiş"] = args["tükenmiş"],
				}),
			etiket3 = "",
			veri3 = require("Modül:Korunma durumu").durum({
					args["durum2_sistemi"],
					args["durum2"],
					args["durum2_kaynak"],
					["tükenmiş"] = args["tükenmiş"],
				}),
			["başlık4"] = args["otomatik"] == "hayır" and "" or ((args["virüs"] == "evet" and "[[Virüs sınıflandırması]]" or (renkPara == "ikno" and "[[İz fosili sınıflandırması]]" or "[[Bilimsel sınıflandırma]]")) .. " "
				.."<span class='plainlinks' style='font-size:smaller; float:right; padding-right:0.4em; margin-left:-3em;'>[[File:Red Pencil Icon.png|link=Şablon:Taksonomi/"..takson.."|Bu sınıflandırmayı düzenle]]</span>"
				..(args["sınıflandırma_durumu"] and "<br/><span style='font-weight:normal'>("..args["sınıflandırma_durumu"]..")</span>" or "")),
			etiket5 = "",
			veri5 = args["otomatik"] == "hayır" and "" or ("{| style='width: 100%; display:table !important;font-size: 100%'\n"..Ototaksonkutu.taksonkutuListe(frame, {
				takson,
				["taks_üst_sayısı"] = args["taks_üst_sayısı"],
				["sıralama"] = siralama,
				["üst_sıralama"] = args["üst_sıralama"],
				["büst_sıralama"] = args["büst_sıralama"],
				["bbüst_sıralama"] = args["bbüst_sıralama"],
				["bbbüst_sıralama"] = args["bbbüst_sıralama"],
				["offset"] = offset,
				["seçili_kalın"] = boldFirst == "" and 'kalın' or boldFirst,
				["virüs"] = args["virüs"],
				["tür"] = args["tür"],
				["alt_tür"] = args["alt_tür"],
				["varyete"] = args["varyete"],
				["mutasyon"] = args["mutasyon"]
			})..tabloSonSatir.."\n|}"),
			["başlık6"] = args["içerdiği_gruplar"] and (args["içerdiği_gruplar_yazı"] or "İçerdiği gruplar"),
			etiket7 = "",
			["sırahücrebiçimi7"] = "text-align:left",
			veri7 = args["içerdiği_gruplar"],
			["başlık8"] = args["içermediği_gruplar"] and (args["içermediği_gruplar_yazı"] or "[[Kladistik]] açıdan içerdiği fakat geleneksel olarak içermediği taksonlar"),
			etiket9 = "",
			["sırahücrebiçimi9"] = "text-align:left",
			veri9 = args["içermediği_gruplar"],
			["başlık15"] = ikiliad and "[[İkili adlandırma]]",
			etiket16 = "",
			veri16 = ikiliad and "<b>"..(ikiliad or "")
				.."</b><div style='font-size: 85%;'>"..(ikiliadSira or "").."</div>",
			["başlık17"] = ucluad and "[[Üçlü adlandırma]]",
			etiket18 = "",
			veri18 = ucluad and "<b>"..(ucluad or "")
				.."</b><div style='font-size: 85%;'>"..(ucluadSira or "").."</div>",
			["başlık19"] = args["tip_cins"] and "[[Tip cins]]",
			etiket20 = "",
			veri20 = args["tip_cins"] and "<b>"..(args["tip_cins"] or "")
				.."</b><div style='font-size: 85%;'>"..(args["tip_cins_sıra"] or "").."</div>",
			["başlık21"] = args["tip_tür"] and "[[Tip tür]]",
			etiket22 = "",
			veri22 = args["tip_tür"] and "<b>"..(args["tip_tür"] or "")
				.."</b><div style='font-size: 85%;'>"..(args["tip_tür_sıra"] or "").."</div>",
			["başlık23"] = args["tip_örnek"] and "[[Tip örnek]]",
			etiket24 = "",
			veri24 = args["tip_örnek"] and "<b>"..(args["tip_örnek"] or "")
				.."</b><div style='font-size: 85%;'>"..(args["tip_örnek_sıra"] or "").."</div>",
			["başlık25"] = altbolum and altbolumSira .. " " .. altbolumKay,
			etiket26 = "",
			["sırahücrebiçimi26"] = "text-align:left",
			veri26 = altbolum,
			["başlık27"] = args["çeşitlilik"] and "[[Biyoçeşitlilik|Çeşitlilik]]" .. (args["çeşitlilik_kaynak"] or ""),
			etiket28 = "",
			veri28 = args["çeşitlilik_bağ"] and "[["..args["çeşitlilik_bağ"].."|"..args["çeşitlilik"].."]]" or args["çeşitlilik"],
			etiket29 = "",
			veri29 = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['aralık_haritası'] or '',
					size=args['aralık_haritası_genişlik'] or '',
					sizedefault='frameless',
					upright=args['aralık_haritası_sağüst'] or args['sağüst'] or '1',
					alt=args['aralık_haritası_alt'] or '',
				}}),
			etiket30 = "",
			["sırabiçimi30"] = "font-size: 88%;",
			veri30 = args["aralık_haritası_altyazı"],
			etiket31 = "",
			veri31 = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['aralık_haritası2'] or '',
					size=args['aralık_haritası2_genişlik'] or '',
					sizedefault='frameless',
					upright=args['aralık_haritası2_sağüst'] or args['sağüst'] or '1',
					alt=args['aralık_haritası2_alt'] or '',
				}}),
			etiket32 = "",
			["sırabiçimi32"] = "font-size: 88%;",
			veri32 = args["aralık_haritası2_altyazı"],
			etiket33 = "",
			veri33 = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['aralık_haritası3'] or '',
					size=args['aralık_haritası3_genişlik'] or '',
					sizedefault='frameless',
					upright=args['aralık_haritası3_sağüst'] or args['sağüst'] or '1',
					alt=args['aralık_haritası3_alt'] or '',
				}}),
			etiket34 = "",
			["sırabiçimi34"] = "font-size: 88%;",
			veri34 = args["aralık_haritası3_altyazı"],
			etiket35 = "",
			veri35 = require("Modül:Bilgi kutusu resmi").InfoboxImage({args=
				{
					image=args['aralık_haritası4'] or '',
					size=args['aralık_haritası4_genişlik'] or '',
					sizedefault='frameless',
					upright=args['aralık_haritası4_sağüst'] or args['sağüst'] or '1',
					alt=args['aralık_haritası4_alt'] or '',
				}}),
			etiket36 = "",
			["sırabiçimi36"] = "font-size: 88%;",
			veri36 = args["aralık_haritası4_altyazı"],
			["başlık37"] = args["sinonimler"] and "[[Sinonim (taksonomi)|Sinonimler]] " .. (args["sinonimler_kaynak"] or ""),
			etiket38 = "",
			["sırahücrebiçimi38"] = "text-align:left",
			veri38 = args["sinonimler"],
		} }
	return res .. frame:expandTemplate{ title = 'Ana diğer', args = {table.concat(kategoriler)} }
end

return p