📄 post.js
字号:
/*
[Discuz!] (C)2001-2007 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', 'pmsubmit']) && !validate($('postform'))) {
doane(event);
return;
}
postSubmited = true;
$('postsubmit').disabled = true;
$('postform').submit();
}
}
function deleteData() {
if(is_ie) {
saveData('', 'delete');
} else if(window.sessionStorage) {
try {
sessionStorage.removeItem('Discuz!');
} catch(e) {}
}
}
function insertSmiley(smilieid) {
checkFocus();
var src = $('smilie_' + smilieid).src;
var code = $('smilie_' + smilieid).code;
if(typeof wysiwyg != 'undefined' && wysiwyg && allowsmilies && (!$('smileyoff') || $('smileyoff').checked == false)) {
if(is_moz) {
applyFormat('InsertImage', false, src);
var smilies = editdoc.body.getElementsByTagName('img');
for(var i = 0; i < smilies.length; i++) {
if(smilies[i].src == src && smilies[i].getAttribute('smilieid') < 1) {
smilies[i].setAttribute('smilieid', smilieid);
smilies[i].setAttribute('border', "0");
}
}
} else {
insertText('<img src="' + src + '" border="0" smilieid="' + smilieid + '" alt="" /> ', false);
}
} else {
code += ' ';
AddText(code);
}
}
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 loadData() {
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])) {
alert(lang['post_autosave_none']);
return;
}
if(!confirm(lang['post_autosave_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
}
}
}
}
}
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' && typeof bbinsert != 'undefined' && bbinsert && $(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 setCaretAtEnd() {
var obj = typeof wysiwyg == 'undefined' || !wysiwyg ? $('postform').message : editwin;
if(typeof wysiwyg != 'undefined' && wysiwyg) {
if(is_moz || is_opera) {
} else {
var sel = editdoc.selection.createRange();
sel.moveStart('character', strlen(getEditorContents()));
sel.select();
}
} else {
if(obj.createTextRange) {
var sel = obj.createTextRange();
sel.moveStart('character', strlen(obj.value));
sel.collapse();
sel.select();
}
}
}
function smileyMenu(ctrl) {
var smiley = ctrl.firstChild;
ctrl.style.cursor = 'pointer';
if(smiley.alt) {
smiley.code = smiley.alt;
smiley.alt = '';
}
if(smiley.title) {
smiley.lw = smiley.title;
smiley.title = '';
}
smdiv[ctrl.id] = document.createElement('div');
smdiv[ctrl.id].id = smiley.id + '_menu';
smdiv[ctrl.id].style.display = 'none';
smdiv[ctrl.id].style.width = '60px';
smdiv[ctrl.id].style.height = '60px';
smdiv[ctrl.id].className = 'popupmenu_popup';
$('smilieslist').appendChild(smdiv[ctrl.id]);
smdiv[ctrl.id].innerHTML = '<table width="100%" height="100%"><tr><td align="center" valign="middle"><img src="' + smiley.src + '" border="0" width="' + smiley.lw + '" /></td></tr></table>';
showMenu(ctrl.id, 0, 0, 1, 0, 0, smiley.id);
}
function storeCaret(textEl){
if(textEl.createTextRange){
textEl.caretPos = document.selection.createRange().duplicate();
}
}
if(is_ie >= 5 || is_moz >= 2) {
window.onbeforeunload = function () {
try {
saveData(wysiwyg && bbinsert ? editdoc.body.innerHTML : textobj.value);
} catch(e) {}
};
}
function setmediacode(editorid) {
insertText('[media='+$(editorid + '_mediatype').value+
','+$(editorid + '_mediawidth').value+
','+$(editorid + '_mediaheight').value+
','+$(editorid + '_mediaautostart').value+']'+
$(editorid + '_mediaurl').value+'[/media]');
hideMenu();
}
function setmediatype(editorid) {
var ext = $(editorid + '_mediaurl').value.lastIndexOf('.') == -1 ? '' : $(editorid + '_mediaurl').value.substr($(editorid + '_mediaurl').value.lastIndexOf('.') + 1, $(editorid + '_mediaurl').value.length).toLowerCase();
if(ext == 'rmvb') {
ext = 'rm';
}
if($(editorid + '_mediatyperadio_' + ext)) {
$(editorid + '_mediatyperadio_' + ext).checked = true;
$(editorid + '_mediatype').value = ext;
}
}
var divdragstart = new Array();
function divdrag(e, op, obj) {
if(op == 1) {
if(is_ie) {
document.body.onselectstart = function() {
return false;
}
}
divdragstart = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
divdragstart[2] = parseInt(obj.style.left);
divdragstart[3] = parseInt(obj.style.top);
doane(e);
} else if(op == 2 && divdragstart[0]) {
var divdragnow = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
obj.style.left = (divdragstart[2] + divdragnow[0] - divdragstart[0]) + 'px';
obj.style.top = (divdragstart[3] + divdragnow[1] - divdragstart[1]) + 'px';
doane(e);
} else if(op == 3) {
if(is_ie) {
document.body.onselectstart = function() {
return true;
}
}
divdragstart = [];
doane(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -