]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget: Bridge falls back to name if there is no widgetFullName, and always stores...
authorAvinash R <nashpapa@gmail.com>
Wed, 7 Nov 2012 15:05:00 +0000 (10:05 -0500)
committerScott González <scott.gonzalez@gmail.com>
Tue, 13 Nov 2012 15:55:09 +0000 (10:55 -0500)
(cherry picked from commit 75bd22eb731f5a81099ad97c88eede3862195fec)

tests/unit/widget/widget_core.js
ui/jquery.ui.widget.js

index 7bddc7f5c14df777c34184cb564a4f5781119efd..acf461a9af23795e8ca27cd45bdc48742e688998 100644 (file)
@@ -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 ) );
index f4805fb7576d95b50415a71815d63e466f6b96aa..f3e5215af08d7d6c489f0373fca3c63dece87a77 100644 (file)
@@ -160,7 +160,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 ),
@@ -196,7 +196,7 @@ $.widget.bridge = function( name, object ) {
                                if ( instance ) {
                                        instance.option( options || {} )._init();
                                } else {
-                                       new object( options, this );
+                                       $.data( this, fullName, new object( options, this ) );
                                }
                        });
                }