Modül:Ödül

Vikipedi, özgür ansiklopedi
Modül belgelemesi[oluştur]
-- Kullanıcı ödül şablonlarının genel modülü

local dosyalar = require("Modül:Ödül/veri")

function goster(frame)
	--ilk parametreye girilen değeri ödül / yıldız adı olarak kabul edelim
	local ad = frame:getParent().args[1] or frame:getParent().args["topic"]
	ad = ad and mw.text.trim(ad) or "Ödül"
	
	--ikinci parametreye girilen değeri de açıklama yazısı olarak kabul edelim
	local aciklama = frame:getParent().args[2] or frame:getParent().args["text"]
	aciklama = aciklama and mw.text.trim(aciklama) or aciklama
	
	--imzayı alalım
	local imza = frame.args["imza"]
	
	local kontur = frame:getParent().args["kontur"] or frame:getParent().args["border"]
	local arkaplan = frame:getParent().args["arkaplan"] or frame:getParent().args["color"]
	
	-- ödül tablosunu başlatalım
	local sonuc = [[
		<div style='width:100%;padding-top:10px;padding-bottom:10px'>
			<div style='
				display:flex;
				-webkit-align-items:flex-start;align-items:flex-start;
				background:]] .. (arkaplan and arkaplan or "#f6f7f9") .. [[;
				width:100%;
				max-width:100%;
				margin:0 auto;
				padding:20px;
				box-sizing:border-box;
				border:1px solid ]] .. (kontur and kontur or "#e5e7ec") .. [[;'>
	]]
	
	-- eğer bir ad parametresi girildiyse
	if ad then
		-- girilen ödül için verilerde eşleşen bir dosya mevcut mu?
		-- ya da manuel olarak eklenmiş bir dosya mevcut mu?
		local dosya = frame:getParent().args["dosya"]
				or frame:getParent().args["image"]
				or dosyalar[mw.ustring.lower(ad)]
				or "Original Barnstar Hires.svg"
		
		local alter = frame:getParent().args["alt"]
		if alter and alter ~= nil and alter ~= "" and type(dosya) == "table" and dosya.alt then
			dosya = dosya.alt[tonumber(alter)][1]
		end
		
		-- girilen dosyanın bir genişliği belirlendi mi?
		local boyut = frame:getParent().args["dosya_genişlik"]
				or frame:getParent().args["size"]
				or ((dosya and dosya[2]) and dosya[2])
		
		-- eğer bir dosya bulunduysa...
		if dosya then
			sonuc = sonuc .. "<div style='padding-right:20px'>[[Dosya:"
						  .. (type(dosya) == "string" and dosya or dosya[1]) .. (boyut and "|" .. boyut or "|100px") .. "]]</div>"
		end
		
		sonuc = sonuc .. [[<div style='flex:1'><div style='font-size:25px;border-bottom:1px solid ]]
					  .. (kontur and kontur or "#e5e7ec") .. [[;margin-bottom:20px'>]]
					  .. ((dosya and dosya.ad) and dosya.ad or ad) .. "</div>"
	end
	
	-- bir açıklama metni girildi mi?
	if aciklama then
		sonuc = sonuc .. aciklama
	end
	
	if imza then
		sonuc = sonuc .. "<br>" .. imza
	end
	
	if ad then
		sonuc = sonuc .. "</div>"
	end
	
	sonuc = sonuc .. "</div></div>"
	
	return sonuc
end

function diz(a, b)
	local alfabe = "AaBbCcÇçDdEeFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpQqRrSsŞşTtUuÜüVvWwXxYyZz0123456789"
	
	local a2 = mw.ustring.find(alfabe, mw.ustring.sub(mw.text.trim(a), 1, 1))
	local b2 = mw.ustring.find(alfabe, mw.ustring.sub(mw.text.trim(b), 1, 1))
	return (a2 == b2) and a:lower() < b:lower() or a2 < b2
end

function alternatifler(frame)
	local ad = frame.args[1]
	
	local v = dosyalar[mw.ustring.lower(ad)]
	local son = ""
	if v and v.alt then
		son = son .. "=== Alternatifler ===\n\nBu şablonun alternatif dosyaları da mevcuttur. Kullanımları şu şekildedir:\n"
		for i = 1,3 do
			if v.alt[i] then
				son = son .. "\n;1=\n<code>{{"..ad
					.."|Mesajınız buraya gelecek|alt="..i.."}}</code>".."\n\n"..
					frame:expandTemplate{ title = ad, args = {"Mesajınız buraya gelecek", ["alt"] = i}}
			end
		end
	end
	
	return son
end

function hepsi(frame)
	local son = "{| class='wikitable'\n!Ad\n!Asil dosya\n!Alt 1\n!Alt 2\n!Alt 3\n|-"
	
	local tkeys = {}
	
	for k in pairs(dosyalar) do table.insert(tkeys, k) end
	table.sort(tkeys, function(a, b) return diz(a, b) end)
	
	for _, k in ipairs(tkeys) do
		v = dosyalar[k]
		son = son .. "\n|" .. v.ad .. "\n|[[Dosya:" .. v[1] .. "|50px]]"
		
		for i = 1,3 do
			if v.alt and v.alt[i] then
				son = son .. "\n|[[Dosya:" .. v.alt[i][1] .. "|50px]]"
			else
				son = son .. "\n|"
			end
		end
		
		son = son .. "\n|-"
	end
	
	return son .. "\n|}"
end

return {goster = goster, hepsi = hepsi, alternatifler = alternatifler}