📄 post.js
字号:
try {
obj = is_ie ? event.srcElement : e.target;
var ctrlid = obj.id.substr(0, obj.id.lastIndexOf('_param_'));
if((obj.type == 'text' && e.keyCode == 13) || (obj.type == 'textarea' && e.ctrlKey && e.keyCode == 13)) {
$(ctrlid + '_submit').click();
doane(e);
} else if(e.keyCode == 27) {
hideMenu();
$(ctrlid + '_menu').parentNode.removeChild($(ctrlid + '_menu'));
}
} catch(e) {}
}
function customTags(tagname, params) {
var sel;
if(is_ie) {
sel = wysiwyg ? editdoc.selection.createRange() : document.selection.createRange();
var pos = getCaret();
}
var selection = sel ? (wysiwyg ? sel.htmlText : sel.text) : getSel();
var opentag = '[' + tagname + ']';
var closetag = '[/' + tagname + ']';
var haveSel = selection == null || selection == false || in_array(trim(selection), ['', 'null', 'undefined', 'false']) ? 0 : 1;
if(params == 1 && haveSel) {
return insertText((opentag + selection + closetag), strlen(opentag), strlen(closetag), true, sel);
}
var ctrlid = editorid + '_cmd_custom' + params + '_' + tagname;
var promptlang = custombbcodes[tagname]['prompt'].split("\t");
var str = '';
for(var i = 1; i <= params; i++) {
if(i != params || !haveSel) {
str += (promptlang[i - 1] ? promptlang[i - 1] : '请输入第 ' + i + ' 个参数:') + '<br /><input type="text" id="' + ctrlid + '_param_' + i + '" style="width: 98%" value="" class="txt" />' + (i < params ? '<br />' : '');
}
}
var div = editorMenu(ctrlid, str);
$(ctrlid + '_param_1').focus();
for(var i = 1; i <= params; i++) {if(i != params || !haveSel) $(ctrlid + '_param_' + i).onkeydown = editorMenuEvent_onkeydown;}
$(ctrlid + '_submit').onclick = function() {
var first = $(ctrlid + '_param_1').value;
if($(ctrlid + '_param_2')) var second = $(ctrlid + '_param_2').value;
if($(ctrlid + '_param_3')) var third = $(ctrlid + '_param_3').value;
checkFocus();
if(is_ie) {
setCaret(pos);
}
if((params == 1 && first) || (params == 2 && first && (haveSel || second)) || (params == 3 && first && second && (haveSel || third))) {
var text;
if(params == 1) {
text = first;
} else if(params == 2) {
text = haveSel ? selection : second;
opentag = '[' + tagname + '=' + first + ']';
} else {
text = haveSel ? selection : third;
opentag = '[' + tagname + '=' + first + ',' + second + ']';
}
insertText((opentag + text + closetag), strlen(opentag), strlen(closetag), true, sel);
}
hideMenu();
div.parentNode.removeChild(div);
};
}
function editorMenu(ctrlid, str) {
var div = document.createElement('div');
div.id = ctrlid + '_menu';
div.style.display = 'none';
div.className = 'popupmenu_popup popupfix';
div.style.width = '300px';
$(editorid + '_controls').appendChild(div);
div.innerHTML = '<div class="popupmenu_option" unselectable="on">' + str + '<br /><center><input type="button" id="' + ctrlid + '_submit" value="提交" /> <input type="button" onClick="hideMenu();try{div.parentNode.removeChild(' + div.id + ')}catch(e){}" value="取消" /></center></div>';
InFloat = InFloat_Editor;
showMenu(ctrlid, true, 0, 3);
return div;
}
function discuzcode(cmd, arg) {
if(cmd != 'redo') {
addSnapshot(getEditorContents());
}
checkFocus();
if(in_array(cmd, ['quote', 'code', 'free', 'hide'])) {
var sel;
if(is_ie) {
sel = wysiwyg ? editdoc.selection.createRange() : document.selection.createRange();
var pos = getCaret();
}
var selection = sel ? (wysiwyg ? sel.htmlText : sel.text) : getSel();
var opentag = '[' + cmd + ']';
var closetag = '[/' + cmd + ']';
if(cmd != 'hide' && selection) {
return insertText((opentag + selection + closetag), strlen(opentag), strlen(closetag), true, sel);
}
var ctrlid = editorid + '_cmd_' + cmd;
var str = '';
lang['e_quote'] = '请输入要插入的引用';
lang['e_code'] = '请输入要插入的代码';
lang['e_free'] = '请输入要插入的免费信息';
lang['e_hide'] = '请输入要插入的隐藏内容';
if(cmd != 'hide' || !selection) {
str += lang['e_' + cmd] + ':<br /><textarea id="' + ctrlid + '_param_1" style="width: 98%" cols="50" rows="5"></textarea>';
}
str += cmd == 'hide' ? '<br /><input type="radio" name="' + ctrlid + '_radio" id="' + ctrlid + '_radio_1" class="txt" checked="checked" />只有当浏览者回复本帖时才显示<br /><input type="radio" name="' + ctrlid + '_radio" id="' + ctrlid + '_radio_2" class="txt" />只有当浏览者积分高于 <input type="text" size="3" id="' + ctrlid + '_param_2" class="txt" /> 时才显示' : '';
var div = editorMenu(ctrlid, str);
$(ctrlid + '_param_' + (cmd == 'hide' && selection ? 2 : 1)).focus();
$(ctrlid + '_param_' + (cmd == 'hide' && selection ? 2 : 1)).onkeydown = editorMenuEvent_onkeydown;
$(ctrlid + '_submit').onclick = function() {
checkFocus();
if(is_ie) {
setCaret(pos);
}
if(cmd == 'hide' && $(ctrlid + '_radio_2').checked) {
var mincredits = parseInt($(ctrlid + '_param_2').value);
opentag = mincredits > 0 ? '[hide=' + mincredits + ']' : '[hide]';
}
var text = selection ? selection : $(ctrlid + '_param_1').value;
if(wysiwyg) {
if(cmd == 'code') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}
text = text.replace(/\r?\n/g, '<br />');
}
text = opentag + text + closetag;
insertText(text, strlen(opentag), strlen(closetag), false, sel);
hideMenu();
div.parentNode.removeChild(div);
}
return;
} else if(cmd.substr(0, 6) == 'custom') {
var ret = customTags(cmd.substr(8), cmd.substr(6, 1));
} else if(!wysiwyg && cmd == 'removeformat') {
var simplestrip = new Array('b', 'i', 'u');
var complexstrip = new Array('font', 'color', 'size');
var str = getSel();
if(str === false) {
return;
}
for(var tag in simplestrip) {
str = stripSimple(simplestrip[tag], str);
}
for(var tag in complexstrip) {
str = stripComplex(complexstrip[tag], str);
}
insertText(str);
} else if(!wysiwyg && cmd == 'undo') {
addSnapshot(getEditorContents());
moveCursor(-1);
if((str = getSnapshot()) !== false) {
editdoc.value = str;
}
} else if(!wysiwyg && cmd == 'redo') {
moveCursor(1);
if((str = getSnapshot()) !== false) {
editdoc.value = str;
}
} else if(!wysiwyg && in_array(cmd, ['insertorderedlist', 'insertunorderedlist'])) {
var listtype = cmd == 'insertorderedlist' ? '1' : '';
var opentag = '[list' + (listtype ? ('=' + listtype) : '') + ']\n';
var closetag = '[/list]';
if(txt = getSel()) {
var regex = new RegExp('([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])', 'gi');
txt = opentag + trim(txt).replace(regex, '$1[*]') + '\n' + closetag;
insertText(txt, strlen(txt), 0);
} else {
insertText(opentag + closetag, opentag.length, closetag.length);
while(listvalue = prompt('输入一个列表项目.\r\n留空或者点击取消完成此列表.', '')) {
if(is_opera > 8) {
listvalue = '\n' + '[*]' + listvalue;
insertText(listvalue, strlen(listvalue) + 1, 0);
} else {
listvalue = '[*]' + listvalue + '\n';
insertText(listvalue, strlen(listvalue), 0);
}
}
}
} else if(!wysiwyg && cmd == 'outdent') {
var sel = getSel();
sel = stripSimple('indent', sel, 1);
insertText(sel);
} else if(cmd == 'createlink') {
insertlink('createlink');
} else if(!wysiwyg && cmd == 'unlink') {
var sel = getSel();
sel = stripSimple('url', sel);
sel = stripComplex('url', sel);
insertText(sel);
} else if(cmd == 'email') {
insertlink('email');
} else if(cmd == 'insertimage') {
insertimage('insertimage');
} else if(cmd == 'table') {
if(wysiwyg) {
var selection = getSel();
if(is_ie) {
var pos = getCaret();
}
var ctrlid = editorid + '_cmd_table';
var str = '<p>表格行数: <input type="text" id="' + ctrlid + '_param_rows" size="2" value="2" class="txt" /> 表格列数: <input type="text" id="' + ctrlid + '_param_columns" size="2" value="2" class="txt" /></p><p>表格宽度: <input type="text" id="' + ctrlid + '_param_width" size="2" value="" class="txt" /> 背景颜色: <input type="text" id="' + ctrlid + '_param_bgcolor" size="2" class="txt" /></p>';
var div = editorMenu(ctrlid, str);
$(ctrlid + '_param_rows').focus();
var params = ['rows', 'columns', 'width', 'bgcolor'];
for(var i = 0; i < 4; i++) {$(ctrlid + '_param_' + params[i]).onkeydown = editorMenuEvent_onkeydown;}
$(ctrlid + '_submit').onclick = function() {
checkFocus();
if(is_ie) {
setCaret(pos);
}
var rows = $(ctrlid + '_param_rows').value;
var columns = $(ctrlid + '_param_columns').value;
var width = $(ctrlid + '_param_width').value;
var bgcolor = $(ctrlid + '_param_bgcolor').value;
rows = /^[-\+]?\d+$/.test(rows) && rows > 0 && rows <= 30 ? rows : 2;
columns = /^[-\+]?\d+$/.test(columns) && columns > 0 && columns <= 30 ? columns : 2;
width = width.substr(width.length - 1, width.length) == '%' ? (width.substr(0, width.length - 1) <= 98 ? width : '98%') : (width <= 560 ? width : '98%');
bgcolor = /[\(\)%,#\w]+/.test(bgcolor) ? bgcolor : '';
var html = '<table cellspacing="0" cellpadding="0" width="' + (width ? width : '50%') + '" class="t_table"' + (bgcolor ? ' bgcolor="' + bgcolor + '"' : '') + '>';
for (var row = 0; row < rows; row++) {
html += '<tr>\n';
for (col = 0; col < columns; col++) {
html += '<td> </td>\n';
}
html+= '</tr>\n';
}
html += '</table>\n';
insertText(html);
hideMenu();
div.parentNode.removeChild(div);
}
}
return false;
} else if(cmd == 'floatleft' || cmd == 'floatright') {
if(wysiwyg) {
var selection = getSel();
if(selection) {
var ret = insertText('<br style="clear: both"><span style="float: ' + cmd.substr(5) + '">' + selection + '</span>', true);
}
} else {
var ret = applyFormat(cmd, false);
}
} else if(cmd == 'loadData') {
loadData();hideMenu();
} else if(cmd == 'saveData') {
autosaveData(2);hideMenu();
} else if(cmd == 'autosave') {
if(getcookie('disableautosave')) {
autosaveData(1);
} else {
autosaveData(0);
}
} else if(cmd == 'checklength') {
checklength($('postform'));hideMenu();
} else if(cmd == 'clearcontent') {
clearcontent();hideMenu();
} else {
try {
var ret = applyFormat(cmd, false, (isUndefined(arg) ? true : arg));
} catch(e) {
var ret = false;
}
}
if(cmd != 'undo') {
addSnapshot(getEditorContents());
}
if(in_array(cmd, ['bold', 'italic', 'underline', 'fontname', 'fontsize', 'forecolor', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'floatleft', 'floatright', 'removeformat', 'unlink', 'undo', 'redo'])) {
hideMenu();
}
return ret;
}
function getSel() {
if(wysiwyg) {
if(is_moz || is_opera) {
selection = editwin.getSelection();
checkFocus();
range = selection ? selection.getRangeAt(0) : editdoc.createRange();
return readNodes(range.cloneContents(), false);
} else {
var range = editdoc.selection.createRange();
if(range.htmlText && range.text) {
return range.htmlText;
} else {
var htmltext = '';
for(var i = 0; i < range.length; i++) {
htmltext += range.item(i).outerHTML;
}
return htmltext;
}
}
} else {
if(!isUndefined(editdoc.selectionStart)) {
return editdoc.value.substr(editdoc.selectionStart, editdoc.selectionEnd - editdoc.selectionStart);
} else if(document.selection && document.selection.createRange) {
return document.selection.createRange().text;
} else if(window.getSelection) {
return window.getSelection() + '';
} else {
return false;
}
}
}
function insertText(text, movestart, moveend, select, sel) {
if(wysiwyg) {
if(is_moz || is_opera) {
applyFormat('removeformat');
var fragment = editdoc.createDocumentFragment();
var holder = editdoc.createElement('span');
holder.innerHTML = text;
while(holder.firstChild) {
fragment.appendChild(holder.firstChild);
}
insertNodeAtSelection(fragment);
} else {
checkFocus();
if(!isUndefined(editdoc.selection) && editdoc.selection.type != 'Text' && editdoc.selection.type != 'None') {
movestart = false;
editdoc.selection.clear();
}
if(isUndefined(sel)) {
sel = editdoc.selection.createRange();
}
sel.pasteHTML(text);
if(text.indexOf('\n') == -1) {
if(!isUndefined(movestart)) {
sel.moveStart('character', -strlen(text) + movestart);
sel.moveEnd('character', -moveend);
} else if(movestart != false) {
sel.moveStart('character', -strlen(text));
}
if(!isUndefined(select) && select) {
sel.select();
}
}
}
} else {
checkFocus();
if(!isUndefined(editdoc.selectionStart)) {
var opn = editdoc.selectionStart + 0;
editdoc.value = editdoc.value.substr(0, editdoc.selectionStart) + text + editdoc.value.substr(editdoc.selectionEnd);
if(!isUndefined(movestart)) {
editdoc.selectionStart = opn + movestart;
editdoc.selectionEnd = opn + strlen(text) - moveend;
} else if(movestart !== false) {
editdoc.selectionStart = opn;
editdoc.selectionEnd = opn + strlen(text);
}
} else if(document.selection && document.selection.createRange) {
if(isUndefined(sel)) {
sel = document.selection.createRange();
}
sel.text = text.replace(/\r?\n/g, '\r\n');
if(!isUndefined(movestart)) {
sel.moveStart('character', -strlen(text) +movestart);
sel.moveEnd('character', -moveend);
} else if(movestart !== false) {
sel.moveStart('character', -strlen(text));
}
sel.select();
} else {
editdoc.value += text;
}
}
}
function stripSimple(tag, str, iterations) {
var opentag = '[' + tag + ']';
var closetag = '[/' + tag + ']';
if(isUndefined(iterations)) {
iterations = -1;
}
while((startindex = stripos(str, opentag)) !== false && iterations != 0) {
iterations --;
if((stopindex = stripos(str, closetag)) !== false) {
var text = str.substr(startindex + opentag.length, stopindex - startindex - opentag.length);
str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
} else {
break;
}
}
return str;
}
function stripComplex(tag, str, iterations) {
var opentag = '[' + tag + '=';
var closetag = '[/' + tag + ']';
if(isUndefined(iterations)) {
iterations = -1;
}
while((startindex = stripos(str, opentag)) !== false && iterations != 0) {
iterations --;
if((stopindex = stripos(str, closetag)) !== false) {
var openend = stripos(str, ']', startindex);
if(openend !== false && openend > startindex && openend < stopindex) {
var text = str.substr(openend + 1, stopindex - openend - 1);
str = str.substr(0, startindex) + text + str.substr(stopindex + closetag.length);
} else {
break;
}
} else {
break;
}
}
return str;
}
function stripos(haystack, needle, offset) {
if(isUndefined(offset)) {
offset = 0;
}
var index = haystack.toLowerCase().indexOf(needle.toLowerCase(), offset);
return (index == -1 ? false : index);
}
function switchEditor(mode) {
mode = parseInt(mode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -