📄 topic.js
字号:
/* 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 + '"e=' + 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 + -