📄 telligent_popupmenu.js
字号:
function Telligent_PopupMenu(varName,groupCssClass,itemCssClass,itemSelectedCssClass,itemExpandedCssClass,expandImageUrl,expandImageWidth,expandImageHeight,iconWidth,iconHeight,position,zIndex,onMenuOpenFunction,onMenuCloseFunction,onMenuItemOverFunction,menuItems){this._variableName=varName;this.GroupCssClass=groupCssClass;this.ItemCssClass=itemCssClass;this.ItemSelectedCssClass=itemSelectedCssClass;this.ItemExpandedCssClass=itemExpandedCssClass;this._menuItems=new Array();this.Position=position;this.ZIndex=zIndex;this._menuLevels=new Array();this._initialized=false;this._currentLevel=-1;this._isOpen=false;this.ExpandImageUrl=expandImageUrl;this.ExpandImageWidth=expandImageWidth;this.ExpandImageHeight=expandImageHeight;this.IconWidth=iconWidth;this.IconHeight=iconHeight;this.OnMenuOpenFunction=onMenuOpenFunction;this.OnMenuCloseFunction=onMenuCloseFunction;this.OnMenuItemOverFunction=onMenuItemOverFunction;this._originalDocumentOnClick=null;this._cancelClick=false;this._originalWindowOnUnload=null;if(document.onclick)this._originalDocumentOnClick=document.onclick;document.onclick=new Function(this._variableName+'._documentOnClick();');if(window.onunload)this._originalWindowOnUnload=window.onunload;window.onunload=new Function(this._variableName+'._windowOnUnload();');this.ParseMenuItems(menuItems,null);}Telligent_PopupMenu.prototype.IsOpen=function(){return this._isOpen;}Telligent_PopupMenu.prototype.Dispose=function(){for(var i=0;i<this._menuLevels.length;i++){this._disposeLevel(this._menuLevels[i]);if(this._menuLevels[i]._popupPanel)this._menuLevels[i]._popupPanel.Dispose();}}Telligent_PopupMenu.prototype._windowOnUnload=function(){this.Dispose();if(this._originalWindowOnUnload)this._originalWindowOnUnload();}Telligent_PopupMenu.prototype._disposeLevel=function(menuLevel){if(menuLevel&&menuLevel._popupPanel){var nodes=menuLevel._popupPanel.GetPanelNodes();if(nodes[0]&&nodes[0].childNodes[0]){var tbody=nodes[0].childNodes[0];for(var j=0;j<tbody.childNodes.length;j++){if(tbody.childNodes[j].childNodes[0]&&tbody.childNodes[j].childNodes[0]._menuItem){tbody.childNodes[j].childNodes[0]._menuItem._element=null;tbody.childNodes[j].childNodes[0]._menuItem=null;tbody.childNodes[j].childNodes[0].onmouseover=null;tbody.childNodes[j].childNodes[0].onclick=null;}}}}}Telligent_PopupMenu.prototype.Open=function(x,y,positionWidth,positionHeight){if(!this._initialized)this._initialize();this._menuLevels[0]._popupPanel.Show(x,y,positionWidth,positionHeight);this._currentLevel=0;this._isOpen=true;if(this.OnMenuOpenFunction)this.OnMenuOpenFunction(this);}Telligent_PopupMenu.prototype.OpenAtElement=function(element){if(!this._initialized)this._initialize();this._menuLevels[0]._popupPanel.ShowAtElement(element);this._currentLevel=0;this._isOpen=true;if(this.OnMenuOpenFunction)this.OnMenuOpenFunction(this);}Telligent_PopupMenu.prototype.Close=function(level){if(!level)level=0;for(var i=this._menuLevels.length-1;i>=level;i--){if(this._menuLevels[i]){if(this._menuLevels[i].CurrentMenuItem){this._menuLevels[i].CurrentMenuItem._element.className=this.ItemCssClass;this._menuLevels[i].CurrentMenuItem=null;}this._menuLevels[i]._popupPanel.Hide();}}this._currentLevel=level-1;if(this._currentLevel<=-1){this._isOpen=false;if(this.OnMenuCloseFunction)this.OnMenuCloseFunction(this);}}Telligent_PopupMenu.prototype._itemClick=function(menuItem,level){this._cancelClick=true;if(menuItem.ClientScript||menuItem.NavigateUrl)this.Close();if(menuItem.ClientScript){menuItem.ClientScript(menuItem);}if(menuItem.NavigateUrl){if(!menuItem.NavigateTarget)window.location=menuItem.NavigateUrl;elsewindow.open(menuItem.NavigateUrl,menuItem.NavigateTarget);}return false;}Telligent_PopupMenu.prototype._itemMouseOver=function(menuItem,level,ignoreHideAndAnimation){if(this._menuLevels.length<=level||(this._currentLevel==level&&this._menuLevels[level].CurrentMenuItem==menuItem&&!ignoreHideAndAnimation))return;if(this._menuLevels[level].CurrentMenuItem!=menuItem){if(!ignoreHideAndAnimation){this.Close(level+1);}if(this._menuLevels[level].CurrentMenuItem&&this._menuLevels[level].CurrentMenuItem!=menuItem)this._menuLevels[level].CurrentMenuItem._element.className=this.ItemCssClass;if(level>0&&this._menuLevels[level-1].CurrentMenuItem)this._menuLevels[level-1].CurrentMenuItem._element.className=this.ItemExpandedCssClass;menuItem._element.className=this.ItemSelectedCssClass;this._menuLevels[level].CurrentMenuItem=menuItem;if(menuItem._menuItems!=null&&menuItem._menuItems.length>0){if(this._menuLevels.length==level+1)this._menuLevels[level+1]=new Telligent_PopupMenuLevel(level+1,menuItem,new Telligent_PopupPanel(this._variableName+'._menuLevels['+(level+1)+']._popupPanel',this.GroupCssClass,'leftright',this.ZIndex,null,new Function('window.'+this._variableName+'.Close('+(level+1)+');'),false,''),this);elsethis._menuLevels[level+1].MenuItem=menuItem;this._populatePopupPanel(this._menuLevels[level+1],menuItem._menuItems);this._menuLevels[level+1]._popupPanel.ShowAtElement(menuItem._element,ignoreHideAndAnimation);this._currentLevel=level+1;}if(!ignoreHideAndAnimation&&this.OnMenuItemOverFunction)this.OnMenuItemOverFunction(menuItem);}else{if(!ignoreHideAndAnimation){this.Close(level+2);}if(this._menuLevels[level+1]&&this._menuLevels[level+1].CurrentMenuItem){this._menuLevels[level+1].CurrentMenuItem._element.className=this.ItemCssClass;this._menuLevels[level+1].CurrentMenuItem=null;}this._menuLevels[level].CurrentMenuItem._element.className=this.ItemSelectedCssClass;}}Telligent_PopupMenu.prototype._initialize=function(){this._menuLevels=new Array();this._menuLevels[0]=new Telligent_PopupMenuLevel(0,null,new Telligent_PopupPanel(this._variableName+'._menuLevels[0]._popupPanel',this.GroupCssClass,this.Position,this.ZIndex,null,new Function('window.'+this._variableName+'.Close(0);'),false,''),this);this._populatePopupPanel(this._menuLevels[0],this._menuItems);this._initialized=true;}Telligent_PopupMenu.prototype.Refresh=function(){if(this._initialized){var selectedItems=new Array();var i;for(i=0;i<=this._currentLevel;i++){selectedItems[i]=this._menuLevels[i].CurrentMenuItem;}this._populatePopupPanel(this._menuLevels[0],this._menuItems);if(selectedItems.length>0){var j;var menuItems=this._menuItems;var found;for(i=0;i<selectedItems.length;i++){found=false;for(j=0;menuItems&&j<menuItems.length;j++){if(selectedItems[i]==menuItems[j]){this._itemMouseOver(menuItems[j],i,true);menuItems=menuItems[j]._menuItems;found=true;break;}}if(!found){if(menuItems&&menuItems.length>0)this.Close(i+1);elsethis.Close(i);break;}}}}}Telligent_PopupMenu.prototype._populatePopupPanel=function(menuLevel,menuItems){this._disposeLevel(menuLevel);menuLevel._popupPanel.ClearPanelContent();menuLevel.CurrentMenuItem=null;if(!menuItems||menuItems.length==0)return;var outerTable=document.createElement('table');outerTable.cellPadding='0';outerTable.cellSpacing='0';outerTable.appendChild(document.createElement('tbody'));var i;var hasIcons=false;var hasExpandable=false;for(i=0;i<menuItems.length;i++){if(menuItems[i].IconUrl)hasIcons=true;if(this.ExpandImageUrl&&menuItems[i]._menuItems&&menuItems[i]._menuItems.length>0)hasExpandable=true;if(hasIcons&&hasExpandable)break;}for(i=0;i<menuItems.length;i++){var outerRow=document.createElement('tr');outerTable.childNodes[0].appendChild(outerRow);var container=document.createElement('td');container.className=this.ItemCssClass;container.id=menuItems[i].ID;container._menuItem=menuItems[i];outerRow.appendChild(container);var innerTable=document.createElement('table');innerTable.cellPadding='0';innerTable.cellSpacing='0';innerTable.style.width='100%';innerTable.appendChild(document.createElement('tbody'));container.appendChild(innerTable);var row=document.createElement('tr');innerTable.childNodes[0].appendChild(row);var cell;if(hasIcons){cell=document.createElement('td');if(menuItems[i].IconUrl){var img=document.createElement('img');img.src=menuItems[i].IconUrl;img.style.paddingRight='4px';if(this.IconHeight)img.height=this.IconHeight;if(this.IconWidth)img.width=this.IconWidth;cell.appendChild(img);}else{cell.appendChild(document.createElement('div'));cell.childNodes[0].style.paddingRight='4px';if(this.IconHeight)cell.childNodes[0].style.height=this.IconHeight+'px';if(this.IconWidth)cell.childNodes[0].style.width=this.IconWidth+'px';}row.appendChild(cell);}cell=document.createElement('td');cell.style.whiteSpace='nowrap';cell.width='100%';cell.innerHTML=menuItems[i].Text;row.appendChild(cell);if(hasExpandable){cell=document.createElement('td');if(this.ExpandImageUrl&&menuItems[i]._menuItems&&menuItems[i]._menuItems.length>0){var img=document.createElement('img');img.src=this.ExpandImageUrl;img.style.paddingLeft='4px';if(this.ExpandImageHeight)img.height=this.ExpandImageHeight;if(this.ExpandImageWidth)img.width=this.ExpandImageWidth;cell.appendChild(img);}else{cell.appendChild(document.createElement('div'));cell.childNodes[0].style.paddingRight='4px';if(this.ExpandImageHeight)cell.childNodes[0].style.height=this.ExpandImageHeight+'px';if(this.ExpandImageWidth)cell.childNodes[0].style.width=this.ExpandImageWidth+'px';}row.appendChild(cell);}container.onclick=new Function("return "+this._variableName+"._itemClick(this._menuItem,"+menuLevel._level+");");container.onmouseover=new Function("return "+this._variableName+"._itemMouseOver(this._menuItem,"+menuLevel._level+");");menuItems[i]._element=container;}menuLevel._popupPanel.AddNodeToPanel(outerTable);}Telligent_PopupMenu.prototype.ParseMenuItems=function(menuItems){this._menuItems=new Array();if(!menuItems||menuItems.length==0)return;for(var i=0;i<menuItems.length;i++){this._menuItems[i]=new Telligent_PopupMenuItem(menuItems[i][0],menuItems[i][1]);this._menuItems[i].NavigateUrl=menuItems[i][2];this._menuItems[i].NavigateTarget=menuItems[i][3];this._menuItems[i].ClientScript=menuItems[i][4];this._menuItems[i].IconUrl=menuItems[i][5];this._menuItems[i]._popupMenu=this;if(menuItems[i][6]&&menuItems[i][6].length>0)this._menuItems[i].ParseMenuItems(menuItems[i][6]);}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -