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

📄 topic.js

📁 LiteBlaster 是一款基于 .NET Framework 原创的 ASP.NET 论坛系统。后台程序库采用 C#/VB.NET 编写
💻 JS
📖 第 1 页 / 共 2 页
字号:


/*   fast edit  */
function fastEdit_prepare(){
	var parentId = this.parentId;
	this.container = xGetElementById(parentId);																// td
	this.postBody = getElementByName(this.container, 'postBody');											// post body div
	this.fastEditContainer = getElementByName(this.container, 'postBodyEdit');								// fast edit div
	this.postBodyLoaded = getElementByName(this.fastEditContainer, 'postBodyLoaded');						// hidden
	if(this.postBodyLoaded.value == 'false'){
		return;
	}
	this.postMoodEnabled = parseXmlText(getElementByName(this.fastEditContainer, 'postMoodEnabled').value);	// hidden
	this.postCodeEnabled = parseXmlText(getElementByName(this.fastEditContainer, 'postCodeEnabled').value);	// hidden
	this.editText = getElementByName(this.fastEditContainer, 'postBodyText');								// textarea
	this.editReason = getElementByName(this.fastEditContainer, 'postEditReason');							// text
	this.updateBtn = getElementByName(this.fastEditContainer, 'updateBtn');
	this.cancelBtn = getElementByName(this.fastEditContainer, 'cancelBtn');
}

function fastEdit(parentId, postId){
	this.parentId = parentId;
	fastEdit_prepare.call(this);
	
	if(this.fastEditContainer.style.display != 'none'){
		return;
	}
	setElementVisible(this.postBody, false);
	setElementVisible(this.fastEditContainer, true);
	if(this.postBodyLoaded.value == 'false'){
		// load fast edit
		fastEdit_load(parentId, postId);
	}
}

function fastEdit_load(parentId, postId){
	var params = 'xml=true&type=fastedit&id=' +  topicId + '&postid=' + postId + '&parentid=' + parentId;
	var loader = new ajax.loader('Topic.aspx', 'POST', fastEdit_load_onload, fastEdit_load_onerror, params);
	loader.parentId = parentId;
}
function fastEdit_load_onerror(){
	alert('加载快捷模式框架时出错。');
	fastEdit_cancel(this.parentId);
}
function fastEdit_load_onload(){
	var xmlDoc = this.req.responseXML;
	var errInfo = getXmlElementText(xmlDoc, 'Error');
	if(errInfo){
		alert(errInfo);
		fastEdit_cancel(this.parentId);
	}else{
		fastEdit_prepare.call(this);
		this.fastEditContainer.innerHTML = getXmlElementText(xmlDoc, 'Return');
	}
}

function fastEdit_cancel(parentId){
	this.parentId = parentId;
	fastEdit_prepare.call(this);
	
	setElementVisible(this.fastEditContainer, false);
	setElementVisible(this.postBody, true);
}

function fastEdit_update(parentId, postId){
	this.parentId = parentId;
	fastEdit_prepare.call(this);
	
	var bodyText = this.editText.value;
	var extraReason = this.editReason.value;
	if(bodyText.length == 0){
		alert('帖子内容过短。');
		return;
	}
	if(extraReason.length == 0){
		alert('请填写修改原因。');
		return;
	}
	setInputDisabled(this.updateBtn, true);
	setInputDisabled(this.cancelBtn, true);
	var params = 'type=edit&return=result&body=' + encodeURIComponent(bodyText) + '&reason=' + encodeURIComponent(extraReason) + '&id=' + postId + '&mood=' + this.postMoodEnabled + '&code=' + this.postCodeEnabled;
	var loader = new ajax.loader('PostEdit.aspx', 'POST', fastEdit_update_onload, fastEdit_update_onerror, params);
	loader.postId = postId;
	loader.updateBtn = this.updateBtn;
	loader.cancelBtn = this.cancelBtn;
}
function fastEdit_update_onerror(){
	alert('修改帖子过程中出错。');
	setInputDisabled(this.updateBtn, false);
	setInputDisabled(this.cancelBtn, false);
}
function fastEdit_update_onload(){
	var xmlDoc = this.req.responseXML;
	var errInfo = getXmlElementText(xmlDoc, 'Error');
	if(errInfo){
		alert(errInfo);
		setInputDisabled(this.updateBtn, false);
		setInputDisabled(this.cancelBtn, false);
	}else{
		loadPost_onerror = function(){
			setInputDisabled(this.updateBtn, false);
			setInputDisabled(this.cancelBtn, false);
		}
		var postLoader = new loadPost(this.postId, null, null, loadPost_onerror);
		postLoader.updateBtn = this.updateBtn;
		postLoader.cancelBtn = this.cancelBtn;
	}
}


/*  quote post  */
function quotePost(postId){
	var params = 'type=reply&topicid=' + topicId + '&quote=' + postId;
	window.location.href = 'PostEdit.aspx?' + params;
}


/*  delete post  */
function deletePost(postId){
	if(!confirm('确定要删除该帖吗?\n\n如果您正准备删除自己的帖子,那最后可能会对经验值造成影响。')){
		return;
	}
	var extraReason = prompt('请输入删除原因:', '');
	if(extraReason == null){
		return;
	}
	if(!xStr(extraReason) || extraReason.length == 0){
		alert('原因内容不得为空。');
		return;
	}
	var params = 'type=remove&return=result&reason=' + encodeURIComponent(extraReason) + '&id=' + postId;
	var loader = new ajax.loader('PostEdit.aspx', 'POST', deletePost_onload, deletePost_onerror, params);
}
function deletePost_onload(){
	var xmlDoc = this.req.responseXML;
	var errInfo = getXmlElementText(xmlDoc, 'Error');
	if(errInfo){
		alert(errInfo);
	}else{
		toPage(toPage_curPage);
	}
}
function deletePost_onerror(){
	alert('删除帖子过程中出错。');
}


/*  remark post  */
function remarkPost(postId, topicId){
	var params, target;
	var remark = prompt('您认为该帖可得分:', 0);
	if(remark == null){
		return;
	}
	remark = parseInt(remark);
	if(isNaN(remark) || remark < 1){
		alert('请输入正整数。');
		return;
	}
	if(topicId){
		//remark the topic
		params = 'type=remark&return=result&remark=' + remark + '&id=' + topicId;
		target = 'TopicEdit.aspx';
	}else{
		params = 'type=remark&return=result&remark=' + remark + '&id=' + postId;
		target = 'PostEdit.aspx';
	}
	var loader = new ajax.loader(target, 'POST', remarkPost_onload, remarkPost_onerror, params);
	loader.postId = postId;
}
function remarkPost_onload(){
	var xmlDoc = this.req.responseXML;
	var errInfo = getXmlElementText(xmlDoc, 'Error');
	if(errInfo){
		alert(errInfo);
	}else{
		var postLoader = new loadPost(this.postId);
	}
}
function remarkPost_onerror(){
	alert('评分过程中出错。');
}


/*  best answer  */
function updateBestAnswer(postId){
	var params = 'type=bestanswer&return=result&bestanswerid=' + postId + '&id=' + topicId;
	var loader = new ajax.loader('TopicEdit.aspx', 'POST', updateBestAnswer_onload, updateBestAnswer_onerror, params);
}
function updateBestAnswer_onload(){
	var xmlDoc = this.req.responseXML;
	var errInfo = getXmlElementText(xmlDoc, 'Error');
	if(errInfo){
		alert(errInfo);
	}else{
		toPage(toPage_curPage);
	}
}
function updateBestAnswer_onerror(){
	alert('更新最佳回复过程中出错。');
}


/*  goto upload relative  */
function gotoUpload(relativeId, curObj){
	if(!curObj){
		return;
	}
	var container = curObj.parentNode.parentNode;
	var upload_link = xGetElementById(container.id + '_Upload_' + relativeId);
	if(!upload_link){
		alert('在当前帖中找不到对应的附件。');
	}else{
		windowScrollTo(container, upload_link);
	}
}


/*  resize upload image to fit page  */
function resizeUploadImage(imgObj){
	if(!imgObj){
		return;
	}
	imgObj.title = '原始尺寸:' + imgObj.width + '*' + imgObj.height;
	var fitWidth = parseInt(xClientWidth() * 0.5);
	if(imgObj.width > fitWidth){
		imgObj.width = fitWidth;
	}
}


/*  highlight search  */
function highlight_search(word){
	if(!xStr(word) || word.length == 0){
		return;
	}
	var search_button_wrapper = new wrappers.aWrapper('SearchInTopicButton');
	var search_button_text = search_button_wrapper.getControl().innerText;
	search_button_wrapper.disable();
	var wordHtml = encodeHtml(word);
	var body_list = xGetElementsByAttribute('div', 'name', 'postBody');
	var found = 0;
	// postBody and postBodyEdit, both found at the same time
	var body_count = 0;
	for(var i = 0; i < body_list.length; i ++){
		if(body_list[i].getAttribute('name') == 'postBody'){
			body_count ++;
			found = highlight_search_search(word, wordHtml, body_list[i], found);
		}
		search_button_wrapper.setText(search_button_text + '(' + parseInt(parseFloat(i + 1) / body_list.length * 100) + '%)');
	}
	var msg = '在当前显示的 ' + body_count + ' 个有效帖子中';
	if(found > 0){
		alert(msg + '找到 ' + found + ' 个匹配结果。\n\n已经高亮标记搜索到的文本。');
	}else{
		alert(msg + '没有找到指定文本。');
	}
	search_button_wrapper.enable();
}

function highlight_search_highlight(cur, found, wordHtml, bodyHtml, caller){
	var insertHtml = '<span class="highlight" title="搜索结果 ' + found + '">' + wordHtml + '</span>';
	caller.insertHtmlLength = insertHtml.length;
	return bodyHtml.substring(0, cur) + insertHtml + bodyHtml.substring(cur + wordHtml.length, bodyHtml.length);
}
function highlight_search_search(word, wordHtml, container, found_before){
	var bodyHtml = container.innerHTML;
	
	// clear first
	var cleared = false;
	var highlighted_list = xGetElementsByClassName('highlight', container, 'span');
	if(highlighted_list.length > 0){
		cleared = true;
		var highlighted;
		for(var i = 0; i < highlighted_list.length; i ++){
			highlighted = highlighted_list[i];
			bodyHtml = bodyHtml.replace(highlighted.outerHTML, highlighted.innerHTML);
		}
	}
	
	// search then
	var found = found_before;
	var cur = -1;
	var andmark, semicolon, pl, pr, nl, nr;
	while(cur < bodyHtml.length){
		cur = bodyHtml.indexOf(wordHtml, cur + 1);
		if(cur < 0){
			break;
		}
		
		// ignore wordHtml in &...;
		andmark = bodyHtml.lastIndexOf('&', cur - 1);
		semicolon = bodyHtml.indexOf(';', cur + wordHtml.length);
		if(andmark >= 0 && semicolon >= 0){
			if(semicolon - andmark - 1 <= 6){
				var str = bodyHtml.substring(andmark + 1, semicolon);
				var cc;
				var toContinue = false;
				for(var i = 0; i < str.length; i ++){
					cc = str.charCodeAt(i);
					if(cc < 48 || cc > 57 && cc < 65 || cc > 90 && cc < 97 || cc > 122){
						if(cc == 60 || cc == 62){
							continue;
						}
						toContinue = true;
						break;
					}
				}
				if(toContinue){
					continue;
				}
			}
		}
		
		// ignore wordHtml in <...>
		pl = bodyHtml.lastIndexOf('<', cur);
		pr = bodyHtml.lastIndexOf('>', cur);
		nl = bodyHtml.indexOf('<', cur);
		nr = bodyHtml.indexOf('>', cur);
		if(pl >= 0 && nr >=0){
			if(pr < 0 || pr < pl && nl < 0 || nl > nr){
				continue;
			}
		}
		
		found ++;
		bodyHtml = highlight_search_highlight(cur, found, wordHtml, bodyHtml, this);
		cur += this.insertHtmlLength - 1;			// cur + 1 for indexOf
	}
	// [UNFINISHED]
//	if(word.length > 1){
//		// <m>a..</m><n>b..</n>(word=a..b..)
//		var html_list = new Array();
//		for(var i = 0; i < word.length; i ++){
//			html_list.push(encodeHtml(word[i]));
//		}
//		cur = -1;
//		while(cur < bodyHtml.length){
//			cur = bodyHtml.indexOf
//		}
//	}
	
	// save
	if(cleared || found > found_before){
		container.innerHTML = bodyHtml;
	}
	
	// return total count
	return found;
}

⌨️ 快捷键说明

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