5 Ocak 2014 Pazar

AMBERJACK KÜTÜPHANESİ
  Amberjack kütüphanesi internet sayfaları üzerinde tur yapabilmemizi sağlayan ve sayfaların kullanılabilirliğini arttıran küçük bir JavaScript kütüphanesidir. Kütüphane ile internet sayfaları üzerine bilgilendirme, açıklama gibi çeşitli alanlar ekleyerek site üzerinde tur yapabiliriz. Kütüphane internet sayfasının fonksiyonelliğini arttırır. Bu kütüphaneyi kullanmak için Amberjack JS linkinden indirebilirsiniz. Kütüphaneyi indirdikten sonra kullanmak için projenin kaynak dosyalarına şekilde görüldüğü gibi eklememiz gerekiyor:

  Ardından kütüphaneyle üzerinde tur oluşturacağımız internet sayfalarını belirlememiz gerekiyor. Bu işlem sonrasında, sayfaların <head> bölümüne aşağıdaki kodu ekleyerek, sayfaların adreslerinden (URL) de faydalanarak bir Amberjack kütüphanesi örneği yapabiliriz artık. 
<script type="text/javascript" src="Scripts/amberjack.js"> </script>
  Oluşturacağımız internet sitesi turunun bilgi kutuları, kütüphanenin yardımıyla basit HTML <div> etiketlerinden ibaret olacak. Ancak tabi bu <div> etiketinin Amberjack turu olabilmesi için bazı özelliklere sahip olması gerekiyor. Tur için <div> etiketinin, 'class' özelliği 'ajTourDef' değerine sahip olmalı ve turun adresinde kullanacağımız ve de kendimiz belirleyeceğimiz bir 'id' özelliğine sahip olmalıdır:
<div class="ajTourDef" id="tur" >
</div>
  Bu eklediğimiz 'class' ve 'id' özelliklerine sahip olan <div> etiketi, bizim site turumuz olur. Bu <div> etiketinin içine ekleyeceğimiz, 'title' özelliği tur sayfalarının adresleri olan, diğer <div> etiketleri de turumuzun gezinme sayfaları olacaktır:
<div title="Default.aspx" > 
         Gezinme penceresi içeriği
</div>
  Amberjack kütüphanesinin gezinme pencereleri için 6 farklı görünüm seçeneği vardır. Bu seçenekler, gezinme turumuzun bağlantı adresine eklenecek olan, 'skinId' sorgu dizgesine (query string) değer olarak girilecektir. Bu görünüm seçeneği değerleri; White_Wave, Model_T, Safari, Tux, Black_Beauty ve Spongebob'tur. 
  Yukarıdaki gibi, tur oluşturma ve biçimini belirleme gibi durumlarını tamamladıktan sonra artık turumuzun bir giriş bağlantısı oluşmuş oluyor. Bu bağlantı şu şekilde olacaktır:
"Default.aspx?tourId=tur&skinId=White_Wave"
  Kütüphanenin tam anlamıyla çalışıyor olması ve bazı kişiselleştirmeleri gerçekleştirebilmemiz için, <script> etiketi içerisinde bir takım Amberjack JS fonksiyonlarını kullanmamız gerekiyor. Dilerseniz o fonksiyonları da yapacağımız örnek üzerinden anlamaya çalışalım. Yapacağımız örnek proje için sayfalar arası geçişleri daha güzel şekilde görebilmemiz için 'Site.master' isimli bir master page (internet sitelerinde sayfalar için ortak olan ve değişken alan dışında kalan sabit bölüm) ve bu sayfada görüntüleyeceğimiz 'Default.aspx', 'Hakkinda.aspx' ve de 'iletisim.aspx' isimli, 3 adet ASP.NET sayfası oluşturalım.  Amberjack kütüphanesi ile ilgili işlemlerin sadece 'Site.master' sayfasında yapılması yeterli olacaktır.  Diğer ASP.NET sayfalarında sadece dilediğimiz şekliyle sayfanın içeriği bulunacaktır. Projemize eklediğimiz bu sayfalarla beraber kaynak dosyalarımızın son halini görelim:

Şimdi kütüphaneyi kullanarak yaptığımız örnek çalışmamızı inceleyelim:
  'Default.aspx' sayfasının kodları:
<%@ Page Title="Ana Sayfa" Language="C#" MasterPageFile="~/Site.master"               AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Ana Sayfa
    </h2>
    <p>
        Sitemiz içerisinde ana sayfada 
        <br />  
         bulunacak herhangi bir içerik
    </p>
</asp:Content>

  'Hakkinda.aspx' sayfasının kodları:
<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Hakkinda.aspx.cs" Inherits="About" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Hakkında
    </h2>
    <p>
        Kişisel bir internet sitesi ise kişisel bilgiler
        <br />  
        bu sayfada yer alabilir.
    </p>
</asp:Content>

  'iletisim.aspx' sayfasının kodları:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="iletisim.aspx.cs" Inherits="iletisim" MasterPageFile="~/Site.master" Title="iletişim"  %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        İletişim Bilgileri
    </h2>
    <p style="color: #000000">
       Berna Çorbacı 
        <br />  
       internet sayfası: bernacorbaci.blogspot.com 
        <br />  
       e-mail: brna.crbc@gmail.com
    </p>
</asp:Content>

  Asıl Amberjack JavaScript kütüphanesi işlemlerini gerçekleştirdiğimiz 'Site.master' sayfasının kodları:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs"            Inherits="SiteMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <script type="text/javascript" src="Scripts/amberjack.js"> </script>
    <title></title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form runat="server">
    <div class="page">
        <div class="header">
            <div class="title">
                <h1>
                    Benim İnternet Sitem <a href="Default.aspx?tourId=tur&skinId=Model_T "     style="color: #00FFFF">
                        SİTE TURUNA BAŞLAMAK İÇİN TIKLAYIN!!</a>
                </h1>
                <div class="ajTourDef" id="tur" style="display: none">
                    <div title="Default.aspx">
                        İlk Gezinme Penceremiz!
                        <br />
                        Buraya istenilen içerik girilebilir!
                    </div>
                    <div title="Hakkinda.aspx">
                        2. Gezinme Penceremiz!!
                        <br />
                        Hakkında sayfasının tanıtımı gibi istenilen içerik buraya girilecektir.
                    </div>
                    <div title="iletisim.aspx">
                        3. Gezinme Penceremiz!!!
                        <br />
                        İletişim sekmesinin tanıtım ya da kullanım bilgileri..
                    </div>
                </div>
            </div>
            <div class="clear hideSkiplink">
                <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu"                    EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Ana Sayfa" />
                        <asp:MenuItem NavigateUrl="~/Hakkinda.aspx" Text="Hakkında" />
                        <asp:MenuItem NavigateUrl="~/iletisim.aspx" Text="İletişim" />
                    </Items>
                </asp:Menu>
            </div>
        </div>
        <div class="main">
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </div>
    </div>
    </form>
    <script type="text/javascript">
        Amberjack.textOf = '/';
        Amberjack.textClose = 'x';
        Amberjack.textPrev = '&lt;';
        Amberjack.textNext = '&gt;';
        Amberjack.onCloseClickStay = true;
        Amberjack.open();
    </script>
</body>
</html>
  Yukarıdaki örnek projemizde Amberjack kütüphanesi ile internet sayfaları üzerinde bir tur oluşturduk. <div> etiketinin anlattığımız şekliyle kullanımını gördük. Şimdi örnekte kullandığımız <script> etiketi içindeki Amberjack elemanlarının da işlevlerini öğrenip, örneğimizin çıktılarını görelim. 

  • Amberjack.textOf: Bu özelliğe girilen dizgi değeri, gezinti pencerelerinde görülen, turdaki pencerelerin tümünün sayısı ile üzerinde bulunulan sayfanın numarası arasına yazılacak olan dizgi olur (1/3 gibi, toplamda bulunan 3 gezinti penceresinden 1.sinde olduğumuzu gösterir.).
  • Amberjack.textClose: Bu özelliğe girilen dizgi değeri, gezinti pencerelerinin kapatma butonu üzerinde görülecek olan dizgi olur.
  • Amberjack.textPrev: Bu özelliğe girilen dizgi değeri, gezinti pencerelerinden bir öncekine geçiş butonu üzerinde görülecek dizgidir. (Örnekte '&lt' dizgisi bu özelliğe girilmiş ve '<' karakteri bu butonun üzerindeki dizgi olmuştur.)
  • Amberjack.textNext: Bu özelliğe girilen dizgi değeri, gezinti pencerelerinden bir sonrakine geçiş butonu üzerinde görülecek dizgidir. (Örnekte '&gt' dizgisi bu özelliğe girilmiş ve '>' karakteri bu butonun üzerindeki dizgi olmuştur.)
  • Amberjack.onCloseClickStay: Bu özellik 'true' ya da 'false' değerler alabilmekte ve bu değerin 'true' olması pencerede kapatma butonunun görünmesi, 'false' olması ise bu butonun görünmemesi anlamına gelmektedir.
  • Amberjack.Open(): Bu fonksiyonla Amberjack gezinti penceresi açılıyor. Diğer yazdığımız özellikler <script> etiketi içerisinde belirtilmezse, kütüphanede tanımlı varsayılan değerleri gelecektir. Ancak bu fonksiyonla pencereyi açık hale getirmeden gezinti turumuzu gerçekleştiremeyiz.
Şimdi örneğimizin çıktısını görelim:
'Site turuna başlamak için tıklayın' bağlantısına tıkladığımızda:
Pencere üzerindeki '>' karakteriyle gösterdiğimiz geçiş butonuna tıklayarak, diğer gezinti sayfalarını da görüntüleyelim:

Oluşturduğumuz site turunda 'skinId' için, örneğin safari gibi bir başka değer girdiğimizde ise gezinti penceresinin görünümü şu şekilde olacaktır:
  Benzer şekilde diğer gezinme penceresi görünümlerini de kullanarak, siteniz için en uygun gezinti turu penceresi stilini seçip, kullanılabilirliği artmış internet sayfaları ve sayfalar için tanıtım rehberleri oluşturabilirsiniz artık. Bu haftalık anlatacaklarım bu kadar. 10 hafta boyunca anlatmaya çalıştığım JavaScript kütüphaneleri bilgileri yararlı olmuştur umarım.

Kaynaklar:

29 Aralık 2013 Pazar

DD_ROUNDIES KÜTÜPHANESİ

 DD_Roundies kütüphanesi resim kullanmadan, yuvarlatılmış köşeli şekiller (HTML kutular) kullanmamızı sağlar. Herhangi bir DOM elemanlarının (Belge Nesnesi Modeli: sayfada bulunan resim, yazı, buton gibi tüm elemanlar) şeklini yuvarlatabiliriz. Bu kütüphaneyi kullanabilmek için, DD_roundies JS linkinden indirebilirsiniz. Kütüphaneyi indirdikten sonra bir ASP.NET sayfasında kulanabilmek için, öncelikle sayfanın kaynak dosyalarına şekilde görüldüğü gibi eklememiz gerekiyor:


 Bu işlem sonrasında kütüphaneyi kullanabilmek için sayfanın <head> bölümüne aşağıdaki kodu ekleyerek, kütüphaneyi sayfa için kullanabilir hale getiriyoruz:
<script type="text/javascript" src="Scripts/DD_roundies.js"> </script>
  
 Artık kütüphane sayfamızda kullanılabilir durumda. Örneğimize geçmeden önce kütüphanenin nasıl işlediğini öğrenelim. Kütüphanenin kutuları, çerçeveleri yuvarlatma işlemi "addRule()" fonksiyonu ile gerçekleştirilmektedir. Bu fonksiyon 3 parametre almaktadır:
  • 1. parametre: Köşeleri yuvarlatılacak sayfa elemanının, id veya class özelliğinin değerini bir dizgi olarak alır.
  • 2. parametre: Sayfa elemanının köşelerinin yuvarlatılma yarıçapını, piksel olarak derecelendirilmiş değeriyle bir dizgi olarak alır. 
    • Bu parametreye aynı dizgi içerisinde tek bir piksel değeri girilirse, sayfa elemanının tüm köşeleri aynı piksel oranında yuvarlatılır ('55px' gibi). 
    • Eğer bu parametreye aynı dizgi içerisinde 2 piksel değeri girilirse; bu değerlerden ilki,sayfa elemanının sol üst ve sağ alt köşelerinin yuvarlatılma oranı, ikincisi ise sol alt ve sağ üst köşelerinin yuvarlatılma oranıdır ('55px 40px' gibi). 
    • Parametreye 3 adet piksel değeri girilirse; birincisi sol üst, ikincisi sağ üst ve sol alt ve de üçüncüsü sağ alt köşenin yuvarlatılma oranı olacaktır ('55px 40px 30px' gibi).
    • Parametreye eğer 4 adet piksel değeri girilirse girilen değerler sırasıyla sol üst, sağ üst, sağ alt ve sol at köşelerin yuvarlatılma oranı olacaktır ('55px 40px 30px 10px' gibi).
  • 3. parametre: Bu parametre isteğe bağlı olarak yazılır ve varsayılan olarak "false" (yanlış) değerini alır. "false" olması durumu, fonksiyonun sadece Internet Explorer tarayıcısında çalışmasını sağlar. Tüm diğer tarayıcılarda çalışabilmesi için bu parametre "true" (doğru) olarak girilmelidir.
      Fonksiyonun kullanımı:
    DD_roundies.addRule('#idozellik', '55px', true);                                                           DD_roundies.addRule('.classozellik', '55px', true); 
Kütüphanenin çalışması anlaşılacağı üzere, oldukça basit ve kullanışlıdır. Şimdi kütüphaneyi kullarak ASP.NET sayfamız üzerinde bir örnek çalışma yapalım:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script type="text/javascript" src="Scripts/DD_roundies.js"> </script>

    <script type="text/javascript">
        //htmlBox class etiketli elemanın tüm kenarları 40 px yuvarlatıldı.
        DD_roundies.addRule('.htmlBox', '40px', true);
        //textid id'li alanın sol-üst ve sağ alt köşesi 60
        //sol alt ve sağ üst köşesi 10 px yuvarlatıldı.
        DD_roundies.addRule('#textid', '60px 10px', true);
        //butonid id'li butonun köşeleri girilen piksellerde yuvarlatıldı.
        DD_roundies.addRule('#butonid', '0px 65px 25px 50p', true);
        //imgid id'li resmin köşeleri sol üst 20 px, sağ üst ve sol alt 0px
        //ve sağ alt 90 px olarak yuvarlatıldı.
        DD_roundies.addRule('#imgid', '20px 0px 90px', true);
        //text alanının yuvarlatma oranını ve genişlik,
        //renk gibi özelliklerini değiştirdik.
        function roundTextArea()
        {
            DD_roundies.addRule('#textid', '0px 50px', true);
            var elem = document.getElementById('textid');
            elem.style.borderColor = '#3366CC';
            elem.style.borderWidth = '4px';
            elem.style.height = '25px';
            elem.style.backgroundColor = '#CCCC66';
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">   
       <div class="htmlBox"
        <pre style="background-color: #ffcc99; border: 5px solid rgb(153, 153, 153);
             overflow: auto; padding: 5px; width: 168px;">
         HTML yazı kutusu
        </pre>
       </div>
        <br />
        <textarea id="textid" style="padding: 12px" onclick="roundTextArea()">Text Alanı </textarea>
        <br />  
        <input type="button" id="butonid" name="name" value="Yuvarlatılmış buton"         style="height:39px"/>
           <br />
           <br />
        <input type="image" id="imgid" name="I1" value=" image" 
             style="border-style: solid; border-color: inherit; border-width: 5px; width: 225px; height: 176px;" 
               src="javascript.png"  /><br />  
    </form>
</body>
</html>
 Örneğimizin çıktısı bu şekildedir:


























    Yazı alanına tıklayınca:

























  Bu haftalık anlatacaklarım bu kadar. Görüldüğü gibi DD_roundies kütüphanesi, internet sayfamız üzerinde, görsel olarak daha özelleşmiş ve standardın dışında sayfa elemanları kullanmamızı sağlamaktadır.

Kaynaklar:
http://dillerdesign.com/experiment/DD_roundies/
http://www.javascriptsource.com/css/dd_roundies.html
https://code.google.com/p/simplefolio/downloads/detail?name=DD_roundies.js&can=2&q=

22 Aralık 2013 Pazar

JAVASCRIPT KÜTÜPHANELERİNİN HATA AYIKLAMA VE LOGLAMA İÇİN KULLANIMI VE BLACKBIRD KÜTÜPHANESİ

JavaScript Kütüphanelerinin Hata Ayıklama ve Loglama İçin Kullanımı
   Merhaba arkadaşlar, bu hafta JavaScript kütüphanelerinin hata ayıklama ve loglama için kullanımını ve BlackBird kütüphanesini göreceğiz. JavaScript hata ayıklama (debugging) ve loglama işlemlerinde, oldukça pratik ve görsel olarak gelişmiş işlemler sunmaktadır. Bu işlemler için kullanılan başlıca kütüphaneler; NitobiBug (nesnelerle dizgi, sayı gibi basit veri tiplerini ayrıştırabilen JavaScript hata ayıklama kütüphanesi), Firebug Lite (NitobiBug gibi çalışan fakat daha geniş bir tarayıcı desteğine sahip kütüphane) ve BlackBird (bu hafta üzerinde duracağımız temel loglama kütüphanesi) gibidir.

BlackBird Kütüphanesi
  BlackBird loglama için oluşturulmuş açık kaynak bir JavaScript kütüphanesidir. Tüm temel tarayıcılarda çalışır. JavaScript alert() methodu loglama için yaygın bir kullanıma sahip olsa da, BlackBird kütüphanesiyle daha iyi görünümlü ve kategorize edilmiş bir loglama konsolu oluşturulabilir. Kütüphaneyi Blackbird JS linkinden indirebilirsiniz. Bir ASP.NET sayfasında bu kütüphaneyi kullanabilmek için, şekilde görüldüğü gibi projenin dosyalarına kütüphaneyi eklememiz gerekiyor:


  Kütüphaneyi ekledikten sonra, sayfamızda kullanabilmek için sayfanın <head> bölümüne aşağıdaki kod satırını ekleyerek kütüphaneyi kullanabilir hale getiriyoruz:
<script type="text/javascript" src="blackbirdjs/blackbird.js"> </script>
Örnek projemize başlamadan önce kütüphanenin belli başlı fonksiyonlarını tanıyalım ve işlevlerini öğrenelim:
  • toggle(): Fonksiyon, blackbird loglama konsolunu göstermek veya gizlemek için kullanılır. Kullanımı: 
  • log.toggle();
    
  • resize(): Loglama konsolunun büyük ve küçük olmak üzere, 2 standart boyutu vardır. Bu fonksiyon konsolun boyutunu, konsol büyükse küçük, küçükse büyük seçeneği ile değiştirir. Kullanımı:
  • log.resize();
    
  • clear(): Fonksiyon, loglama konsolunun içeriğini temizler (Önceki log mesajları silinir). Kullanımı:
  • log.clear();
    
  • debug(): Fonksiyon, parametre olarak dizgi değer alır ve bu dizgi hata ayıklama mesajıdır. Bu fonksiyonla hata ayıklama mesajları konsola yazdırılır. Kullanımı:
  • log.debug('hata ayıklama mesajı');
    
  • info(): Fonksiyon, parametre olarak bilgi mesajı dizgisi alır ve konsola bilgi mesajlarını ekler. Kullanımı:
  • log.info('bilgi mesajı');
    
  • warn(): Fonksiyon, parametre olarak uyarı mesajlarını alır ve bu mesajları konsola ekler. Kullanımı:
  • log.warn('uyarı mesajı');
    
  • error(): Fonksiyon, parametre olarak hata mesajlarını alır ve bu mesajları konsola ekler. Kullanımı:
  • log.error('hata mesajı');
    
  • profile(): Fonksiyon, parametre olarak bir dizgi alır. Bir profil oluşturur ve parametre olarak aldığı dizgi, o profilin etiketi olur. Fonksiyon, kod içerisinde tekrar aynı dizgi parametre olarak girilip çağrıldığında, oluşturulan profil sonlandırılır ve profilin varlık süreci boyunca yapılan işlemlerin süresi, mili saniye olarak konsolda gösterilir. Fonksiyon her çağrıldığında konsola, parametre olarak girdiğimiz dizgi eklenir. Kullanımı:
  • log.profile('profil etiketi'); //profil oluşturuldu
    //profil oluşturulduktan sonra yapılacak işlemler
    log.profile('profil etiketi'); //profil sonlandırıldı ve işlemlerin süresi konsola eklendi.
  Şimdi buraya kadar gördüklerimizden faydalanarak ASP.NET sayfamızda bir örnek yapalım:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
     
    <script type="text/javascript" src="blackbirdjs/blackbird.js"></script>
    <link href="blackbirdjs/blackbird.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">

        function konsolGoster() {
            log.toggle();
        }
        function debugMesaj() {
            log.debug('Hata Ayıklama Mesajı');
        }
        function bilgiMesaj() {
            log.info('Bilgi Mesajı')
        }
        function uyariMesaj() {
            log.warn('Uyarı Mesajı!');
        }
        function hataMesaj() {
            log.error('Hata Mesajı!!');
        }
        function profilOlustur() {
            log.profile('Profil Etiketi');//Profil oluşturuldu.

            //Yapılacak işlem burada, aynı isimli 2 
            //profil etiketi arasında bulunacak.
            var test = '';
            for (var i = 0; i < 300000; i++) {
                test+= '-';
            }
            log.profile('Profil Etiketi');//Profil sonlandırıldı.
        }
        function boyutunuDegistir() {
            log.resize();
        }
        function konsoluTemizle() {
            log.clear();
        }
    </script>
</head>
 
<body>
    <form id="form1" runat="server"> 
    <h1>    
    BlackBird Test
    </h1>
    <input type="button" name="name" value="Konsolu Göster" 
        onclick="konsolGoster();" style="left: auto; width: 137px;"/>
    <br />   
    <input type="button" name="name" value="Hata Ayıklama Mesajı" 
        onclick="debugMesaj();" style="width: 137px" />
    <br />
    <input type="button" name="name" value="Bilgi Mesajı" onclick="bilgiMesaj();" 
        style="width: 137px" />
    <br />
    <input type="button" name="name" value="Uyarı Mesajı" onclick="uyariMesaj();" 
        style="width: 137px" />
    <br />  
    <input type="button" name="name" value="Hata Mesajı" onclick="hataMesaj();" 
        style="width: 137px" />
    <br />  
    <input type="button" name="name" value="Profil Oluştur" 
        onclick="profilOlustur();" style="width: 137px" />
    <br />
    <input type="button" name="name" value="Boyutunu Değiştir" 
        onclick="boyutunuDegistir();" style="width: 137px" />
    <br />  
    <input type="button" name="name" value="Konsolu Temizle" 
        onclick="konsoluTemizle();" style="width: 137px"/>
</form>
</body>
</html>
  Şimdi örneğimizin çıktısını ve oluşturduğumuz butonların ne işe yaradıklarını görelim:



















"Konsolu Göster" butonuna basınca:


















"Hata Ayıklama Mesajı" butonuna basınca:

















"Bilgi Mesajı" butonuna basınca:

















"Uyarı Mesajı" butonuna basınca:
















"Hata Mesajı" butonuna basınca:
















"Profil Oluştur" butonuna basınca:
















"Boyutunu Değiştir" butonuna basınca:

















"Konsolu Temizle" butonuna basınca:
















  Örnekte görüldüğü gibi, anlattığımız fonksiyonları ve Blackbird kütüphanesini kullanarak oldukça güzel görünümlü ve pratik bir loglama konsolu oluşturup, bu konsolda istediğimiz türde log mesajları gösterebiliyoruz. Bu haftalık anlatacaklarım bu kadar. Umarım kütüphanenin kullanımı anlaşılmış ve loglama konusundaki ihtiyaçlarınızı karşılamaya yetecek düzeyde olmuştur.

Kaynaklar:

8 Aralık 2013 Pazar

JAVASCRIPT KÜTÜPHANELERİNİN FONTLAR İÇİN KULLANIMI VE CUFON KÜTÜPHANESİ

JavaScript Kütüphanelerinin Fontlar İçin Kullanımı
Merhaba arkadaşlar bu hafta JavaScript kütüphanelerinin fontlar için kullanımını ve Cufon kütüphanesini göreceğiz. JavaScript font (yazı tipi) kütüphaneleri, oluşturduğumuz internet sayfalarının yazı tipleri için, geniş seçenekler sunmakta ve yazılar üzerinde toplu değişimlere izin vermektedirler. Bu işlemler için kullanılan temel JavaScript kütüphaneleri; Typeface.js  ve bugün bahsedeceğimiz Cufon kütüphanesi gibidir. Her iki kütüphane de temelde aynı işleve sahip olup, internet sayfalarının yazı tiplerini değiştirmeyi sağlasa da Cufon kütüphanesi bu işlem için daha geniş seçenekler sunmaktadır.

Cufon Kütüphanesi
Kütüphane, internet sayfası içinde istenilen formatta yazı tipini kullanmamızı ve yazı tipi dönüşümlerini gerçekleştirmemizi sağlar. Tüm temel tarayıcılarda çalışır. Yazı tipi dönüştürme sırasında türkçe karakter desteği de eklenebilir. Oldukça fazla yazı üzerinde hızlı işlem yapar. Kütüphaneyi kullanabilmek için Cufon JS linkinden indirebilirsiniz. Kütüphaneyi bir ASP.NET sayfasında kullanabilmek için, ASP.NET projesinin dosyalarına eklememiz gerekiyor. Bununla birlikte kütüphaneyi kullanabilmek için, internet sayfamızda kullanmak istediğimiz yazı tiplerini seçmemiz ve bu yazı tiplerini birer JavaScript dosyası haline getirmemiz gerekiyor. Şimdi bu işlemi kolayca nasıl yapabileceğimizi göstereceğim: Öncelikle Cufon Yazı Tipleri linkinde bulunan yaklaşık 9300 yazı tipinden, internet sayfamızda kullanacağımız yazı tiplerini seçiyoruz. Şekildeki gibi seçtiğimiz yazı tipinin altında bulunan, "Cufon File Download" butonuna tıklıyoruz.





  Butona bastığımızda gelen ekranda, internet sayfamızda kullanmak istediğimiz karakter kümelerini seçiyoruz (Türkçe karakterler, noktalama işaretleri gibi). Ardından "I accept all legal responsibility" yazan lisans onayını işaretliyoruz ve aşağıdaki şekilde gördüğümüz "Font Download as cufon" yazan butona tıklayarak, istediğimiz yazı tipinin bir JavaScript kütüphanesi halinde indirilmesi işlemini başlatıyoruz:
İndirdiğimiz yazı tipi JavaScript dosyasını da ASP.NET projemizin kaynak dosyalarına ekliyoruz. Ben yapacağımız örnek için "Arsenale White" ve "Quickie" yazı tiplerini seçtim ve aşağıdaki şekildeki gibi, onları birer JavaScript dosyası haline getirerek, Cufon kütüphanesiyle birlikte projemizin kaynak dosyalarına ekledim:
 Sonrasında sayfanın <head> bölümüne aşağıdaki kod satırlarını ekleyerek, kütüphaneyi istediğimiz yazı tipleriyle beraber sayfada kullanılabilir hale getiriyoruz:
<script type="text/javascript" src="Scripts/cufon-yui.js"> </script>
<script src="Scripts/arsenale-white.cufonfonts.js" type="text/javascript"></script>
<script type="text/javascript" src="Scripts/quickie.cufonfonts.js"> </script>
  Kütüphanenin yazı tipi ve yazı tipi özellikleri değişim fonksiyonu olarak, "replace()" fonksiyonu kullanılır ve bu fonksiyonun içine eklenecek seçeneklerle, istenilen özellikler eklenir. Fonksiyon parametre olarak, yazı tipi özellikleri değiştirilecek HTML etiketinin adını ('h1' gibi) veya ilgili etiketin 'class' ya da 'id' özelliğini ve yazı tipi seçeneklerini (option) alır. Söylediğimiz 2. parametre, isteğe bağlı olarak eklenmeyebilir. Fonksiyonun kullanımı:
Cufon.replace('h1', { yazı tipi seçenekleri});                                                                     Cufon.replace('h1'); //2. parametre olmadan
 Örneğimize başlamadan önce replace() fonksiyonunun içine yazabileceğimiz bazı yazı tipi seçeneklerini tanıyalım:
  • color: Bu özellikle, ilgili HTML etiketi içindeki yazıların rengini değiştirebiliriz. Değer olarak HTML renk kodlarını alır. Bu renk kodlarını HTML renk kodları linkinden öğrenebilirsiniz. Kullanımı:
  • Cufon.replace('h1', { color: '#0404B4;});
    
  • fontFamily: Bu özellik sayfamızda göstereceğimiz yazı için, yazı tipini seçmemizi sağlar. Özelliğe değer olarak, projemizin kaynak dosyalarına eklediğimiz yazı tiplerinden hangisini kullanmak istiyorsak, onun adını yazıyoruz. Kullanımı:
  • Cufon.replace('h1', { fontFamily: 'Arsenale White'});  //Arsenale White yazı tipi
    
     Fonksiyonun içinde eğer bu özellik belirtilmemişse, yazı tipi varsayılan olarak, sayfanın <head> bölümüne son eklediğimiz yazı tipi kütüphanesinin adını, değer olarak alır.
  • fontSize: Özellik yazının boyutunu istediğimiz ölçüde değiştirebilmemizi sağlıyor. Yazı boyutunu, piksel olarak ölçülendirilmiş haliyle alır. Kullanımı:
  • Cufon.replace('h1', { fontSize: '25px;'});  //25 piksel 
  • letterSpacing: Özellik yazı içindeki harfler arası boşlukları değiştirebilmemizi sağlıyor. Harfler arası boşluklar piksel olarak belirlenir. Kullanımı:
  •  Cufon.replace('h1', { letterSpacing:'5px;' });
    
  • fontWeight: Özellik yazıdaki karakterlerin kalınlığını değiştirebilmemizi sağlar. Özelliğe değer olarak 100 ile 900 arası kalınlık değeri girebileceğimiz gibi, 'normal' ve 'bold' (kalın) gibi kalınlık değerleri yazılabilir. Kullanımı:
  •  Cufon.replace('h1', {fontWeight: 'bold'});
    
  • fontStyle: Özellik yazı karakterlerinin stilini belirlememizi sağlar. Değer olarak 'normal', 'italic' (italik) ve 'oblique' (eğik) değerlerinden birini alabilir. Kullanımı:
  •  Cufon.replace('h1', {fontStyle: 'italic'});
    
Kütüphanenin kullanımı ile ilgili temel özellikleri öğrendik. Şimdi öğrendiklerimizden faydalanarak bir Cufon örneği yapalım:
 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script type="text/javascript" src="Scripts/cufon-yui.js"> </script>
    <script src="Scripts/arsenale-white.cufonfonts.js" type="text/javascript"></script>
    <script type="text/javascript" src="Scripts/quickie.cufonfonts.js"> </script>
    <script type="text/javascript">

        Cufon.replace('h2');

        Cufon.replace('#id-1', {
            fontFamily: 'Arsenale White',
            fontSize: '35px;',
        });

        Cufon.replace('p', {
            color: '#DF0101;',
            fontSize: '25px;',
        });

        Cufon.replace('h1', {
             fontFamily: 'Arsenale White', 
             letterSpacing: '5px' 
             });
    
        Cufon.replace('#id-2', {
            fontSize : '30px;'
            });
    </script>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <h2>Sayfaya son ekledigimiz yazi tipi quickie,
           <br />   
           <br />
           varsayilan yazi tipi olarak geldi.
       </h2>
       <h3 id ="id-1">Yazi tipi 'Arsenal White' ve boyutu 35 piksel oldu. </h3>
       <p>Yazi tipi boyutunu ve rengini belirledik.</p>
       <h1>karakterler arasi boslukları arttirdik. </h3>
       <h4 id="id-2"> Yazi tipini 'id' ozelligiyle degistirdik. </h4>
    </div>
    </form>
</body>
</html>
Örneğimizde, kullanmak istediğimiz yazı tiplerini seçtik ve sayfamızda istediğimiz özelliklerle beraber bu yazı tiplerini ekledik. Örneğimizin çıktısını görelim:




















 Kütüphanenin kullanımı ve genel özellikleri bu şekildedir. Anlaşılacağı üzere, kütüphanenin kullanımı oldukça pratik ve yazı tipi seçimi, düzenlemesi konusunda bize geniş seçenekler sunacak boyuttadır. Kütüphanenin kullanım alanında dezavantaj olarak görülebilecek tek husus, yazıların istenilen tipe dönüştürüldükten sonra sayfa üzerinden artık seçilemiyor olmaları ve resim gibi gözükmeleridir. Ama eğer internet sayfanızdaki yazılara, seçmek kopyalamak gibi işlemler gerekmiyorsa, kütüphaneyi kullanarak daha özelleşmiş yazılar oluşturabilirsiniz umarım artık. 

Kaynaklar:

1 Aralık 2013 Pazar

JAVASCRIPT KÜTÜPHANELERİNİN DİZGİ VE MATEMATİK FONKSİYONLARI İÇİN KULLANIMI VE DATEJS KÜTÜPHANESİ

JavaScript Kütüphanelerinin Dizgi ve Matematik Fonksiyonları İçin Kullanımı
Merhaba arkadaşlar, bu hafta JavaScript kütüphanelerinin dizgi (string) ve matematik fonksiyonları için kullanımını ve Datejs kütüphanesini göreceğiz. Javascript; sayılar, matrisler, kompleks sayılar, dizgiler, çeşitli düzenli ifadeler (regular expressions), vektörler ve tarihler gibi pek çok dizgi ve matematik kavramları üzerinde çalışmamızı sağlayan kütüphanelere sahiptir. Bu kütüphanelerin başlıcaları string.js (dizgiler üzerinde çeşitli çalışmalar yapmamızı sağlayan kütüphane), Sylvester (oldukça kolay şekilde matris ve vektör oluşturmaya yarayan kütüphane), XRegExp (düzenli ifadelerle çalışmamızı sağlayan kütüphane), math.js (matematiksel pek çok işlem için kolaylık sağlayan kütüphane) ve bugün anlatacağımız Date.js (tarih-saat verileri üzerinde çalışmamızı sağlayan kütüphane) gibidir.

Datejs Kütüphanesi

Datejs açık kaynak bir JavaScript kütüphanesidir. Oldukça kapsamlı, basit ve hızlıdır. Bu kütüphaneyi kullanarak tarih ve saat formatlarını istediğimiz haline dönüştürebilir ve o şekliyle kullanabiliriz. Kütüphaneyi kullanmak için, öncelikle Datejs linkinden indirebilirsiniz. Kütüphaneyi indirdikten sonra bir ASP.NET sayfasında kullanabilmek için, aşağıdaki şekilde görüldüğü gibi, projemizin dosyalarına ekliyoruz: 

  Bu işlem sonrasında sayfanın <head> bölümüne aşağıdaki satırı yazarak, kütüphaneyi sayfa için kullanılabilir hale getiriyoruz:
<script type="text/javascript" src="Scripts/date.js"></script>
  Örneğimize başlamadan önce, Datejs çalışmalarında kullanılan, kütüphanenin belli başlı fonksiyonları tanıyalım: 
  • today(): Fonksiyon herhangi bir parametre almaz ve o anki tarih değerini döndürür. Fonksiyonla dönen saat ise günün başlangıç saati olacaktır (00:00 veya 12:00 AM gibi). Kullanımı: 
  • Date.today();
  • compare(): Fonksiyon parametre olarak iki tarih değeri alır ve aldığı birinci tarih değeriyle, ikinci tarih değerini karşılaştırır. Aşağıdaki örneğimizde eğer bu iki tarih eşitse "0"; tarih1, tarih2'den küçükse "-1" ve tarih1, tarih2'den büyükse "1" değerini döndürür.
  •  Date.compare ( Date tarih1, Date tarih2) 
    
  • equals(): Fonksiyon parametre olarak iki tarih değeri alır ve bu iki tarih değeri eşitse "true" (doğru), eşit değilse "false" (yanlış) değerlerini döndürür. Kullanımı:
  •  Date.equals( Date tarih1, Date tarih2) 
    
  • getDayNumberFromName(): Fonksiyon parametre olarak ingilizce gün isimlerini alır ve 0-6 arasında numaralandırılmış olan sayısal değerlerini döndürür: Sunday (Pazar) = 0, Monday (Pazartesi) =1 gibi. Aşağıdaki örnekte parametre olarak, Tuesday (Salı) isimli günü girdiğimizde fonksiyon 2 değerini döndürecektir:
  •  Date.getDayNumberFromName('Tuesday'); 
    
  • getMonthNumberFromName(): Fonksiyon parametre olarak ingilizce ay isimlerini alır ve 0-11 arası numaralandırılmış olan sayısal değerlerini döndürür: January (Ocak)=0, February (Şubat)=1 gibi. Aşağıdaki örnekte parametre olarak March (Mart) isimli ayı girdiğimizde fonksiyon 2 değerini döndürecektir:
  •  Date.getMonthNumberFromName('March'); 
    
  • isLeapYear(): Fonksiyon parametre olarak olarak yıl değerini alır ve o yıl artık yıl ise "true", değilse "false" değerini döndürür. Kullanımı:
  •  Date.isLeapYear(2013);  //false 
    
  • getDaysInMonth(): Fonksiyon parametre olarak yıl ve ay değeri alır ve o ayın kaç gün çektiğini gösterir.Aylar yine 0-11 arası numaralandırılmış değeriyle girilir. Artık yıl hesabını otomatik olarak yapar.Kullanımı:
  •  Date.getDaysInMonth(2013, 10);  //2013, Kasım ayı için: 30 döndürür. 
    
  • parse(): Fonksiyon parametre olarak bir dizgi değeri alır ve onu Date nesnesine (tarih nesnesi) dönüştürüp, dönüştürdüğü o tarihi döndürür. Eğer herhangi bir tarih formatıyla eşleştirilemeyen, tarih nesnesine dönüştürülemeyen bir dizgi değeri girilmişse, null (boş, geçersiz) değerini döndürür. Kullanım örnekleri:
  • Date.parse("today"); //Bu günün tarihini döndürür.
    Date.parse("t + 6 d") // today + 6 days: Bugünün tarihinin 6 gün sonrasını döndürür.
    Date.parse("next thursday") // Bulunulan tarihten sonraki ilk perşembe gününü                                                  // döndürür.
    Date.parse("February 22th 2013") // 22 Şubat 2013 tarihini döndürür.
    Date.parse("Thu, 2 May 2013 22:30:00") //2 Mayıs 2013 saat 22:30:00'ı döndürür.
    
  • parseExact(): Fonksiyon parametre olarak, tarih nesnesine dönüştürülecek olan dizgi değerini ve o dizgi değerinin, hangi formatta alınacağını belirten format dizgisini alır. Format dizgisiyle eşleşen tarih değerlerini, birer tarih nesnesi olarak döndürür. Girilen format dizgisiyle eşleşmeyen formattaki tarihler "null" (boş, geçersiz) değer döndürecektir. Kullanım örnekleri:
  •  Date.parseExact("10/15/2013", "M/d/yyyy"); // "10/15/2013" dizgisini tarih nesnesi                                                                      //olarak döndürür. 
    
    Date.parseExact("10.15.2004", "M/d/yyyy"); //formatın dışında bir dizgi girişi                                                                                  //olduğundan null değer döndürür.
    
  • add(): Fonksiyon parametre olarak gün (days), ay (months), yıl (years), saat (hours), dakika (minutes), saniye (seconds) ve milisaniye (miliseconds) gibi tarih niteliklerini içeren yapılandırma nesnesi alır ve birlikte çağrıldığı tarih objesine ekler / çıkarır (Negatif nitelikler eklendiğinde çıkarılmış oluyor.). Kullanımı:
  • 
    Date.today().add({
    milliseconds: 500,
    seconds: 30,              // Bugünün tarihine girilen niteliklerin değerlerini ekler.
    minutes: 45,
                hours: 18,
                days: -15,
                months: 6,
    years: 1
    });
    
  • between(): Fonksiyon parametre olarak iki tarih nesnesi alır ve birlikte çağrıldığı tarih nesnesinin değeri o iki tarihin arasındaysa "true" (doğru), değilse "false" (yanlış) değerini döndürür. Kullanımı:
  • var tarih1= new Date(2009, 4, 5);
    var tarih2= new Date(2014, 11, 25)
    Date.today().between(tarih1, tarih2);//Bugünün tarihi parametre tarihleri arasındaysa                                                        //true, değilse false döndürür.
    
  • set(): Fonksiyon parametre olarak add() fonksiyonuyla aynı şekilde, tarih niteliklerini içeren bir yapılandırma nesnesi alır ve birlikte çağrıldığı tarih nesnesinin değerlerine, yapılandırma nesnesindeki ilgili değerleri atar. Kullanımı:
  • Date.today().set({
    millisecond: 500,
    second: 30,            // Bugünün tarihini girilen niteliklerin değerleri ile değiştirir.
    minute: 45,
                hour: 18,
                day: -15,
                month: 6,
    year: 1
    });
    
  • sunday(), monday(), tuesday(), wednesday(), thursday(), friday(), saturday(): Haftanın günlerinin ingilizce isimlerinden oluşan bu fonksiyonlar, ismiyle aynı olan günü nitelendirirler. Herhangi bir parametre almazlar ve daha çok next(), is() gibi fonksiyonlarla beraber kullanılarak, birlikte çağrıldıkları tarih nesnesiyle, istenilen tarih değerini döndürür ya da istenilen kontrolü yaparlar. Kullanımı:
  • Date.today.next().tuesday(); //Bugünden bir sonraki salı gününün tarihini döndürür. Date.today().is().monday(); //Bugün pazartesi ise "true", değilse "false" değerini // döndürür.
  Kütüphanenin temel bazı fonksiyonlarını tanıdık. Şimdi artık bu fonksiyonları kullanarak bir Datejs kütüphanesi örneği yapabiliriz:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DateJSExample.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <div id="txt"></div> <script type="text/javascript" src="Scripts/date.js"> </script> <script type="text/javascript"> var t = document.getElementById("txt") txt.innerHTML += '2012 artık yıl mı ?(evet=true, hayır=false):' + Date.isLeapYear(2012); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += 'Bugünün tarihi: ' txt.innerHTML += Date.today() txt.innerHTML += '<br />' + '<br />' txt.innerHTML +='Bugünden sonraki ilk perşembenin tarihi: ' txt.innerHTML += Date.today().next().thursday(); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += 'Üç gün sorasının tarihi: ' txt.innerHTML += Date.today().add({days:3}); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += 'Bugün cuma mı ?(evet=true, hayır=false): ' + Date.today().is().friday() ; txt.innerHTML += '<br />' + '<br />' txt.innerHTML+='Bugünün tarihinin değiştirilmiş hali: ' txt.innerHTML += Date.today().set({ month :1, day: 15, year:2010 }); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += 'Mart ayının sırası? (0-11): '; txt.innerHTML += Date.getMonthNumberFromName('March'); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += 'TARİH NESNESİNE DÖNÜŞÜMLER :' txt.innerHTML += '<br />' + '<br />' txt.innerHTML += Date.parse('today'); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += Date.parse('t + 5 d'); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += Date.parse('var olmayan bir tarih formatı'); txt.innerHTML +='<br/>' +'<br/>' txt.innerHTML += Date.parse('next thursday'); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += Date.parse('February 22th 2013'); txt.innerHTML += '<br />' + '<br />' txt.innerHTML += Date.parse('Thu, 5 July 2008 20:30:00'); txt.innerHTML += '<br />' + '<br />' </script> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html>
  Örneğimizde yukarıda gördüğümüz fonksiyonların bazılarını kullanarak çeşitli niteliklerde tarih nesneleri oluşturduk ve sayfamıza ekledik. Şimdi örneğimizin çıktısını görelim:


  Bu haftalık anlatacaklarım bu kadar. Datejs kütüphanesi ve çeşitli fonksiyonlarının kullanımı, umarım örneklerle daha anlaşılır hale gelmiştir. 

Kaynaklar:

24 Kasım 2013 Pazar

JAVASCRIPT KÜTÜPHANELERİNİN VERİ TABANI İŞLEMLERİNDE KULLANIMI VE TAFFY DB KÜTÜPHANESİ

JavaScript Kütüphanelerinin Veri Tabanı İşlemlerinde Kullanımı
  Merhaba arkadaşlar bu hafta JavaScript kütüphanelerinin veri tabanı işlemlerinde kullanımını ve Taffy DB kütüphanesini göreceğiz. JavaScript veri tabanı işlemlerini gerçekleştiren temel iki kütüphane vardır: ActiveRecord.js (veri modelleme, geri butonu ve tarih desteği de içeren bir JavaScript veri tabanı kütüphanesi) ve Taffy DB (SQL veri tabanı gibi düşünebileceğimiz, gerekli veri tabanı işlevlerini hızlıca gerçekleştirebilen bir JavaScript veri tabanı kütüphanesi)

Taffy DB Kütüphanesi

 Taffy DB tarayıcıda bulunan bir SQL veri tabanı veya gelişmiş bir "dizi yöneticisi" olarak düşünebileceğimiz, açık kaynak bir JavaScript kütüphanesidir. İnternet uygulamaları için bir veri tabanı katmanı gibi çalışır. Verileri okuma, düzenleme, silme, döngüler kullanma, verileri sıralama ve gelişmiş sorguları kullanma gibi pek çok veri tabanı işlemi bu kütüphane sayesinde JavaScript sayfaları için de yapılabilir hale gelmiştir.

 Başlıca özellikleri şöyledir :

  • Küçük dosya boyutlu ve oldukça hızlı sorgular
  • Tüm belge nesnesi modeli kütüphaneleriyle uyumluluk
  • Basit söz dizimi (syntax)
  • Herhangi bir internet uygulamasına ekleme kolaylığı
  • Güncelleme, okuma, silme, oluşturma işlemleri arayüzü
  • Sınıflandırma
  • Döngü oluşturma
  • Gelişmiş sorgular 

  •  Kütüphaneyi Taffy DB linkinden indirebilirsiniz. Şimdi kütüphanenin kullanımını, bir ASP.NET sayfası üzerinde görelim. Bunun için kütüphaneyi indirdikten sonra, ASP.NET projemizin dosyalarına şekilde görüldüğü gibi ekliyoruz : 

     Ardından sayfanın <head> bölümünde, aşağıdaki kod satırıyla kütüphanenin dizinini göstererek, kütüphaneyi projemizde kullanabilir hale getiriyoruz :
     <script type="text/javascript" src="taffydb-master/taffy.js"> </script>
    
      Şimdi sayfamızda basit bir veri tabanı oluşturmayı görelim :
    var sehirler = TAFFY([{ sehirIsmi: "Eskişehir", plakaKodu: "26" }, { sehirIsmi: "İstanbul", plakaKodu: "34" }, { sehirIsmi: "Zonguldak", plakaKodu: "67"}]);
      Örneğimizde global TAFFY fonksiyonunu kullanarak, "sehirler" isimli yeni bir veri tabanı oluşturduk ve oluşturduğumuz veri tabanının satırlarını {sütun1_ismi: "değeri" , sütun2_ismi: "değeri" } formatında ekledik. Örneğimizi genişletip, veri tabanı işlemlerini örneğimizde uygulamadan önce, bu işlemleri gerçekleştirirken kullanacağımız temel Taffy DB fonksiyonlarını tanıyalım :
    • insert(): Parametre olarak veri tabanı oluştururken yazdığımız formatta, veri tabanı kayıtlarını alır ve ilgili veri tabanına ekler. Kullanımı :
    •  sehirler.insert({ sehirIsmi: "Ankara", plakaKodu: "06" });
      
    • limit(): Parametre olarak bir sayı alır ve bu sayı, veri tabanının ilk kaç verisi üzerinde çalışacağımızı belirtir. Yani veri tabanın bir kısmı üzerinde işlem yapabilmemizi sağlar. Örneğin fonksiyona "limit(4)" şeklinde bir parametre girdiğimizde, veri tabanının ilk 4 elemanı üzerinde işlemler yapabiliriz. Kullanımı:  
    •  sehirler.limit(4);
      
    • start(): Parametre olarak bir sayı alır ve bu sayı, veri tabanının kaçıncı kaydından itibaren işlem yapacağımızı belirtir. "start(3)" dediğimizde 3. kayıttan itibaren veri tabanının elemanları üzerinde çalışırız. Kullanımı:
    •  sehirler.start(3);
      
    • update(): Parametre olarak güncellenecek veya değiştirilecek objenin, hangi sütun veya sütunları değiştirilecekse onu alır ve yeni değeriyle eşleştirilir. Aşağıdaki örneğimizde "sehirIsmi" sütununun değeri "Eskişehir" olan kaydın, bu değeri "İzmir" olarak değiştirilmiştir:
    •  sehirler({ sehirIsmi: "Eskişehir"}).update({"sehirIsmi":"İzmir"});
      
       Eğer bu kodumuzu aşağıdaki şekilde yazmış olsaydık, veri tabanındaki tüm "sehirIsmi" sütunlarını "İzmir" değeriyle değiştirmiş olacaktık:
       sehirler().update({"sehirIsmi":"İzmir"});
      
    • remove(): Bu fonksiyon herhangi bir parametre almıyor ve veri tabanından istenilen kaydı silmeye yarıyor. Peki herhangi bir parametre almadan hangi kaydı sileceğimizi nereden bilebiliriz? Bu sorunun cevabı; sileceğimiz kaydı, ayırt edilebilirliğini sağlayan ilgili sütun ve satır değeri ile veri tabanı üzerinden çağırmak olacaktır. Aşağıdaki örneğimizde "sehirIsmi" sütunun değeri "Ankara" olan kaydı veri tabanından sildik:
       sehirler({ sehirIsmi: "Ankara" }).remove();
      
      Eğer bu kodu aşağıdaki şekilde yazmış olsaydık, veri tabanındaki tüm kayıtları silmiş olacaktık:
       sehirler().remove();
      
    • sort(): Fonksiyon veri tabanı içindeki verileri, istenilen düzene göre sıralamayı sağlar. Parametre olarak, verilerin sıralanması istenilen ilgili sütunun ismini ve sıralanma biçimini (artan, azalan düzen) alır. Aşağıdaki kullanımda "sehirler" veri tabanı üzerindeki veriler, "plakaKodu" sütununa göre, plaka kodları artan (ascending) düzende olacak şekilde sıralanmıştır.
    •  sehirler.sort("plakaKodu asec");
      
    • select(): Parametre olarak bir veya daha fazla sütunun isimlerini alır. Fonksiyonla, ismi yazılan sütunlardaki veriler, veri tabanından seçilmiş olur. Bu veriler, istenirse bu yolla başka bir veri dizisine aktarılabilir. Örneğimizde bu şekilde, 2 sütunun değerlerinin seçilip, bir başka veri dizisine aktarılışını görelim:
    •  var veri = sehirler().select("sehirIsmi","plakaKodu");
      
    • join(): Fonksiyon iki veri tabanın, istenilen sütunlarını birleştirerek onlar üzerinde işlem yapabilmemizi sağlar. Birinci veri tabanımızın adı "vt1", ikinci veri tabanımızın adı da "vt2" olsun. "vt1" veri tabanımız "sütun_vt1" ve "vt2" veri tabanımız da "sütun_vt2" sütunlarına sahip olsun. Şimdi bu iki veri tabanının bu sütunlarını birleştirmeyi görelim:
    •  vt1().join(vt2, ['sütun_vt1', 'sütun_vt2'])
      
      Şimdi buraya kadar gördüklerimizden faydalanarak basit bir ASP.NET projesi oluşturalım: 
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript" src="taffydb-master/taffy.js"> </script>
        <script type="text/javascript">
    
            var sehirler = TAFFY([{ sehirIsmi: "Eskişehir", plakaKodu: "26" },
                                  { sehirIsmi: "İstanbul", plakaKodu: "34" }, 
                                  { sehirIsmi: "Zonguldak", plakaKodu: "67"}]);
    
            sehirler.insert({ sehirIsmi: "Ankara", plakaKodu: "06" });
    
            function tablo_olustur() {
    
                var body = document.getElementsByTagName("body")[0];
    
                // <table> ve <tbody> elemanlarını oluşturma
                var tbl = document.createElement("table");
                var tblBody = document.createElement("tbody");
    
                // tablo hücrelerini ve satırlarını oluşturma
                var satır1 = document.createElement("tr");
    
                var hucre1 = document.createElement("td");
                var hucreText1 = document.createTextNode("Şehir İsmi:");
                hucre1.appendChild(hucreText1);
                satır1.appendChild(hucre1)
    
                var hucre2 = document.createElement("td");
                var hucreText2 = document.createTextNode(sehirler().select("sehirIsmi"));
                hucre2.appendChild(hucreText2);
                satır1.appendChild(hucre2);
    
                var satır2 = document.createElement("tr");
    
                var hucre3 = document.createElement("td");
                var hucreText3 = document.createTextNode("Plaka Kodu:");
                hucre3.appendChild(hucreText3);
                satır2.appendChild(hucre3)
    
                var hucre4 = document.createElement("td");
                var hucreText4 = document.createTextNode(sehirler().select("plakaKodu"));
                hucre4.appendChild(hucreText4);
                satır2.appendChild(hucre4);
    
                // tabloya oluşturulan satırları ekleme
                tblBody.appendChild(satır1);
                tblBody.appendChild(satır2);
    
                // <tbody>'yi <table>'ın içine koyma
                tbl.appendChild(tblBody);
                // <table>'ı <body>'ye ekleme
                body.appendChild(tbl);
                // çerçeve oluşturma
                tbl.setAttribute("border", "2");
            }
        </script>
    </head>
    <body style="width: 696px">
        <form id="form1" runat="server">
        <input type="button" value="Tablo Oluştur" onclick="tablo_olustur()">
        </form>
    </body>
    </html>
    
      Örneğimizde HTML içeriğinde, tablo oluşturma işlemi için bir buton ve JavaScript içeriğinde de bu işlemi gerçekleştirip, oluşturduğumuz "sehirler" veri tabanının verilerini bu tablonun hücrelerine yerleştiren "tablo_oluştur" fonksiyonunu oluşturduk. JavaScript içeriğinde aynı zamanda, öğrendiğimiz şekliyle "TAFFY()" fonksiyonuyla bir veri tabanı oluşturduk; "insert()" fonksiyonuyla veri tabanına bir veri ekledik; "select()" fonksiyonuyla da ilgili sütunun değerlerini hücrelere yazdırmak için seçtik. Şimdi bu örneğimizin, tablo oluştur butonuna bastıktan sonraki çıktısını görelim:
    Örneğimizde şimdi daha önce öğrendiğimiz şekliyle, aşağıdaki "update()" yani düzenleme fonksiyonunu, <script> etiketi içerisine ekleyip bir kaydın içeriğini değiştirelim:
    sehirler({ sehirIsmi: "İstanbul" }).update({ sehirIsmi: "İzmir" ,plakaKodu: "35"});
    
      Örneğimizin bu kodla düzenleme yaptıktan sonraki çıktısını görelim:
      Benzer şekilde aşağıdaki kod ile "remove()" yani silme fonksiyonunun işleyişini görelim: 
    sehirler({ sehirIsmi: "Zonguldak" }).remove();
    
      Bu kodu ekledikten sonra tablomuzun son hali:
      Son olarak da "first()" ve "last()" fonksiyonlarının kullanımını,aşağıdaki kodu ekleyerek, veri tabanımız üzerinde bir JavaScript mesaj kutusu içinde görelim: 
    alert("son kayıt: " + sehirler().last().sehirIsmi + "  ilk kayıt: " + sehirler().first().sehirIsmi);
    
    Örneğimizin son hali üzerinde bu kodun çalışmasını görelim:
      
    Taffy DB kütüphanesinin kullanımı ve işlevleri bu şekildedir. Anlaşılacağı üzere kütüphanenin veri tabanı işlemlerinde kullanımı oldukça kolay ve veri tabanı ile ilgili pek çok ihtiyacı karşılayacak düzeydedir. Benzer şekilde, öğrendiğimiz diğer fonksiyonları da kullanarak istediğimiz çeşitlilikte veri tabanı işlemleri yapabiliriz.

    Kaynaklar:
    http://www.taffydb.com/
    https://github.com/typicaljoe/taffydb
    http://www.taffydb.com/workingwithdata
    http://ajaxian.com/archives/taffy-db-javascript-database