topical media & game development

talk show tell print

lib-jquery-plugin-charts-include-js-lib-ycodaslider-2.0.rc2-ycodaslider-2.0.js / js



  /*
   * 
   * YCodaSlider plugin 2.0
   * Date: 2008-05-24 10:07:47 +0200 (sab, 24 mag 2008) 
   * Rev: 121 
   * @requires jQuery v1.2.3
   * @optional Easing v1.3
   * @optional History/Remote v0.2.3
   * @optional Dimensions 1.2
   * @optional UI core (rev.5607) + draggable (rev.5618)
   * 
   * Copyright (c) 2008 Massimiliano Balestrieri
   * Examples and docs at: http://maxb.net/blog/
   * Licensed GPL licenses:
   * http://www.gnu.org/licenses/gpl.html
   *
   * Based on Gian Carlo Mingati's slideViewer
   * http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html
   * Based on Niall Doherty's coda-slider
   * http://www.ndoherty.com/coda-slider  
   * Inspired by the clever folks at http://www.panic.com/coda
   */
  
  if(!window.YCodaSlider)
      var YCodaSlider = {};
  
  YCodaSlider.Base = {
      cnt       : 0,
      css       : function(url)
      {
          //solo alla prima istanza
          if(YCodaSlider.Base.cnt == 0)
             jQuery('head').append('<link type="text/css" href="'+url+'" rel="stylesheet" />'); 
      },
      build     : function(options)
      {
          
          options = jQuery.extend({
               height   :   false,
               shortcut :  [190,188],
               id       :   false,
               scroll   :   false,
               history  :   false,
               draggable:   false,
               sidebars :   true
                }, options);
          return this.each(
              function(nr)
              {
                  //contatore statico di istanze
                  YCodaSlider.Base.cnt++;
  
                  this.ycodaslider = {};
                  this.ycodaslider.options = options || {};
                      
                  YCodaSlider.Base.gui(this, options);         
                  YCodaSlider.Base.init(this);
                  YCodaSlider.Base.count(this);
                  YCodaSlider.Base.start(this);
                  YCodaSlider.Base.nav(this);
                  YCodaSlider.Base.bindings(this);
                  YCodaSlider.Base.defaults(this);     
              }
          );
          
      },
      gui     :   function(el, options){
          el.id = el.ycodaslider.options.id || el.id || 'yslider-' + YCodaSlider.Base.cnt;//id
          var html = '<div class="yslider-wrap"><div class="yslider-viewer"><div class="yslider-container">';
          var jPanels = jQuery(".yslider-panelwrapper", el);
          jQuery(el).empty();
          jQuery(el)
          .append(html);
          jQuery('.yslider-container', el).append(jPanels);
          jPanels.wrap('<div class="yslider-panel">');
          
          if(!el.ycodaslider.options.sidebars)
              jQuery(".yslider-wrap", el).width(jQuery(".yslider-wrap", el).width() - 100);
      },
      count   :   function(el){
          var jContainer = jQuery("div.yslider-container",el);
          el.ycodaslider.pw = el.ycodaslider.options.width || jContainer.find("div.yslider-panel").width();
          el.ycodaslider.pc = jContainer.find("div.yslider-panel").size();//panel
          el.ycodaslider.vw = el.ycodaslider.pw * el.ycodaslider.pc;//viewer
          el.ycodaslider.nw = el.ycodaslider.pw;//el.ycodaslider.pc * 2 ?
          jContainer.css("width" , el.ycodaslider.vw);
      },
      init    :   function(el){
          if(el.ycodaslider.options.width){
              jQuery(el).css("width", el.ycodaslider.options.width + 100);
              jQuery('.yslider-panel,.yslider-viewer', el).css("width", el.ycodaslider.options.width);
          }
          if(el.ycodaslider.options.height)
              jQuery('.yslider-viewer', el).css("height", el.ycodaslider.options.height);
          if(el.ycodaslider.options.scroll)    
              jQuery('.yslider-viewer', el).css({"overflow-y":"auto"});
          if(el.ycodaslider.options.draggable){    
              jQuery('.yslider-container', el).draggable({axis : "x"}).hover(
                  function(){
                      jQuery(this).css("cursor","move");
                  },
                  function(){
                      jQuery(this).css("cursor","");
                  }
              );            
          }
      },
      start  :   function(el){
          // Specify the current panel.
          // If the loaded URL has a hash (cross-linking), we're going to use that hash to give the slider 
          // a specific starting position...
          if (YCodaSlider.Base.current(el)) {
              el.ycodaslider.current   = parseInt(location.hash.slice(1)) || 1;
              el.ycodaslider.cnt = - (el.ycodaslider.pw*(el.ycodaslider.current - 1));
              jQuery(el).find("div.yslider-container").css({ "left": el.ycodaslider.cnt });
          // Otherwise, we'll just set the current panel to 1...
          } else { 
              el.ycodaslider.current = 1;
          };
      },
      nav    :   function(el){
          var jViewer = jQuery("div.yslider-viewer",el);
          if(el.ycodaslider.options.sidebars){
              jViewer.before('<div class="yslider-navl"><a href="#">Left</a></div>');
              jViewer.after('<div class="yslider-navr"><a href="#">Right</a></div>');
          }
          jViewer.before('<div class="yslider-nav"><ul><\/ul></div>');
          
          var jNav = jQuery("div.yslider-nav ul",el);
          jQuery("div.yslider-panel",el)
          .each(function(n) {
              var lp = jQuery("div.yslider-panelwrapper",this).attr("title") || (n+1);
              if(el.ycodaslider.options.history){
                  jQuery('<li><a href="#' + (n + 1) + '">' + lp + '</a></li>')
                  .appendTo(jNav); 
              }else{
                  jQuery('<li><a href="#">' + lp + '</a></li>')
                  .appendTo(jNav)
                  .click(function(){
                     return false;    
                  });
              }
          });
          
          if(el.ycodaslider.options.width){
              jNav.parent().css("width" , el.ycodaslider.options.width);
          }else{
              jNav.parent().css("width" , el.ycodaslider.nw);
          } 
      },
      bindings : function(el){
                  
          // Tab nav
          jQuery("div.yslider-nav a",el).each(function(z) {
              jQuery(this).bind("click", function() {
                  jQuery(this)
                  .addClass("current").parent().parent().find("a").not(jQuery(this))
                  .removeClass("current"); // wow!
                  //:) yes wow
                  var cnt = - ( el.ycodaslider.pw * z);
                  el.ycodaslider.current = z + 1;
                  
                  if(el.lazy)
                     YCodaSlider.Lazy.lazyload(el, (el.ycodaslider.current - 1), el.ycodaslider.pc);
                  
                  
                  jQuery("div.yslider-container",el)
                  .animate({ left: cnt } ,el.ycodaslider.options.easeTime,el.ycodaslider.options.easeFunc);
              });
          });
          // Left nav
          if(el.ycodaslider.options.sidebars)
          jQuery("div.yslider-navl a",el).click(function(){
              if (el.ycodaslider.current == 1) {
                  var cnt = - (el.ycodaslider.pw * (el.ycodaslider.pc - 1));
                  el.ycodaslider.current = el.ycodaslider.pc;
                  jQuery(this).parent().parent().find("div.yslider-nav a.current")
                  .removeClass("current").parent().parent().find("li:last a")
                  .addClass("current");
              } else {
                  el.ycodaslider.current -= 1;
                  var cnt = - (el.ycodaslider.pw * (el.ycodaslider.current - 1));
                  jQuery(this).parent().parent().find("div.yslider-nav a.current")
                  .removeClass("current").parent().prev().find("a")
                  .addClass("current");
              };
              if(el.lazy)
                  YCodaSlider.Lazy.lazyload(el, (el.ycodaslider.current - 1), el.ycodaslider.pc);
                  
              
              jQuery(this).parent().parent().find("div.yslider-container")
              .animate({ left: cnt } ,el.ycodaslider.options.easeTime,el.ycodaslider.options.easeFunc);
                      
              // Change the URL hash (cross-linking)...
              if(el.ycodaslider.options.history)
                  location.hash = el.ycodaslider.current;
              return false;
          });
          
          // Right nav
          if(el.ycodaslider.options.sidebars)
          jQuery("div.yslider-navr a",el).click(function(){
              if (el.ycodaslider.current == el.ycodaslider.pc) {
                  var cnt = 0;
                  el.ycodaslider.current = 1;
                  jQuery(this).parent().parent().find("div.yslider-nav a.current")
                  .removeClass("current").parent().parent().find("a:eq(0)")
                  .addClass("current");
              } else {
                  var cnt = - (el.ycodaslider.pw * el.ycodaslider.current);
                  el.ycodaslider.current += 1;
                  jQuery(this).parent().parent().find("div.yslider-nav a.current")
                  .removeClass("current").parent().next().find("a")
                  .addClass("current");
              };
              
              if(el.lazy)
                  YCodaSlider.Lazy.lazyload(el, (el.ycodaslider.current - 1), el.ycodaslider.pc);
              
              jQuery(this).parent().parent().find("div.yslider-container")
              .animate({ left: cnt } ,el.ycodaslider.options.easeTime,el.ycodaslider.options.easeFunc);
                      
              // Change the URL hash (cross-linking)...
              if(el.ycodaslider.options.history)
                  location.hash = el.ycodaslider.current;
              return false;
          });
          //keycode
          var sc = el.ycodaslider.options.shortcut;
          if(sc && sc[0] && sc[1]){
              jQuery(document).keydown(function(e){
                  if (e == null) { // ie
                      keycode = event.keyCode;
                  } else { // mozilla
                      keycode = e.which;
                  }
                  //settabili - se non รจ nascosto muovi
                  if(!(jQuery(el).css("display") === "none")){
                      if(keycode == sc[0]){ // display previous image
                         jQuery("div.yslider-navl a",el).trigger("click", el);
                      } else if(keycode == sc[1]){ // display next image
                         jQuery("div.yslider-navr a",el).trigger("click", el);
                      }  
                  }
              });
          }
                
      },
      defaults    :   function(el){
          // Specify which tab is initially set to "current". 
          // Depends on if the loaded URL had a hash or not (cross-linking).
          if (YCodaSlider.Base.current(el)) {
              jQuery("div.yslider-nav a:eq(" + (location.hash.slice(1) - 1) + ")",el)
              .addClass("current");
          } else {
              //if(YCodaSlider.Base.init_current(el))//ok inizializzo 1. ma se non ho un'altra location
                 //location.hash = 1;
                 
              jQuery("div.yslider-nav a:eq(0)",el).addClass("current");
          }
      
      },
      current     :   function(el){
          return el.ycodaslider.options.history && 
                 location.hash && 
                 parseInt(location.hash.slice(1)) <= el.ycodaslider.pc;   
      }
  };  
  jQuery.fn.ycodaslider = YCodaSlider.Base.build;


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.