Skip to content

Commit 7216c08

Browse files
committed
Spinner: Added ability to specify custom incremental function.
1 parent 4387d19 commit 7216c08

File tree

2 files changed

+74
-41
lines changed

2 files changed

+74
-41
lines changed

tests/unit/spinner/spinner_options.js

Lines changed: 65 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,71 @@
22

33
module( "spinner: options" );
44

5+
test( "incremental, false", function() {
6+
expect( 100 );
7+
8+
var i, diff,
9+
prev = 0,
10+
element = $( "#spin" ).val( prev ).spinner({
11+
incremental: false,
12+
spin: function( event, ui ) {
13+
equal( ui.value - prev, 1 );
14+
prev = ui.value;
15+
}
16+
});
17+
18+
for ( i = 0; i < 100; i++ ) {
19+
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
20+
}
21+
});
22+
23+
test( "incremental, true", function() {
24+
expect( 100 );
25+
26+
function fill( num, val ) {
27+
return $.map( new Array( num ), function() {
28+
return val;
29+
});
30+
}
31+
32+
var i, diff,
33+
prev = 0,
34+
expected = [].concat( fill( 18, 1 ), fill( 37, 2 ), fill( 14, 3 ),
35+
fill( 9, 4 ), fill( 6, 5 ), fill( 5, 6 ), fill ( 5, 7 ),
36+
fill( 4, 8 ), fill( 2, 9 ) ),
37+
element = $( "#spin" ).val( prev ).spinner({
38+
incremental: true,
39+
spin: function( event, ui ) {
40+
equal( ui.value - prev, expected[ i ] );
41+
prev = ui.value;
42+
}
43+
});
44+
45+
for ( i = 0; i < 100; i++ ) {
46+
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
47+
}
48+
});
49+
50+
test( "incremental, function", function() {
51+
expect( 100 );
52+
53+
var i,
54+
prev = 0,
55+
element = $( "#spin" ).val( prev ).spinner({
56+
incremental: function( i ) {
57+
return i;
58+
},
59+
spin: function( event, ui ) {
60+
equal( ui.value - prev, i + 1 );
61+
prev = ui.value;
62+
}
63+
});
64+
65+
for ( i = 0; i < 100; i++ ) {
66+
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
67+
}
68+
});
69+
570
test( "numberFormat, number", function() {
671
expect( 2 );
772
var element = $( "#spin" ).val( 0 ).spinner({ numberFormat: "n" });
@@ -26,44 +91,6 @@ test( "numberFormat, currency", function() {
2691
equal( element.val(), "$1.00", "formatted after step" );
2792
});
2893

29-
/* TODO figure out how to test this properly
30-
test("incremental - false (default)", function() {
31-
var el = $("#spin").spinner({ incremental:false });
32-
33-
for ( var i = 1 ; i<=120 ; i++ ) {
34-
el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
35-
}
36-
el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
37-
38-
equals(el.val(), 120, "incremental false - keydown 120 times");
39-
40-
for ( var i = 1 ; i<=210 ; i++ ) {
41-
el.simulate("keydown",{keyCode:$.ui.keyCode.DOWN});
42-
}
43-
el.simulate("keyup",{keyCode:$.ui.keyCode.DOWN});
44-
45-
equals(el.val(), -90, "incremental false - keydown 210 times");
46-
});
47-
48-
test("incremental - true (default)", function() {
49-
var el = $("#spin").spinner();
50-
51-
for ( var i = 1 ; i<=120 ; i++ ) {
52-
el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
53-
}
54-
el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
55-
56-
equals(el.val(), 300, "incremental true - keydown 120 times (100+20*10)");
57-
58-
for ( var i = 1 ; i<=210 ; i++ ) {
59-
el.simulate("keydown",{keyCode:$.ui.keyCode.DOWN});
60-
}
61-
el.simulate("keyup",{keyCode:$.ui.keyCode.DOWN});
62-
63-
equals(el.val(), -1800, "incremental true - keydown 210 times (300-100-100*10-10*100)");
64-
});
65-
*/
66-
6794
test( "max", function() {
6895
expect( 3 );
6996
var element = $( "#spin" ).val( 1000 ).spinner({ max: 100 });

ui/jquery.ui.spinner.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,15 @@ $.widget( "ui.spinner", {
233233
},
234234

235235
_increment: function( i ) {
236-
return this.options.incremental ?
237-
Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 ) :
238-
1;
236+
var incremental = this.options.incremental;
237+
238+
if ( incremental ) {
239+
return $.isFunction( incremental ) ?
240+
incremental( i ) :
241+
Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
242+
}
243+
244+
return 1;
239245
},
240246

241247
_precision: function( num ) {

0 commit comments

Comments
 (0)