Skip to content

Commit 8f098d8

Browse files
Avinash-Bhatscottgonzalez
authored andcommitted
Widget: Bridge falls back to name if there is no widgetFullName, and always stores instances in data. Fixed #8775 - Widget: Bridge fails if widgetFullName is not supplied.
(cherry picked from commit 75bd22e)
1 parent 78ad8e4 commit 8f098d8

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

tests/unit/widget/widget_core.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module( "widget factory", {
44
teardown: function() {
55
if ( $.ui ) {
66
delete $.ui.testWidget;
7+
delete $.fn.testWidget;
78
}
89
}
910
});
@@ -1305,4 +1306,56 @@ asyncTest( "_delay", function() {
13051306
$( "#widget" ).testWidget();
13061307
});
13071308

1309+
test( "$.widget.bridge()", function() {
1310+
expect( 9 );
1311+
1312+
var instance, ret,
1313+
elem = $( "<div>" );
1314+
1315+
function TestWidget( options, element ) {
1316+
deepEqual( options, { foo: "bar" }, "options passed" );
1317+
strictEqual( element, elem[ 0 ], "element passed" );
1318+
}
1319+
1320+
$.extend( TestWidget.prototype, {
1321+
method: function( param ) {
1322+
ok( true, "method called via .pluginName(methodName)" );
1323+
equal( param, "value1",
1324+
"parameter passed via .pluginName(methodName, param)" );
1325+
},
1326+
getter: function() {
1327+
return "qux";
1328+
}
1329+
});
1330+
1331+
$.widget.bridge( "testWidget", TestWidget );
1332+
1333+
ok( $.isFunction( $.fn.testWidget ), "jQuery plugin was created" );
1334+
1335+
strictEqual( elem.testWidget({ foo: "bar" }), elem, "plugin returns original jQuery object" );
1336+
instance = elem.data( "testWidget" );
1337+
equal( typeof instance, "object", "instance stored in .data(pluginName)" );
1338+
1339+
ret = elem.testWidget( "method", "value1" );
1340+
equal( ret, elem, "jQuery object returned from method call" );
1341+
1342+
ret = elem.testWidget( "getter" );
1343+
equal( ret, "qux", "getter returns value" );
1344+
});
1345+
1346+
test( "$.widget.bridge() - widgetFullName", function() {
1347+
expect( 1 );
1348+
1349+
var instance,
1350+
elem = $( "<div>" );
1351+
1352+
function TestWidget() {}
1353+
TestWidget.prototype.widgetFullName = "custom-widget";
1354+
$.widget.bridge( "testWidget", TestWidget );
1355+
1356+
elem.testWidget();
1357+
instance = elem.data( "custom-widget" );
1358+
equal( typeof instance, "object", "instance stored in .data(widgetFullName)" );
1359+
});
1360+
13081361
}( jQuery ) );

ui/jquery.ui.widget.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ $.widget.extend = function( target ) {
160160
};
161161

162162
$.widget.bridge = function( name, object ) {
163-
var fullName = object.prototype.widgetFullName;
163+
var fullName = object.prototype.widgetFullName || name;
164164
$.fn[ name ] = function( options ) {
165165
var isMethodCall = typeof options === "string",
166166
args = slice.call( arguments, 1 ),
@@ -196,7 +196,7 @@ $.widget.bridge = function( name, object ) {
196196
if ( instance ) {
197197
instance.option( options || {} )._init();
198198
} else {
199-
new object( options, this );
199+
$.data( this, fullName, new object( options, this ) );
200200
}
201201
});
202202
}

0 commit comments

Comments
 (0)