YAHOO.widget.MenuItem = function(p_oObject, p_oConfig) {
YAHOO.widget.MenuItem.superclass.constructor.call(
this,
p_oObject,
p_oConfig
);
};
YAHOO.extend(YAHOO.widget.MenuItem, YAHOO.widget.MenuModuleItem);
YAHOO.widget.MenuItem.prototype.init = function(p_oObject, p_oConfig) {
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);
var oConfig = this.cfg;
if(p_oConfig) {
oConfig.applyConfig(p_oConfig, true);
}
oConfig.fireQueue();
};
YAHOO.widget.MenuItem.prototype.CHECKED_IMAGE_PATH =
"nt/ic/ut/bsc/menuchk8_nrm_1.gif";
YAHOO.widget.MenuItem.prototype.SELECTED_CHECKED_IMAGE_PATH =
"nt/ic/ut/bsc/menuchk8_hov_1.gif";
YAHOO.widget.MenuItem.prototype.DISABLED_CHECKED_IMAGE_PATH =
"nt/ic/ut/bsc/menuchk8_dim_1.gif";
YAHOO.widget.MenuItem.prototype.CHECKED_IMAGE_ALT_TEXT = "Checked.";
YAHOO.widget.MenuItem.prototype.DISABLED_CHECKED_IMAGE_ALT_TEXT =
"Checked. (Item disabled.)";
YAHOO.widget.MenuItem.prototype._checkImage = null;
YAHOO.widget.MenuItem.prototype._onKeyDown =
function(p_sType, p_aArgs, p_oMenuItem) {
var Event = YAHOO.util.Event;
var oDOMEvent = p_aArgs[0];
var oParent = this.parent;
var oConfig = this.cfg;
var oMenuItem;
switch(oDOMEvent.keyCode) {
case 38: // Up arrow
case 40: // Down arrow
if(
this == oParent.activeItem &&
!oConfig.getProperty("selected")
) {
oConfig.setProperty("selected", true);
}
else {
var oNextItem = (oDOMEvent.keyCode == 38) ?
this.getPreviousEnabledSibling() :
this.getNextEnabledSibling();
if(oNextItem) {
oParent.clearActiveItem();
oNextItem.cfg.setProperty("selected", true);
oNextItem.focus();
}
}
Event.preventDefault(oDOMEvent);
break;
case 39: // Right arrow
oParent.clearActiveItem();
oConfig.setProperty("selected", true);
this.focus();
var oSubmenu = oConfig.getProperty("submenu");
if(oSubmenu) {
oSubmenu.show();
oSubmenu.setInitialSelection();
}
else if(
YAHOO.widget.MenuBarItem &&
oParent.parent &&
oParent.parent instanceof YAHOO.widget.MenuBarItem
) {
oParent.hide();
oMenuItem = oParent.parent;
if(oMenuItem) {
oMenuItem.focus();
oMenuItem.cfg.setProperty("selected", true);
}
}
Event.preventDefault(oDOMEvent);
break;
case 37: // Left arrow
if(oParent.parent) {
oParent.hide();
oMenuItem = oParent.parent;
if(oMenuItem) {
oMenuItem.focus();
oMenuItem.cfg.setProperty("selected", true);
}
}
Event.preventDefault(oDOMEvent);
break;
}
};
YAHOO.widget.MenuItem.prototype._onMouseOver =
function(p_sType, p_aArgs, p_oMenuItem) {
var oParent = this.parent;
var oConfig = this.cfg;
var oActiveItem = oParent.activeItem;
if(oActiveItem && oActiveItem != this) {
oParent.clearActiveItem();
}
oConfig.setProperty("selected", true);
this.focus();
var oSubmenu = oConfig.getProperty("submenu");
if(oSubmenu) {
oSubmenu.show();
}
};
YAHOO.widget.MenuItem.prototype._onMouseOut =
function(p_sType, p_aArgs, p_oMenuItem) {
var oConfig = this.cfg;
var oSubmenu = oConfig.getProperty("submenu");
oConfig.setProperty("selected", false);
if(oSubmenu) {
var oDOMEvent = p_aArgs[0];
var oRelatedTarget = YAHOO.util.Event.getRelatedTarget(oDOMEvent);
if(
!(
oRelatedTarget == oSubmenu.element ||
YAHOO.util.Dom.isAncestor(oSubmenu.element, oRelatedTarget)
)
) {
oSubmenu.hide();
}
}
};
YAHOO.widget.MenuItem.prototype.configChecked =
function(p_sType, p_aArgs, p_oItem) {
var Dom = YAHOO.util.Dom;
var bChecked = p_aArgs[0];
var oEl = this.element;
var oConfig = this.cfg;
var oImg;
if(bChecked) {
var me = this;
function preloadImage(p_sPath) {
var sPath = me.imageRoot + p_sPath;
if(!document.images[sPath]) {
var oImg = document.createElement("img");
oImg.src = sPath;
oImg.name = sPath;
oImg.id = sPath;
oImg.style.display = "none";
document.body.appendChild(oImg);
}
}
preloadImage(this.CHECKED_IMAGE_PATH);
preloadImage(this.SELECTED_CHECKED_IMAGE_PATH);
preloadImage(this.DISABLED_CHECKED_IMAGE_PATH);
oImg = document.createElement("img");
oImg.src = (this.imageRoot + this.CHECKED_IMAGE_PATH);
oImg.alt = this.CHECKED_IMAGE_ALT_TEXT;
var oSubmenu = this.cfg.getProperty("submenu");
if(oSubmenu) {
oEl.insertBefore(oImg, oSubmenu.element);
}
else {
oEl.appendChild(oImg);
}
Dom.addClass([oEl, oImg], "checked");
this._checkImage = oImg;
if(oConfig.getProperty("disabled")) {
oConfig.refireEvent("disabled");
}
if(oConfig.getProperty("selected")) {
oConfig.refireEvent("selected");
}
}
else {
oImg = this._checkImage;
Dom.removeClass([oEl, oImg], "checked");
if(oImg) {
oEl.removeChild(oImg);
}
this._checkImage = null;
}
};
YAHOO.widget.MenuItem.prototype.configSelected =
function(p_sType, p_aArgs, p_oItem) {
YAHOO.widget.MenuItem.superclass.configSelected.call(
this, p_sType, p_aArgs, p_oItem
);
var oConfig = this.cfg;
if(!oConfig.getProperty("disabled") && oConfig.getProperty("checked")) {
var bSelected = p_aArgs[0];
var sSrc = this.imageRoot + (bSelected ?
this.SELECTED_CHECKED_IMAGE_PATH : this.CHECKED_IMAGE_PATH);
this._checkImage.src = document.images[sSrc].src;
}
};
YAHOO.widget.MenuItem.prototype.configDisabled =
function(p_sType, p_aArgs, p_oItem) {
YAHOO.widget.MenuItem.superclass.configDisabled.call(
this, p_sType, p_aArgs, p_oItem
);
if(this.cfg.getProperty("checked")) {
var bDisabled = p_aArgs[0];
var sAlt = this.CHECKED_IMAGE_ALT_TEXT;
var sSrc = this.CHECKED_IMAGE_PATH;
var oImg = this._checkImage;
if(bDisabled) {
sAlt = this.DISABLED_CHECKED_IMAGE_ALT_TEXT;
sSrc = this.DISABLED_CHECKED_IMAGE_PATH;
}
oImg.src = document.images[(this.imageRoot + sSrc)].src;
oImg.alt = sAlt;
}
};
YAHOO.widget.MenuItem.prototype.initDefaultConfig = function() {
YAHOO.widget.MenuItem.superclass.initDefaultConfig.call(this);
this.cfg.addProperty(
"checked",
{
value: false,
handler: this.configChecked,
validator: this.cfg.checkBoolean,
suppressEvent: true
}
);
};