Prototype aşağı, prototype yukarı! Aslında tüm özelliklerini örneklendiremesek bile öğrenmek isteyenlere önayak olduğumuzu düşünüyoruz. Bu aydan itibaren yine prototype için mevcut eklentiler ile kütüphanenin nasıl daha kullanışlı hale getirilebileceğini görelim.
Yazımıza Prototype çatısı ile devam ettiğimizden beri bunun temel bir kütüphane olduğuna ve bazı çatıların da temelini oluşturduğuna değinmiştik. Javascript ile kod yazmayı daha pratik hale getiren temelin üzerine kurulmuş bu eklentilerden biri olan pencere sınıfı ile sayfalarınızda ziyaretçilerinizin gözüne hoş gelebilecek, tabir-i caizse, sözde pencereler oluşturmak gerçekten çok kolay. Üstelik bu pencereler açılır pencere engelleyiciler tarafından da engellenmiyor ;)
Pencere sınıfını nasıl kullanabiliriz?
Öncelikle http://prototype-window.xilinus.com/download.html adresinden en son sürümü (şu anki sürüm 0.96.2) indirmekle başlayabiliriz. Arşiv dosyasını açtığınızda birçok dosya göreceksiniz. Bizim ilgilendiklerimiz ise javascripts
klasöründeki window.js
, effects.js
ve tabii ki prototype.js
. Bunlar dışında da pencerelerin biçimlendirilmesinde kullanılan themes
klasörüne ihtiyacımız olacak.
Daha sonra ki işlemimiz de sayfamızın head
etiketi içerisine javascript ve css dosyalarını aşağıdaki gibi eklemek.
CSS dosyalarının tümünü eklemek zorunda değiliz. default.css
, dışında sadece kullanacaklarınızı ekleyip diğerlerini göz ardı edebilirsiniz.
Örnekler içerisinde göreceğiniz uyarı ve onay pencereleri için
alert.css
dosyası da eklenmelidir.
Şimdi ilk pencere örneğimize geçebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Örnekte öncelikle Window
adlı nesneden pencere1
adıyla kendimize de bir tane kopyaladık ve özelliklerini de parantez içindeki kısımda belirledik. Buradaki değerler içerisinde pencere1
, pencere oluşturulurken kullanılan katmanın id
özelliği olacak. Böylece müdahale etmek istediğimizde getElementById
ile bu sayfa öğesine erişim gerçekleştirilebilir. className
için de yukarıda eklediğimiz CSS dosyalarının isimlerini dosya türü olmadan (yani .css olmadan) kullanıyoruz. title
penceremizin başlığı, width
genişliği, height
da yüksekliği belirler. .getContent().innerHTML
ile pencere içeriğini oluşturduktan sonra .setDestroyOnClose()
ile pencereyi kapattığımızda kopyaladığımız nesnenin ortadan kaldırılmasını sağlıyoruz. Eğer bunu yapmazsak pencere sayfada görüntülenmese dahi bellekten silinmediyse tekrar açılmasını istediğimizde aşağıdaki hatayı alacağız. İçerikte HTML kodlarını da kullanabilirsiniz.
En son satırdaki .showCenter()
la da penceremizi sayfada ortalıyoruz. Tüm bu işlemleri pencereGoster1()
adlı fonksiyonumuzun içerisine yerleştirdiğimiz için tıklandığında açılması için bir bağlantı içerisinde çağırıyoruz. İşte örneğimiz!
Pencerede farklı bir adresi görüntüleme
1 2 3 4 5 6 7 8 9 |
|
Eğer pencere özelliklerinde url
ile bir adres tanımlarsak pencere içerisinde bu adres görüntülenecektir. Bu durumda .getContent().innerHTML
i kullanmamıza gerek kalmıyor.
Uyarı
1 2 3 4 5 6 7 |
|
Uyarı pencereleri için Dialog.alert()
i kullanacağız. Parantez içerisinde yapacağımız ile tanımlama pencere içeriğini, windowsParameters
kısmı Window
nesnesindeki tüm özellik tanımlamalarını yapmamızı sağlıyor. okLabel
da pencereyi kapatmamızı sağlayan butonun değerini belirliyor. Dialog
modülünün özelliği, pencerenin diğer tüm sayfanın üzerine bir katman olarak gelip sayfadaki bağlantı, buton gibi kullanıcı etkileşimli öğeleri etkinsizleştirmesidir.
İçerik olarak sayfadan bir bölümü kullanma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
En alttaki pencere_icerigi
id
özelliğine sahip alanı fark etmiş olmalısınız. Şimdi bu alanı penceremizin içeriği olarak görüntüleyeceğiz. Bunun için .setContent()
özelliğini kullanıyoruz. .setContent()
içerisinde öncelikle sayfa elemanının id
sini tanımlayıp daha sonra da boyut ve yerleşim özelliklerini true
ile otomatik hale getiriyoruz. Ardından .toFront()
ile de sayfadaki tüm pencerelerden önde görünmesini sağlıyoruz. Kod içerisinde Windows
nesnesinde kullanılan bazı yeni özelliklerine de yer verdik. Örneğin resizable: false
ile yeniden boyutlandırılamaz, minWidth: 10′ ile en az 10px genişliğinde,
maxWidth: 300′ ile de en fazla 300px genişliğinde bir pencere tanımlaması yapmış oluyoruz. Değişiklikleri pencere büyültme ve küçültme butonlarını kullanarak görebilirsiniz.
Onay penceresi
1 2 3 4 5 6 7 8 9 10 |
|
Dialog
için confirm
özelliğini kullanarak şimdi de bir onay penceresi oluşturacağız. alert özelliğinden farkı onaylama dışında iptal etme için de bir seçeneğimizin olması. Seçime bağlı olarak da istediğimiz fonksiyonu çağırarak uygun işlemin yapılmasını sağlayabiliriz.
(ok|cancel)Labelözellikleri ile onay ve iptal butonlarımızın değerlerini belirlerken tıklanan butona göre
ok|cancel` iş bitirici fonksiyonumuzu devreye sokuyor.
İletişim penceresi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Yine bir Dialog
fakat bu kez info
. 5’ten geri sayarak açılan pencereyi otomatik kapatan, bunun dışında farklı bir kapatma seçeneği olmayan bir pencere. Elimizde iletisimKutusuAc()
ve zamanBilgisi()
olarak 2 fonksiyon bulunuyor. Birinci fonksiyon iletişim kutusunu oluşturuyor; diğeri ise geri sayım ve pencere içeriğinde buna bağlı güncellemeyi gerçekleştiriyor.
Pencere özellikleri içerisinde showProgress: true
dikkatinizi çekmiş olabilir. Bu, pencere içerisinde bir işlem yapılıyor
anlamına gelen resmin görüntülenmesini sağlıyor. setTimeout(zamanBilgisi, 1000)
satırları ile zamanBilgisi()
fonksiyonu 1’er saniyelik gecikmelerle çağırılarak çalıştırılıyor.
zamanBilgisi()
fonksiyonuna bakarsanız da öncelikle başlangıçta 5
olarak belirlenen süre 1 saniye azaltılıyor. Daha sonra da saniyenin 0 olmaması koşulu ile pencere içeriği .setInfoMessage()
ile güncelleniyor. 0 olduğu takdirde de .closeInfo()
ile kapatılıyor.
AJAX iş başında!
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 |
|
Penceremizin içeriğini AJAX ile yapacağımız istek sayesinde belirlememizi sağlayan kodumuz son örnek olarak karşımızda. .setAjaxContent()
ile gerçekleştirdiğimiz bu işlem aslında geçen haftalarda anlattığımız Ajax.Request
tin ta kendisi. ajax_cevap.php
sayfasına GET
metodu ile gönderdiğimiz veri pencere içerisinde biçimlendirilerek görüntüleniyor.
Bu ay ki örneklerimizi de burada sonlandırdık. Önümüzdeki sayıda yine prototype temelli bir kütüphane olan script.aculo.us ile devam edeceğiz.
Efektler
Kullandığımız sınıf, pencerelerin açılıp kapanması sırasında efektler kullanabilmemize olarak sağlıyor. Prototype temelli bir kütüphane olan script.aculo.us içerisindeki efektlerin dahil edildiği sınıfta pencere özelliklerinde showEffect ve hideEffect ile pencerelerin nasıl açılıp nasıl kapanacağını belirleyebilirsiniz. Örneğin,
1 2 |
|
Daha fazla örnek için http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo adresini kontrol edebilirsiniz.
Bu yazı Ekim 2006 tarihinde PC Tech dergisinde yayınlanmıştır.