integration/js/vendor/dragslider.js
author Anthony Ly <anthonyly.com@gmail.com>
Wed, 10 Oct 2012 15:16:59 +0200
changeset 5 16413123bc8c
permissions -rw-r--r--
ajout date picker / avancement
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     1
//this code solves this problem: http://stackoverflow.com/questions/5955343/
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     2
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     3
(function( $, undefined ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     4
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     5
$.widget("ui.dragslider", $.ui.slider, {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     6
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     7
    options: $.extend({},$.ui.slider.prototype.options,{rangeDrag:false}),
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     8
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     9
    _create: function() {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    10
      $.ui.slider.prototype._create.apply(this,arguments);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    11
      this._rangeCapture = false;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    12
    },
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    13
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    14
    _mouseCapture: function( event ) { 
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    15
      var o = this.options;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    16
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    17
      if ( o.disabled ) return false;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    18
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    19
      if(event.target == this.range.get(0) && o.rangeDrag == true && o.range == true) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    20
        this._rangeCapture = true;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    21
        this._rangeStart = null;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    22
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    23
      else {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    24
        this._rangeCapture = false;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    25
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    26
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    27
      $.ui.slider.prototype._mouseCapture.apply(this,arguments);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    28
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    29
      if(this._rangeCapture == true) {	
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    30
          this.handles.removeClass("ui-state-active").blur();	
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    31
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    32
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    33
      return true;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    34
    },
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    35
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    36
    _mouseStop: function( event ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    37
      this._rangeStart = null;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    38
      return $.ui.slider.prototype._mouseStop.apply(this,arguments);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    39
    },
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    40
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    41
    _slide: function( event, index, newVal ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    42
      if(!this._rangeCapture) { 
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    43
        return $.ui.slider.prototype._slide.apply(this,arguments);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    44
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    45
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    46
      if(this._rangeStart == null) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    47
        this._rangeStart = newVal;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    48
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    49
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    50
      var oldValLeft = this.options.values[0],
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    51
          oldValRight = this.options.values[1],
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    52
          slideDist = newVal - this._rangeStart,
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    53
          newValueLeft = oldValLeft + slideDist,
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    54
          newValueRight = oldValRight + slideDist,
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    55
          allowed;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    56
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    57
      if ( this.options.values && this.options.values.length ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    58
        if(newValueRight > this._valueMax() && slideDist > 0) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    59
          slideDist -= (newValueRight-this._valueMax());
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    60
          newValueLeft = oldValLeft + slideDist;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    61
          newValueRight = oldValRight + slideDist;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    62
        }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    63
        
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    64
        if(newValueLeft < this._valueMin()) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    65
          slideDist += (this._valueMin()-newValueLeft);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    66
          newValueLeft = oldValLeft + slideDist;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    67
          newValueRight = oldValRight + slideDist;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    68
        }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    69
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    70
        if ( slideDist != 0 ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    71
          newValues = this.values();
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    72
          newValues[ 0 ] = newValueLeft;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    73
          newValues[ 1 ] = newValueRight;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    74
          
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    75
          // A slide can be canceled by returning false from the slide callback
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    76
          allowed = this._trigger( "slide", event, {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    77
            handle: this.handles[ index ],
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    78
            value: slideDist,
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    79
            values: newValues
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    80
          } );
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    81
          
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    82
          if ( allowed !== false ) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    83
            this.values( 0, newValueLeft, true );
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    84
            this.values( 1, newValueRight, true );
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    85
          }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    86
          this._rangeStart = newVal;
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    87
        }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    88
      }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    89
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    90
      
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    91
     
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    92
    },
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    93
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    94
    
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    95
    /*
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    96
    //only for testing purpose
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    97
    value: function(input) {
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    98
        console.log("this is working!");
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    99
        $.ui.slider.prototype.value.apply(this,arguments);
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   100
    }
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   101
    */
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   102
});
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   103
16413123bc8c ajout date picker / avancement
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   104
})(jQuery);