Вход Регистрация
Файл: public_html/js/jquery.slider.js
Строк: 641
<?php
/**
 * jquery.slider - Slider ui control in jQuery
 * 
 * Written by
 * Egor Khmelev (hmelyoff@gmail.com)
 *
 * Licensed under the MIT (MIT-LICENSE.txt).
 *
 * @author Egor Khmelev
 * @version 1.1.0-RELEASE ($Id$)
 * 
 * Dependencies
 * 
 * jQuery (http://jquery.com)
 * jquery.numberformatter (http://code.google.com/p/jquery-numberformatter/)
 * tmpl (http://ejohn.org/blog/javascript-micro-templating/)
 * jquery.dependClass
 * draggable
 * 
 **/

(function( $ ) {
  
  function 
isArrayvalue ){
    if( 
typeof value == "undefined" ) return false;
    
    if (
value instanceof Array || (!(value instanceof Object) &&
         (
Object.prototype.toString.call((value)) == '[object Array]') ||
         
typeof value.length == 'number' &&
         
typeof value.splice != 'undefined' &&
         
typeof value.propertyIsEnumerable != 'undefined' &&
         !
value.propertyIsEnumerable('splice')
        )) {
      return 
true;
    }
    
    return 
false;
  }

    $.
slider = function( nodesettings ){
      var 
jNode = $(node);
      if( !
jNode.data"jslider" ) )
        
jNode.data"jslider", new jSlidernodesettings ) );
      
      return 
jNode.data"jslider" );
    };
    
    $.fn.
slider = function( actionopt_value ){
      var 
returnValueargs arguments;
      
      function 
isDefval ){
        return 
val !== undefined;
      };

      function 
isDefAndNotNullval ){
      return 
val != null;
      };
      
        
this.each(function(){
          var 
self = $.sliderthisaction );
          
          
// do actions
          
if( typeof action == "string" ){
            switch( 
action ){
              case 
"value":
                if( 
isDefargs] ) && isDefargs] ) ){
                  var 
pointers self.getPointers();
                  if( 
isDefAndNotNullpointers[0] ) && isDefAndNotNullargs[1] ) ){
                    
pointers[0].setargs] );
                    
pointers[0].setIndexOver();
                  }
                  
                  if( 
isDefAndNotNullpointers[1] ) && isDefAndNotNullargs[2] ) ){
                    
pointers[1].setargs] );
                    
pointers[1].setIndexOver();
                  }
                }
                
                else if( 
isDefargs] ) ){
                  var 
pointers self.getPointers();
                  if( 
isDefAndNotNullpointers[0] ) && isDefAndNotNullargs[1] ) ){
                    
pointers[0].setargs] );
                    
pointers[0].setIndexOver();
                  }
                }
                
                else
                  
returnValue self.getValue();

                break;

              case 
"prc":
                if( 
isDefargs] ) && isDefargs] ) ){
                  var 
pointers self.getPointers();
                  if( 
isDefAndNotNullpointers[0] ) && isDefAndNotNullargs[1] ) ){
                    
pointers[0]._setargs] );
                    
pointers[0].setIndexOver();
                  }

                  if( 
isDefAndNotNullpointers[1] ) && isDefAndNotNullargs[2] ) ){
                    
pointers[1]._setargs] );
                    
pointers[1].setIndexOver();
                  }
                }

                else if( 
isDefargs] ) ){
                  var 
pointers self.getPointers();
                  if( 
isDefAndNotNullpointers[0] ) && isDefAndNotNullargs[1] ) ){
                    
pointers[0]._setargs] );
                    
pointers[0].setIndexOver();
                  }
                }

                else
                  
returnValue self.getPrcValue();

                break;

              case 
"calculatedValue":
                var 
value self.getValue().split(";");
                
returnValue "";
                for (var 
i=0value.lengthi++) {
                  
returnValue += (";" "") + self.nicevalue[i] );
                };
                
                break;
                
              case 
"skin":
                
self.setSkinargs[1] );

                break;
            };
          
          }
          
          
// return actual object
          
else if( !action && !opt_value ){
            if( !
isArrayreturnValue ) )
              
returnValue = [];

            
returnValue.pushself );
          }
        });
        
        
// flatten array just with one slider
        
if( isArrayreturnValue ) && returnValue.length == )
          
returnValue returnValue];
        
        return 
returnValue || this;
    };
  
  var 
OPTIONS = {

    
settings: {
      
from1,
      
to10,
      
step1,
      
smoothtrue,
      
limitstrue,
      
round0,
      
format: { format"#,##0.##" },
      
value"5;7",
      
dimension""
    
},
    
    
className"jslider",
    
selector".jslider-",

    
templatetmpl(
      
'<span class="<%=className%>">' +
        
'<table><tr><td>' +
          
'<div class="<%=className%>-bg">' +
            
'<i class="l"></i><i class="f"></i><i class="r"></i>' +
            
'<i class="v"></i>' +
          
'</div>' +

          
'<div class="<%=className%>-pointer"></div>' +
          
'<div class="<%=className%>-pointer <%=className%>-pointer-to"></div>' +
        
          
'<div class="<%=className%>-label"><span><%=settings.from%></span></div>' +
          
'<div class="<%=className%>-label <%=className%>-label-to"><span><%=settings.to%></span><%=settings.dimension%></div>' +

          
'<div class="<%=className%>-value"><span></span><%=settings.dimension%></div>' +
          
'<div class="<%=className%>-value <%=className%>-value-to"><span></span><%=settings.dimension%></div>' +
          
          
'<div class="<%=className%>-scale"><%=scale%></div>'+

        
'</td></tr></table>' +
      
'</span>'
    
)
    
  };

  function 
jSlider(){
      return 
this.init.applythisarguments );
  };

  
jSlider.prototype.init = function( nodesettings ){
    
this.settings = $.extend(true, {}, OPTIONS.settingssettings settings : {});
    
    
// obj.sliderHandler = this;
    
this.inputNode = $( node ).hide();
                            
        
this.settings.interval this.settings.to-this.settings.from;
        
this.settings.value this.inputNode.attr("value");
        
        if( 
this.settings.calculate && $.isFunctionthis.settings.calculate ) )
          
this.nice this.settings.calculate;

        if( 
this.settings.onstatechange && $.isFunctionthis.settings.onstatechange ) )
          
this.onstatechange this.settings.onstatechange;

    
this.is = {
      
initfalse
    
};
        
this.= {};

    
this.create();
  };
  
  
jSlider.prototype.onstatechange = function(){
    
  };
  
  
jSlider.prototype.create = function(){
    var 
$this this;
    
    
this.domNode = $( OPTIONS.template({
      
classNameOPTIONS.className,
      
settings: {
        
fromthis.nicethis.settings.from ),
        
tothis.nicethis.settings.to ),
        
dimensionthis.settings.dimension
      
},
      
scalethis.generateScale()
    }) );
    
    
this.inputNode.afterthis.domNode );
    
this.drawScale();
    
    
// set skin class
    
if( this.settings.skin && this.settings.skin.length )
      
this.setSkinthis.settings.skin );

        
this.sizes = {
          
domWidththis.domNode.width(),
          
domOffsetthis.domNode.offset()
        };

    
// find some objects
    
$.extend(this.o, {
      
pointers: {},
      
labels: {
        
0: {
          
othis.domNode.find(OPTIONS.selector "value").not(OPTIONS.selector "value-to")
        },
        
1: {
          
othis.domNode.find(OPTIONS.selector "value").filter(OPTIONS.selector "value-to")
        }
      },
      
limits: {
        
0this.domNode.find(OPTIONS.selector "label").not(OPTIONS.selector "label-to"),
        
1this.domNode.find(OPTIONS.selector "label").filter(OPTIONS.selector "label-to")
      }
    });

    $.
extend(this.o.labels[0], {
      
valuethis.o.labels[0].o.find("span")
    });

    $.
extend(this.o.labels[1], {
      
valuethis.o.labels[1].o.find("span")
    });

    
    if( !
$this.settings.value.split(";")[1] ){
      
this.settings.single true;
      
this.domNode.addDependClass("single");
    }

    if( !
$this.settings.limits )
      
this.domNode.addDependClass("limitless");

    
this.domNode.find(OPTIONS.selector "pointer").each(function( ){
      var 
value $this.settings.value.split(";")[i];
      if( 
value ){
        
$this.o.pointers[i] = new jSliderPointerthisi$this );

        var 
prev $this.settings.value.split(";")[i-1];
        if( 
prev && new Number(value) < new Number(prev) ) value prev;

        
value value $this.settings.from $this.settings.from value;
        
value value $this.settings.to $this.settings.to value;
      
        
$this.o.pointers[i].setvaluetrue );
      }
    });
    
    
this.o.value this.domNode.find(".v");
    
this.is.init true;
    
    $.
each(this.o.pointers, function(i){
      
$this.redraw(this);
    });
    
    (function(
self){
      $(
window).resize(function(){
        
self.onresize();
      });
    })(
this);

  };
  
  
jSlider.prototype.setSkin = function( skin ){
    if( 
this.skin_ )
      
this.domNode.removeDependClassthis.skin_"_" );

    
this.domNode.addDependClassthis.skin_ skin"_" );
  };
  
  
jSlider.prototype.setPointersIndex = function( ){
    $.
each(this.getPointers(), function(i){
      
this.index);
    });
  };
  
  
jSlider.prototype.getPointers = function(){
    return 
this.o.pointers;
  };
  
  
jSlider.prototype.generateScale = function(){
    if( 
this.settings.scale && this.settings.scale.length ){
      var 
str "";
      var 
this.settings.scale;
      var 
prc Math.round((100/(s.length-1))*10)/10;
      for( var 
i=0s.lengthi++ ){
        
str += '<span style="left: ' i*prc '%">' + ( s[i] != '|' '<ins>' s[i] + '</ins>' '' ) + '</span>';
      };
      return 
str;
    } else return 
"";

    return 
"";
  };
  
  
jSlider.prototype.drawScale = function(){
    
this.domNode.find(OPTIONS.selector "scale span ins").each(function(){
      $(
this).css({ marginLeft: -$(this).outerWidth()/});
    });
  };
  
  
jSlider.prototype.onresize = function(){
    var 
self this;
        
this.sizes = {
          
domWidththis.domNode.width(),
          
domOffsetthis.domNode.offset()
        };

    $.
each(this.o.pointers, function(i){
      
self.redraw(this);
    });
  };
  
  
jSlider.prototype.update = function(){
    
this.onresize();
    
this.drawScale();
  };
  
  
jSlider.prototype.limits = function( xpointer ){
      
// smooth
      
if( !this.settings.smooth ){
        var 
step this.settings.step*100 / ( this.settings.interval );
        
Math.roundx/step ) * step;
      }
      
      var 
another this.o.pointers[1-pointer.uid];
      if( 
another && pointer.uid && another.value.prc another.value.prc;
      if( 
another && !pointer.uid && another.value.prc another.value.prc;

    
// base limit
      
if( 0;
      if( 
100 100;
      
    return 
Math.roundx*10 ) / 10;
  };
  
  
jSlider.prototype.redraw = function( pointer ){
    if( !
this.is.init ) return false;
    
    
this.setValue();
    
    
// redraw range line
    
if( this.o.pointers[0] && this.o.pointers[1] )
      
this.o.value.css({ leftthis.o.pointers[0].value.prc "%"width: ( this.o.pointers[1].value.prc this.o.pointers[0].value.prc ) + "%" });

    
this.o.labels[pointer.uid].value.html(
      
this.nice(
        
pointer.value.origin
      
)
    );
    
    
// redraw position of labels
    
this.redrawLabelspointer );
  };
  
  
jSlider.prototype.redrawLabels = function( pointer ){

    function 
setPositionlabelsizesprc ){
        
sizes.margin = -sizes.label/2;

      
// left limit
      
label_left sizes.border sizes.margin;
      if( 
label_left )
        
sizes.margin -= label_left;

      
// right limit
      
if( sizes.border+sizes.label self.sizes.domWidth ){
        
sizes.margin 0;
        
sizes.right true;
      } else
        
sizes.right false;
        
      
label.o.css({ leftprc "%"marginLeftsizes.marginright"auto" });
      if( 
sizes.right label.o.css({ left"auto"right});
      return 
sizes;
    }

    var 
self this;
      var 
label this.o.labels[pointer.uid];
      var 
prc pointer.value.prc;

      var 
sizes = {
        
labellabel.o.outerWidth(),
        
rightfalse,
        
border: ( prc this.sizes.domWidth ) / 100
      
};

    if( !
this.settings.single ){
      
// glue if near;
      
var another this.o.pointers[1-pointer.uid];
        var 
another_label this.o.labels[another.uid];

      switch( 
pointer.uid ){
        case 
0:
          if( 
sizes.border+sizes.label another_label.o.offset().left-this.sizes.domOffset.left ){
            
another_label.o.css({ visibility"hidden" });
              
another_label.value.htmlthis.niceanother.value.origin ) );

              
label.o.css({ visibility"visible" });

              
prc = ( another.value.prc prc ) / prc;
              if( 
another.value.prc != pointer.value.prc ){
                
label.value.htmlthis.nice(pointer.value.origin) + "&nbsp;&ndash;&nbsp;" this.nice(another.value.origin) );
                
sizes.label label.o.outerWidth();
                
sizes.border = ( prc this.sizes.domWidth ) / 100;
            }
          } else {
              
another_label.o.css({ visibility"visible" });
          }
          break;

        case 
1:
          if( 
sizes.border sizes.label another_label.o.offset().left this.sizes.domOffset.left another_label.o.outerWidth() ){
            
another_label.o.css({ visibility"hidden" });
              
another_label.value.htmlthis.nice(another.value.origin) );

              
label.o.css({ visibility"visible" });

              
prc = ( prc another.value.prc ) / another.value.prc;
              if( 
another.value.prc != pointer.value.prc ){
                
label.value.htmlthis.nice(another.value.origin) + "&nbsp;&ndash;&nbsp;" this.nice(pointer.value.origin) );
                
sizes.label label.o.outerWidth();
                
sizes.border = ( prc this.sizes.domWidth ) / 100;
            }
          } else {
            
another_label.o.css({ visibility"visible" });
          }
          break;
      }
    }

    
sizes setPositionlabelsizesprc );
    
    
/* draw second label */
    
if( another_label ){
      var 
sizes = {
          
labelanother_label.o.outerWidth(),
          
rightfalse,
          
border: ( another.value.prc this.sizes.domWidth ) / 100
        
};
      
sizes setPositionanother_labelsizesanother.value.prc );
    }
      
    
this.redrawLimits();
  };
  
  
jSlider.prototype.redrawLimits = function(){
      if( 
this.settings.limits ){

      var 
limits = [ truetrue ];

      for( 
key in this.o.pointers ){

        if( !
this.settings.single || key == ){
        
            var 
pointer this.o.pointers[key];
          var 
label this.o.labels[pointer.uid];
          var 
label_left label.o.offset().left this.sizes.domOffset.left;

            var 
limit this.o.limits[0];
          if( 
label_left limit.outerWidth() )
            
limits[0] = false;

            var 
limit this.o.limits[1];
            if( 
label_left label.o.outerWidth() > this.sizes.domWidth limit.outerWidth() )
              
limits[1] = false;
          }

      };

      for( var 
i=0limits.lengthi++ ){
        if( 
limits[i] )
          
this.o.limits[i].fadeIn("fast");
        else
          
this.o.limits[i].fadeOut("fast");
      };

      }
  };
  
  
jSlider.prototype.setValue = function(){
    var 
value this.getValue();
    
this.inputNode.attr"value"value );
    
this.onstatechange.callthisvalue );
  };

  
jSlider.prototype.getValue = function(){
    if(!
this.is.init) return false;
    var 
$this this;
    
    var 
value "";
    $.
eachthis.o.pointers, function(i){
      if( 
this.value.prc != undefined && !isNaN(this.value.prc) ) value += (";" "") + $this.prcToValuethis.value.prc );
    });
    return 
value;
  };

  
jSlider.prototype.getPrcValue = function(){
    if(!
this.is.init) return false;
    var 
$this this;
    
    var 
value "";
    $.
eachthis.o.pointers, function(i){
      if( 
this.value.prc != undefined && !isNaN(this.value.prc) ) value += (";" "") + this.value.prc;
    });
    return 
value;
  };
  
  
jSlider.prototype.prcToValue = function( prc ){

      if( 
this.settings.heterogeneity && this.settings.heterogeneity.length ){
        var 
this.settings.heterogeneity;

        var 
_start 0;
        var 
_from this.settings.from;

        for( var 
i=0<= h.lengthi++ ){
          if( 
h[i] ) var h[i].split("/");
          else       var 
= [100this.settings.to];
          
          
v[0] = new Number(v[0]);
          
v[1] = new Number(v[1]);
            
          if( 
prc >= _start && prc <= v[0] ) {
            var 
value _from + ( (prc-_start) * (v[1]-_from) ) / (v[0]-_start);
          }

          
_start v[0];
          
_from v[1];
        };

      } else {
      var 
value this.settings.from + ( prc this.settings.interval ) / 100;
      }

    return 
this.roundvalue );
  };
  
    
jSlider.prototype.valueToPrc = function( valuepointer ){        
      if( 
this.settings.heterogeneity && this.settings.heterogeneity.length ){
        var 
this.settings.heterogeneity;

        var 
_start 0;
        var 
_from this.settings.from;

        for (var 
i=0<= h.lengthi++) {
          if(
h[i]) var h[i].split("/");
          else     var 
= [100this.settings.to];
          
v[0] = new Number(v[0]); v[1] = new Number(v[1]);
            
          if(
value >= _from && value <= v[1]){
            var 
prc pointer.limits(_start + (value-_from)*(v[0]-_start)/(v[1]-_from));
          }

          
_start v[0]; _from v[1];
        };

      } else {
        var 
prc pointer.limits((value-this.settings.from)*100/this.settings.interval);
      }

      return 
prc;
    };
  
    
jSlider.prototype.round = function( value ){
    
value Math.roundvalue this.settings.step ) * this.settings.step;
        if( 
this.settings.round value Math.roundvalue Math.pow(10this.settings.round) ) / Math.pow(10this.settings.round);
        else 
value Math.roundvalue );
        return 
value;
    };
    
    
jSlider.prototype.nice = function( value ){
        
value value.toString().replace(/,/gi".").replace(/ /gi"");;

        if( $.
formatNumber ){
          return $.
formatNumber( new Number(value), this.settings.format || {} ).replace( /-/gi"&minus;" );
        }
          
        else {
          return new 
Number(value);
        }
    };

  
  function 
jSliderPointer(){
      
Draggable.applythisarguments );
  }
  
jSliderPointer.prototype = new Draggable();
  
  
jSliderPointer.prototype.oninit = function( ptrid_constructor ){
    
this.uid id;
    
this.parent _constructor;
    
this.value = {};
    
this.settings this.parent.settings;
  };
  
  
jSliderPointer.prototype.onmousedown = function(evt){
      
this._parent = {
        
offsetthis.parent.domNode.offset(),
        
widththis.parent.domNode.width()
      };
      
this.ptr.addDependClass("hover");
      
this.setIndexOver();
    };

    
jSliderPointer.prototype.onmousemove = function( evt){
      var 
coords this._getPageCoordsevt );
      
this._setthis.calccoords.) );
      
hide();
    };
    
    
jSliderPointer.prototype.onmouseup = function( evt ){
      if( 
this.parent.settings.callback && $.isFunction(this.parent.settings.callback) )
        
this.parent.settings.callback.callthis.parentthis.parent.getValue() );
        
      
this.ptr.removeDependClass("hover");
    };
    
    
jSliderPointer.prototype.setIndexOver = function(){
      
this.parent.setPointersIndex);
      
this.index);
    };
    
    
jSliderPointer.prototype.index = function( ){
      
this.ptr.css({ zIndex});
    };
    
    
jSliderPointer.prototype.limits = function( ){
      return 
this.parent.limitsxthis );
    };
    
    
jSliderPointer.prototype.calc = function(coords){
      var 
this.limits(((coords-this._parent.offset.left)*100)/this._parent.width);
      return 
x;
    };

    
jSliderPointer.prototype.set = function( valueopt_origin ){
      
this.value.origin this.parent.round(value);
      
this._setthis.parent.valueToPrcvaluethis ), opt_origin );
    };
    
    
jSliderPointer.prototype._set = function( prcopt_origin ){
      if( !
opt_origin )
        
this.value.origin this.parent.prcToValue(prc);

      
this.value.prc prc;
        
this.ptr.css({ leftprc "%" });
      
this.parent.redraw(this);
    };
  
})(
jQuery);
?>
Онлайн: 2
Реклама