Skip to content
Permalink
Browse files

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.
  • Loading branch information...
Avinash-Bhat authored and scottgonzalez committed Nov 7, 2012
1 parent 979bcab commit 75bd22eb731f5a81099ad97c88eede3862195fec
Showing with 55 additions and 2 deletions.
  1. +53 −0 tests/unit/widget/widget_core.js
  2. +2 −2 ui/jquery.ui.widget.js
@@ -4,6 +4,7 @@ module( "widget factory", {
teardown: function() {
if ( $.ui ) {
delete $.ui.testWidget;
delete $.fn.testWidget;
}
}
});
@@ -1305,4 +1306,56 @@ asyncTest( "_delay", function() {
$( "#widget" ).testWidget();
});

test( "$.widget.bridge()", function() {
expect( 9 );

var instance, ret,
elem = $( "<div>" );

function TestWidget( options, element ) {
deepEqual( options, { foo: "bar" }, "options passed" );
strictEqual( element, elem[ 0 ], "element passed" );
}

$.extend( TestWidget.prototype, {
method: function( param ) {
ok( true, "method called via .pluginName(methodName)" );
equal( param, "value1",
"parameter passed via .pluginName(methodName, param)" );
},
getter: function() {
return "qux";
}
});

$.widget.bridge( "testWidget", TestWidget );

ok( $.isFunction( $.fn.testWidget ), "jQuery plugin was created" );

strictEqual( elem.testWidget({ foo: "bar" }), elem, "plugin returns original jQuery object" );
instance = elem.data( "testWidget" );
equal( typeof instance, "object", "instance stored in .data(pluginName)" );

ret = elem.testWidget( "method", "value1" );
equal( ret, elem, "jQuery object returned from method call" );

ret = elem.testWidget( "getter" );
equal( ret, "qux", "getter returns value" );
});

test( "$.widget.bridge() - widgetFullName", function() {
expect( 1 );

var instance,
elem = $( "<div>" );

function TestWidget() {}
TestWidget.prototype.widgetFullName = "custom-widget";
$.widget.bridge( "testWidget", TestWidget );

elem.testWidget();
instance = elem.data( "custom-widget" );
equal( typeof instance, "object", "instance stored in .data(widgetFullName)" );
});

}( jQuery ) );
@@ -158,7 +158,7 @@ $.widget.extend = function( target ) {
};

$.widget.bridge = function( name, object ) {
var fullName = object.prototype.widgetFullName;
var fullName = object.prototype.widgetFullName || name;
$.fn[ name ] = function( options ) {
var isMethodCall = typeof options === "string",
args = slice.call( arguments, 1 ),
@@ -194,7 +194,7 @@ $.widget.bridge = function( name, object ) {
if ( instance ) {
instance.option( options || {} )._init();
} else {
new object( options, this );
$.data( this, fullName, new object( options, this ) );
}
});
}

0 comments on commit 75bd22e

Please sign in to comment.
You can’t perform that action at this time.