menu.js
来自「国外很不错的一个开源OA系统Group-Office」· JavaScript 代码 · 共 2,751 行 · 第 1/5 页
JS
2,751 行
this.lazyLoad = p_oConfig.lazyLoad || p_oConfig.lazyload; this.itemData = p_oConfig.itemData || p_oConfig.itemdata; } YAHOO.widget.Menu.superclass.constructor.call( this, p_oElement, p_oConfig );};YAHOO.extend(YAHOO.widget.Menu, YAHOO.widget.Overlay, {// Constants/*** @property CSS_CLASS_NAME* @description String representing the CSS class(es) to be applied to the* menu's <code><div></code> element.* @default "yuimenu"* @final* @type String*/CSS_CLASS_NAME: "yuimenu",/*** @property ITEM_TYPE* @description Object representing the type of menu item to instantiate and* add when parsing the child nodes (either <code><li></code> element,* <code><optgroup></code> element or <code><option></code>)* of the menu's source HTML element.* @default YAHOO.widget.MenuItem* @final* @type YAHOO.widget.MenuItem*/ITEM_TYPE: null,/*** @property GROUP_TITLE_TAG_NAME* @description String representing the tagname of the HTML element used to* title the menu's item groups.* @default H6* @final* @type String*/GROUP_TITLE_TAG_NAME: "h6",// Private properties/*** @property _nHideDelayId* @description Number representing the time-out setting used to cancel the* hiding of a menu.* @default null* @private* @type Number*/_nHideDelayId: null,/*** @property _nShowDelayId* @description Number representing the time-out setting used to cancel the* showing of a menu.* @default null* @private* @type Number*/_nShowDelayId: null,/*** @property _hideDelayEventHandlersAssigned* @description Boolean indicating if the "mouseover" and "mouseout" event* handlers used for hiding the menu via a call to "window.setTimeout" have* already been assigned.* @default false* @private* @type Boolean*/_hideDelayEventHandlersAssigned: false,/*** @property _bHandledMouseOverEvent* @description Boolean indicating the current state of the menu's* "mouseover" event.* @default false* @private* @type Boolean*/_bHandledMouseOverEvent: false,/*** @property _bHandledMouseOutEvent* @description Boolean indicating the current state of the menu's* "mouseout" event.* @default false* @private* @type Boolean*/_bHandledMouseOutEvent: false,/*** @property _aGroupTitleElements* @description Array of HTML element used to title groups of menu items.* @default []* @private* @type Array*/_aGroupTitleElements: null,/*** @property _aItemGroups* @description Array of menu items.* @default []* @private* @type Array*/_aItemGroups: null,/*** @property _aListElements* @description Array of <code><ul></code> elements, each of which is* the parent node for each item's <code><li></code> element.* @default []* @private* @type Array*/_aListElements: null,// Public properties/*** @property lazyLoad* @description Boolean indicating if the menu's "lazy load" feature is* enabled. If set to "true," initialization and rendering of the menu's* items will be deferred until the first time it is made visible. This* property should be set via the constructor using the configuration* object literal.* @default false* @type Boolean*/lazyLoad: false,/*** @property itemData* @description Array of items to be added to the menu. The array can contain* strings representing the text for each item to be created, object literals* representing the menu item configuration properties, or MenuItem instances.* This property should be set via the constructor using the configuration* object literal.* @default null* @type Array*/itemData: null,/*** @property activeItem* @description Object reference to the item in the menu that has focus.* @default null* @type YAHOO.widget.MenuItem*/activeItem: null,/*** @property parent* @description Object reference to the menu's parent menu or menu item.* This property can be set via the constructor using the configuration* object literal.* @default null* @type YAHOO.widget.MenuItem*/parent: null,/*** @property srcElement* @description Object reference to the HTML element (either* <code><select></code> or <code><div></code>) used to* create the menu.* @default null* @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/* level-one-html.html#ID-94282980">HTMLSelectElement</a>|<a* href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.* html#ID-22445964">HTMLDivElement</a>*/srcElement: null,// Events/*** @event mouseOverEvent* @description Fires when the mouse has entered the menu. Passes back* the DOM Event object as an argument.*/mouseOverEvent: null,/*** @event mouseOutEvent* @description Fires when the mouse has left the menu. Passes back the DOM* Event object as an argument.* @type YAHOO.util.CustomEvent*/mouseOutEvent: null,/*** @event mouseDownEvent* @description Fires when the user mouses down on the menu. Passes back the* DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/mouseDownEvent: null,/*** @event mouseUpEvent* @description Fires when the user releases a mouse button while the mouse is* over the menu. Passes back the DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/mouseUpEvent: null,/*** @event clickEvent* @description Fires when the user clicks the on the menu. Passes back the* DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/clickEvent: null,/*** @event keyPressEvent* @description Fires when the user presses an alphanumeric key when one of the* menu's items has focus. Passes back the DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/keyPressEvent: null,/*** @event keyDownEvent* @description Fires when the user presses a key when one of the menu's items* has focus. Passes back the DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/keyDownEvent: null,/*** @event keyUpEvent* @description Fires when the user releases a key when one of the menu's items* has focus. Passes back the DOM Event object as an argument.* @type YAHOO.util.CustomEvent*/keyUpEvent: null,/*** @event itemAddedEvent* @description Fires when an item is added to the menu.* @type YAHOO.util.CustomEvent*/itemAddedEvent: null,/*** @event itemRemovedEvent* @description Fires when an item is removed to the menu.* @type YAHOO.util.CustomEvent*/itemRemovedEvent: null,/*** @method init* @description The Menu class's initialization method. This method is* automatically called by the constructor, and sets up all DOM references* for pre-existing markup, and creates required markup if it is not* already present.* @param {String} p_oElement String specifying the id attribute of the* <code><div></code> element of the menu.* @param {String} p_oElement String specifying the id attribute of the* <code><select></code> element to be used as the data source* for the menu.* @param {<a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/* level-one-html.html#ID-22445964">HTMLDivElement</a>} p_oElement Object* specifying the <code><div></code> element of the menu.* @param {<a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/* level-one-html.html#ID-94282980">HTMLSelectElement</a>} p_oElement* Object specifying the <code><select></code> element to be used as* the data source for the menu.* @param {Object} p_oConfig Optional. Object literal specifying the* configuration for the menu. See configuration class documentation for* more details.*/init: function(p_oElement, p_oConfig) { this._aItemGroups = []; this._aListElements = []; this._aGroupTitleElements = []; if(!this.ITEM_TYPE) { this.ITEM_TYPE = YAHOO.widget.MenuItem; } var oElement; if(typeof p_oElement == "string") { oElement = document.getElementById(p_oElement); } else if(p_oElement.tagName) { oElement = p_oElement; } if(oElement && oElement.tagName) { switch(oElement.tagName.toUpperCase()) { case "DIV": this.srcElement = oElement; if(!oElement.id) { oElement.setAttribute("id", Dom.generateId()); } /* Note: we don't pass the user config in here yet because we only want it executed once, at the lowest subclass level. */ YAHOO.widget.Menu.superclass.init.call(this, oElement); this.beforeInitEvent.fire(YAHOO.widget.Menu); break; case "SELECT": this.srcElement = oElement; /* The source element is not something that we can use outright, so we need to create a new Overlay Note: we don't pass the user config in here yet because we only want it executed once, at the lowest subclass level. */ YAHOO.widget.Menu.superclass.init.call(this, Dom.generateId()); this.beforeInitEvent.fire(YAHOO.widget.Menu); break; } } else { /* Note: we don't pass the user config in here yet because we only want it executed once, at the lowest subclass level. */ YAHOO.widget.Menu.superclass.init.call(this, p_oElement); this.beforeInitEvent.fire(YAHOO.widget.Menu); } if(this.element) { var oEl = this.element; Dom.addClass(oEl, this.CSS_CLASS_NAME); // Subscribe to Custom Events this.initEvent.subscribe(this._onInit, this, true); this.beforeRenderEvent.subscribe(this._onBeforeRender, this, true); this.renderEvent.subscribe(this._onRender, this, true); this.beforeShowEvent.subscribe(this._onBeforeShow, this, true); this.showEvent.subscribe(this._onShow, this, true); this.beforeHideEvent.subscribe(this._onBeforeHide, this, true); this.mouseOverEvent.subscribe(this._onMouseOver, this, true); this.mouseOutEvent.subscribe(this._onMouseOut, this, true); this.clickEvent.subscribe(this._onClick, this, true); this.keyDownEvent.subscribe(this._onKeyDown, this, true); if(p_oConfig) { this.cfg.applyConfig(p_oConfig, true); } // Register the Menu instance with the MenuManager YAHOO.widget.MenuManager.addMenu(this); this.initEvent.fire(YAHOO.widget.Menu); }},// Private methods/*** @method _initSubTree* @description Iterates the childNodes of the source element to find nodes* used to instantiate menu and menu items.* @private*/_initSubTree: function() { var oNode; if(this.srcElement.tagName == "DIV") { /* Populate the collection of item groups and item group titles */ oNode = this.body.firstChild; var nGroup = 0; var sGroupTitleTagName = this.GROUP_TITLE_TAG_NAME.toUpperCase(); do { if(oNode && oNode.tagName) { switch(oNode.tagName.toUpperCase()) { case sGroupTitleTagName: this._aGroupTitleElements[nGroup] = oNode; break; case "UL": this._aListElements[nGroup] = oNode; this._aItemGroups[nGroup] = []; nGroup++; break; } } } while((oNode = oNode.nextSibling)); /* Apply the "first-of-type" class to the first UL to mimic the "first-of-type" CSS3 psuedo class. */ if(this._aListElements[0]) { Dom.addClass(this._aListElements[0], "first-of-type"); } } oNode = null; if(this.srcElement.tagName) { switch(this.srcElement.tagName.toUpperCase()) { case "DIV": if(this._aListElements.length > 0) { var i = this._aListElements.length - 1; do { oNode = this._aListElements[i].firstChild; do { if(oNode && oNode.tagName) { switch(oNode.tagName.toUpperCase()) { case "LI": this.addItem( new this.ITEM_TYPE( oNode, { parent: this } ), i ); break; } } } while((oNode = oNode.nextSibling)); } while(i--); } break; case "SELECT": oNode = this.srcElement.firstChild; do { if(oNode && oNode.tagName) { switch(oNode.tagName.toUpperCase()) { case "OPTGROUP": case "OPTION": this.addItem( new this.ITEM_TYPE( oNode, { parent: this } ) );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?