📄 menu4.js
字号:
if ( expand && mi != null ) {
window.setTimeout(
"eventListeners.menuBar.ongotonextmenuitem(\"" + this.id + "\")",
1 );
}
};
MenuBar.prototype._menu_goToPreviousMenuItem = Menu.prototype.goToPreviousMenuItem;
MenuBar.prototype.goToPreviousMenuItem = function () {
var expand = this.getActiveState() == "open";
this._menu_goToPreviousMenuItem();
var mi = this.items[ this.getSelectedIndex() ];
if ( expand && mi != null ) {
window.setTimeout(
"eventListeners.menuBar.ongotopreviousmenuitem(\"" + this.id + "\")",
1 );
}
};
MenuBar.prototype._menu_setSelectedIndex = Menu.prototype.setSelectedIndex;
MenuBar.prototype.setSelectedIndex = function ( nIndex ) {
this._menu_setSelectedIndex( nIndex );
this.active = nIndex != -1;
};
MenuBar.prototype.setActive = function ( bActive ) {
if ( this.active != bActive ) {
this.active = Boolean( bActive );
if ( this.active ) {
this.setSelectedIndex( 0 );
this.backupFocused();
window.focus();
}
else {
this.setSelectedIndex( -1 );
this.restoreFocused();
}
}
};
MenuBar.prototype.toggleActive = function () {
if ( this.getActiveState() == "active" )
this.setActive( false );
else if ( this.getActiveState() == "inactive" )
this.setActive( true );
};
// returns active, inactive or open
MenuBar.prototype.getActiveState = function () {
if ( this.shownSubMenu != null || this._aboutToShowSubMenu)
return "open";
else if ( this.active )
return "active";
else
return "inactive";
};
MenuBar.prototype.backupFocused = function () {
this._activeElement = this._document.activeElement;
};
MenuBar.prototype.restoreFocused = function () {
try {
this._activeElement.focus();
}
catch (ex) {}
delete this._activeElement;
};
MenuBar.prototype.destroy = function () {
var l = this.items.length;
for ( var i = l -1; i >= 0; i-- )
this.items[i].destroy();
this.detachEvents();
this._activeElement = null;
this._htmlElement = null;
this._document = null;
this.items = [];
this.shownSubMenu = null;
this.eventListeners = null;
menuCache.remove( this );
};
////////////////////////////////////////////////////////////////////////////////////
// MenuButton extends MenuItem
//
function MenuButton( sLabelText, oSubMenu ) {
this.MenuItem = MenuItem;
this.MenuItem( sLabelText, null, null, oSubMenu );
// private
this._hover = false;
this._useInsets = false; // should insets be taken into account when showing sub menu
}
MenuButton.prototype = new MenuItem;
MenuButton.prototype.subMenuDirection = "vertical";
MenuButton.prototype.scrollIntoView = function () {};
MenuButton.prototype.toHtml = function () {
var cssClass = this.getCssClass();
var toolTip = this.getToolTip();
if ( this.subMenu && !this.subMenu._onclose )
this.subMenu._onclose = new Function( "eventListeners.menuButton.onclose(\"" + this.id + "\")" );
return "<span unselectable=\"on\" " +
(cssClass != "" ? " class=\"" + cssClass + "\"" : "") +
(toolTip != "" ? " title=\"" + toolTip + "\"" : "") +
(!this.visible ? " style=\"display: none\"" : "") +
"><span unselectable=\"on\" class=\"left\"></span>" +
"<span unselectable=\"on\" class=\"middle\">" +
this.getTextHtml() +
"</span>" +
"<span unselectable=\"on\" class=\"right\"></span>" +
"</span>";
};
MenuButton.prototype.getCssClass = function () {
if ( this.disabled && this._selected )
return "menu-button disabled-hover";
else if ( this.disabled )
return "menu-button disabled";
else if ( this._selected ) {
if ( this.parentMenu.getActiveState() == "open" ) {
return "menu-button active";
}
else
return "menu-button hover";
}
else if ( this._hover )
return "menu-button hover";
return "menu-button ";
};
MenuButton.prototype.subMenuClosed = function () {
if ( this.subMenu._closeReason == "escape" )
this.setSelected( true );
else
this.setSelected( false );
if ( this.parentMenu.getActiveState() == "inactive" )
this.parentMenu.restoreFocused();
};
MenuButton.prototype.setSelected = function ( bSelected ) {
var oldSelected = this._selected;
this._selected = Boolean( bSelected );
var tr = this._htmlElement;
if ( tr )
tr.className = this.getCssClass();
if ( this._selected == oldSelected )
return;
if ( !this._selected )
this.closeSubMenu( true );
if ( bSelected ) {
this.parentMenu.setSelectedIndex( this.itemIndex );
this.scrollIntoView();
}
else
this.parentMenu.setSelectedIndex( -1 );
};
////////////////////////////////////////////////////////////////////////////////////
// event listener
//
var eventListeners = {
menu: {
onkeydown: function ( id ) {
var oThis = menuCache[id];
var w = oThis.getDocument().parentWindow;
oThis.handleKeyEvent( w.event );
},
onunload: function ( id ) {
if (id in menuCache) {
menuCache[id].closeAllMenus();
menuCache[id].destroy();
}
// else already destroyed
},
oncontextmenu: function ( id ) {
var oThis = menuCache[id];
var w = oThis.getDocument().parentWindow;
w.event.returnValue = false;
},
onscroll: function ( id ) {
menuCache[id].fixScrollEnabledState();
},
onmouseover: function ( id ) {
var oThis = menuCache[id];
var w = oThis.getDocument().parentWindow;
var fromEl = getTrElement( w.event.fromElement );
var toEl = getTrElement( w.event.toElement );
if ( toEl != null && toEl != fromEl ) {
var mi = toEl._menuItem;
if ( mi ) {
if ( !mi.disabled || oThis.mouseHoverDisabled ) {
mi.setSelected( true );
mi.showSubMenu( true );
}
}
else { // scroll button
if (toEl.className == "disabled" || toEl.className == "disabled-hover" )
toEl.className = "disabled-hover";
else
toEl.className = "hover";
oThis.selectedIndex = -1;
}
}
},
onmouseout: function ( id ) {
var oThis = menuCache[id];
var w = oThis.getDocument().parentWindow;
var fromEl = getTrElement( w.event.fromElement );
var toEl = getTrElement( w.event.toElement );
if ( fromEl != null && toEl != fromEl ) {
var id = fromEl.parentNode.parentNode.id;
var mi = fromEl._menuItem;
if ( id == "scroll-up-item" || id == "scroll-down-item" ) {
if (fromEl.className == "disabled-hover" || fromEl.className == "disabled" )
fromEl.className = "disabled";
else
fromEl.className = "";
oThis.selectedIndex = -1;
}
else if ( mi &&
( toEl != null || mi.subMenu == null || mi.disabled ) ) {
mi.setSelected( false );
}
}
},
onmouseup: function ( id ) {
var oThis = menuCache[id];
var w = oThis.getDocument().parentWindow;
var srcEl = getMenuItemElement( w.event.srcElement );
if ( srcEl != null ) {
var id = srcEl.parentNode.parentNode.id;
if ( id == "scroll-up-item" || id == "scroll-down-item" ) {
return;
}
oThis.selectedIndex = srcEl.rowIndex;
var menuItem = oThis.items[ oThis.selectedIndex ];
menuItem.dispatchAction();
}
},
onmousewheel: function ( id ) {
var oThis = menuCache[id];
var d = oThis.getDocument();
var w = d.parentWindow;
var scrollContainer = d.getElementById("scroll-container");
scrollContainer.scrollTop -= 3 * w.event.wheelDelta / 120 * ScrollButton.scrollAmount;
},
onreadystatechange: function ( id ) {
var oThis = menuCache[id];
var d = oThis.getDocument();
var linkEl = d.getElementsByTagName("LINK")[0];
if ( linkEl.readyState == "complete" ) {
oThis.resetSizeCache(); // reset sizes
oThis.fixSize();
oThis.fixScrollButtons();
}
},
oncloseinterval: function ( id ) {
menuCache[id]._checkCloseState();
}
},
menuItem: {
onshowtimer: function ( id ) {
var oThis = menuCache[id];
var sm = oThis.subMenu;
var pm = oThis.parentMenu;
var selectedIndex = sm.getSelectedIndex();
pm.closeAllSubs( sm );
window.setTimeout( "eventListeners.menuItem.onshowtimer2(\"" + id + "\")", 1);
},
onshowtimer2: function ( id ) {
var oThis = menuCache[id];
var sm = oThis.subMenu;
var selectedIndex = sm.getSelectedIndex();
oThis.positionSubMenu();
sm.setSelectedIndex( selectedIndex );
oThis.setSelected( true );
},
onclosetimer: function ( id ) {
var oThis = menuCache[id];
var sm = oThis.subMenu;
sm.close();
},
onpositionsubmenutimer: function ( id ) {
var oThis = menuCache[id];
var sm = oThis.subMenu;
sm.resetSizeCache(); // reset sizes
oThis.positionSubMenu();
sm.setSelectedIndex( 0 );
}
},
menuBar: {
onmouseover: function ( id ) {
var oThis = menuCache[id];
var e = oThis.getDocument().parentWindow.event;
var fromEl = getMenuItemElement( e.fromElement );
var toEl = getMenuItemElement( e.toElement );
if ( toEl != null && toEl != fromEl ) {
var mb = toEl._menuItem;
var m = mb.parentMenu;
if ( m.getActiveState() == "open" ) {
window.setTimeout( function () {
mb.dispatchAction();
}, 1);
}
else if ( m.getActiveState() == "active" ) {
mb.setSelected( true );
}
else {
mb._hover = true;
toEl.className = mb.getCssClass();
}
}
},
onmouseout: function ( id ) {
var oThis = menuCache[id];
var e = oThis.getDocument().parentWindow.event;
var fromEl = getMenuItemElement( e.fromElement );
var toEl = getMenuItemElement( e.toElement );
if ( fromEl != null && toEl != fromEl ) {
var mb = fromEl._menuItem;
mb._hover = false;
fromEl.className = mb.getCssClass();
}
},
onmousedown: function ( id ) {
var oThis = menuCache[id];
var e = oThis.getDocument().parentWindow.event;
if ( e.button != MenuBar.leftMouseButton )
return;
var el = getMenuItemElement( e.srcElement );
if ( el != null ) {
var mb = el._menuItem;
if ( mb.subMenu ) {
mb.subMenu._checkCloseState();
if ( new Date() - mb.subMenu._closedAt > 100 ) { // longer than the time to
// do the hide
mb.dispatchAction();
}
else {
mb._hover = true;
mb._htmlElement.className = mb.getCssClass();
}
}
}
},
onkeydown: function ( id ) {
var oThis = menuCache[id];
var e = oThis.getDocument().parentWindow.event;
oThis.handleKeyEvent( e );
},
onunload: function ( id ) {
menuCache[id].destroy();
},
ongotonextmenuitem: function ( id ) {
var oThis = menuCache[id];
var mi = oThis.items[ oThis.getSelectedIndex() ];
mi.dispatchAction();
if ( mi.subMenu )
mi.subMenu.setSelectedIndex( 0 );
},
ongotopreviousmenuitem: function ( id ) {
var oThis = menuCache[id];
var mi = oThis.items[ oThis.getSelectedIndex() ];
mi.dispatchAction();
if ( mi.subMenu )
mi.subMenu.setSelectedIndex( 0 );
}
},
menuButton: {
onclose: function ( id ) {
menuCache[id].subMenuClosed();
}
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -