From 6833a3169775d4c15dd5e68c96bc63ad0187035e Mon Sep 17 00:00:00 2001 From: Jyoti Deka Date: Sat, 19 Oct 2013 00:56:20 -0400 Subject: Slider: Don't allow a slider's value to exceed its max Fixes #9376 Closes gh-1016 --- tests/unit/slider/slider_options.js | 22 +++++++++++++++++++--- ui/slider.js | 10 +++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/tests/unit/slider/slider_options.js b/tests/unit/slider/slider_options.js index 587f847cf..defb6f3b0 100644 --- a/tests/unit/slider/slider_options.js +++ b/tests/unit/slider/slider_options.js @@ -40,7 +40,7 @@ test( "disabled", function(){ }); test( "max", function() { - expect( 2 ); + expect( 4 ); element = $( "
" ); options = { @@ -52,8 +52,24 @@ test( "max", function() { }; element.slider( options ); - ok(element.slider( "option", "value" ) === options.value, "value option is not contained by max" ); - ok(element.slider( "value" ) === options.max, "value method is contained by max" ); + ok( element.slider( "option", "value" ) === options.value, "value option is not contained by max" ); + ok( element.slider( "value" ) === options.max, "value method is contained by max" ); + + options = { + max: 9, + min: 1, + orientation: "horizontal", + step: 3, + value: 8.75 + }; + + element.slider( options ); + ok( element.slider( "value" ) === 7, "value method is within max, edge Case" ); + + options.step = 2; + + element.slider( options ); + ok( element.slider( "value" ) === options.max, "value method will max, step is changed" ); element.slider( "destroy" ); }); diff --git a/ui/slider.js b/ui/slider.js index 74cbcc759..6d97f3c69 100644 --- a/ui/slider.js +++ b/ui/slider.js @@ -58,6 +58,7 @@ return $.widget( "ui.slider", $.ui.mouse, { this._handleIndex = null; this._detectOrientation(); this._mouseInit(); + this._calculateNewMax(); this.element .addClass( "ui-slider" + @@ -472,9 +473,11 @@ return $.widget( "ui.slider", $.ui.mouse, { } this._animateOff = false; break; + case "step": case "min": case "max": this._animateOff = true; + this._calculateNewMax(); this._refreshValue(); this._animateOff = false; break; @@ -543,12 +546,17 @@ return $.widget( "ui.slider", $.ui.mouse, { return parseFloat( alignValue.toFixed(5) ); }, + _calculateNewMax: function() { + var remainder = ( this.options.max - this._valueMin() ) % this.options.step; + this.max = this.options.max - remainder; + }, + _valueMin: function() { return this.options.min; }, _valueMax: function() { - return this.options.max; + return this.max; }, _refreshValue: function() { -- cgit v1.2.3