/******************************************************************************
Crossday Discuz! Board - Editor Modules for Discuz!
Copyright 2001-2006 Comsenz Inc. (http://www.comsenz.com)
*******************************************************************************/
var editbox = editwin = editdoc = null;
var cursor = -1;
var stack = new Array();
function newEditor(mode, initialtext) {
wysiwyg = parseInt(mode);
if(!(is_ie || is_moz || (is_opera && opera.version() >= 9))) {
allowswitcheditor = wysiwyg = 0;
}
var bbcodemode = $('bbcodemode');
var wysiwygmode = $('wysiwygmode');
bbcodemode.className = wysiwyg ? 'editor_switcher' : 'editor_switcher_highlight';
wysiwygmode.className = wysiwyg ? 'editor_switcher_highlight' : 'editor_switcher';
if(!allowswitcheditor) {
$(editorid + '_switcher').style.display = 'none';
}
if(wysiwyg) {
if($(editorid + '_iframe')) {
editbox = $(editorid + '_iframe');
} else {
var iframe = document.createElement('iframe');
editbox = textobj.parentNode.appendChild(iframe);
editbox.id = editorid + '_iframe';
}
editwin = editbox.contentWindow;
editdoc = editwin.document;
writeEditorContents(isUndefined(initialtext) ? textobj.value : initialtext);
} else {
editbox = textobj;
editwin = textobj;
editdoc = textobj;
if(!isUndefined(initialtext)) {
writeEditorContents(initialtext);
}
addSnapshot(textobj.value);
}
setEditorEvents();
}
function writeEditorContents(text) {
if(wysiwyg) {
if(text == '' && is_moz) {
text = '<br />';
}
if(editdoc && editdoc.initialized) {
editdoc.body.innerHTML = text;
} else {
editdoc.designMode = 'on';
editdoc = editwin.document;
editdoc.open('text/html', 'replace');
editdoc.write(text);
editdoc.close();
editdoc.body.contentEditable = true;
editdoc.initialized = true;
}
} else {
textobj.value = text;
}
setEditorStyle();
}
function getEditorContents() {
return wysiwyg ? editdoc.body.innerHTML : editdoc.value;
}
function setEditorStyle() {
if(wysiwyg) {
textobj.style.display = 'none';
editbox.style.display = '';
if(is_moz || is_opera) {
for(var ss = 0; ss < document.styleSheets.length; ss++) {
if(document.styleSheets[ss].cssRules.length <= 0) {
continue;
}
for(var i = 0; i < document.styleSheets[ss].cssRules.length; i++) {
if(document.styleSheets[ss].cssRules[i].selectorText == '.wysiwyg') {
var newss = editdoc.createElement('style');
newss.type = 'text/css';
newss.innerHTML = document.styleSheets[ss].cssRules[i].cssText + ' p { margin: 0px; }';
editdoc.documentElement.childNodes[0].appendChild(newss);
editdoc.body.style.fontSize = document.styleSheets[ss].cssRules[i].style.fontSize;
editdoc.body.style.fontFamily = document.styleSheets[ss].cssRules[i].style.fontFamily;
}
}
}
editbox.style.border = '0px';
} else if(is_ie) {
if(document.styleSheets['css']) {
editdoc.createStyleSheet().cssText = document.styleSheets['css'].cssText + ' p { margin: 0px; }';
editdoc.body.className = 'wysiwyg';
}
editdoc.body.style.border = '0px';
}
editbox.style.width = textobj.style.width;
editbox.style.height = textobj.style.height;
editdoc.body.style.background = '';
editdoc.body.style.backgroundColor = '#FFFFFF';
} else {
var iframe = textobj.parentNode.getElementsByTagName('iframe')[0];
if(iframe) {
textobj.style.display = '';
textobj.style.width = iframe.style.width;
textobj.style.height = iframe.style.height;
iframe.style.display = 'none';
}
}
}
function setEditorEvents() {
if(wysiwyg) {
if(is_moz || is_opera) {
editdoc.addEventListener('mouseup', function(e) {setContext(); popupmenu.hide();}, true);
editdoc.addEventListener('keyup', function(e) {setContext();}, true);
editwin.addEventListener('focus', function(e) {this.hasfocus = true;}, true);
editwin.addEventListener('blur', function(e) {this.hasfocus = false;}, true);
//editwin.addEventListener('keydown', function(e) {ctlent(e);}, true);
} else {
editdoc.onmouseup = function(e) {setContext(); popupmenu.hide();};
editdoc.onkeyup = function(e) {setContext();};
if(editdoc.attachEvent) {
//editdoc.body.attachEvent("onkeydown", ctlent);
}
}
}
editwin.onfocus = function(e) {this.hasfocus = true;};
editwin.onblur = function(e) {this.hasfocus = false;};
}
function wrapTags(tagname, useoption, selection) {
if(tagname=='code') {
applyFormat('removeformat');
}
if(isUndefined(selection)) {
var selection = getSel();
if(selection === false) {
selection = '';
} else {
selection += '';
}
}
if(useoption === true) {
var option = showPrompt(construct_phrase(lang['enter_tag_option'], ('[' + tagname + ']')), '');
if(option = verifyPrompt(option)) {
var opentag = '[' + tagname + '=' + option + ']';
} else {
return false;
}
} else if(useoption !== false) {
var opentag = '[' + tagname + '=' + useoption + ']';
} else {
var opentag = '[' + tagname + ']';
}
var closetag = '[/' + tagname + ']';
var text = opentag + selection + closetag;
insertText(text, mb_strlen(opentag), mb_strlen(closetag));
return false;
}
function applyFormat(cmd, dialog, argument) {
if(wysiwyg) {
editdoc.execCommand(cmd, (isUndefined(dialog) ? false : dialog), (isUndefined(argument) ? true : argument));
return false;
}
switch(cmd) {
case 'bold':
case 'italic':
case 'underline':
wrapTags(cmd.substr(0, 1), false);
break;
case 'justifyleft':
case 'justifycenter':
case 'justifyright':
wrapTags('align', cmd.substr(7));
break;
case 'indent':
wrapTags(cmd, false);
break;
case 'fontname':
wrapTags('font', argument);
break;
case 'fontsize':
wrapTags('size', argument);
break;
case 'forecolor':
wrapTags('color', argument);
break;
case 'createlink':
var sel = getSel();
if(sel) {
wrapTags('url', argument);
} else {
wrapTags('url', argument, argument);
}
break;
case 'insertimage':
wrapTags('img', false, argument);
break;
}
}
function customTags(tagname, params) {
applyFormat('removeformat');
if(custombbcodes[tagname].indexOf(']') == -1) {
custombbcodes[tagname] = '[' + tagname + '][/' + tagname + ']';
}
if(params == 1) {
var selection = getSel();
if(selection === false) {
selection = '';
} else {
selection += '';
}
var opentag = '[' + tagname + ']';
var closetag = '[/' + tagname + ']';
var text = opentag + selection + closetag;
selection == '' ? insertText(custombbcodes[tagname], mb_strlen('[' + tagname + ']'), mb_strlen('[/' + tagname + ']')) : insertText(text, mb_strlen(opentag), mb_strlen(closetag));
} else {
insertText(custombbcodes[tagname], custombbcodes[tagname].indexOf(']') + 1, mb_strlen('[/' + tagname + ']'));
}
return false;
}
function discuzcode(cmd, arg) {
if(cmd != 'redo') {
addSnapshot(getEditorContents());
}
checkFocus();
if(in_array(cmd, ['quote', 'code'])) {
var ret = wrapTags(cmd, false);
} 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 ==
评论0