📄 menu4.js
字号:
top = 0;
height = screenHeight
}
if ( rect.left + rect.width + menuRect.width - menuRect.insetLeft <= screenWidth )
left = rect.left + rect.width - menuRect.insetLeft;
else if ( rect.left - menuRect.width + menuRect.insetRight >= 0 )
left = rect.left - menuRect.width + menuRect.insetRight;
else if ( screenWidth >= menuRect.width )
left = screenWidth - menuRect.width;
else
left = 0;
}
var scrollBefore = sm._scrollingMode;
sm.show( left, top, width, height );
if ( sm._scrollingMode != scrollBefore )
this.positionSubMenu();
};
MenuItem.prototype.destroy = function () {
if ( this.subMenu != null )
this.subMenu.destroy();
this.subMenu = null;
this.parentMenu = null;
var el = this._htmlElement
if ( el != null )
el._menuItem = null;
this._htmlElement = null;
menuCache.remove( this );
};
///////////////////////////////////////////////////////////////////////////////
// CheckBoxMenuItem extends MenuItem
//
function CheckBoxMenuItem( sLabelText, bChecked, fAction, oSubMenu ) {
this.MenuItem = MenuItem;
this.MenuItem( sLabelText, fAction, null, oSubMenu);
// public
this.checked = bChecked;
}
CheckBoxMenuItem.prototype = new MenuItem;
CheckBoxMenuItem.prototype.getIconHtml = function () {
return "<span class=\"check-box\">" +
(this.checked ? "a" : " ") +
"</span>";
};
CheckBoxMenuItem.prototype.getIconCellHtml = function () {
return "<td class=\"icon-cell\">" +
this.makeDisabledContainer(
this.getIconHtml()
) +
"</td>";
};
CheckBoxMenuItem.prototype.getCssClass = function () {
var s = (this.checked ? " checked" : "");
if ( this.disabled && this._selected )
return "disabled-hover" + s;
else if ( this.disabled )
return "disabled" + s;
else if ( this._selected )
return "hover" + s;
return s;
};
CheckBoxMenuItem.prototype._menuItem_dispatchAction =
MenuItem.prototype.dispatchAction;
CheckBoxMenuItem.prototype.dispatchAction = function () {
if (!this.disabled) {
this.checked = !this.checked;
this._menuItem_dispatchAction();
this.parentMenu.invalidate();
this.parentMenu.closeAllMenus();
}
};
///////////////////////////////////////////////////////////////////////////////
// RadioButtonMenuItem extends MenuItem
//
function RadioButtonMenuItem( sLabelText, bChecked, sRadioGroupName, fAction, oSubMenu ) {
this.MenuItem = MenuItem;
this.MenuItem( sLabelText, fAction, null, oSubMenu );
// public
this.checked = bChecked;
this.radioGroupName = sRadioGroupName;
}
RadioButtonMenuItem.prototype = new MenuItem;
RadioButtonMenuItem.prototype.getIconHtml = function () {
return "<span class=\"radio-button\">" +
(this.checked ? "n" : " ") +
"</span>";
};
RadioButtonMenuItem.prototype.getIconCellHtml = function () {
return "<td class=\"icon-cell\">" +
this.makeDisabledContainer(
this.getIconHtml()
) +
"</td>";
};
RadioButtonMenuItem.prototype.getCssClass = function () {
var s = (this.checked ? " checked" : "");
if ( this.disabled && this._selected )
return "disabled-hover" + s;
else if ( this.disabled )
return "disabled" + s;
else if ( this._selected )
return "hover" + s;
return s;
};
RadioButtonMenuItem.prototype._menuItem_dispatchAction =
MenuItem.prototype.dispatchAction;
RadioButtonMenuItem.prototype.dispatchAction = function () {
if (!this.disabled) {
if ( !this.checked ) {
// loop through items in parent menu
var items = this.parentMenu.items;
var l = items.length;
for ( var i = 0; i < l; i++ ) {
if ( items[i] instanceof RadioButtonMenuItem ) {
if ( items[i].radioGroupName == this.radioGroupName ) {
items[i].checked = items[i] == this;
}
}
}
this.parentMenu.invalidate();
}
this._menuItem_dispatchAction();
this.parentMenu.closeAllMenus();
}
};
///////////////////////////////////////////////////////////////////////////////
// MenuSeparator extends MenuItem
//
function MenuSeparator() {
this.MenuItem = MenuItem;
this.MenuItem();
}
MenuSeparator.prototype = new MenuItem;
MenuSeparator.prototype.toHtml = function () {
return "<tr class=\"" + this.getCssClass() + "\"" +
(!this.visible ? " style=\"display: none\"" : "") +
"><td colspan=\"4\">" +
"<div class=\"separator-line\"></div>" +
"</td></tr>";
};
MenuSeparator.prototype.getCssClass = function () {
return "separator";
};
////////////////////////////////////////////////////////////////////////////////////
// MenuBar extends Menu
//
function MenuBar() {
this.items = [];
this.parentMenu = null;
this.parentMenuItem = null;
this.shownSubMenu = null;
this._aboutToShowSubMenu = false;
this.active = false;
this.id = menuCache.getId();
menuCache[ this.id ] = this;
}
MenuBar.prototype = new Menu;
MenuBar.prototype._document = null;
MenuBar.leftMouseButton = 1;
MenuBar.prototype.toHtml = function () {
var items = this.items;
var l = items.length;
var itemsHtml = new Array( l );
for (var i = 0; i < l; i++ )
itemsHtml[i] = items[i].toHtml();
return "<div class=\"menu-bar\" id=\"" + this.id + "\">" +
itemsHtml.join( "" ) +
"</div>";
};
MenuBar.prototype.invalidate = function () {
if (this._htmlElement) {
this.detachEvents();
var oldEl = this._htmlElement;
var newEl = this.create(this._document);
oldEl.parentNode.replaceChild(newEl, oldEl);
}
};
MenuBar.prototype.createPopup = function () {};
MenuBar.prototype.getPopup= function () {};
MenuBar.prototype.drawMenu = function () {};
MenuBar.prototype.getDocument = function () {
return this._document;
};
MenuBar.prototype.show = function ( left, top, w, h ) {};
MenuBar.prototype.isShown = function () { return true; };
MenuBar.prototype.fixSize = function () {}
MenuBar.prototype.getWidth = function () {
return this._htmlElement.offsetWidth;
};
MenuBar.prototype.getHeight = function () {
return this._htmlElement.offsetHeight;
};
MenuBar.prototype.getPreferredWidth = function () {
var el = this._htmlElement;
el.runtimStyle.whiteSpace = "nowrap";
var sw = el.scrollWidth;
el.runtimStyle.whiteSpace = "";
return sw + parseInt( el.currentStyle.borderLeftWidth ) +
parseInt( el.currentStyle.borderRightWidth );
};
MenuBar.prototype.getPreferredHeight = function () {
var el = this._htmlElement;
el.runtimStyle.whiteSpace = "nowrap";
var sw = el.scrollHeight;
el.runtimStyle.whiteSpace = "";
return sw + parseInt( el.currentStyle.borderTopWidth ) +
parseInt( el.currentStyle.borderBottomWidth );
};
MenuBar.prototype.getLeft = function () {
return posLib.getScreenLeft( this._htmlElement );
};
MenuBar.prototype.getTop = function () {
return posLib.getScreenLeft( this._htmlElement );
};
MenuBar.prototype.setLeft = function ( l ) {};
MenuBar.prototype.setTop = function ( t ) {};
MenuBar.prototype.setLocation = function ( l, t ) {};
MenuBar.prototype.setRect = function ( l, t, w, h ) {};
MenuBar.prototype.getInsetLeft = function () {
return parseInt( this._htmlElement.currentStyle.borderLeftWidth );
};
MenuBar.prototype.getInsetRight = function () {
return parseInt( this._htmlElement.currentStyle.borderRightWidth );
};
MenuBar.prototype.getInsetTop = function () {
return parseInt( this._htmlElement.currentStyle.borderTopWidth );
};
MenuBar.prototype.getInsetBottom = function () {
return parseInt( this._htmlElement.currentStyle.borderBottomWidth );
};
MenuBar.prototype.fixScrollButtons = function () {};
MenuBar.prototype.fixScrollEnabledState = function () {};
MenuBar.prototype.makeEventListeners = function () {
if ( this.eventListeners != null )
return;
this.eventListeners = {
onmouseover: new Function( "eventListeners.menuBar.onmouseover(\"" + this.id + "\")" ),
onmouseout: new Function( "eventListeners.menuBar.onmouseout(\"" + this.id + "\")" ),
onmousedown: new Function( "eventListeners.menuBar.onmousedown(\"" + this.id + "\")" ),
onkeydown: new Function( "eventListeners.menuBar.onkeydown(\"" + this.id + "\")" ),
onunload: new Function( "eventListeners.menuBar.onunload(\"" + this.id + "\")" )
};
};
MenuBar.prototype.detachEvents = function () {
if ( this.eventListeners == null )
return;
this._htmlElement.detachEvent( "onmouseover", this.eventListeners.onmouseover );
this._htmlElement.detachEvent( "onmouseout", this.eventListeners.onmouseout );
this._htmlElement.detachEvent( "onmousedown", this.eventListeners.onmousedown );
this._document.detachEvent( "onkeydown", this.eventListeners.onkeydown );
window.detachEvent( "onunload", this.eventListeners.onunload );
}
MenuBar.prototype.hookupMenu = function ( element ) {
if ( !this._document )
this._document = element.document;
this.detachEvents();
this.makeEventListeners();
// create shortcut to html element
this._htmlElement = element;
element.unselectable = "on";
// and same for menu buttons
var cs = element.childNodes;
var items = this.items;
var l = cs.length;
for ( var i = 0; i < l; i++ ) {
items[i]._htmlElement = cs[i];
cs[i]._menuItem = items[i];
}
// hook up events
element.attachEvent( "onmouseover", this.eventListeners.onmouseover );
element.attachEvent( "onmouseout", this.eventListeners.onmouseout );
element.attachEvent( "onmousedown", this.eventListeners.onmousedown );
this._document.attachEvent( "onkeydown", this.eventListeners.onkeydown );
window.attachEvent( "onunload", this.eventListeners.onunload );
};
function getMenuItemElement( el ) {
while ( el != null && el._menuItem == null)
el = el.parentNode;
return el;
}
function getTrElement( el ) {
while ( el != null && el.tagName != "TR" )
el = el.parentNode;
return el;
}
MenuBar.prototype.write = function (oDocument) {
this._document = oDocument || document;
this._document.write( this.toHtml() );
var el = this._document.getElementById( this.id );
this.hookupMenu( el );
};
MenuBar.prototype.create = function (oDocument) {
this._document = oDocument || document;
var dummyDiv = this._document.createElement( "DIV" );
dummyDiv.innerHTML = this.toHtml();
var el = dummyDiv.removeChild( dummyDiv.firstChild );
this.hookupMenu( el );
return el;
};
MenuBar.prototype.handleKeyEvent = function ( e ) {
if ( this.getActiveState() == "open" )
return;
var nKeyCode = e.keyCode;
if ( this.active && e[ Menu.keyboardAccelProperty ] ) {
e.returnValue = false;
e.keyCode = 0;
}
if ( nKeyCode == Menu.keyboardAccelKey || nKeyCode == Menu.keyboardAccelKey2 ) {
if ( !e.repeat ) {
this.toggleActive();
}
e.returnValue = false;
e.keyCode = 0;
return;
}
if ( !this.active ) {
// do not set return value to true
return;
}
switch ( nKeyCode ) {
case 39: // right
this.goToNextMenuItem();
e.returnValue = false;
break;
case 37: // left
this.goToPreviousMenuItem();
e.returnValue = false;
break;
case 40: // down
case 38: // up
case 13: // enter
var mi = this.items[ this.getSelectedIndex() ];
if ( mi ) {
mi.dispatchAction();
if ( mi.subMenu )
mi.subMenu.setSelectedIndex( 0 );
}
e.returnValue = false;
break;
case 27: // esc
// we need to make sure that the menu bar looses its current
// keyboard activation state
this.setActive( false );
e.returnValue = false;
break;
default:
// find any mnemonic that matches
var c = String.fromCharCode( nKeyCode ).toLowerCase();
var items = this.items;
var l = items.length;
for ( var i = 0; i < l; i++ ) {
if ( items[i].mnemonic == c ) {
items[i].dispatchAction();
e.returnValue = false;
break;
}
}
}
};
MenuBar.prototype.getMenuBar = function () {
return this;
};
MenuBar.prototype._menu_goToNextMenuItem = Menu.prototype.goToNextMenuItem;
MenuBar.prototype.goToNextMenuItem = function () {
var expand = this.getActiveState() == "open";
this._menu_goToNextMenuItem();
var mi = this.items[ this.getSelectedIndex() ];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -