Skip to content

Commit 5fda4f6

Browse files
committed
Update data naming for Widget, including backwards compability. Updated tests and added one for the custom expression. Partial fix for #7810
1 parent 45ca20f commit 5fda4f6

File tree

2 files changed

+39
-17
lines changed

2 files changed

+39
-17
lines changed

tests/unit/widget/widget_core.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,36 @@ test( "element normalization", function() {
3232
// workaround for core ticket #8381
3333
this.element.appendTo( "#qunit-fixture" );
3434
ok( this.element.is( "div" ), "generated div" );
35-
deepEqual( this.element.data( "testWidget" ), this, "intance stored in .data()" );
35+
deepEqual( this.element.data( "ui-testWidget" ), this, "instance stored in .data()" );
3636
};
3737
$.ui.testWidget();
3838

3939
$.ui.testWidget.prototype.defaultElement = "<span data-test='pass'></span>";
4040
$.ui.testWidget.prototype._create = function() {
4141
ok( this.element.is( "span[data-test=pass]" ), "generated span with properties" );
42-
deepEqual( this.element.data( "testWidget" ), this, "instace stored in .data()" );
42+
deepEqual( this.element.data( "ui-testWidget" ), this, "instace stored in .data()" );
4343
};
4444
$.ui.testWidget();
4545

4646
elem = $( "<input>" );
4747
$.ui.testWidget.prototype._create = function() {
4848
deepEqual( this.element[ 0 ], elem[ 0 ], "from element" );
49-
deepEqual( elem.data( "testWidget" ), this, "instace stored in .data()" );
49+
deepEqual( elem.data( "ui-testWidget" ), this, "instace stored in .data()" );
5050
};
5151
$.ui.testWidget( {}, elem[ 0 ] );
5252

5353
elem = $( "<div>" );
5454
$.ui.testWidget.prototype._create = function() {
5555
deepEqual( this.element[ 0 ], elem[ 0 ], "from jQuery object" );
56-
deepEqual( elem.data( "testWidget" ), this, "instace stored in .data()" );
56+
deepEqual( elem.data( "ui-testWidget" ), this, "instace stored in .data()" );
5757
};
5858
$.ui.testWidget( {}, elem );
5959

6060
elem = $( "<div id='element-normalization-selector'></div>" )
6161
.appendTo( "#qunit-fixture" );
6262
$.ui.testWidget.prototype._create = function() {
6363
deepEqual( this.element[ 0 ], elem[ 0 ], "from selector" );
64-
deepEqual( elem.data( "testWidget" ), this, "instace stored in .data()" );
64+
deepEqual( elem.data( "ui-testWidget" ), this, "instace stored in .data()" );
6565
};
6666
$.ui.testWidget( {}, "#element-normalization-selector" );
6767

@@ -73,8 +73,16 @@ test( "element normalization", function() {
7373
$.ui.testWidget();
7474
});
7575

76+
test( "custom selector expression", function() {
77+
var elem = $( "<div>" ).appendTo( "#qunit-fixture" );
78+
$.widget( "ui.testWidget", {} );
79+
elem.testWidget();
80+
deepEqual( $( ":ui-testWidget" )[0], elem[0] );
81+
elem.testWidget( "destroy" );
82+
});
83+
7684
test( "jQuery usage", function() {
77-
expect( 13 );
85+
expect( 15 );
7886

7987
var shouldCreate = false;
8088

@@ -112,12 +120,18 @@ test( "jQuery usage", function() {
112120
.testWidget();
113121
shouldCreate = false;
114122

115-
var instance = elem.data( "testWidget" );
123+
var instance = elem.data( "ui-testWidget" );
116124
equal( typeof instance, "object", "instance stored in .data(pluginName)" );
117125
equal( instance.element[0], elem[0], "element stored on widget" );
118126
var ret = elem.testWidget( "methodWithParams", "value1", "value2" );
119127
equal( ret, elem, "jQuery object returned from method call" );
120128

129+
// 1.9 BC for #7810
130+
// TODO remove
131+
var bcInstance = elem.data("testWidget");
132+
equal( typeof bcInstance, "object", "instance stored in .data(pluginName)" );
133+
equal( bcInstance.element[0], elem[0], "element stored on widget" );
134+
121135
ret = elem.testWidget( "getterSetterMethod" );
122136
equal( ret, 5, "getter/setter can act as getter" );
123137
ret = elem.testWidget( "getterSetterMethod", 30 );
@@ -160,7 +174,7 @@ test( "direct usage", function() {
160174
var instance = new $.ui.testWidget( {}, elem );
161175
shouldCreate = false;
162176

163-
equal( $( elem ).data( "testWidget" ), instance,
177+
equal( $( elem ).data( "ui-testWidget" ), instance,
164178
"instance stored in .data(pluginName)" );
165179
equal( instance.element[ 0 ], elem, "element stored on widget" );
166180

@@ -374,7 +388,7 @@ test( "._super()", function() {
374388
}
375389
});
376390

377-
instance = $( "<div>" ).testWidget3().data( "testWidget3" );
391+
instance = $( "<div>" ).testWidget3().data( "ui-testWidget3" );
378392
instance.method( 5 );
379393
delete $.ui.testWidget3;
380394
delete $.ui.testWidget2;
@@ -411,7 +425,7 @@ test( "._superApply()", function() {
411425
}
412426
});
413427

414-
instance = $( "<div>" ).testWidget3().data( "testWidget3" );
428+
instance = $( "<div>" ).testWidget3().data( "ui-testWidget3" );
415429
instance.method( 5, 10 );
416430
delete $.ui.testWidget3;
417431
delete $.ui.testWidget2;
@@ -521,7 +535,7 @@ test( ".option() - deep option setter", function() {
521535
$.widget( "ui.testWidget", {} );
522536
var div = $( "<div>" ).testWidget();
523537
function deepOption( from, to, msg ) {
524-
div.data( "testWidget" ).options.foo = from;
538+
div.data( "ui-testWidget" ).options.foo = from;
525539
$.ui.testWidget.prototype._setOption = function( key, value ) {
526540
deepEqual( key, "foo", msg + ": key" );
527541
deepEqual( value, to, msg + ": value" );
@@ -804,7 +818,7 @@ test( "._trigger() - no event, no ui", function() {
804818
deepEqual( ui, {}, "empty ui hash passed" );
805819
handlers.push( this );
806820
});
807-
deepEqual( $( "#widget" ).data( "testWidget" )._trigger( "foo" ), true,
821+
deepEqual( $( "#widget" ).data( "ui-testWidget" )._trigger( "foo" ), true,
808822
"_trigger returns true when event is not cancelled" );
809823
deepEqual( handlers, [
810824
$( "#widget" )[ 0 ],
@@ -832,7 +846,7 @@ test( "._trigger() - cancelled event", function() {
832846
ok( true, "event was triggered" );
833847
return false;
834848
});
835-
deepEqual( $( "#widget" ).data( "testWidget" )._trigger( "foo" ), false,
849+
deepEqual( $( "#widget" ).data( "ui-testWidget" )._trigger( "foo" ), false,
836850
"_trigger returns false when event is cancelled" );
837851
});
838852

@@ -846,7 +860,7 @@ test( "._trigger() - cancelled callback", function() {
846860
return false;
847861
}
848862
});
849-
deepEqual( $( "#widget" ).data( "testWidget" )._trigger( "foo" ), false,
863+
deepEqual( $( "#widget" ).data( "ui-testWidget" )._trigger( "foo" ), false,
850864
"_trigger returns false when callback returns false" );
851865
});
852866

ui/jquery.ui.widget.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ $.widget = function( name, base, prototype ) {
3636

3737
// create selector for plugin
3838
$.expr[ ":" ][ fullName ] = function( elem ) {
39-
return !!$.data( elem, name );
39+
return !!$.data( elem, fullName );
4040
};
4141

4242
$[ namespace ] = $[ namespace ] || {};
@@ -148,6 +148,7 @@ $.widget.extend = function( target ) {
148148
};
149149

150150
$.widget.bridge = function( name, object ) {
151+
var fullName = object.prototype.widgetBaseClass;
151152
$.fn[ name ] = function( options ) {
152153
var isMethodCall = typeof options === "string",
153154
args = slice.call( arguments, 1 ),
@@ -160,7 +161,9 @@ $.widget.bridge = function( name, object ) {
160161

161162
if ( isMethodCall ) {
162163
this.each(function() {
163-
var instance = $.data( this, name );
164+
// 1.9 BC for #7810
165+
// TODO remove fallback to name
166+
var instance = $.data( this, fullName ) || $.data( this, name );
164167
if ( !instance ) {
165168
return $.error( "cannot call methods on " + name + " prior to initialization; " +
166169
"attempted to call method '" + options + "'" );
@@ -178,7 +181,9 @@ $.widget.bridge = function( name, object ) {
178181
});
179182
} else {
180183
this.each(function() {
181-
var instance = $.data( this, name );
184+
// 1.9 BC for #7810
185+
// TODO remove fallback to name
186+
var instance = $.data( this, fullName ) || $.data( this, name );
182187
if ( instance ) {
183188
instance.option( options || {} )._init();
184189
} else {
@@ -217,7 +222,10 @@ $.Widget.prototype = {
217222
this.focusable = $();
218223

219224
if ( element !== this ) {
225+
// 1.9 BC for #7810
226+
// TODO remove dual storage
220227
$.data( element, this.widgetName, this );
228+
$.data( element, this.widgetBaseClass, this );
221229
this._bind({ remove: "destroy" });
222230
this.document = $( element.style ?
223231
// element within the document

0 commit comments

Comments
 (0)