📄 ig_webmenu.js
字号:
return item;
}
// private
function igmenu_getItemParent()
{
var item=null;
var itemName=this.element.id.split("_")
if(itemName.length>1)
{
var parentName=this.element.id.substr(0,this.element.id.length-itemName[itemName.length-1].length-1);
item=igmenu_getItemById(parentName);
}
return item;
}
// private
function igmenu_getItemItems()
{
var itemAr=new Array();
var itemCount=0;
var item=this.getFirstChild();
while(item) {
itemAr[itemCount++]=item;
item=item.getNextSibling();
}
return itemAr;
}
/* The following are all PRIVATE methods are used for keyboard Navigation */
function igmenu_kbMD(oItem,evt)
{
// make into an menu item
oItem = igmenu_getItemById(oItem.id.length>0?oItem.id:oItem.parentElement.id);
if (evt.keyCode==9){
if (oItem && oItem.Id!=oItem.WebMenu.getZerothMember().Id)
if(oItem.element.tabIndex!=-1) AdjustTabIndex(oItem,null);
}
else if (evt.keyCode==37 || evt.keyCode==39 || evt.keyCode==9 || evt.keyCode==38 || evt.keyCode==40)
igmenu_mouseout(null, evt);
else if ( (evt.keyCode >= 48 && evt.keyCode <= 57) || // 0 - 9
(evt.keyCode >= 65 && evt.keyCode <= 122) // A - Z a - z
)
{
// check children first
var oItems = oItem.getItems();
var oTempItem = null;
for (var i = 0 ; i < oItems.length ; i++)
{
oTempItem = oItems[i];
oAccessKeyString = oTempItem.getAccessKey();
if (null!=oAccessKeyString && oAccessKeyString.length>0)
{
if (oAccessKeyString.toLowerCase().charCodeAt(0)==evt.keyCode ||
oAccessKeyString.toUpperCase().charCodeAt(0)==evt.keyCode)
if(oTempItem.getEnabled() || !oTempItem.IsSeparator())
{
AdjustTabIndex(oItem,oTempItem,true);
if (oTempItem.getItems().length==0)
igmenu_ExecuteItem(evt,oTempItem.Id,oTempItem.Element);
return;
}
}
}
oTempItem = oItem;
do
{
oTempItem = oTempItem.getNextSibling();
if (null==oTempItem)
{ // if none found, then navigate to the first item in the sibling set and go to that
if (oItem.getLevel()==0)
oTempItem = oItem.WebMenu.getItems();
else
oTempItem = oItem.getParent().getItems();
// if not null, grap first item and go to that
if (oTempItem) oTempItem = oTempItem[0];
}
if(oTempItem && oTempItem.Id==oItem.Id) break;
oAccessKeyString = oTempItem.getAccessKey();
if (null!=oAccessKeyString && oAccessKeyString.length>0)
{
if (oAccessKeyString.toLocaleLowerCase().charCodeAt(0)==evt.keyCode ||
oAccessKeyString.toLocaleUpperCase().charCodeAt(0)==evt.keyCode)
if(oTempItem.getEnabled() || !oTempItem.IsSeparator())
{
AdjustTabIndex(oItem,oTempItem,true);
if (oTempItem.getItems().length==0)
igmenu_ExecuteItem(evt,oTempItem.Id);
return;
}
}
}
while(oTempItem);
}
}
var bFromKeyBoardNav = false;
function igmenu_kbNav(oItem,evt)
{
if (evt.keyCode==37 ||
evt.keyCode==38 ||
evt.keyCode==39 ||
evt.keyCode==40 ||
evt.keyCode==27)
{
bFromKeyBoardNav = true;
KeyBoardMove(igmenu_getItemById(evt.srcElement.id.length>0?evt.srcElement.id:oItem.parentElement.id ), evt.keyCode, evt); // process arrow keys
return;
}
var oChildItem = null;
if (evt.keyCode==32) // space key
{
if (oItem.id=="") oItem = oItem.parentElement;
if (null == (oChildItem = igmenu_getItemById(oItem.id).getFirstChild()))
igmenu_ExecuteItem(evt,oItem);
else // show the child menu
{
var oChildMenu=null;
var oObjItem = igmenu_getItemById(oItem.id);
if (oObjItem.getLevel()==0 & oObjItem.WebMenu.MenuTarget==1)
{
oChildMenu = oObjItem.Element.attributes["igChildId"];
if (oChildMenu) oObjItem.WebMenu.displayHorizontalSubMenu(oObjItem.Element,oChildMenu.value);
AdjustTabIndex(null,oChildItem);
}
else
{
oChildMenu = oObjItem.Element.attributes["igChildId"];
if (oChildMenu) oObjItem.WebMenu.displaySubSubMenu(oObjItem.Element,oChildMenu.value);
}
AdjustTabIndex(null,oChildItem)
}
}
}
function igmenu_kbFocus(oItem,evt)
{
var oError = false;
if (oItem.id==null || oItem.id=="")
{
oItem = oItem.parentElement;
try
{
oItem.focus();
}
catch(e)
{oError=true}
}
if (!oError && oItem)
{
igmenu_mouseover(oItem, evt, false);
var oObjItem = igmenu_getItemById(oItem.id);
if(oObjItem.WebMenu == null || oObjItem.WebMenu.MenuLoaded == false)
return;
var bSameItem = igmenu_Enqueue(oObjItem);
if (null!=oObjItem && !bSameItem)
if (oObjItem.getLevel()==0 & oObjItem.WebMenu.MenuTarget==1)
{
oChildMenu = oObjItem.Element.attributes["igChildId"];
if (bOpenSubMenuOnFocus)
if (oChildMenu)
oObjItem.WebMenu.displayHorizontalSubMenu(oObjItem.Element,oChildMenu.value);
else
if(!bFromKeyBoardNav) igmenu_ExecuteItem(evt,oObjItem.Id,oObjItem.Element);
}
else
{
oChildMenu = oObjItem.Element.attributes["igChildId"];
if (bOpenSubMenuOnFocus)
if(oChildMenu)
oObjItem.WebMenu.displaySubSubMenu(oObjItem.Element,oChildMenu.value);
}
}
bFromKeyBoardNav = false;
bOpenSubMenuOnFocus = true;
ig_inMenu = false;
}
var bOpenSubMenuOnFocus = true;
function KeyBoardMove(oItem, keyCode, evt)
{
if (oItem==null) return;
var oLevel = oItem.getLevel();
var oMenuTarget = oItem.WebMenu.MenuTarget;
var oNextItem = null;
var bSetFocus = true;
var oChildMenu = null;
switch(keyCode)
{
case(27):
// on an escape, navigate up a menu lvl. At level zero????
oItem.WebMenu.unhoverItem(oItem.Element, false);
if (oLevel>0)
{
oNextItem = oItem.getParent();
oChildMenu = oNextItem.Element.attributes["igChildId"];
oItem.WebMenu.unhoverItem(oItem.Element, false);
bOpenSubMenuOnFocus = false
AdjustTabIndex(oItem,oNextItem,true);
if (oChildMenu) oNextItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
}
else
{
oItem.Element.blur();
AdjustTabIndex(oItem,oNextItem);
}
break;
case(37): // left arrow (base)
if ( oMenuTarget==1&&oLevel<=1 ) // and a horizontal menu
{
oNextItem = igmenu_getNextKBParent(oItem,-1);
var oOldItem = oItem;
while(oOldItem.getLevel()>0) oOldItem=oOldItem.getParent();
oChildMenu = oOldItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
AdjustTabIndex(oItem,oNextItem); // if found, focus on that
igmenu_unhoverPath(oItem);
}
else //if (oMenuTarget==1)
{
oNextItem = oItem.getParent();
if(! (typeof(oNextItem.getLevel())=="number")){oNextItem=null;}
AdjustTabIndex(oItem,oNextItem); // if found, focus on that
oItem.WebMenu.unhoverItem(oItem.Element, false);
if(oNextItem) oChildMenu = oNextItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
}
if (oMenuTarget==1 && oItem.getLevel()==1 && oNextItem.getLevel()==0)
{
oChildMenu = oItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
oChildMenu = oNextItem.Element.attributes["igChildId"];
if (oChildMenu)
{
oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
oNextItem.WebMenu.hoverItem(oNextItem.Element);
}
}
break;
case(38): //up
if (oLevel==0&&oMenuTarget==1)
{
if (null == (oNextItem = igmenu_getItemById(oItem.Id).getFirstChild()))
{
/* in this case don't do anything, just ignore it.*/
AdjustTabIndex(null,oNextItem);
}
else // show the child menu
{
oChildMenu = oItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oItem.Element,oChildMenu.value);
AdjustTabIndex(null,oNextItem);
}
}
else
{
oNextItem = oItem;
do
{
oNextItem = oNextItem.getPrevSibling(); // get next sibling item
if (null==oNextItem)
{ // if none found, then navigate to the first item in the sibling set and go to that
if (oItem.getLevel()==0)
oNextItem = oItem.WebMenu.getItems();
else
oNextItem = oItem.getParent().getItems();
// if not null, grap first item and go to that
if (oNextItem) oNextItem = oNextItem[oNextItem.length-1];
}
}
while(oNextItem && (!oNextItem.getEnabled() || oNextItem.IsSeparator()));
AdjustTabIndex(oItem,oNextItem); // if found, focus on that
}
break;
case(39): // right arrow (base)
if (oMenuTarget==1&&oLevel==0) // if at the top level and a horizontal menu
{
oNextItem = igmenu_getNextKBParent(oItem,1) ;
AdjustTabIndex(oItem,oNextItem); // if found, focus on that
oChildMenu = oItem.Element.attributes["igChildId"];
if(oChildMenu) oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
igmenu_unhoverPath(oItem);
}
else if(oMenuTarget==1&&oLevel>0)
{
/* Hitting the right arrow in a horizontal menu sub menu result depends on if the sub menu item has children or not.
if not then we navigatate to the next overall parent record */
if (oItem.getItems().length>0) oNextItem = oItem.getItems()[0];
else oNextItem = igmenu_getNextKBParent(oItem,1) ;
//if (oMenuTarget==1 && oItem.getLevel()>=1 && oNextItem.getLevel()==0)
if (oMenuTarget==1 && oItem.getLevel()==1 && oNextItem.getLevel()==0)
{
// need to close the menu
oChildMenu = oItem.getParent().Element.attributes["igChildId"];
if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
oChildMenu = oNextItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
igmenu_unhoverPath(oItem);
}
else if (oNextItem.getLevel()>0)
{
oChildMenu = oItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.displaySubSubMenu(oItem.Element,oChildMenu.value);
oItem.WebMenu.hoverItem(oItem.Element);
}
else
{
// need to close the menu
var oTempItem=oItem;
for (var i = oTempItem.getLevel() ; i>0 ; i-- )
{
oTempItem.WebMenu.unhoverItem(oTempItem.Element, true);
oTempItem = oTempItem.getParent();
oChildMenu = oTempItem.Element.attributes["igChildId"];
if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
}
oChildMenu = oItem.getParent().Element.attributes["igChildId"];
if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
oChildMenu = oNextItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oNextItem.Element,oChildMenu.value);
igmenu_unhoverPath(oItem, true);
}
AdjustTabIndex(oItem,oNextItem,bSetFocus); // if found, focus on that
}
else // Vertical menu
{
var oTempItem = oItem.getItems();
if (oTempItem.length>0)
{
oNextItem=null;
for(var i=0; i < oTempItem.length && oNextItem==null; i++)
if (oTempItem[i].getEnabled())
oNextItem = oTempItem[i];
oChildMenu = oItem.Element.attributes["igChildId"];
if(oChildMenu)
if (oItem.getLevel()==0)
oItem.WebMenu.displayVerticalSubMenu(oItem.Element,oChildMenu.value);
else
oItem.WebMenu.displaySubSubMenu(oItem.Element,oChildMenu.value);
AdjustTabIndex(oItem,oNextItem);
oItem.WebMenu.hoverItem(oItem.Element);
}
else
{
// for right now, if we arrow off a vertical menu, go back to the topmost parent Item
oNextItem=oItem;
for (var i = oItem.getLevel() ; i>0 ; i-- )
{
oNextItem.WebMenu.unhoverItem(oNextItem.Element, true);
oNextItem = oNextItem.getParent();
oChildMenu = oNextItem.Element.attributes["igChildId"];
if(oChildMenu)oItem.WebMenu.hideSubMenu(igmenu_getElementById(oChildMenu.value));
}
AdjustTabIndex(null,oNextItem,true);
}
}
break;
case(40): // down
if (oLevel==0&&oMenuTarget==1)
{
if (null == (oNextItem = igmenu_getItemById(oItem.Id).getFirstChild()))
{/* in this case don't do anything, just ignore it.*/
AdjustTabIndex(null,oItem);
}
else // show the child menu
{
oChildMenu = oItem.Element.attributes["igChildId"];
if (oChildMenu) oItem.WebMenu.displayHorizontalSubMenu(oItem.Element,oChildMenu.value);
AdjustTabIndex(oItem,oNextItem);
oItem.WebMenu.hoverItem(oItem.Element);
}
}
else
{
oNextItem = oItem;
do
{
oNextItem = oNextItem.getNextSibling();
if (null==oNextItem)
{ // if none found, then navigate to the first item in the sibling set and go to that
if (oItem.getLevel()==0)
oNextItem = oItem.WebMenu.getItems();
else
oNextItem = oItem.getParent().getItems();
// if not null, grap first item and go to that
if (oNextItem) oNextItem = oNextItem[0];
}
}
while(oNextItem && (!oNextItem.getEnabled() || oNextItem.IsSeparator()));
AdjustTabIndex(oItem,oNextItem); // if found, focus on that
}
break;
}
}
// private
// In IE, in order for the focus to be settable, we need to set the tab index on the element.
// however we don't want the tab index to remain on that element forever, so we need to strip it off the
// old
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -