Ticket #4388: ui.slider.4388.diff

File ui.slider.4388.diff, 2.5 KB (added by vitch, 13 years ago)

Patch including fix for #4388

  • ui.slider.js

     
    3434
    3535                if (o.range) {
    3636
     37                        this.range = $('<div></div>');
    3738                        if (o.range === true) {
    38                                 this.range = $('<div></div>');
    3939                                if (!o.values) o.values = [this._valueMin(), this._valueMin()];
    40                                 if (o.values.length && o.values.length != 2) {
     40                                if (o.values.length && o.values.length < 2) {
    4141                                        o.values = [o.values[0], o.values[0]];
    4242                                }
    43                         } else {
    44                                 this.range = $('<div></div>');
    4543                        }
    4644
    4745                        this.range
     
    473471        _refreshValue: function(animate) {
    474472
    475473                var oRange = this.options.range, o = this.options, self = this;
     474                var numOptions = this.options.values ? this.options.values.length : 0;
    476475
    477                 if (this.options.values && this.options.values.length) {
    478                         var vp0, vp1;
     476                if (numOptions) {
     477                        var min = this._valueMin();
     478                        var diff = this._valueMax() - this._valueMin();
     479                        if (oRange === true) {
     480                                var firstHandlePercent = (this.values(0) - min) / diff * 100;
     481                                var rangePercent = (this.values(numOptions-1) - min) / diff * 100 - firstHandlePercent;
     482                                if (self.orientation == 'horizontal') {
     483                                        self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: firstHandlePercent + '%', width: rangePercent + '%' }, o.animate);
     484                                } else {
     485                                        self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: firstHandlePercent + '%', height: rangePercent + '%' }, o.animate);
     486                                }
     487                        }
    479488                        this.handles.each(function(i, j) {
    480                                 var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 100;
     489                                var valPercent = (self.values(i) - min) / diff * 100;
    481490                                var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
    482491                                $(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
    483                                 if (self.options.range === true) {
    484                                         if (self.orientation == 'horizontal') {
    485                                                 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: valPercent + '%' }, o.animate);
    486                                                 (i == 1) && self.range[animate ? 'animate' : 'css']({ width: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
    487                                         } else {
    488                                                 (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: (valPercent) + '%' }, o.animate);
    489                                                 (i == 1) && self.range[animate ? 'animate' : 'css']({ height: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate });
    490                                         }
    491                                 }
    492                                 lastValPercent = valPercent;
    493492                        });
    494493                } else {
    495494                        var value = this.value(),