📄 mtmcode.js
字号:
// Morten's JavaScript Tree Menu
// version 2.3.2-macfriendly, dated 2002-06-10
// http://www.treemenu.com/
// Copyright (c) 2001-2002, Morten Wang & contributors
// All rights reserved.
// This software is released under the BSD License which should accompany
// it in the file "COPYING". If you do not have this file you can access
// the license through the WWW at http://www.treemenu.com/license.txt
/******************************************************************************
* Define the MenuItem object. *
******************************************************************************/
function MTMenuItem(text, url, target, tooltip, icon, openIcon) {
this.text = text;
this.url = url ? url : "";
this.target = target ? target : (MTMDefaultTarget ? MTMDefaultTarget : "");
this.tooltip = tooltip;
this.icon = icon ? icon : "";
this.openIcon = openIcon ? openIcon : ""; // used for addSubItem
this.number = MTMNumber++;
this.parentNode = null;
this.submenu = null;
this.expanded = false;
this.MTMakeSubmenu = MTMakeSubmenu;
this.makeSubmenu = MTMakeSubmenu;
this.addSubItem = MTMAddSubItem;
MTMLastItem = this;
}
function MTMakeSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
this.submenu = menu;
this.expanded = isExpanded;
this.collapseIcon = collapseIcon ? collapseIcon : "menu_folder_closed.gif";
this.expandIcon = expandIcon ? expandIcon : "menu_folder_open.gif";
var i;
for(i = 0; i < this.submenu.items.length; i++) {
this.submenu.items[i].parentNode = this;
if(this.submenu.items[i].expanded) {
this.expanded = true;
}
}
}
function MTMakeLastSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
this.items[this.items.length-1].makeSubmenu(menu, isExpanded, collapseIcon, expandIcon);
}
function MTMAddSubItem(item) {
if(this.submenu == null){
this.MTMakeSubmenu(new MTMenu(), false, this.icon, this.openIcon);
}
this.submenu.MTMAddItem(item);
}
/******************************************************************************
* Define the Menu object. *
******************************************************************************/
function MTMenu() {
this.items = new Array();
this.MTMAddItem = MTMAddItem;
this.addItem = MTMAddItem;
this.makeLastSubmenu = MTMakeLastSubmenu;
}
function MTMAddItem() {
if(arguments[0].toString().indexOf("[object Object]") != -1) {
this.items[this.items.length] = arguments[0];
} else {
this.items[this.items.length] = new MTMenuItem(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
}
}
/******************************************************************************
* Define the icon list, addIcon function and MTMIcon item. *
******************************************************************************/
function IconList() {
this.items = new Array();
this.addIcon = addIcon;
}
function addIcon(item) {
this.items[this.items.length] = item;
}
function MTMIcon(iconfile, match, type) {
this.file = iconfile;
this.match = match;
this.type = type;
}
/******************************************************************************
* Define the stylesheet rules objects and methods. *
******************************************************************************/
function MTMstyleRuleSet() {
this.rules = new Array();
this.addRule = MTMaddStyleRule;
}
function MTMaddStyleRule(thisSelector, thisStyle) {
this.rules[this.rules.length] = new MTMstyleRule(thisSelector, thisStyle);
}
function MTMstyleRule(thisSelector, thisStyle) {
this.selector = thisSelector;
this.style = thisStyle;
}
/******************************************************************************
* The MTMBrowser object. A custom "user agent" that'll define the browser *
* seen from the menu's point of view. *
******************************************************************************/
function MTMBrowser() {
// default properties and values
this.cookieEnabled = false;
this.preHREF = "";
this.MTMable = false;
this.cssEnabled = true;
this.browserType = "other";
this.majVersion = null;
this.DOMable = null;
// properties concerning output document
this.menuFrame = null;
this.document = null;
this.head = null;
this.menuTable = null;
// methods
this.setDocument = MTMsetDocument;
this.getFrames = MTMgetFrames;
this.appendElement = MTMappendElement;
this.resolveURL = MTMresolveURL;
if(navigator.userAgent.indexOf("Opera") != -1) {
if(navigator.appName == "Opera") {
this.majVersion = parseInt(navigator.appVersion);
} else {
this.majVersion = parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("Opera")+6));
}
if(this.majVersion >= 5) {
this.MTMable = true;
this.browserType = "O";
}
} else if(navigator.appName == "Netscape" && navigator.userAgent.indexOf("WebTV") == -1) {
this.MTMable = true;
this.browserType = "NN";
if(parseInt(navigator.appVersion) == 3) {
this.majVersion = 3;
this.cssEnabled = false;
} else if(parseInt(navigator.appVersion) >= 4) {
this.majVersion = parseInt(navigator.appVersion) == 4 ? 4 : 5;
if(this.majVersion >= 5) {
this.DOMable = true;
}
}
} else if(navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) >= 4) {
this.MTMable = true;
if(navigator.userAgent.toLowerCase().indexOf("mac") != -1) {
this.browserType = "NN";
this.majVersion = 4;
this.DOMable = false;
} else {
this.browserType = "IE";
this.majVersion = navigator.appVersion.indexOf("MSIE 6.") != -1 ? 6 : (navigator.appVersion.indexOf("MSIE 5.") != -1 ? 5 : 4);
if(this.majVersion >= 5) {
this.DOMable = true;
}
}
}
this.preHREF = location.href.substring(0, location.href.lastIndexOf("/") +1)
}
function MTMsetDocument(menuFrame) {
// called by function MTMgetFrames and sets
// properties .menuFrame and .document, and for DOMable browsers also .head
this.menuFrame = menuFrame;
this.document = menuFrame.document;
if(this.DOMable) {
this.head = this.browserType == "IE" ? this.document.all.tags('head')[0] : this.document.getElementsByTagName('head').item(0);
}
}
/****************************************
add by qiuchun to split every javascript function in link
功能:分隔出链接中每个JS函数,并加上引用前缀
作者: 仇春
*****************************/
function MTMSplitFunc(thisURL){
var strTmp = thisURL;
//将javascript:去掉
strTmp = strTmp.substring(11,strTmp.length);
var prefix = "parent.frames['" + MTMCodeFrame + "'].";
var sary = strTmp.split(";");
var tempString = "";
for(var x=0;x< sary.length;x++){
if (sary[x]!="")
tempString += prefix + sary[x]+";";
}
return "javascript:" + tempString;
}
function MTMresolveURL(thisURL, testLocal) {
// resolves 'thisURL' against this.preHREF depending on whether it's an absolute
// or relative URL. if 'testLocal' is set it'll return true for local (relative) URLs.
var absoluteArray = new Array("http://", "https://", "mailto:", "ftp://", "telnet:", "news:", "gopher:", "nntp:", "javascript:", "file:");
var tempString = "", i;
for(i = 0; i < absoluteArray.length; i++) {
if(thisURL.indexOf(absoluteArray[i]) == 0) {
//javascript is especial
if (thisURL.indexOf("javascript:") == 0) {
tempString = MTMSplitFunc(thisURL);
} else {
tempString = thisURL;
}
break;
}
}
if(testLocal) {
return(tempString == "" ? true : false);
}
if(!tempString) {
if(thisURL.indexOf("/") == 0) {
tempString = location.protocol + "//" + location.hostname + thisURL;
} else if(thisURL.indexOf("../") == 0) {
tempString = this.preHREF;
do {
thisURL = thisURL.substr(3);
tempString = tempString.substr(0, tempString.lastIndexOf("/", tempString.length-2) +1);
} while(thisURL.indexOf("../") == 0);
tempString += thisURL;
} else {
tempString = this.preHREF + thisURL;
}
}
return(tempString);
}
/******************************************************************************
* Default values of all user-configurable options. *
******************************************************************************/
var MTMLinkedJSURL, MTMLinkedSS, MTMSSHREF, MTMLinkedInitFunction, MTMDOCTYPE, MTMcontentType, MTMHeader, MTMFooter, MTMrightClickMessage, MTMDefaultTarget, MTMTimeOut = 5;
var MTMuseScrollbarCSS, MTMscrollbarBaseColor, MTMscrollbarFaceColor, MTMscrollbarHighlightColor, MTMscrollbarShadowColor, MTMscrollbar3dLightColor, MTMscrollbarArrowColor, MTMscrollbarTrackColor, MTMscrollbarDarkShadowColor;
var MTMUseCookies, MTMCookieName, MTMCookieDays, MTMTrackedCookieName;
var MTMCodeFrame = "code", MTMenuFrame = "menu", MTMTableWidth = "100%", MTMenuImageDirectory = "menu-images/";
var MTMUseToolTips = true, MTMEmulateWE, MTMAlwaysLinkIfWE = true, MTMSubsGetPlus = "Submenu", MTMSubsAutoClose;
var MTMBackground = "", MTMBGColor = "#ffffff", MTMTextColor = "#000000", MTMLinkColor = "#330099", MTMTrackColor = "#000000", MTMAhoverColor = "#990000", MTMSubExpandColor = "#666699", MTMSubClosedColor = "#666699", MTMSubTextColor = "#000000" ,MTMSelectedItemColor = "";
var MTMenuText = "", MTMRootIcon = "menu_new_root.gif", MTMRootColor = "#000000";
var MTMRootFont = MTMenuFont = "Arial, Helvetica, sans-serif";
var MTMRootCSSize = MTMenuCSSize = "84%";
var MTMRootFontSize = MTMenuFontSize = "-1";
/******************************************************************************
* Global variables. Not to be altered unless you know what you're doing. *
* User-configurable options are found in code.html *
******************************************************************************/
var MTMLoaded = false;
var MTMLevel;
var MTMBar = new Array();
var MTMIndices = new Array();
var MTMUA = new MTMBrowser();
var MTMExtraCSS = new MTMstyleRuleSet();
var MTMstyleRules;
var MTMLastItem; // last item added to a menu
var MTMClickedItem = false;
var MTMExpansion = false;
var MTMPreviousClickItem = null;
var MTMNumber = 1;
var MTMTrackedItem;
var MTMTrack = false;
var MTMFrameNames;
var MTMFirstRun = true;
var MTMCurrentTime = 0;
var MTMUpdating = false;
var MTMWinSize, MTMyval, MTMxval;
var MTMOutputString = "";
var MTMCookieString = "";
var MTMCookieCharNum = 0;
var MTMTCArray, MTMTrackedCookie;
/******************************************************************************
* Code that picks up frame names of frames in the parent frameset. *
******************************************************************************/
function MTMgetFrames() {
if(this.MTMable) {
MTMFrameNames = new Array();
for(i = 0; i < parent.frames.length; i++) {
MTMFrameNames[i] = parent.frames[i].name;
if(parent.frames[i].name == MTMenuFrame) {
this.setDocument(parent.frames[i]);
}
}
}
}
/******************************************************************************
* Functions to draw the menu. *
******************************************************************************/
function MTMSubAction(SubItem) {
SubItem.expanded = (SubItem.expanded) ? false : true;
if(SubItem.expanded) {
MTMExpansion = true;
}
MTMClickedItem = SubItem;
if(MTMTrackedItem && MTMTrackedItem != SubItem.number) {
MTMTrackedItem = false;
}
if(MTMEmulateWE || SubItem.url == "" || !SubItem.expanded) {
setTimeout("MTMDisplayMenu()", 10);
return false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -