Widget: Added _hoverable() and _focusable().

This commit is contained in:
Scott González
2011-01-21 15:37:18 -05:00
parent 6072703cd1
commit 711df1f5e5
2 changed files with 38 additions and 25 deletions

View File

@@ -43,32 +43,11 @@ $.widget( "ui.accordion", {
.addClass( "ui-accordion-li-fix" );
self.headers = self.element.find( options.header )
.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
.bind( "mouseenter.accordion", function() {
if ( options.disabled ) {
return;
}
$( this ).addClass( "ui-state-hover" );
})
.bind( "mouseleave.accordion", function() {
if ( options.disabled ) {
return;
}
$( this ).removeClass( "ui-state-hover" );
})
.bind( "focus.accordion", function() {
if ( options.disabled ) {
return;
}
$( this ).addClass( "ui-state-focus" );
})
.bind( "blur.accordion", function() {
if ( options.disabled ) {
return;
}
$( this ).removeClass( "ui-state-focus" );
});
.addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
self._hoverable( self.headers );
self._focusable( self.headers );
self.headers.next()
.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
self.headers.find( ":first-child" ).addClass( "ui-accordion-heading" );

View File

@@ -130,6 +130,8 @@ $.Widget.prototype = {
options );
this.bindings = $();
this.hoverable = $();
this.focusable = $();
this._bind({ remove: "destroy" });
this._create();
@@ -151,6 +153,8 @@ $.Widget.prototype = {
destroy: function() {
this._destroy();
// we can probably remove the unbind calls in 2.0
// all event bindings should go through this._bind()
this.element
.unbind( "." + this.widgetName )
.removeData( this.widgetName );
@@ -160,7 +164,11 @@ $.Widget.prototype = {
.removeClass(
this.widgetBaseClass + "-disabled " +
"ui-state-disabled" );
// clean up events and states
this.bindings.unbind( "." + this.widgetName );
this.hoverable.removeClass( "ui-state-hover" );
this.focusable.removeClass( "ui-state-focus" );
},
_destroy: $.noop,
@@ -203,6 +211,8 @@ $.Widget.prototype = {
this.widget()
.toggleClass( this.widgetBaseClass + "-disabled ui-state-disabled", !!value )
.attr( "aria-disabled", value );
this.hoverable.removeClass( "ui-state-hover" );
this.focusable.removeClass( "ui-state-focus" );
}
return this;
@@ -235,6 +245,30 @@ $.Widget.prototype = {
});
},
_hoverable: function( element ) {
this.hoverable = this.hoverable.add( element );
this._bind( element, {
mouseenter: function( event ) {
$( event.currentTarget ).addClass( "ui-state-hover" );
},
mouseleave: function( event ) {
$( event.currentTarget ).removeClass( "ui-state-hover" );
}
});
},
_focusable: function( element ) {
this.focusable = this.focusable.add( element );
this._bind( element, {
focus: function( event ) {
$( event.currentTarget ).addClass( "ui-state-focus" );
},
blur: function( event ) {
$( event.currentTarget ).removeClass( "ui-state-focus" );
}
});
},
_trigger: function( type, event, data ) {
var callback = this.options[ type ];