📄 menu-for-applications.js
字号:
if(width){
var id = subUls[no].parentNode.id.replace(/[^0-9]/gi,'');
this.setSubMenuWidth(id,width);
}
}
ulObj.style.display='none';
}
// }}}
,
// {{{ setSubMenuWidth()
/**
* This method specifies the width of a sub menu group. This is a useful method in order to get a correct width in IE6 and prior.
*
* @param int id = ID of parent menu item
* @param String newWidth = Width of sub menu items.
* @public
*/
setSubMenuWidth : function(id,newWidth)
{
this.menuItems[id].setSubMenuWidth(newWidth);
}
,
// {{{ setMainMenuGroupWidth()
/**
* Add separator (special type of menu item)
*
* @param String newWidth = Size of a menu group
* @param int parent id of menu item
* @public
*/
setMainMenuGroupWidth : function(newWidth)
{
this.mainMenuGroupWidth = newWidth;
}
,
// {{{ addSeparator()
/**
* Add separator (special type of menu item)
*
* @param int parent id of menu item
* @public
*/
addSeparator : function(parentId)
{
id = this.__getUniqueId(); // Get unique id
if(!parentId)parentId = 0;
this.menuItems[id] = new DHTMLSuite.menuModelItem();
this.menuItems[id].setAsSeparator(id,parentId);
this.menuItemsOrder[this.menuItemsOrder.length] = id;
return this.menuItems[id];
}
,
// {{{ init()
/**
* Initilizes the menu model. This method should be called when all items has been added to the model.
*
*
* @public
*/
init : function()
{
this.__getDepths();
this.__setHasSubs();
}
// }}}
,
// {{{ setMenuItemVisibility()
/**
* Save visibility of a menu item.
*
* @param int id = Id of menu item..
* @param Boolean visible = Visibility of menu item.
*
* @public
*/
setMenuItemVisibility : function(id,visible)
{
this.menuItems[id].setVisibility(visible);
}
// }}}
,
// {{{ setSubMenuType()
/**
* Set menu type for a specific menu depth.
*
* @param int depth = 1 = Top menu, 2 = Sub level 1...
* @param String newType = New menu type(possible values: "top" or "sub")
*
* @private
*/
setSubMenuType : function(depth,newType)
{
this.submenuType[depth] = newType;
}
// }}}
,
// {{{ __getDepths()
/**
* Create variable for the depth of each menu item.
*
*
* @private
*/
getItems : function(parentId,returnArray)
{
if(!parentId)return this.menuItems;
if(!returnArray)returnArray = new Array();
for(var no=0;no<this.menuItemsOrder.length;no++){
var id = this.menuItemsOrder[no];
if(!id)continue;
if(this.menuItems[id].parentId==parentId){
returnArray[returnArray.length] = this.menuItems[id];
if(this.menuItems[id].hasSubs)return this.getItems(this.menuItems[id].id,returnArray);
}
}
return returnArray;
}
// }}}
,
// {{{ __getUniqueId()
/**
* Returns a unique id for a menu item. This method is used by the addSeparator function in case an id isn't sent to the method.
*
*
* @private
*/
__getUniqueId : function()
{
var num = Math.random() + '';
num = num.replace('.','');
num = '99' + num;
num = num /1;
while(this.menuItems[num]){
num = Math.random() + '';
num = num.replace('.','');
num = num /1;
}
return num;
}
// }}}
,
// {{{ __getDepths()
/**
* Create variable for the depth of each menu item.
*
*
* @private
*/
__getDepths : function()
{
for(var no=0;no<this.menuItemsOrder.length;no++){
var id = this.menuItemsOrder[no];
if(!id)continue;
this.menuItems[id].depth = 1;
if(this.menuItems[id].parentId){
this.menuItems[id].depth = this.menuItems[this.menuItems[id].parentId].depth+1;
}
this.menuItems[id].type = this.submenuType[this.menuItems[id].depth]; // Save menu direction for this menu item.
}
}
// }}}
,
// {{{ __setHasSubs()
/**
* Create variable for the depth of each menu item.
*
*
* @private
*/
__setHasSubs : function()
{
for(var no=0;no<this.menuItemsOrder.length;no++){
var id = this.menuItemsOrder[no];
if(!id)continue;
if(this.menuItems[id].parentId){
this.menuItems[this.menuItems[id].parentId].hasSubs = 1;
}
}
}
// }}}
,
// {{{ __hasSubs()
/**
* Does a menu item have sub elements ?
*
*
* @private
*/
// }}}
__hasSubs : function(id)
{
for(var no=0;no<this.menuItemsOrder.length;no++){
var id = this.menuItemsOrder[no];
if(!id)continue;
if(this.menuItems[id].parentId==id)return true;
}
return false;
}
// }}}
,
// {{{ __deleteChildNodes()
/**
* Deleting child nodes of a specific parent id
*
* @param int parentId
*
* @private
*/
// }}}
__deleteChildNodes : function(parentId,recursive)
{
var itemsToDeleteFromOrderArray = new Array();
for(var prop=0;prop<this.menuItemsOrder.length;prop++){
var id = this.menuItemsOrder[prop];
if(!id)continue;
if(this.menuItems[id].parentId==parentId && parentId){
this.menuItems[id] = false;
itemsToDeleteFromOrderArray[itemsToDeleteFromOrderArray.length] = id;
this.__deleteChildNodes(id,true); // Recursive call.
}
}
if(!recursive){
for(var prop=0;prop<itemsToDeleteFromOrderArray;prop++){
if(!itemsToDeleteFromOrderArray[prop])continue;
this.__deleteItemFromItemOrderArray(itemsToDeleteFromOrderArray[prop]);
}
}
this.__setHasSubs();
}
// }}}
,
// {{{ __deleteANode()
/**
* Deleting a specific node from the menu model
*
* @param int id = Id of node to delete.
*
* @private
*/
// }}}
__deleteANode : function(id)
{
this.menuItems[id] = false;
this.__deleteItemFromItemOrderArray(id);
}
,
// {{{ __deleteItemFromItemOrderArray()
/**
* Deleting a specific node from the menuItemsOrder array(The array controlling the order of the menu items).
*
* @param int id = Id of node to delete.
*
* @private
*/
// }}}
__deleteItemFromItemOrderArray : function(id)
{
for(var no=0;no<this.menuItemsOrder.length;no++){
var tmpId = this.menuItemsOrder[no];
if(!tmpId)continue;
if(this.menuItemsOrder[no]==id){
this.menuItemsOrder.splice(no,1);
return;
}
}
}
// }}}
,
// {{{ __appendMenuModel()
/**
* Replace the sub items of a menu item with items from a new menuModel.
*
* @param menuModel newModel = An object of class menuModel - the items of this menu model will be appended to the existing menu items.
* @param Int parentId = Id of parent element of the appended items.
*
* @private
*/
// }}}
__appendMenuModel : function(newModel,parentId)
{
if(!newModel)return;
var items = newModel.getItems();
for(var no=0;no<newModel.menuItemsOrder.length;no++){
var id = newModel.menuItemsOrder[no];
if(!id)continue;
if(!items[id].parentId)items[id].parentId = parentId;
this.menuItems[id] = items[id];
for(var no2=0;no2<this.menuItemsOrder.length;no2++){ // Check to see if this item allready exists in the menuItemsOrder array, if it does, remove it.
if(!this.menuItemsOrder[no2])continue;
if(this.menuItemsOrder[no2]==items[id].id){
this.menuItemsOrder.splice(no2,1);
}
}
this.menuItemsOrder[this.menuItemsOrder.length] = items[id].id;
}
this.__getDepths();
this.__setHasSubs();
}
// }}}
}
/* Class for menu items - a view */
/************************************************************************************************************
* DHTML menu item class
*
* Created: October, 21st, 2006
* @class Purpose of class: Creates the HTML for a single menu item.
*
* Css files used by this script: menu-item.css
*
* Demos of this class: demo-menu-strip.html
*
* Update log:
*
************************************************************************************************************/
/**
* @constructor
* @class Purpose of class: Creates the div(s) for a menu item. This class is used by the menuBar class. You can
* also create a menu item and add it where you want on your page. the createItem() method will return the div
* for the item. You can use the appendChild() method to add it to your page.
*
* @version 1.0
* @author Alf Magne Kalleland(www.dhtmlgoodies.com)
*/
DHTMLSuite.menuItem = function()
{
var layoutCSS;
var divElement; // the <div> element created for this menu item
var expandElement; // Reference to the arrow div (expand sub items)
var cssPrefix; // Css prefix for the menu items.
var modelItemRef; // Reference to menuModelItem
this.layoutCSS = 'menu-item.css';
this.cssPrefix = 'DHTMLSuite_';
if(!standardObjectsCreated)DHTMLSuite.createStandardObjects();
var objectIndex;
this.objectIndex = DHTMLSuite.variableStorage.arrayDSObjects.length;
}
DHTMLSuite.menuItem.prototype =
{
/*
* Create a menu item.
*
* @param menuModelItem menuModelItemObj = An object of class menuModelItem
*/
createItem : function(menuModelItemObj){
DHTMLSuite.commonObj.loadCSS(this.layoutCSS); // Load css
DHTMLSuite.variableStorage.arrayDSObjects[this.objectIndex] = this;
this.modelItemRef = menuModelItemObj;
this.divElement = 'DHTMLSuite_menuItem' + menuModelItemObj.id;
var div = document.createElement('DIV'); // Create main div
document.body.appendChild(div);
div.id = this.divElement; // Giving this menu item it's unque id
div.className = this.cssPrefix + 'menuItem_' + menuModelItemObj.type + '_regular';
div.onselectstart = function() { return false; };
if(menuModelItemObj.helpText){ // Add "title" attribute to the div tag if helpText is defined
div.title = menuModelItemObj.helpText;
}
// Menu item of type "top"
if(menuModelItemObj.type=='top'){
this.__createMenuElementsOfTypeTop(div);
}
if(menuModelItemObj.type=='sub'){
this.__createMenuElementsOfTypeSub(div);
}
if(menuModelItemObj.separator){
div.className = this.cssPrefix + 'menuItem_separator_' + menuModelItemObj.type;
div.innerHTML = '<span></span>';
}else{
/* Add events */
var tmpVar = this.objectIndex/1;
div.onclick = function(e) { DHTMLSuite.variableStorage.arrayDSObjects[tmpVar].__navigate(e); }
div.onmousedown = this.__clickMenuItem; // on mouse down effect
div.onmouseup = this.__rolloverMenuItem; // on mouse up effect
div.onmouseover = this.__rolloverMenuItem; // mouse over effect
div.onmouseout = this.__rolloutMenuItem; // mouse out effect.
}
DHTMLSuite.commonObj.__addEventEl(div);
return div;
}
// }}}
,
// {{{ setLayoutCss()
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -