Ticket #3467: slider.patch

File slider.patch, 5.3 KB (added by ahuseynov, 10 years ago)

fixed slider patch

  • ui.slider.js

    # This patch file was generated by NetBeans IDE
    # Following Index: paths are relative to: C:\Users\Anar Huseynov\Projects\projectone\app\webroot\js\jqueryui
    # This patch can be applied using context Tools: Patch action on respective folder.
    # It uses platform neutral UTF-8 encoding and \n newlines.
    # Above lines and this line are ignored by the patching process.
     
    192192                this.elementOffset = this.element.offset();
    193193
    194194                var position = { x: event.pageX, y: event.pageY };
    195                 var normValue = this._normValueFromMouse(position);
     195        var percentValue = this._percentValueFromMouse(position) * 100;
    196196
    197                 var distance = this._valueMax() - this._valueMin() + 1, closestHandle;
     197                var distance = 101, closestHandle;
    198198                var self = this, index;
     199        var direction = 'left';
     200        if ('vertical' == this.orientation) {
     201            direction = 'top';
     202        }
    199203                this.handles.each(function(i) {
    200                         var thisDistance = Math.abs(normValue - self.values(i));
     204                        var thisDistance = Math.abs(percentValue - parseFloat($(this).css(direction)));
    201205                        if (distance > thisDistance) {
    202206                                distance = thisDistance;
    203207                                closestHandle = $(this);
     
    205209                        }
    206210                });
    207211
    208                 // workaround for bug #3736 (if both handles of a range are at 0,
    209                 // the first is always used as the one with least distance,
    210                 // and moving it is obviously prevented by preventing negative ranges)
    211                 if(o.range == true && this.values(1) == o.min) {
    212                         closestHandle = $(this.handles[++index]);
    213                 }
    214 
    215212                this._start(event, index);
    216213
    217214                self._handleIndex = index;
     
    231228                                + (parseInt(closestHandle.css('marginTop'),10) || 0)
    232229                };
    233230
    234                 normValue = this._normValueFromMouse(position);
    235                 this._slide(event, index, normValue);
     231        this._slide(event, index, this._normValueFromMouse(position, index));
    236232                return true;
    237 
    238233        },
    239234
    240235        _mouseStart: function(event) {
     
    244239        _mouseDrag: function(event) {
    245240
    246241                var position = { x: event.pageX, y: event.pageY };
    247                 var normValue = this._normValueFromMouse(position);
     242                var normValue = this._normValueFromMouse(position, this._handleIndex);
    248243
    249244                this._slide(event, this._handleIndex, normValue);
    250245
     
    268263                this.orientation = this.options.orientation == 'vertical' ? 'vertical' : 'horizontal';
    269264        },
    270265
    271         _normValueFromMouse: function(position) {
     266        _normValueFromMouse: function(position, index) {
    272267
     268                var percentMouse = this._percentValueFromMouse(position);
     269        if (this.options.values && this.options.values.length) {
     270            var size = this.elementSize.width;
     271            var handle_size = $(this.handles[index]).width();
     272            var actual_size = size - handle_size;
     273            var down_ratio = actual_size / size;
     274            if (index == 0) {
     275                percentMouse = percentMouse / down_ratio;
     276            } else if (index == 1) {
     277                percentMouse = (percentMouse - handle_size / size) / down_ratio;
     278            }
     279        }
     280                var valueTotal = this._valueMax() - this._valueMin(),
     281                        valueMouse = percentMouse * valueTotal,
     282                        valueMouseModStep = valueMouse % this.options.step,
     283                        normValue = this._valueMin() + valueMouse - valueMouseModStep;
     284
     285                if (valueMouseModStep > (this.options.step / 2))
     286                        normValue += this.options.step;
     287
     288                // Since JavaScript has problems with large floats, round
     289                // the final value to 5 digits after the decimal point (see #4124)
     290                return parseFloat(normValue.toFixed(5));
     291
     292        },
     293
     294    _percentValueFromMouse: function(position) {
     295
    273296                var pixelTotal, pixelMouse;
    274297                if ('horizontal' == this.orientation) {
    275298                        pixelTotal = this.elementSize.width;
     
    285308                if ('vertical' == this.orientation)
    286309                        percentMouse = 1 - percentMouse;
    287310
    288                 var valueTotal = this._valueMax() - this._valueMin(),
    289                         valueMouse = percentMouse * valueTotal,
    290                         valueMouseModStep = valueMouse % this.options.step,
    291                         normValue = this._valueMin() + valueMouse - valueMouseModStep;
    292 
    293                 if (valueMouseModStep > (this.options.step / 2))
    294                         normValue += this.options.step;
    295 
    296                 // Since JavaScript has problems with large floats, round
    297                 // the final value to 5 digits after the decimal point (see #4124)
    298                 return parseFloat(normValue.toFixed(5));
    299 
     311                return parseFloat(percentMouse.toFixed(5));
    300312        },
    301313
    302314        _start: function(event, index) {
     
    477489                if (this.options.values && this.options.values.length) {
    478490                        var vp0, vp1;
    479491                        this.handles.each(function(i, j) {
     492                var size = $(self.element).width();
     493                var handle_size = $(this).width();
    480494                                var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 100;
     495                var actual_size = size - handle_size;
     496                var down_ratio = actual_size / size;
     497                if (i == 0) {
     498                    valPercent *= down_ratio;
     499                } else if (i == 1) {
     500                    valPercent = valPercent * down_ratio + handle_size / size * 100;
     501                }
    481502                                var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%';
    482503                                $(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate);
    483504                                if (self.options.range === true) {