Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Modül:Periyodik tablo

bullvar_katip

Administrator
Katılım
21 Mayıs 2024
Mesajlar
532,105
--gerekli modüller veri = require("Modül:Periyodik tablo/veri") --girilen parametre boş mu değil mi kontrol et local function ebd(arg) if arg == "" then return nil else return arg end end --elementlerin vikipedi bağlantılarını halleden fonksiyon function siteBaglantisi(id) return mw.wikibase.getSitelink(id) end function turAraliklari(tip, x) if tip "normal" then return ((x > 1 and x < 56) or (x > 72 and x < 88) or (x > 104 and x < 118)) elseif tip "geniş" then return (x >= 1 and x <= 118) elseif tip "lantanit" then return (x > 57 and x < 71) elseif tip "aktinit" then return (x >= 89 and x <= 103) end end local function bunlardanBiriMi(deger, tablo) local karsilastirma = deger tablo[1] for index,str in ipairs(tablo) do if index 1 then else karsilastirma = karsilastirma or deger == str end end return karsilastirma end --bu fonksiyon tireler ile ayrılan bir girdideki tüm elemanları ayırıp tek bir tabloya yerleştirmeye yarar function tireAyir(girdi) local topla = {} repeat harf = mw.ustring.match(girdi,"([^-]+)") table.insert(topla, harf) girdi = mw.ustring.match(girdi,"[^" .. harf .. "-].*") until(girdi == nil) return topla --return table.concat(topla, ", ") end function tabloTurleri(deger) --Öncelikle, bu tablonun içerisindeki her bir eleman 3 alt elemandan oluşmaktadır, bunlar; --birincisi: yana doğru kaç hücre ekleneceği --ikincisi: hangi tür hücre ekleneceği --üçüncüsü: hangi tür tablolarda kullanılacağı --İkinci seçeneğe girilen hücre türü, sayılarına göre belli ifadeler vermektedir: --0 = Boş yani beyaz olarak görünen kısımlar --1 = Satır ve sütun adlarının yazılı olduğu kısımlar (1A, 2A veya 1, 2 gibi) --2 = İki hücre kaplayan yazıların olduğu kısımlar (Grup/periyot yazısı gibi) --3 = Elementlerin bulunduğu kısımlar --son = Bu o satırın bittiği anlamına gelir, bu konmazsa yana hücreler eklenmeye devam eder local degerler = { {1,2,"n-g-p"}, {2,1,"n-g-p"}, {14,0,"g"}, {16,1,"n-g-p"}, {1,"son","n-g-p"}, {1,0,"n-g-p1"}, {1,1,"n-g-p1"}, {1,3,"n-g-y-p1"}, {16,0,"n-g-y-p1"}, {14,0,"g-y"}, {1,3,"n-g-y-p1"}, {1,"son","n-g-y-p1"}, {1,0,"n-g-p2"}, {1,1,"n-g-p2"}, {2,3,"n-g-y-p2"}, {10,0,"n-g-y-p2"}, {14,0,"g-y"}, {6,3,"n-g-y-p2"}, {1,"son","n-g-y-p2"}, {1,0,"n-g-p3"}, {1,1,"n-g-p3"}, {2,3,"n-g-y-p3"}, {10,0,"n-g-y-p3"}, {14,0,"g-y"}, {6,3,"n-g-y-p3"}, {1,"son","n-g-y-p3"}, {1,0,"n-g-p4"}, {1,1,"n-g-p4"}, {2,3,"n-g-y-p4"}, {14,0,"g-y"}, {16,3,"n-g-y-p4"}, {1,"son","n-g-y-p4"}, {1,0,"n-g-p5"}, {1,1,"n-g-p5"}, {2,3,"n-g-y-p5"}, {14,0,"g-y"}, {16,3,"n-g-y-p5"}, {1,"son","n-g-y-p5"}, {1,0,"n-g-p6"}, {1,1,"n-g-p6"}, {2,3,"n-g-y-p6"}, {1,1,"n-p6"}, {1,0,"y"}, {15,3,"g-y-p6"}, {15,3,"n-g-y-p6"}, {1,"son","n-g-y-p6"}, {1,0,"n-g-p7"}, {1,1,"n-g-p7"}, {2,3,"n-g-y-p7"}, {1,1,"n-p7"}, {1,0,"y"}, {15,3,"g-y-p7"}, {15,3,"n-g-y-p7"}, {1,"son","n-g-y-p7"}, {2,0,"n-y"}, {1,2,"n"}, {15,3,"n-y"}, {1,0,"n-y"}, {1,"son","n-y"}, {2,0,"n-y"}, {1,2,"n"}, {15,3,"n-y"}, {1,0,"n-y"}, } --yukarıdaki tablodan bize lazım olanları seçip yeni boş tablomuza aktaracağız local sonuc = {} --buradaki döngü ise seçilmesi gereken elemanları seçip "sonuc" tablosuna yerleştiriyor for _,oge in ipairs(degerler) do local iHarf = mw.ustring.sub(deger[1], 1, 1) local durum = bunlardanBiriMi(deger[1], tireAyir(oge[3])) or bunlardanBiriMi(iHarf, tireAyir(oge[3])) if deger[2] "yok" then if (oge[3] "y" and deger[1] == "normal") or --burada istisnai bir durum söz konusu (mw.ustring.match(oge[3], "y") and durum) then table.insert(sonuc, oge) end else if durum then table.insert(sonuc, oge) end end end return sonuc end function olusturTablo(frame) local args = frame:getParent.args --bu tablo parametre ile seçilmiş tablo tipini taşır local elementTablosu = tabloTurleri({args.tip, (args["başlık"] or nil)}) local periyodikSon --periyodik tablonun sonucunu bir hata olması ihtimaline karşın en başta tanıtalım --tablonun elementler dışındaki yazı hücrelerinde neler olacağını sıralayalım local yazilar = { "Grup →↓ Periyot", "1A", "2A", "3B", "4B", "5B", "6B", "7B", "8B", "8B", "8B", "1B", "2B", "3A", "4A", "5A", "6A", "7A", "8A" } if args.tip "p1" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "1") end if args.tip "p2" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "2") end if args.tip "p3" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "3") end if args.tip "p4" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "4") end if args.tip "p5" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "5") end if args.tip "p6" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "6") table.insert(yazilar, "5771") end if args.tip "p7" or args.tip "normal" or args.tip "geniş" then table.insert(yazilar, "7") table.insert(yazilar, "89103") end table.insert(yazilar, "Lantanitler") table.insert(yazilar, "Aktinitler") local elementler {} local gecici {} --elementlerin veri modülünden tüm elementlerin vikiveri'den atom numarası ve simgelerini çekelim for x,e in pairs(veri.elementler) do --burada simgeleri alıyoruz simge mw.wikibase.getEntity(e[1]):formatPropertyValues('P246').value --burada da atom numarası atom mw.wikibase.getEntity(e[1]):formatPropertyValues('P1086').value --şimdi de ilgili tablolara aktarma zamanı if turAraliklari(args.tip, x) then table.insert(elementler, {atom .. "" .. simge, e[2], e[1]}) end if args.tip "normal" and (turAraliklari("lantanit", x) or turAraliklari("aktinit", x)) then table.insert(gecici, {atom .. "" .. simge, e[2], e[1]}) end end --normal görünüşte lantanit ve aktinitler aşağıda görüneceği için onları diğer elementlerden sonra en alta yüklüyoruz if args.tip "normal" then for _,a in pairs(gecici) do table.insert(elementler, a) end end local tablo {} i,j 1,1 for _,sayi in ipairs(elementTablosu) do for x 1,sayi[1],1 do if sayi[2] 0 then table.insert(tablo, "| ") elseif bunlardanBiriMi(sayi[2], {1,2}) then --burası grup ve periyotların sütunları içindir --burası ayrıca iki kare yer kaplayan grup/sütun yazısı veya lantanit/aktinit yazıları içindir if yazilar[j] then table.insert(tablo, "|" .. (sayi[2] 2 and " colspan '2' " or "") .. "class 'yazi' | ") end j j + 1 elseif sayi[2] 3 then --burası da tüm element (lantanit ve aktinitler hariç) kutularını ayarlar if elementler then table.insert(tablo, "| class='element' style='background-color: #" .. elementler[2] .. ";' |[[" .. siteBaglantisi(elementler[3]) .. "|]]") end i = i + 1 elseif sayi[2] "son" then table.insert(tablo, "|-") end end end local yazisiz args["yazı"] "yok" if tablo[1] then periyodikSon = "" else periyodikSon = "" end return periyodikSon end return {olusturTablo = olusturTablo}
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Izgara yada normal mod

Temanızda forum listeleme yapısını ızgara yapısında yada normal yapıda listemek için kullanabilirsiniz.

Forum arkaplan resimleri

Forum arkaplanlarına eklenmiş olan resimlerinin kontrolü senin elinde, resimleri aç/kapat

Sidebar blogunu kapat/aç

Forumun kalabalığında kurtulmak için sidebar (kenar çubuğunu) açıp/kapatarak gereksiz kalabalıklardan kurtula bilirsiniz.

Yapışkan sidebar kapat/aç

Yapışkan sidebar ile sidebar alanını daha hızlı ve verimli kullanabilirsiniz.

Radius aç/kapat

Blok köşelerinde bulunan kıvrımları kapat/aç bu şekilde tarzını yansıt.

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Geri