diff --git a/tests/unit/spinner/common-deprecated.js b/tests/unit/spinner/common-deprecated.js
new file mode 100644
index 00000000000..2c40df76abb
--- /dev/null
+++ b/tests/unit/spinner/common-deprecated.js
@@ -0,0 +1,35 @@
+define( [
+ "lib/common",
+ "ui/spinner"
+], function( common ) {
+
+common.testWidget( "spinner", {
+ defaults: {
+ classes: {
+ "ui-spinner": "ui-corner-all",
+ "ui-spinner-up": "ui-corner-tr",
+ "ui-spinner-down": "ui-corner-br"
+ },
+ culture: null,
+ disabled: false,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ // callbacks
+ change: null,
+ create: null,
+ spin: null,
+ start: null,
+ stop: null
+ }
+});
+
+} );
diff --git a/tests/unit/spinner/deprecated.html b/tests/unit/spinner/deprecated.html
new file mode 100644
index 00000000000..a6c249a17f7
--- /dev/null
+++ b/tests/unit/spinner/deprecated.html
@@ -0,0 +1,21 @@
+
+
+
+
+ jQuery UI Spinner Test Suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/unit/spinner/deprecated.js b/tests/unit/spinner/deprecated.js
new file mode 100644
index 00000000000..c45a053fd0e
--- /dev/null
+++ b/tests/unit/spinner/deprecated.js
@@ -0,0 +1,41 @@
+define( [
+ "jquery",
+ "ui/spinner"
+], function( $ ) {
+
+var originalSpinner = $.ui.spinner.prototype;
+module( "spinner: deprecated", {
+ setup: function() {
+ $.widget( "ui.spinner", $.ui.spinner, {
+ _uiSpinnerHtml: function() {
+ return "";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "" +
+ "▲" +
+ "" +
+ "" +
+ "▼" +
+ "";
+ }
+ } );
+ },
+
+ teardown: function() {
+ $.ui.spinner.prototype = originalSpinner;
+ }
+} );
+
+test( "markup structure - custom", function( assert ) {
+ expect( 2 );
+ var element = $( "#spin" ).spinner(),
+ spinner = element.spinner( "widget" ),
+ up = spinner.find( ".ui-spinner-up" );
+
+ assert.hasClasses( spinner, "ui-spinner ui-widget ui-widget-content spin-wrap", "_uiSpinnerHtml() overides default markup" );
+ assert.hasClasses( up, "ui-spinner-button ui-spinner-up ui-widget spin-up", "_ButtonHtml() overides default markup" );
+} );
+
+} );
diff --git a/ui/spinner.js b/ui/spinner.js
index 236a66afae6..c56d2c918bf 100644
--- a/ui/spinner.js
+++ b/ui/spinner.js
@@ -44,7 +44,7 @@ function spinner_modifier( fn ) {
};
}
-return $.widget( "ui.spinner", {
+$.widget( "ui.spinner", {
version: "@VERSION",
defaultElement: "",
widgetEventPrefix: "spin",
@@ -214,13 +214,26 @@ return $.widget( "ui.spinner", {
"mouseleave .ui-spinner-button": "_stop"
},
- _draw: function() {
- var uiSpinner = this.uiSpinner = this.element
+ // Support mobile enhanced option and make backcompat more sane
+ _enhance: function() {
+ this.uiSpinner = this.element
.attr( "autocomplete", "off" )
- .wrap( this._uiSpinnerHtml() )
+ .wrap( "" )
.parent()
- // add buttons
- .append( this._buttonHtml() );
+
+ // Add buttons
+ .append(
+ "" +
+ "▲" +
+ "" +
+ "" +
+ "▼" +
+ ""
+ );
+ },
+
+ _draw: function() {
+ this._enhance();
this._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" );
this._addClass( "ui-spinner-input" );
@@ -228,7 +241,7 @@ return $.widget( "ui.spinner", {
this.element.attr( "role", "spinbutton" );
// button bindings
- this.buttons = uiSpinner.children( "a" )
+ this.buttons = this.uiSpinner.children( "a" )
.attr( "tabIndex", -1 )
.button();
@@ -244,9 +257,9 @@ return $.widget( "ui.spinner", {
// IE 6 doesn't understand height: 50% for the buttons
// unless the wrapper has an explicit height
- if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
- uiSpinner.height() > 0 ) {
- uiSpinner.height( uiSpinner.height() );
+ if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&
+ this.uiSpinner.height() > 0 ) {
+ this.uiSpinner.height( this.uiSpinner.height() );
}
// disable spinner if element was already disabled
@@ -277,20 +290,6 @@ return $.widget( "ui.spinner", {
return false;
},
- _uiSpinnerHtml: function() {
- return "";
- },
-
- _buttonHtml: function() {
- return "" +
- "" +
- "▲" +
- "" +
- "" +
- "▼" +
- "";
- },
-
_start: function( event ) {
if ( !this.spinning && this._trigger( "start", event ) === false ) {
return false;
@@ -533,4 +532,37 @@ return $.widget( "ui.spinner", {
}
} );
+// DEPRECATED
+// TODO: switch return back to widget declaration at top of file when this is removed
+if ( $.uiBackCompat !== false ) {
+
+ // Backcompat for spinner html extension points
+ $.widget( "ui.spinner", $.ui.spinner, {
+ _enhance: function() {
+ this.uiSpinner = this.element
+ .attr( "autocomplete", "off" )
+ .wrap( this._uiSpinnerHtml() )
+ .parent()
+
+ // Add buttons
+ .append( this._buttonHtml() );
+ },
+ _uiSpinnerHtml: function() {
+ return "";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "" +
+ "▲" +
+ "" +
+ "" +
+ "▼" +
+ "";
+ }
+ } );
+}
+
+return $.ui.spinner;
+
} ) );