📄 topic.js
字号:
// for topic
// x_core.js, x_event.js, ajax.js, main.js, itemList.js, xgetelementsbyattribute.js, xwinscrollto.js needed
/* update topic */
function updateTopic(type, value, aId, extra){
var aBtnWrapper = new wrappers.aWrapper(aId);
aBtnWrapper.disable();
var params = 'id=' + topicId + '&update=' + encodeURIComponent(type) + '&value=' + encodeURIComponent(value);
if(xStr(extra)){
params += '&' + extra;
}
var loader = new ajax.loader('Topic.aspx', 'POST', updateTopic_onload, updateTopic_onerror, params);
loader.updateType = type;
loader.aBtnWrapper = aBtnWrapper;
}
function updateTopic_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
this.aBtnWrapper.enable();
}else{
xGetElementById('TopicOperations').innerHTML = getXmlElementText(xmlDoc, 'Return');
if(this.updateType == 'locked' || this.updateType == 'closed'){
loadVote();
toPage(toPage_curPage);
}else if(this.updateType == 'broadcast'){
alert('本主题已经成功添加到公告栏中。');
}
}
}
function updateTopic_onerror(){
alert('设定主题过程中出错。');
this.aBtnWrapper.enable();
}
/* broadcast topic */
function broadcastTopic(toBroadcast, defaultTitle){
if(!toBroadcast){
return;
}
if(!xStr(defaultTitle)){
defaultTitle = '';
}
var title = prompt('请输入公告的标题:', defaultTitle);
if(!xStr(title) || title.length == 0){
return;
}
updateTopic('broadcast', true, 'UpdateBroadcastButton', 'title=' + title);
}
/* move topic */
function moveTopic(){
var boardId = prompt('请输入目标版面的 ID :', 0);
if(boardId == null){
return;
}
boardId = parseInt(boardId);
if(isNaN(boardId) || boardId < 1){
alert('ID 应当是正整数。');
return;
}
var params = 'return=result&type=move&id=' + topicId + '&boardid=' + boardId;
var loader = new ajax.loader('TopicEdit.aspx', 'POST', moveTopic_onload, moveTopic_onerror, params);
}
function moveTopic_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
}else{
alert('移动主题成功。现在将转到新的页面。');
window.location.href = 'Topic.aspx?id=' + topicId + '&page=' + toPage_curPage;
}
}
function moveTopic_onerror(){
alert('移动主题过程中出错。');
}
/* scroll */
function windowScrollTo(current, target){
if(current){
current = xGetElementById(current);
}
target = xGetElementById(target);
if(!target){
return;
}
var y = xPageY(target);
var distance;
if(current){
distance = Math.abs(y - xPageY(current));
}else{
distance = y;
}
xWinScrollTo(window, xPageX(target), y, distance * 2);
}
function goToTop(e){
var current = new xEvent(e).target;
windowScrollTo(current, 'PathIndicator');
}
function goToBottom(e){
var current = new xEvent(e).target;
windowScrollTo(current, 'PageIndexes');
}
function goToFastReply(e){
var target = xGetElementById('PostFastReplyHeader');
if(target){
var current = new xEvent(e).target;
windowScrollTo(current, target);
xGetElementById('PostFastReplyPostBody').focus();
}else{
alert('您当前没有权限回复本主题。');
}
}
var post_scrollTo;
function scrollToPost(){
if(!xStr(post_scrollTo) || post_scrollTo.length == 0){
return;
}
windowScrollTo('PostFastReplyHeader', post_scrollTo);
post_scrollTo = null;
}
/* load post */
loadPost = function(postId, loadPost_onsuccess_before, loadPost_onsuccess_after, loadPost_onerror){
var params = 'xml=true&type=post&id=' + topicId + '&postid=' + postId;
var loader = new ajax.loader('Topic.aspx', 'POST', this.loadPost_onload, this.loadPost_onerror, params);
loader.loadPost_onsuccess_before = loadPost_onsuccess_before;
loader.loadPost_onsuccess_after = loadPost_onsuccess_after;
loader.loadPost_onerror = loadPost_onerror;
}
loadPost.prototype = {
loadPost_onload : function(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
if(typeof(this.loadPost_onerror) == 'function'){
this.loadPost_onerror.call(this);
}
}else{
if(typeof(this.loadPost_onsuccess_before) == 'function'){
this.loadPost_onsuccess_before.call(this);
}
var wrapperId = getXmlElementText(xmlDoc, 'WrapperID');
var wrapper = xGetElementById(wrapperId);
wrapper.innerHTML = getXmlElementText(xmlDoc, 'Return');
if(!needToJoin){
needToJoin = parseXmlText(getXmlElementText(xmlDoc, "NeedToJoin"));
}
if(typeof(this.loadPost_onsuccess_after) == 'function'){
this.loadPost_onsuccess_after.call(this);
}
}
},
loadPost_onerror : function(){
alert('加载帖子过程中出错。');
if(typeof(this.loadPost_onerror) == 'function'){
this.loadPost_onerror.call(this);
}
}
}
/* load vote */
function loadVote(){
var params = 'xml=true&vote=true&type=html&id=' + topicId;
var loader = new ajax.loader('Topic.aspx', 'POST', loadVote_onload, loadVote_onerror, params);
}
function loadVote_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
}else{
optionCount = parseInt(getXmlElementText(xmlDoc, 'OptionCount'));
xGetElementById('VoteBody').innerHTML = getXmlElementText(xmlDoc, 'Return');
}
}
function loadVote_onerror(){
alert('加载投票信息过程中出错。');
}
/* load vote details */
function loadVoteDetails(){
var params = 'xml=true&vote=true&type=details&id=' + topicId;
var loader = new ajax.loader('Topic.aspx', 'POST', loadVoteDetails_onload, loadVoteDetails_onerror, params);
}
function loadVoteDetails_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
}else{
xGetElementById('VoteDetailsBody').innerHTML = getXmlElementText(xmlDoc, 'Return');
}
}
function loadVoteDetails_onerror(){
alert('加载投票详细信息过程中出错。');
}
/* join vote */
var optionCount;
function joinVote(btn){
setInputDisabled(btn, true);
var params = 'xml=true&vote=true&type=join&id=' + topicId + '&value=';
for(var i = 0; i < optionCount; i++){
if(xGetElementById('VoteOption_' + i).checked){
params += i+ ',';
}
}
if(params.charAt(params.length - 1) == ','){
params = params.substring(0, params.length - 1);
}
var extraOption;
try{
if(xGetElementById('VoteOption_' + optionCount).checked){
extraOption = xGetElementById('VoteExtraOptionInput').value;
}else{
extraOption = null;
}
}catch(e){
extraOption = null;
}
if(extraOption){
if(extraOption.length == 0){
alert('您已经选择“其它”,但没有设定具体内容。');
return;
}
params += '&extraoption=' + encodeURIComponent(extraOption);
}
var loader = new ajax.loader('Topic.aspx', 'POST', joinVote_onload, joinVote_onerror, params);
loader.btn = btn;
}
function joinVote_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
setInputDisabled(this.btn, false);
}else{
loadVote();
}
}
function joinVote_onerror(){
alert('投票过程中出错。');
setInputDisabled(this.btn, false);
}
/* vote chart */
function getVoteChart(){
var chartHtml = '<br /><br /><img src="Topic.aspx?id=' + topicId + '&votechart=true&t=' + Math.random() + '" />';
var container = xGetElementById('VoteChartContainer');
container.innerHTML = chartHtml;
}
/* vote locked */
function updateVoteLocked(btn, locked){
setInputDisabled(btn, true);
var params = 'xml=true&vote=true&type=locked&id=' + topicId + '&value=' + locked;
var loader = new ajax.loader('Topic.aspx', 'POST', updateVoteLocked_onload, updateVoteLocked_onerror, params);
loader.btn = btn;
}
function updateVoteLocked_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
setInputDisabled(this.btn, false);
}else{
loadVote();
}
}
function updateVoteLocked_onerror(){
alert('设定投票过程中出错。');
setInputDisabled(this.btn, false);
}
/* fast reply */
function PostFastReplyPostBody_onkeydown(e){
e = new xEvent(e);
if(e.ctrlKey && e.keyCode == 13){
fastReply();
e.keyCode = 0;
}
}
function fastReply(){
var textbox = xGetElementById('PostFastReplyPostBody');
var submit_btn = xGetElementById('PostFastReplySubmit');
var postBody = textbox.value;
if(postBody.length == 0){
alert('回复内容不能为空。');
return;
}
setInputDisabled(submit_btn, true);
var params = 'type=reply&return=postanchor&mood=false&code=false&body=' + encodeURIComponent(postBody) + '&topicid=' + topicId;
var loader = new ajax.loader('PostEdit.aspx', 'POST', fastReply_onload, fastReply_onerror, params);
loader.replyBtn = submit_btn;
loader.bodyText = textbox;
}
function fastReply_onload(){
var xmlDoc = this.req.responseXML;
var errInfo = getXmlElementText(xmlDoc, 'Error');
if(errInfo){
alert(errInfo);
}else{
var post_id = parseInt(getXmlElementText(xmlDoc, 'ID'));
var post_floor = parseInt(getXmlElementText(xmlDoc, 'Floor'));
var post_page = parseInt(getXmlElementText(xmlDoc, 'Page'));
this.bodyText.value = '';
fastReply_loadReply(post_id, post_floor, post_page);
}
setInputDisabled(this.replyBtn, false);
}
function fastReply_onerror(){
alert('回复主题过程中出现错误。');
setInputDisabled(this.replyBtn, false);
}
function fastReply_loadReply(id, floor, page){
post_scrollTo = 'PostList' + floor;
if(floor != maxFloor + 1 || page != toPage_curPage || needToJoin){
toPage(page);
}else{
loadPost_onsuccess_before = function(){
maxFloor++;
var wrapperId = getXmlElementText(this.req.responseXML, 'WrapperID');
var posts_body = xGetElementById('PostsAddedLater');
var wrapper = document.createElement('div');
wrapper.id = wrapperId;
posts_body.appendChild(wrapper);
posts_body.appendChild(document.createElement('br'));
}
loadPost_onsuccess_after = function(){
scrollToPost();
}
var postLoader = new loadPost(id, loadPost_onsuccess_before, loadPost_onsuccess_after);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -