📄 post.js
字号:
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$RCSfile: post.js,v $
$Revision: 1.27 $
$Date: 2007/08/06 08:27:23 $
*/
var postSubmited = false;
var smdiv = new Array();
var codecount = '-1';
var codehtml = new Array();
function AddText(txt) {
obj = $('postform').message;
selection = document.selection;
checkFocus();
if(!isUndefined(obj.selectionStart)) {
var opn = obj.selectionStart + 0;
obj.value = obj.value.substr(0, obj.selectionStart) + txt + obj.value.substr(obj.selectionEnd);
} else if(selection && selection.createRange) {
var sel = selection.createRange();
sel.text = txt;
sel.moveStart('character', -strlen(txt));
} else {
obj.value += txt;
}
}
function checkFocus() {
var obj = typeof wysiwyg == 'undefined' || !wysiwyg ? $('postform').message : editwin;
if(!obj.hasfocus) {
obj.focus();
}
}
function ctlent(event) {
if(postSubmited == false && (event.ctrlKey && event.keyCode == 13) || (event.altKey && event.keyCode == 83) && $('postsubmit')) {
if(in_array($('postsubmit').name, ['topicsubmit', 'replysubmit', 'editsubmit']) && !validate($('postform'))) {
doane(event);
return;
}
postSubmited = true;
$('postsubmit').disabled = true;
$('postform').submit();
}
}
function ctltab(event) {
if(event.keyCode == 9) {
doane(event);
}
}
function parseurl(str, mode, parsecode) {
if(!parsecode) str= str.replace(/\s*\[code\]([\s\S]+?)\[\/code\]\s*/ig, function($1, $2) {return codetag($2);});
str = str.replace(/([^>=\]"'\/]|^)((((https?|ftp):\/\/)|www\.)([\w\-]+\.)*[\w\-\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!]*)+\.(jpg|gif|png|bmp))/ig, mode == 'html' ? '$1<img src="$2" border="0">' : '$1[img]$2[/img]');
str = str.replace(/([^>=\]"'\/@]|^)((((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast):\/\/))([\w\-]+\.)*[:\.@\-\w\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!#]*)*)/ig, mode == 'html' ? '$1<a href="$2" target="_blank">$2</a>' : '$1[url]$2[/url]');
str = str.replace(/([^\w>=\]"'\/@]|^)((www\.)([\w\-]+\.)*[:\.@\-\w\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!#]*)*)/ig, mode == 'html' ? '$1<a href="$2" target="_blank">$2</a>' : '$1[url]$2[/url]');
str = str.replace(/([^\w->=\]:"'\.\/]|^)(([\-\.\w]+@[\.\-\w]+(\.\w+)+))/ig, mode == 'html' ? '$1<a href="mailto:$2">$2</a>' : '$1[email]$2[/email]');
if(!parsecode) {
for(var i = 0; i <= codecount; i++) {
str = str.replace("[\tDISCUZ_CODE_" + i + "\t]", codehtml[i]);
}
}
return str;
}
function codetag(text) {
codecount++;
if(typeof wysiwyg != 'undefined' && wysiwyg) text = text.replace(/<br[^\>]*>/ig, '\n').replace(/<(\/|)[A-Za-z].*?>/ig, '');
codehtml[codecount] = '[code]' + text + '[/code]';
return '[\tDISCUZ_CODE_' + codecount + '\t]';
}
function checklength(theform) {
var message = wysiwyg ? html2bbcode(getEditorContents()) : (!theform.parseurloff.checked ? parseurl(theform.message.value) : theform.message.value);
var showmessage = postmaxchars != 0 ? '系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节' : '';
alert('\n当前长度: ' + mb_strlen(message) + ' 字节\n\n' + showmessage);
}
if(!tradepost) {
var tradepost = 0;
}
function validate(theform) {
var message = wysiwyg ? html2bbcode(getEditorContents()) : (!theform.parseurloff.checked ? parseurl(theform.message.value) : theform.message.value);
if(($('postsubmit').name != 'replysubmit' && !($('postsubmit').name == 'editsubmit' && !isfirstpost) && theform.subject.value == "") || !sortid && !special && message == "") {
dalert('请完成标题或内容栏。');
return false;
} else if(mb_strlen(theform.subject.value) > 80) {
dalert('您的标题超过 80 个字符的限制。');
return false;
}
if(tradepost) {
if(theform.item_name.value == '') {
dalert('对不起,请输入商品名称。');
return false;
} else if(theform.item_price.value == '') {
dalert('对不起,请输入商品现价。');
return false;
} else if(!parseInt(theform.item_price.value)) {
dalert('对不起,商品现价必须为有效数字。');
return false;
} else if(theform.item_costprice.value != '' && !parseInt(theform.item_costprice.value)) {
dalert('对不起,商品原价必须为有效数字。');
return false;
} else if(theform.item_number.value != '0' && !parseInt(theform.item_number.value)) {
dalert('对不起,商品数量必须为数字。');
theform.item_number.focus();
return false;
}
}
if(in_array($('postsubmit').name, ['topicsubmit', 'editsubmit'])) {
if(theform.typeid && (theform.typeid.options && theform.typeid.options[theform.typeid.selectedIndex].value == 0) && typerequired) {
dalert('请选择主题对应的分类。');
return false;
}
if(special == 3 && isfirstpost) {
if(theform.rewardprice.value == "") {
dalert('对不起,请输入悬赏积分。');
return false;
}
} else if(special == 4 && isfirstpost) {
if(theform.activityclass.value == "") {
dalert('对不起,请输入活动所属类别。');
return false;
} else if($('starttimefrom_0').value == "" && $('starttimefrom_1').value == "") {
dalert('对不起,请输入活动开始时间。');
return false;
} else if(theform.activityplace.value == "") {
dalert('对不起,请输入活动地点。');
return false;
}
} else if(special == 6 && isfirstpost && $('postsubmit').name == 'topicsubmit') {
if(theform.vid.value == '') {
dalert('您还没有上传视频,或者视频还在上传中,请稍侯重试。');
return false;
} else if(theform.vsubject.value == '') {
dalert('没有添加视频主题。');
return false;
} else if(theform.vtag.value == '') {
dalert('没有填写视频标签');
return false;
} else if($('vclass') == '') {
dalert('请您选择视频所属分类。');
return false;
}
}
}
if(!disablepostctrl && !sortid && !special && ((postminchars != 0 && mb_strlen(message) < postminchars) || (postmaxchars != 0 && mb_strlen(message) > postmaxchars))) {
alert('您的帖子长度不符合要求。\n\n当前长度: ' + mb_strlen(message) + ' 字节\n系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节');
return false;
}
theform.message.value = message;
if($('postsubmit').name == 'editsubmit') {
if(!infloat) {
return true;
} else {
ajaxpost('postform', 'returnmessage', 'returnmessage', 'onerror', $('postsubmit'));
}
} else if(in_array($('postsubmit').name, ['topicsubmit', 'replysubmit'])) {
seccheck(theform, seccodecheck, secqaacheck);
return false;
}
}
function seccheck(theform, seccodecheck, secqaacheck) {
if(seccodecheck || secqaacheck) {
var url = 'ajax.php?inajax=1&action=';
if(seccodecheck) {
var x = new Ajax();
x.get(url + 'checkseccode&seccodeverify=' + (is_ie && document.charset == 'utf-8' ? encodeURIComponent($('seccodeverify').value) : $('seccodeverify').value), function(s) {
if(s != 'succeed') {
dalert(s);
$('seccodeverify').focus();
} else if(secqaacheck) {
checksecqaa(url, theform);
} else {
postsubmit(theform);
}
});
} else if(secqaacheck) {
checksecqaa(url, theform);
}
} else {
postsubmit(theform);
}
}
function checksecqaa(url, theform) {
var x = new Ajax();
var secanswer = $('secanswer').value;
secanswer = is_ie && document.charset == 'utf-8' ? encodeURIComponent(secanswer) : secanswer;
x.get(url + 'checksecanswer&secanswer=' + secanswer, function(s) {
if(s != 'succeed') {
dalert(s);
$('secanswer').focus();
} else {
postsubmit(theform);
}
});
}
function postsubmit(theform) {
theform.replysubmit ? theform.replysubmit.disabled = true : (theform.editsubmit ? theform.editsubmit.disabled = true : theform.topicsubmit.disabled = true);
if(!infloat) {
theform.submit();
} else {
ajaxpost('postform', 'returnmessage', 'returnmessage', 'onerror', $('postsubmit'));
}
}
function loadData(quiet) {
var message = '';
if(is_ie) {
try {
textobj.load('Discuz!');
var oXMLDoc = textobj.XMLDocument;
var nodes = oXMLDoc.documentElement.childNodes;
message = nodes.item(nodes.length - 1).getAttribute('message');
} catch(e) {}
} else if(window.sessionStorage) {
try {
message = sessionStorage.getItem('Discuz!');
} catch(e) {}
}
message = message.toString();
if(in_array((message = trim(message)), ['', 'null', 'false', null, false])) {
if(!quiet) {
alert('没有可以恢复的数据!');
}
return;
}
if(!quiet && !confirm('此操作将覆盖当前帖子内容,确定要恢复数据吗?')) {
return;
}
var formdata = message.split(/\x09\x09/);
for(var i = 0; i < $('postform').elements.length; i++) {
var el = $('postform').elements[i];
if(el.name != '' && (el.tagName == 'TEXTAREA' || el.tagName == 'INPUT' && (el.type == 'text' || el.type == 'checkbox' || el.type == 'radio'))) {
for(var j = 0; j < formdata.length; j++) {
var ele = formdata[j].split(/\x09/);
if(ele[0] == el.name) {
elvalue = !isUndefined(ele[3]) ? ele[3] : '';
if(ele[1] == 'INPUT') {
if(ele[2] == 'text') {
el.value = elvalue;
} else if((ele[2] == 'checkbox' || ele[2] == 'radio') && ele[3] == el.value) {
el.checked = true;
evalevent(el);
}
} else if(ele[1] == 'TEXTAREA') {
if(ele[0] == 'message') {
if(typeof wysiwyg == 'undefined' || !wysiwyg) {
textobj.value = elvalue;
} else {
editdoc.body.innerHTML = bbcode2html(elvalue);
}
} else {
el.value = elvalue;
}
}
break
}
}
}
}
}
var autosaveDatai, autosaveDatatime;
function autosaveData(op) {
var autosaveInterval = 60;
obj = $(editorid + '_cmd_autosave');
if(op) {
if(op == 2) {
saveData(wysiwyg ? editdoc.body.innerHTML : textobj.value);
} else {
setcookie('disableautosave', '', -2592000);
}
autosaveDatatime = autosaveInterval;
autosaveDatai = setInterval(function() {
autosaveDatatime--;
if(autosaveDatatime == 0) {
saveData(wysiwyg ? editdoc.body.innerHTML : textobj.value);
autosaveDatatime = autosaveInterval;
}
if($('autsavet')) {
$('autsavet').innerHTML = '(' + autosaveDatatime + '秒' + ')';
}
}, 1000);
obj.onclick = function() { autosaveData(0); }
} else {
setcookie('disableautosave', 1, 2592000);
clearInterval(autosaveDatai);
$('autsavet').innerHTML = '(已停止)';
obj.onclick = function() { autosaveData(1); }
}
}
function evalevent(obj) {
var script = obj.parentNode.innerHTML;
var re = /onclick="(.+?)["|>]/ig;
var matches = re.exec(script);
if(matches != null) {
matches[1] = matches[1].replace(/this\./ig, 'obj.');
eval(matches[1]);
}
}
function saveData(data, del) {
if(!data && isUndefined(del)) {
return;
}
if(typeof wysiwyg != 'undefined' && typeof editorid != 'undefined' && $(editorid + '_mode') && $(editorid + '_mode').value == 1) {
data = html2bbcode(data);
}
var formdata = '';
if(isUndefined(del)) {
for(var i = 0; i < $('postform').elements.length; i++) {
var el = $('postform').elements[i];
if(el.name != '' && (el.tagName == 'TEXTAREA' || el.tagName == 'INPUT' && (el.type == 'text' || el.type == 'checkbox' || el.type == 'radio')) && el.name.substr(0, 6) != 'attach') {
var elvalue = el.name == 'message' ? data : el.value;
if((el.type == 'checkbox' || el.type == 'radio') && !el.checked) {
continue;
}
formdata += el.name + String.fromCharCode(9) + el.tagName + String.fromCharCode(9) + el.type + String.fromCharCode(9) + elvalue + String.fromCharCode(9, 9);
}
}
}
if(is_ie) {
try {
var oXMLDoc = textobj.XMLDocument;
var root = oXMLDoc.firstChild;
if(root.childNodes.length > 0) {
root.removeChild(root.firstChild);
}
var node = oXMLDoc.createNode(1, 'POST', '');
var oTimeNow = new Date();
oTimeNow.setHours(oTimeNow.getHours() + 24);
textobj.expires = oTimeNow.toUTCString();
node.setAttribute('message', formdata);
oXMLDoc.documentElement.appendChild(node);
textobj.save('Discuz!');
} catch(e) {}
} else if(window.sessionStorage) {
try {
sessionStorage.setItem('Discuz!', formdata);
} catch(e) {}
}
}
function deleteData() {
if(is_ie) {
saveData('', 'delete');
} else if(window.sessionStorage) {
try {
sessionStorage.removeItem('Discuz!');
} catch(e) {}
}
}
function setCaretAtEnd() {
if(typeof wysiwyg != 'undefined' && wysiwyg) {
editdoc.body.innerHTML += '';
} else {
editdoc.value += '';
}
}
function relatekw(subject, message, recall) {
if(isUndefined(recall)) recall = '';
if(isUndefined(subject) || subject == -1) subject = $('subject').value;
if(isUndefined(message) || message == -1) message = getEditorContents();
subject = (is_ie && document.charset == 'utf-8' ? encodeURIComponent(subject) : subject);
message = (is_ie && document.charset == 'utf-8' ? encodeURIComponent(message) : message);
message = message.replace(/&/ig, '', message).substr(0, 500);
ajaxget('relatekw.php?subjectenc=' + subject + '&messageenc=' + message, 'tagselect', '', '', '', recall);
}
function dalert(s) {
if(!infloat) {
alert(s);
} else {
$('returnmessage').className = 'onerror';
$('returnmessage').innerHTML = s;
messagehandle();
}
}
function pagescrolls(op) {
if(!infloat && op.substr(0, 6) == 'credit') {
window.open('faq.php?action=credits&fid=' + fid);
return;
}
switch(op) {
case 'credit1':hideMenu();$('moreconf').style.display = 'none';$('extcreditbox1').innerHTML = $('extcreditbox').innerHTML;pagescroll.left();break;
case 'credit2':$('moreconf').style.display = 'none';$('extcreditbox2').innerHTML = $('extcreditbox').innerHTML;pagescroll.left();break;
case 'credit3':hideMenu();$('moreconf').style.display = 'none';$('extcreditbox3').innerHTML = $('extcreditbox').innerHTML;pagescroll.left();break;
case 'return':if(!Editorwin) {hideMenu();$('custominfoarea').style.display=$('more_2').style.display='none';pagescroll.up(1, '$(\'more_1\').style.display=\'\'');}break;
case 'creditreturn':pagescroll.right(1, '$(\'moreconf\').style.display = \'\';');break;
case 'swf':hideMenu();$('moreconf').style.display = 'none';swfHandler(3);break;
case 'swfreturn':$('swfbox').style.display = 'none';if(!Editorwin) {pagescroll.left(1, '$(\'moreconf\').style.display = \'\';');}swfHandler(2);break;
case 'more':hideMenu();pagescroll.down(1, '$(\'more_1\').style.display=$(\'more_2\').style.display=$(\'custominfoarea\').style.display=\'none\'');break;
case 'editorreturn':$('more_1').style.display='none';pagescroll.up(1, '$(\'more_2\').style.display=$(\'custominfoarea\').style.display=\'\'');break;
case 'editor':$('more_1').style.display='none';pagescroll.down(1, '$(\'more_2\').style.display=\'\';$(\'custominfoarea\').style.display=\'\'');break;
}
}
function switchicon(iconid, obj) {
$('iconid').value = iconid;
$('icon_img').src = obj.src;
hideMenu();
}
var swfuploaded = 0;
function swfHandler(action) {
if(action == 1) {
swfuploaded = 1;
} else if(action == 2) {
if(Editorwin || !infloat) {
swfuploadwin();
} else {
pagescroll.left(1, '$(\'moreconf\').style.display=\'\';');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -