⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgtree.js

📁 论坛BBS
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*
##############################################
#     BigMole Dynamic Discussion Board 2.0     #
#     By Emil A Eklund (http://BigMole.5188.org/contact.html#emil)      #
#    and Erik Arvidson (http://BigMole.5188.org/contact.html#erik)     #
#              April 24, 1999                #
##############################################
# Feel free to use this script for personal  #
# and non-profit organisation's websites,    #
# as long as you're giving us credits for it #
# in other words, not removing nur modifying #
# this notice in any of the files it apperes #
##############################################
#   For comercial use contact Emil or Erik   #
##############################################

This is for the actual tree
*/


document.onclick = handleClick;
window.onload = initMessageTreePrime;
window.onresize = fixSize;

document.onmouseover = messageTreeOnMouseOver;
document.onmouseout  = messageTreeOnMouseOut;
	
//preload(new Array("minusicon"), "images/", ".gif");

fixSubPadding(10);
fixScrollDivSize();

function fixSize() {
	messageHeader.style.width =  Math.max(document.body.clientWidth, 570);
    scrollDiv.style.height = Math.max(document.body.clientHeight - messageHeader.offsetHeight, 0);
}

var currentMessageAnchorObject;
var currentMessageTimer;

// This works in conjunction with the css file that marks visited links
function markAsRead() {
	if (currentMessageAnchorObject && currentMessageAnchorObject.style)
		currentMessageAnchorObject.style.fontWeight = "normal";
}

function handleClick() {
	var plusEl = getReal(window.event.srcElement, "className", "plus");
	if (plusEl.className == "plus" && plusEl.children.length > 0) {
		if (plusEl.children.tags("IMG")[0].src.indexOf("minus") != -1)
			hideItem(plusEl);
		else
			showItem(plusEl);
		return;
	}
	
	var el = getReal(window.event.srcElement, "tagName", "A");
	if (el.tagName == "A") {
		if (parent.messageframe.document && parent.messageframe.document.readyState == "complete") {
			if (document.body.selectedItem != el) { // First selection
				if (document.body.selectedItem != null)
					unHighLight(document.body.selectedItem);
				document.body.selectedItem = el;
				highLight(el);
			}

			makeMessageVisible(el.parentElement);
	
			var subject = el.children[0].innerHTML;
	
	
			var startIndex = subject.indexOf(">");
			var endIndex   = subject.indexOf("<", startIndex);
			if (endIndex == -1) endIndex = subject.length
			
			subject = subject.substring(startIndex+1, endIndex)
			var from = el.children[1].innerText;
			var date = el.children[2].innerText;
			var email = el.email;
			var group = document.body.group;
			var ticks = el.parentElement.date;
			currentMessageAnchorObject=el;			
			parent.messageframe.loadMessage(el.href, subject, from, email, date, group, ticks);
			}
		else
			alert(waitForViewerError);
		
		return false;
	}
	
	var el = getReal(window.event.srcElement, "tagName", "INPUT");
	if (el.tagName == "INPUT") {
		addToIdList(el);
		markTree(el);
	}

}


function messageTreeOnMouseOver() {
	var fromEl = getReal(window.event.fromElement, "tagName", "A");
	var toEl = getReal(window.event.toElement, "tagName", "A");
    
    if (fromEl == toEl) return;

	if (toEl.tagName == "A") {
		if (document.body.selectedItem != null && document.body.selectedItem == toEl && ieVersion()==5) {
			toEl.style.color="white";
			toEl.style.background="blue";
		}
		else
			toEl.style.color="blue";
	}
}

function messageTreeOnMouseOut() {
	var fromEl = getReal(window.event.fromElement, "tagName", "A");
	var toEl = getReal(window.event.toElement, "tagName", "A");
    
    if (fromEl == toEl) return;
    
	if (fromEl.tagName == "A") {
		if (document.body.selectedItem != null && document.body.selectedItem == fromEl && ieVersion()==5) {
			fromEl.style.color = "highlighttext";
			fromEl.style.background = "highlight";
		}
		else
			fromEl.style.color = "windowtext";
	}	
}

function makeMessageVisible(el) {
	var tmp = el.parentElement;
	
	while (tmp != null && tmp.className == "item") {
		showItem(tmp.children[0]);
		tmp = tmp.parentElement;
	}
	
//	el.scrollIntoView();
}

function initMessageTreePrime() {
	parent.treeLoaded();
	fixPlusSign();
	fixSize();
	numberOfChildItems();
	
	el = document.all.messageTree;	
	el.tree = new Tree(el.children[0]);
	el.tree.add(buildTree(el.children[0]));
	
	scrollDiv.onscroll = new Function("messageHeader.style.marginLeft = -scrollDiv.scrollLeft");
	fixExpandState();
	//checkTopUrl();
}

var pluses = new Array();

function fixPlusSign() {
	var index = 0;
	var spans = document.all.tags("span");
	var spansLength = spans.length;
	
	for (var i=0; i<spansLength; i++) {
		if (spans[i].className == "plus")
			pluses[index++] = spans[i];
	}

	var plusesLength = pluses.length;
	for (i=0; i<plusesLength; i++) {
		if (pluses[i].parentElement.children.tags("div").length > 0) {
			pluses[i].innerHTML = plusString;
//			pluses[i].click();
		}
	}
	
	var topItems = messageTree.children[0].children; // Note the <nobr>
	var tpl = topItems.length;
	
	for (var i=0; i<tpl; i++) {
		if (topItems[i].className == "item") {
//			topItems[i].children[0].click();	// Hide the sceond level
		}
	}
}

function fixExpandState() {
	if (parent.tLoaded && parent.toolframe.document.all.toggleExpandCollapseButton.value)
		expandCollapse();
}

function expandCollapse() {
	if (expandedTree) {
		for (var i=0; i<pluses.length; i++) {
			hideItem(pluses[i]);
		}
	}
	else {
		for (var i=0; i<pluses.length; i++) {
			showItem(pluses[i]);
		}
	}

	expandedTree = !expandedTree;
}


function checkTopUrl() {//这个函数要大改一翻
	if (parent.mLoaded && parent.tLoaded) {

		if (parent.xLoaded) return;		// Prevent external link from being loaded on refresh

		var str = parent.location.href;

		var displayIndex = str.indexOf("action=display");

		if (displayIndex != -1) {
			var args = new Array();
			var as = str.substr(displayIndex + 15).split("&");

			for (var i=0; i<as.length; i++) {
				var tmp = as[i].split("=");
				if (tmp.length != 2) return;
				args[tmp[0]] = tmp[1];
			}
			
			var id = args["id"];
			var group = args["group"];
			
			if (group != null) {
				if (document.body.group != group) {
					parent.oeBar.loadTree(group);
					parent.oeBar.setTimeout("selectRightItem()", 100);
				}
				else {
					var loc = str.substring(0,displayIndex) + "action=preview&group=" + group + "&id=" + id;
					
					loc = loc.replace(/\/\?action/g, "/" + cgiFile + "?action");
					
					var cm = findNode(document.all.messageTree.tree, loc);
				
					if (cm == null) return;
					
					parent.toolframe.toggle(parent.toolframe.document.all.toggleExpandCollapseButton);
					parent.toolframe.makePressed(parent.toolframe.document.all.toggleExpandCollapseButton);
					expandCollapse();
					
					cm.html.children.tags("A")[0].click();
					parent.setXLoaded();
				}
			}	
		}
	}
	else
		window.setTimeout("checkTopUrl()",100); // Busy wait is not nice :-(
}


// Create a tree for ease of use

function Tree(parent) {
	this.parent   = parent;
	this.children = new Array();
	this.nextSibbling = int_nextSibbling;
	this.add      = int_add;
	this.href     = new String();//用来保存我的节点标志
	this.html     = null;
	this.index    = 0	
	var length = 0;
	
	function int_add(t) {
		this.children[length] = t;
		this.children[length].parent = this;
		this.children[length].index = length++;
	}
	
	function int_nextSibbling() {
		if (this.parent != null)
			return this.parent.children[this.index+1];
	}
}

function buildTree(el) {
	var is = new Array();
	var ic = 0;
	var cs = el.children;
	var csl = cs.length;
	
	for (var i=0; i<csl; i++) {
		if (cs[i].className == "item") {
			is[ic++] = cs[i];
		}
	}

	var nTree = new Tree();

	for (var j=0; j<ic; j++) {
		nTree.add(buildTree(is[j]));
		nTree.children[j].href = is[j].all.tags("A")[0].id;//href
		nTree.children[j].html = is[j];
	}

	return nTree;
}

function nextMessage() {
	var el = document.all.messageTree;
	
	var loc = parent.frames["treeframe"].bbsid;
	
	var cm = findNode(el.tree, loc);

	if (cm == null) return;		// No valid message
	var nm;
	
	if (cm.children.length > 0)
		nm = cm.children[0];
	else
		nm = getNextSibbling(cm);
	
	if (nm != null && nm.href != null) {
		nm.html.all.tags("A")[0].click();
	}
}

function nextThread() {
	el = document.all.messageTree;
	
	var loc = parent.frames["treeframe"].bbsid;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -