menuitem.js
YAHOO.widget.MenuItem = function(p_oObject, p_oUserConfig) {
if(p_oObject) {
YAHOO.widget.MenuItem.superclass.constructor.call(
this,
p_oObject,
p_oUserConfig
);
}
};
YAHOO.widget.MenuItem.prototype = new YAHOO.widget.MenuModuleItem();
YAHOO.widget.MenuItem.prototype.constructor = YAHOO.widget.MenuItem;
YAHOO.widget.MenuItem.superclass = YAHOO.widget.MenuModuleItem.prototype;
YAHOO.widget.MenuItem.prototype.init = function(p_oObject, p_oUserConfig) {
if(!this.SUBMENU_TYPE) {
this.SUBMENU_TYPE = YAHOO.widget.Menu;
}
if(!this.SUBMENU_ITEM_TYPE) {
this.SUBMENU_ITEM_TYPE = YAHOO.widget.MenuItem;
}
YAHOO.widget.MenuItem.superclass.init.call(this, p_oObject);
this.keyDownEvent.subscribe(this._onKeyDown, this, true);
this.mouseOverEvent.subscribe(this._onMouseOver, this, true);
this.mouseOutEvent.subscribe(this._onMouseOut, this, true);
if(p_oUserConfig) {
this.cfg.applyConfig(p_oUserConfig, true);
}
this.cfg.fireQueue();
};
YAHOO.widget.MenuItem.prototype._onKeyDown =
function(p_sType, p_aArguments, p_oMenuItem) {
var oEvent = p_aArguments[0];
switch(oEvent.keyCode) {
case 38: // Up arrow
case 40: // Down arrow
var oActiveItem = this.parent.activeItem;
if(this == oActiveItem && !this.cfg.getProperty("selected")) {
this.cfg.setProperty("selected", true);
}
else {
var oNextItem = (oEvent.keyCode == 38) ?
this.getPreviousEnabledSibling() :
this.getNextEnabledSibling();
if(oNextItem) {
this.parent.clearActiveItem();
oNextItem.cfg.setProperty("selected", true);
oNextItem.focus();
}
}
YAHOO.util.Event.preventDefault(oEvent);
break;
case 39: // Right arrow
this.parent.clearActiveItem();
this.cfg.setProperty("selected", true);
this.focus();
var oSubmenu = this.cfg.getProperty("submenu");
if(oSubmenu) {
oSubmenu.show();
oSubmenu.setInitialSelection();
}
else if(
YAHOO.widget.MenuBarItem &&
this.parent.parent &&
this.parent.parent instanceof YAHOO.widget.MenuBarItem
) {
this.parent.hide();
var oMenuItem = this.parent.parent;
if(oMenuItem) {
oMenuItem.focus();
oMenuItem.cfg.setProperty("selected", true);
}
}
YAHOO.util.Event.preventDefault(oEvent);
break;
case 37: // Left arrow
if(this.parent.parent) {
this.parent.hide();
var oMenuItem = this.parent.parent;
if(oMenuItem) {
oMenuItem.focus();
oMenuItem.cfg.setProperty("selected", true);
}
}
YAHOO.util.Event.preventDefault(oEvent);
break;
}
};
YAHOO.widget.MenuItem.prototype._onMouseOver =
function(p_sType, p_aArguments, p_oMenuItem) {
var oActiveItem = this.parent.activeItem;
if(oActiveItem && oActiveItem != this) {
this.parent.clearActiveItem();
}
this.cfg.setProperty("selected", true);
this.focus();
var oSubmenu = this.cfg.getProperty("submenu");
if(oSubmenu) {
oSubmenu.show();
}
};
YAHOO.widget.MenuItem.prototype._onMouseOut =
function(p_sType, p_aArguments, p_oMenuItem) {
this.cfg.setProperty("selected", false);
var oSubmenu = this.cfg.getProperty("submenu");
if(oSubmenu) {
var oEvent = p_aArguments[0],
oRelatedTarget = YAHOO.util.Event.getRelatedTarget(oEvent);
if(
!(
oRelatedTarget == oSubmenu.element ||
this._oDom.isAncestor(oSubmenu.element, oRelatedTarget)
)
) {
oSubmenu.hide();
}
}
};