📄 button-beta-debug.js
字号:
/** * @method _isActivationKey * @description Determines if the specified keycode is one that toggles * the button's "active" state. * @protected * @param {Number} p_nKeyCode Number representing the keycode to * be evaluated. * @return {Boolean} */ _isActivationKey: function (p_nKeyCode) { var sType = this.get("type"), aKeyCodes = (sType == "checkbox" || sType == "radio") ? this.CHECK_ACTIVATION_KEYS : this.ACTIVATION_KEYS, nKeyCodes = aKeyCodes.length, i; if (nKeyCodes > 0) { i = nKeyCodes - 1; do { if (p_nKeyCode == aKeyCodes[i]) { return true; } } while (i--); } }, /** * @method _isSplitButtonOptionKey * @description Determines if the specified keycode is one that toggles * the display of the split button's menu. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). * @return {Boolean} */ _isSplitButtonOptionKey: function (p_oEvent) { return (p_oEvent.ctrlKey && p_oEvent.shiftKey && Event.getCharCode(p_oEvent) == 77); }, /** * @method _addListenersToForm * @description Adds event handlers to the button's form. * @protected */ _addListenersToForm: function () { var oForm = this.getForm(), oSrcElement, aListeners, nListeners, i, bHasKeyPressListener; if (oForm) { Event.on(oForm, "reset", this._onFormReset, null, this); Event.on(oForm, "submit", this.createHiddenFields, null, this); oSrcElement = this.get("srcelement"); if (this.get("type") == "submit" || (oSrcElement && oSrcElement.type == "submit")) { aListeners = Event.getListeners(oForm, "keypress"); bHasKeyPressListener = false; if (aListeners) { nListeners = aListeners.length; if (nListeners > 0) { i = nListeners - 1; do { if (aListeners[i].fn == YAHOO.widget.Button.onFormKeyPress) { bHasKeyPressListener = true; break; } } while (i--); } } if (!bHasKeyPressListener) { Event.on(oForm, "keypress", YAHOO.widget.Button.onFormKeyPress); } } } }, _originalMaxHeight: -1, /** * @method _showMenu * @description Shows the button's menu. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event) that triggered * the display of the menu. */ _showMenu: function (p_oEvent) { YAHOO.widget.MenuManager.hideVisible(); if (m_oOverlayManager) { m_oOverlayManager.hideAll(); } var oMenu = this._menu, nViewportHeight = Dom.getViewportHeight(), nMenuHeight, nScrollTop, nY; if (oMenu && (oMenu instanceof Menu)) { oMenu.cfg.applyConfig({ context: [this.get("id"), "tl", "bl"], constraintoviewport: false, clicktohide: false, visible: true }); oMenu.cfg.fireQueue(); oMenu.align("tl", "bl"); /* Stop the propagation of the event so that the MenuManager doesn't blur the menu after it gets focus. */ if (p_oEvent.type == "mousedown") { Event.stopPropagation(p_oEvent); } if (this.get("focusmenu")) { this._menu.focus(); } nMenuHeight = oMenu.element.offsetHeight; if ((oMenu.cfg.getProperty("y") + nMenuHeight) > nViewportHeight) { this.logger.log("Current menu position will place a " + "portion, or the entire menu outside the boundary of " + "the viewport. Repositioning the menu to stay " + "inside the viewport."); oMenu.align("bl", "tl"); nY = oMenu.cfg.getProperty("y"); nScrollTop = Dom.getDocumentScrollTop(); if (nScrollTop >= nY) { if (this._originalMaxHeight == -1) { this._originalMaxHeight = oMenu.cfg.getProperty("maxheight"); } oMenu.cfg.setProperty("maxheight", (nMenuHeight - ((nScrollTop - nY) + 20))); oMenu.align("bl", "tl"); } } } else if (oMenu && (oMenu instanceof Overlay)) { oMenu.show(); oMenu.align("tl", "bl"); nMenuHeight = oMenu.element.offsetHeight; if ((oMenu.cfg.getProperty("y") + nMenuHeight) > nViewportHeight) { this.logger.log("Current menu position will place a " + "portion, or the entire menu outside the boundary of " + "the viewport. Repositioning the menu to stay inside" + " the viewport."); oMenu.align("bl", "tl"); } } }, /** * @method _hideMenu * @description Hides the button's menu. * @protected */ _hideMenu: function () { var oMenu = this._menu; if (oMenu) { oMenu.hide(); } }, // Protected event handlers /** * @method _onMouseOver * @description "mouseover" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseOver: function (p_oEvent) { if (!this._hasMouseEventHandlers) { this.on("mouseout", this._onMouseOut); this.on("mousedown", this._onMouseDown); this.on("mouseup", this._onMouseUp); this._hasMouseEventHandlers = true; } this.addStateCSSClasses("hover"); if (this._activationButtonPressed) { this.addStateCSSClasses("active"); } if (this._bOptionPressed) { this.addStateCSSClasses("activeoption"); } }, /** * @method _onMouseOut * @description "mouseout" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseOut: function (p_oEvent) { this.removeStateCSSClasses("hover"); if (this.get("type") != "menu") { this.removeStateCSSClasses("active"); } if (this._activationButtonPressed || this._bOptionPressed) { Event.on(document, "mouseup", this._onDocumentMouseUp, null, this); } }, /** * @method _onDocumentMouseUp * @description "mouseup" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onDocumentMouseUp: function (p_oEvent) { this._activationButtonPressed = false; this._bOptionPressed = false; var sType = this.get("type"); if (sType == "menu" || sType == "split") { this.removeStateCSSClasses( (sType == "menu" ? "active" : "activeoption")); this._hideMenu(); } Event.removeListener(document, "mouseup", this._onDocumentMouseUp); }, /** * @method _onMouseDown * @description "mousedown" event handler for the button. * @protected * @param {Event} p_oEvent Object representing the DOM event object * passed back by the event utility (YAHOO.util.Event). */ _onMouseDown: function (p_oEvent) { var sType, oElement, nX, me; function onMouseUp() { this._hideMenu(); this.removeListener("mouseup", onMouseUp); } if ((p_oEvent.which || p_oEvent.button) == 1) { if (!this.hasFocus()) { this.focus(); } sType = this.get("type"); if (sType == "split") { oElement = this.get("element"); nX = Event.getPageX(p_oEvent) - Dom.getX(oElement); if ((oElement.offsetWidth - this.OPTION_AREA_WIDTH) < nX) { this.fireEvent("option", p_oEvent); } else { this.addStateCSSClasses("active"); this._activationButtonPressed = true; } } else if (sType == "menu") { if (this.isActive()) { this._hideMenu(); this._activationButtonPressed = false; } else { this._showMenu(p_oEvent); this._activationButtonPressed = true; } } else { this.addStateCSSClasses("active"); this._activationButtonPressed = true; } if (sType == "split" || sType == "menu") { me = this;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -