29 Aralık 2013 Pazar

Knockout.js Kütüphanesi
     
        Herkese Merhabalar.

     Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere knockout.js isimli JavaScript kütüphanesinden bahsetmek istiyorum. Bind mekanizması sayesinde otomatik güncelleme yapmamızı sağlayan bu kütüphane, özellikle büyük ve kompleks olan projelerde JavaScript ve HTML kodlarının iç içe geçmesi ile programcının yaşadığı zorluklardan dolayı meydana gelen zaman kaybını önlemekte bize oldukça yardımcı olan bir kütüphanedir. Modelleme mantığıyla tasarım iç içe kullanılmış olduğu için programcının her ikisine de iyi derecede hakim olması zor olabilir. Böyle karışıklıkların yaşanacağı durumlarda knockout.js yardımımıza koşacak. Nasıl olacak dediğinizi duyar gibiyim. Şöyle ki; knockout.js kütüphanesi zengin ve etkileşimli kullanıcı arayüzleri oluşturma imkanı sağlar. Dinamik olarak değişen arayüz elemanları var ise kullanım ve geliştirme kolaylığı ile öne çıkmaktadır. MVVM (Model View ViewModel) dizayn modelini kullanarak geliştirme yapılır. Modeldeki değerler, kullanıcı hareketlerine göre güncellenir. Bu kütüphanenin en etkileyici özelliği veri bağlama yapısıdır. Kütüphaneyi kullanmadan önce, bu siteden indirebilirsiniz.
Bu kütüphane 3 temel özellik üzerine kurulmuştur;

  • Şablon kullanımı
  • Veri bağlama
  • Observable(gözlenebilirlik) ve bağımlılık izlemesi

MVVM(Model View ViewModel):

Bu kütüphanede MVVM dizayn modelini kullanarak geliştirme yapacaksak bu modelin ne olduğunu anlamamız gerekir, haydi neymiş bu  MVVM bir bakalım...  Model, View ve ViewModel adında 3 yapıdan oluşmaktadır. Amaçları arasında arayüz yapan kişinin arka tarafta nasıl bir iş geliştirildiğini bilmeden işini yapabiliyor olması, daha çabuk genişlemeye müsait bir yapının ortaya çıkarılması sayılabilir. Model, verileri temsil etmektedir. View kullanıcıya sunulan görüntü, ViewModel ise asıl işin geliştirildiği yapıdır. View'ın Model'i bilmesine gerek yoktur. ViewModel aracılık yapmaktadır.


Aşağıda sizler için ASP.NET ortamında yapmış olduğum örneği bir inceleyelim. Öncelikle kütüphanemizi Solution Explorer'a ekliyoruz.

 

Aşağıdaki kod parçacığında  "viewModel1" isimli View Modelimizi oluşturduk. Modeldeki fonksiyon ve diğer ögelerin observable(gözlenebilir) olarak oluşturulmasının nedeni dinamik olarak değiştirilebilme özelliğinin eklenebilmesidir. Ayrıca, modelde belirlemiş olduğumuz fonksiyon, listeye hayvan isimlerini eklememizi sağlayan fonksiyondur.


 var viewModel1 = {  
   kedi: ko.observable(),  
   array: ko.observableArray(),  
   hayvanEkle: function () {  
     this.array.push(this.kedi());  
   }  
 };  



Aşağıdaki kod parçacığı Knockout'u aktifleştirmemizi sağlar. Peki Knockout modeldeki fonksiyonu nasıl algılıyor? O da elbette Knockout'un applyBindings metoduna viewModel1'i göndermemiz ile gerçekleşiyor.



  ko.applyBindings(viewModel1);  

Aşağıdaki kod parçacığı, kullanıcı arayüzünde görülen View'umuzdur. Textbox'a girilen değerlerin listeye eklendiği kısımdır.

  <ul data-bind="foreach:array">  
           <li data-bind="text: $data"></li>  
         </ul>  

Aşağıdaki kod parçacığında, textbox içerisine yazılan değerlerin ViewModel içerisinde tanımlanmış kedi ögesinin yerini alması ile güncellenme sağlanır.

 <h1 data-bind="text:kedi">Kedi</h1>  
         <input type="text" data-bind="value:kedi,valueUpdate:'afterkeydown'" />  


Proje Kodları:


 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
 <!DOCTYPE html>  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <title>KNOCKOUTJS ÖRNEK</title>  
 </head>  
 <body>  
   <h1 style="background-color:azure">KNOCKOUT JAVASCRIPT KÜTÜPHANESİ ÖRNEĞİ :)</h1>  
   <table>  
     <tr>  
       <td style="border: dashed">  
         <h1 data-bind="text:kedi">Kedi</h1>  
         <input type="text" data-bind="value:kedi,valueUpdate:'afterkeydown'" />  
         <input type="submit" data-bind="click: hayvanEkle" />  
         <ul data-bind="foreach:array">  
           <li data-bind="text: $data"></li>  
         </ul>  
       </td>  
     </tr>  
   </table>  
   <script src="knockout-3.0.0.js"></script>  
   <script>var viewModel1 = {  
   kedi: ko.observable(),  
   array: ko.observableArray(),  
   hayvanEkle: function () {  
     this.array.push(this.kedi());  
   }  
 };  
     viewModel1.array.push("kedi");  
     viewModel1.array.push("köpek");  
     viewModel1.array.push("tavşan");  
     ko.applyBindings(viewModel1);  
   </script>  
 </body>  
 </html>  



Yazıyı Yazarken Dinamik Olarak Alt Başlık Kısmında Görünürkenki Ekran Görüntüsü:



Gönder Butonuna Bastıktan Sonraki Ekran Görüntüsü:



    
Umarım anlaşılır ve yararlı bir örnek olmuştur. Bu haftalık anlatacaklarım bu kadar, bir sonraki     hafta typeface.js kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...

KAYNAKLAR

1. http://knockoutjs.com/documentation/observables.html

2. http://www.youtube.com/watch?v=JGwRIbWWqjE&desktop_uri=%2Fwatch%3Fv%3DJGwRIbWWqjE&app=desktop

3. http://www.ercanaydogan.com/post/2012/02/16/Knockoutjs-JavaScript-MVVM-I.aspx

4. http://www.nodejstr.com/2012/08/knockout-js-ve-nodejs-ile-kullanm.html

22 Aralık 2013 Pazar

Bootbox.js Kütüphanesi

      Herkese merhabalar.

   İki hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere bootbox.js isimli JavaScript kütüphanesinden bahsetmek istiyorum. Uygulaması oldukça kolay olan bu kütüphane sayesinde web sayfanızda Twitter Bootstrap modelini kullanarak ileti kutuları oluşturabilmeniz mümkün. Alarm, teyit ettirme gibi durumlarda ileti kutularımızdaki butonlar ve yazılar ile bize seçenekler sunulur. Kütüphaneyi bu siteden indirerek işe koyulmaya başlayabiliriz. Aşağıda sizlere bu kütüphanenin önemli metotlarından bahsetmek istiyorum.

Alarm Durumu

bootbox.alert(message,callback): Kullanıcıyı uyarma durumunda kullanılan metottur.

 bootbox.alert("Merhaba Arkadaşlar :)!", function() {  
  Example.show("Merhaba Arkadaşlar :)! geri bildirimi");  
 });  

Onaylama

bootbox.confirm(message,callback): Kullanıcıyı onaylatma durumunda kullanılan metottur.

 bootbox.confirm("Emin misiniz?", function(result) {  
  Example.show("Sonucu doğrula: "+result);  
 });   

 Harekete Geçirmek (Prompt)

bootbox.prompt(message,callback): Kullanıcıya herhangi bir sorunun cevabı sorulduğu durumda kullanılan metottur.

 bootbox.prompt("İsminiz nedir?", function(result) {          
  if (result === null) {                         
   Example.show("Prompt'a cevap verilmedi");                 
  } else {  
   Example.show("Merhaba <b>"+result+"</b>");               
  }  
 });  

Diyalog (Custom Dialog) Kullanımı

   Aşağıdaki örnekte, "title" kısmına belirlediğiniz konuşma konusunu yazabilirsiniz. Bootstrap modeline ait olan yeşil, kırmızı ve mavi renkteki üç buton bulunmaktadır. Bu butonlara tıkladığınızda Example.show ile  ileti kutusu içerisinde dilediğiniz yazıyı kullanıcıya gösterebilirsiniz.

 bootbox.dialog({  
  message: "Ben bir custom dialog'um",  
  title: "Custom title",  
  buttons: {  
   success: {  
    label: "Başarılı!",  
    className: "btn-success",  
    callback: function() {  
     Example.show("btn-success butonu!");  
    }  
   },  
   danger: {  
    label: "Danger!",  
    className: "btn-danger",  
    callback: function() {  
     Example.show("btn-danger butonu!");  
    }  
   },  
   main: {  
    label: "Tıklayınız!",  
    className: "btn-primary",  
    callback: function() {  
     Example.show("btn-primary butonu!");  
    }  
   }  
  }  
 });  

Şimdi ise sizler için ASP.NET ortamında yapmış olduğum örneğe bir bakalım. Solution Explorer' a kütüphanemizi ve bootstrap dosyalarımızı ekliyoruz.


Proje Kodları:

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
 <!DOCTYPE html>  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <meta charset="UTF-8">  
   <title>BootBox -ÖRNEK</title>  
   <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">  
 </head>  
 <body>  
   <div class="container">  
     <div class="row">  
       <div class="span12">  
         <h2>Bootbox.Js - ÖRNEK</h2>  
         <button class="btn1 btn btn-danger">Alert Box!</button>  
         <button class=" btn2 btn btn-success">Prompt Box!</button>  
          <button class=" btn3 btn btn-primary">Confirm Box!</button>  
       </div>  
     </div>  
   </div>  
   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>  
   <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>  
   <script src="bootbox.min.js"></script>  
   <script type="text/javascript">  
     $(document).ready(function () {  
       $('.btn2').on('click', function () {  
         bootbox.prompt("İsminiz nedir?", function (res) {  
           if (res == null) {  
             alert("Kullanıcı tarafından prompt reddedildi");  
           } else {  
             alert("Merhaba: " + res);  
           }  
         });  
       });  
     });  
     $(document).ready(function () {  
       $('.btn1').on('click', function () {  
         bootbox.alert("LÜTFEN İSMİNİZİ DİKKATLİ GİRİNİZ!!", function (res) {  
         });  
       });  
     });  
     $(document).ready(function () {  
       $('.btn3').on('click', function () {  
         bootbox.confirm("Emin misiniz?", function (res) {  
         });  
       });  
     });  
   </script>  
 </body>  
 </html>  

Ekran Görüntüsü:
Alert Box'a tıkladığınızdaki ekran görüntüsü:


Prompt Box'a tıkladığınızdaki ekran görüntüsü:



Confirm Box'a tıkladığınızdaki ekran görüntüsü:


Yukarıda üç temel metodu kullanarak bootbox.js kütüphanesinin nasıl basit bir şekilde kullanıldığını gördük. Umarım anlaşılır ve yararlı bir örnek olmuştur. Bu haftalık anlatacaklarım bu kadar, bir sonraki hafta knockout.js kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...

KAYNAKLAR

1http://the-phpjs-ldc.rgou.net/twitter-bootstrap-plugins/bootbox/3.0/

2. http://creativitytuts.org/twitter-bootstrap-tutorial-15-bootbox-js-alert-dialogs/

3. http://bootboxjs.com/

6 Aralık 2013 Cuma

Reflection.js Kütüphanesi

      Herkese merhabalar.

  Bir hafta aradan sonra sizlerle tekrardan beraberiz. Bu hafta sizlere oldukça küçük ve kullanımı basit olan reflection.js isimli JavaScript kütüphanesinden bahsetmek istiyorum. Uygulaması oldukça kolay olan bu kütüphane sayesinde web sayfanızda seçtiğiniz resimlerinize kütüphanenin isminden de anlaşıldığı üzere, yansıma ekleyebilirsiniz. Yansımaların boyutunu ve saydamlığını tercihinize göre değiştirebilmeniz mümkün. Diyelim ki; yansımanızın tüm resmin yarısı kadar olmasını ve yarı saydam bir şekilde olmasını istiyorsunuz, elbette ki reflection.js sayesinde bu mümkün. Yansıma ekleyebilmeniz için seçtiğiniz resmin "image" elementi olması gerekir. Default olarak, yansıma arka plan rengindedir. İsterseniz rengini de değiştirebilirsiniz. Şimdi ise bu kütüphanenin nasıl kullanıldığına bir bakalım.
KURULUMU
     Kütüphaneyi bu siteden indirebilirsiniz ama tercih elbette ki  de size ait. İndirme işlemi bittikten sonra kodumuza kütüphanemizi aşağıdaki gibi ekliyoruz.

<script type="text/javascript" src="reflection.js"></script>

KULLANIMI
   Resminize yansıma ekleyebilmeniz için "image" elementinize  class="reflect" şeklinde ekleme yapmalısınız.

YANSIMALARIN UYARLANMASI

 1. Yansıma Yüksekliğinin Değiştirilmesi

  CSS sınıfı listesine yüzde şeklinde olmak üzere, istediğiniz oranda yükseklik ayarlamasını rheight' in  yanına yazarak yapabilirsiniz. 

Örneğin  class="reflect rheight66"  şeklinde kullanabilirsiniz.

2.  Yansıma  Opaklığının Değiştirilmesi

    CSS sınıfı listesine yüzde şeklinde olmak üzere, istediğiniz oranda opaklık ayarlamasını ropacity' nin yanına yazarak yapabilirsiniz.

Örneğin resminize %50 opaklık eklemek istiyorsanız;

 class="reflect ropacity50"  şeklinde kullanabilirsiniz.

3.  Yansıma Yüksekliğinin ve Opaklığının  Aynı Kod İçerisinde Değiştirilmesi

      Ayrı ayrı yazmak yerine aşağıdaki gibi yansımanın yüksekliğini ve opaklığını birlikte değiştirebilirsiniz.

  class="reflect rheight66 ropacity40"

YANSIMA İÇİN KOMUTLAR
  • Reflection.remove(image): Resimden yansımayı kaldıran fonksiyondur.
  • Reflection.add(image, options): Resime yansıma ekler. Yansıma eklerken aşağıdaki gibi seçeneklerinizi belirtebilirsiniz.
  • Reflection.add(document.getElementId("img"),{ height: 2/4, opacity: 1/3}): Resime yansıma bu şekilde seçeneklerinizi belirtebilirsiniz. Bu seçeneklerin 0 ile 1 arasında olmasına dikkat ediniz.
  • Reflection.defaultHeight = height: Şeklinde default(varsayılan) yansıma yüksekliğini belirleyebiliriz.
  • Reflection.defaultOpacity= opacity: Şeklinde default(varsayılan) yansıma opaklığını belirleyebiliriz.
Şimdi ise ASP.NET ortamında sizler için yapmış olduğum örnekleri inceleyelim. Öncelikle Solution Explorer'a önceden indirmiş olduğumuz kütüphanemizi ekleyelim.


YANSIMA ARKA PLANININ RENKLENDİRİLMESİ

Proje Kodları:

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
 <!DOCTYPE html>  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <script type="text/javascript" src="reflection.js"></script>  
   <title>Reflection.js Örnek Kullanımı</title>  
   <style type="text/css">  
     body {  
       background-color: #E6E6E6;  
       font-family: Georgia;  
       line-height: 1.5;  
     }  
     h2 {  
       line-height: 1;  
       font-family: Arial, Helvetica, sans-serif;  
     }  
     img {  
       border: 0;  
     }  
   </style>  
 </head>  
 <body>  
   <h2>YANSIMA ARKA PLANININ RENKLENDİRİLMESİ</h2>  
   <div style="float: left; background-color: purple; padding: 10px;">  
     <img src="example.jpg" class="reflect" alt="" /></div>  
   <div style="float: left; background-color: orange; padding: 10px;">  
     <img src="example.jpg" class="reflect" alt="" /></div>  
   <div style="float: left; background-color: blue; padding: 10px;">  
     <img src="example.jpg" class="reflect" alt="" /></div>  
   <div style="float: left; background-color: pink; padding: 10px;">  
     <img src="example.jpg" class="reflect" alt="" /></div>  
 </body>  
 </html>  

Ekran Görüntüsü:


YANSIMA YÜKSEKLİKLERİNİN DEĞİŞTİRİLMESİ

Proje Kodları:
 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
 <!DOCTYPE html>  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <script type="text/javascript" src="reflection.js"></script>  
   <title>Reflection.js ÖRNEK</title>  
   <style type="text/css">  
     body {  
       background-color: #E6E6E6;  
       font-family: Georgia;  
       line-height: 1.5;  
     }  
    
     h2 {  
       line-height: 1;  
       font-family: Arial, Helvetica, sans-serif;  
     }  
     img {  
       border: 0;  
     }  
   </style>  
 </head>  
 <body>  
   <h2>YANSIMA YÜKSEKLİKLERİNİN DEĞİŞTİRİLMESİ</h2>  
   <div style="float: left; padding: 15px;">  
     <img src="example.jpg" class="reflect rheight20" alt="" />  
   </div>  
   <div style="float: left; padding: 15px;">  
     <img src="example.jpg" class="reflect rheight50" alt="" />  
   </div>  
   <div style="float: left; padding: 15px;">  
     <img src="example.jpg" class="reflect rheight70" alt="" />  
   </div>  
   <div style="float: left; padding: 15px;">  
     <img src="example.jpg" class="reflect rheight95" alt="" />  
   </div>  
   <p style="clear: left;"></p>  
 </body>  
 </html>  

Ekran Görüntüsü:



YANSIMA OPAKLIĞININ DEĞİŞTİRİLMESİ

Proje Kodları:


 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
 <!DOCTYPE html>  
 <html xmlns="http://www.w3.org/1999/xhtml">  
 <head runat="server">  
   <script type="text/javascript" src="reflection.js"></script>  
   <title>Reflection.js ÖRNEK</title>  
   <style type="text/css">  
     body {  
       background-color: #E6E6E6;  
       font-family: Georgia;  
       line-height: 1.5;  
     }  
     h2 {  
       line-height: 1;  
       font-family: Arial, Helvetica, sans-serif;  
     }  
     img {  
       border: 0;  
     }  
   </style>  
 </head>  
 <body>  
   <h2>YANSIMA OPAKLIĞININ DEĞİŞTİRİLMESİ</h2>  
   <p>Opaklık 20%'den başlayarak 80%'e kadar arttırıldı.</p>  
   <div style="float: left; padding: 10px;">  
     <img src="example.jpg" class="reflect ropacity20" alt="" /></div>  
   <div style="float: left; padding: 10px;">  
     <img src="example.jpg" class="reflect ropacity40" alt="" /></div>  
   <div style="float: left; padding: 10px;">  
     <img src="example.jpg" class="reflect ropacity60" alt="" /></div>  
   <div style="float: left; padding: 10px;">  
     <img src="example.jpg" class="reflect ropacity80" alt="" /></div>  
   <p style="clear: left;"></p>  
 </body>  
 </html>  


Ekran Görüntüsü:


Bu haftalık anlatacaklarım bu kadar, bir sonraki yazımda sizlere Bootbox.js kütüphanesinden bahsedeceğim. Şimdilik görüşmek üzere, hoşçakalın...

 KAYNAKLAR