📄 editor.js
字号:
var imgPath="Images/Editor/";
var ToolbarIcon=Array(Array('UNDO','undo.gif','撤销'),Array('REDO','redo.gif','恢复'),Array('CUT','cut.gif','剪切'),Array('COPY','copy.gif','复制'),Array('PASTE','paste.gif','粘贴'),Array('SELECTALL','selectall.gif','全选'),Array('REMOVE','removeformat.gif','删除格式'),Array('ICON','emot.gif','表情'),Array('IMAGE','image.gif','图片'),Array('LINK','link.gif','创建超级连接'),Array('UNLINK','unlink.gif','删除超级连接'),Array('FLASH','flash.gif','Flash'),Array('MEDIA','media.gif','Windows Media Player'),Array('REAL','real.gif','Real Player'),Array('DATE','date.gif','日期'),Array('TIME','time.gif','时间'),Array('TEXTCOLOR','textcolor.gif','文字颜色'),Array('BGCOLOR','bgcolor.gif','文字背景'),Array('BOLD','bold.gif','粗体'),Array('ITALIC','italic.gif','斜体'),Array('UNDERLINE','underline.gif','下划线'),Array('JUSTIFYLEFT','justifyleft.gif','左对齐'),Array('JUSTIFYCENTER','justifycenter.gif','居中'),Array('JUSTIFYRIGHT','justifyright.gif','右对齐'),Array('JUSTIFYFULL','justifyfull.gif','两端对齐'),Array('NUMBEREDLIST','numberedlist.gif','编号'),Array('UNORDERLIST','unorderedlist.gif','项目符号'),Array('INDENT','indent.gif','减少缩进'),Array('OUTDENT','outdent.gif','增加缩进'),Array('SUBSCRIPT','subscript.gif','下标'),Array('SUPERSCRIPT','superscript.gif','上标'));
var PopupMenuList=Array("TEXTCOLOR","BGCOLOR","LINK");
var ColorList=Array("#FF0000","#FFFF00","#00FF00","#00FFFF","#0000FF","#FF00FF","#FFFFFF","#F5F5F5","#DCDCDC","#FFFAFA","#D3D3D3","#C0C0C0","#A9A9A9","#808080","#696969","#000000","#2F4F4F","#708090","#778899","#4682B4","#4169E1","#6495ED","#B0C4DE","#7B68EE","#6A5ACD","#483D8B","#191970","#000080","#00008B","#0000CD","#1E90FF","#00BFFF","#87CEFA","#87CEEB","#ADD8E6","#B0E0E6","#F0FFFF","#E0FFFF","#AFEEEE","#00CED1","#5F9EA0","#48D1CC","#00FFFF","#40E0D0","#20B2AA","#008B8B","#008080","#7FFFD4","#66CDAA","#8FBC8F","#3CB371","#2E8B57","#006400","#008000","#228B22","#32CD32","#00FF00","#7FFF00","#7CFC00","#ADFF2F","#98FB98","#90EE90","#00FF7F","#00FA9A","#556B2F","#6B8E23","#808000","#BDB76B","#B8860B","#DAA520","#FFD700","#F0E68C","#EEE8AA","#FFEBCD","#FFE4B5","#F5DEB3","#FFDEAD","#DEB887","#D2B48C","#BC8F8F","#A0522D","#8B4513","#D2691E","#CD853F","#F4A460","#8B0000","#800000","#A52A2A","#B22222","#CD5C5C","#F08080","#FA8072","#E9967A","#FFA07A","#FF7F50","#FF6347","#FF8C00","#FFA500","#FF4500","#DC143C","#FF0000","#FF1493","#FF00FF","#FF69B4","#FFB6C1","#FFC0CB","#DB7093","#C71585","#800080","#8B008B","#9370DB","#8A2BE2","#4B0082","#9400D3","#9932CC","#BA55D3","#DA70D6","#EE82EE","#DDA0DD","#D8BFD8","#E6E6FA","#F8F8FF","#F0F8FF","#F5FFFA","#F0FFF0","#FAFAD2","#FFFACD","#FFF8DC","#FFFFE0","#FFFFF0","#FFFAF0","#FAF0E6","#FDF5E6","#FAEBD7","#FFE4C4","#FFDAB9","#FFEFD5","#FFF5EE","#FFF0F5","#FFE4E1");
var FontName=Array(Array("","字体"),Array("宋体","宋体"),Array("黑体","黑体"),Array("楷体_GB2312","楷体"),Array("仿宋_GB2312","仿宋"),Array("隶书","隶书"),Array("幼圆","幼圆"),Array("Arial","Arial"),Array("Arial Black","Arial Black"),Array("Tahoma","Tahoma"),Array("Verdana","Verdana"),Array("Wingdings","Wingdings"));
var OBJ_NAME;
var SELECTION;
var RANGE;
var RANGE_TEXT;
var EDITFORM_DOCUMENT;
var LINK_DOCUMENT;
var BROWSER;
var ToolbarIcon;
var EDITMODE = "DESIGN";
function CheckForm(){
editor.data();
if(document.form.Subject.value.length<2){alert("标题不能小于2个字符!");return false;}
if(document.form.content.value.length<2){alert("内容不能小于2个字符!");return false;}
if(document.form.content.value.length>60000){alert("内容不能超过60000个字符!");return false;}
document.form.EditSubmit.disabled = "disabled";
}
function GetBrowser(){
var browser = '';
var agentInfo = navigator.userAgent.toLowerCase();
if (agentInfo.indexOf("msie") > -1) {
var re = new RegExp("msie\\s?([\\d\\.]+)","ig");
var arr = re.exec(agentInfo);
if (parseInt(RegExp.$1) >= 5.5) {
browser = 'IE';
}
} else if (agentInfo.indexOf("firefox") > -1) {
browser = 'FF';
} else if (agentInfo.indexOf("netscape") > -1) {
var temp1 = agentInfo.split(' ');
var temp2 = temp1[temp1.length-1].split('/');
if (parseInt(temp2[1]) >= 7) {
browser = 'NS';
}
} else if (agentInfo.indexOf("gecko") > -1) {
browser = 'ML';
} else if (agentInfo.indexOf("opera") > -1) {
var temp1 = agentInfo.split(' ');
var temp2 = temp1[0].split('/');
if (parseInt(temp2[1]) >= 9) {
browser = 'OPERA';
}
}
return browser;
}
function ClearScriptTag(str){
str = str.replace(/<(script.*?)>/gi,"<$1>");
str = str.replace(/<\/script>/gi,"</script>");
return str;
}
function GetTop(id){
var top = 28;
var tmp = '';
var obj = document.getElementById(id);
while (eval("obj" + tmp).tagName != "BODY") {
tmp += ".offsetParent";
top += eval("obj" + tmp).offsetTop;
}
return top;
}
function GetLeft(id){
var left = 2;
var tmp = '';
var obj = document.getElementById(id);
while (eval("obj" + tmp).tagName != "BODY") {
tmp += ".offsetParent";
left += eval("obj" + tmp).offsetLeft;
}
return left;
}
function DisplayMenu(cmd){
WxEditorForm.focus();
DoSelection();
DisableMenu();
var top,left;
top = GetTop(cmd);
left = GetLeft(cmd);
if (cmd == 'LINK') {left += 220;}
document.getElementById('POPUP_'+cmd).style.top = top.toString(10) + 'px';
document.getElementById('POPUP_'+cmd).style.left = left.toString(10) + 'px';
document.getElementById('POPUP_'+cmd).style.display = 'block';
}
function DisableMenu(){
for (i = 0; i < PopupMenuList.length; i++) {
document.getElementById('POPUP_'+PopupMenuList[i]).style.display = 'none';
}
}
function GetMenuStyle(){
var str = 'position:absolute;top:1px;left:1px;font-size:12px;color:#222;background-color:#FAFAFA;border:solid 1px #ddd;z-index:1;display:none;';
return str;
}
function MakeColorTable(cmd,eventStr){
var str = '';
str += '<table cellpadding="0" cellspacing="2" border="0">';
for (i = 0; i < ColorList.length; i++) {
if (i == 0 || (i >= 10 && i%10 == 0)) {
str += '<tr>';
}
str += '<td style="width:12px;height:12px;border:1px solid #AAAAAA;font-size:1px;cursor:pointer;background-color:' +ColorList[i]+';" onmouseover="javascript:this.style.borderColor=\'#000000\';'+((eventStr) ? eventStr : '')+'" '+'onmouseout="javascript:this.style.borderColor=\'#AAAAAA\';" '+'onclick="javascript:DoExecute(\''+cmd+'_END\',\''+ColorList[i]+'\');"> </td>';
if (i >= 9 && i%(i-1) == 0) {
str += '</tr>';
}
}
str += '</table>';
return str;
}
function DrawColorTable(cmd){
var str = '';
str += '<div id="POPUP_'+cmd+'" style="width:160px;padding:2px;'+GetMenuStyle()+'">';
str += MakeColorTable(cmd);
str += '</div>';
return str;
}
function PopupMenu(cmd){
switch (cmd)
{
case 'TEXTCOLOR':
var str = '';
str = DrawColorTable('TEXTCOLOR');
return str;
break;
case 'BGCOLOR':
var str = '';
str = DrawColorTable('BGCOLOR');
return str;
break;
case 'LINK':
var str = '';
str += '<div id="POPUP_'+cmd+'" style="width:250px;'+GetMenuStyle()+'">';
str += '<iframe name="LinkIframe" id="LinkIframe" frameborder="0" style="width:250px;height:85px;padding:0;margin:0;border:0;">';
str += '</iframe></div>';
return str;
break;
default:
break;
}
}
function ValidateMode(){
if (EDITFORM_DOCUMENT.designMode=="On"){return true;
}else{alert("代码模式不能使用本功能");WxEditorForm.focus();return false;}
}
function insertHTML(html){
if (!ValidateMode()) {return false;}
WxEditorForm.focus();
if (EDITFORM_DOCUMENT.selection.type.toLowerCase() != "none"){
EDITFORM_DOCUMENT.selection.clear() ;
}
if (EDITMODE!="DESIGN"){html=HTMLEncode(html);}
EDITFORM_DOCUMENT.selection.createRange().pasteHTML(html) ;
}
function HTMLEncode(text){
text = text.replace(/&/g,"&") ;
text = text.replace(/"/g,""") ;
text = text.replace(/</g,"<") ;
text = text.replace(/>/g,">") ;
text = text.replace(/\ /g," ");
text = text.replace(/\n/g,"<br>");
text = text.replace(/\t/g," ");
return text;
}
function showDialog(url){
url = imgPath+url;
url = url.toLowerCase();
if (!ValidateMode()) {return;}
WxEditorForm.focus();
var arr = showModalDialog(url,window,"dialogWidth:0px;dialogHeight:0px;help:no;scroll:no;status:no");
if (arr != null) {insertHTML(arr);}
WxEditorForm.focus();
}
function DrawIframe(cmd){
if (BROWSER == 'IE') {
LINK_DOCUMENT = document.frames("LinkIframe").document;
}else{
LINK_DOCUMENT = document.getElementById('LinkIframe').contentDocument;
}
switch (cmd)
{
case 'LINK':
var str = '';
str += '<table cellpadding="0" cellspacing="0" style="width:100%;font-size:12px;">' +
'<tr><td style="width:50px;padding:5px;">URL</td>' +
'<td style="width:200px;padding-top:5px;padding-bottom:5px;"><input type="text" id="hyperLink" value="http://" style="width:190px;border:1px solid #555555;background-color:#FFFFFF;"></td>' +
'<tr><td colspan="2" style="padding-bottom:5px;" align="center">' +
'<input type="submit" name="button" id="'+cmd+'submitButton" value="确定" onclick="javascript:parent.DrawLinkEnd();" style="border:1px solid #555555;background-color:#ebebeb;"> ' +
'<input type="button" name="button" value="取消" onclick="javascript:parent.DisableMenu();" style="border:1px solid #555555;background-color:#ebebeb;" ></td></tr>';
str += '</table>';
DrawMenuIframe(LINK_DOCUMENT,str);
break;
default:
break;
}
}
function DrawMenuIframe(obj,str){
obj.open();
obj.write(str);
obj.close();
obj.body.style.color = "#222";
obj.body.style.backgroundColor = "#FAFAFA";
obj.body.style.margin = 0;
obj.body.scroll = 'no';
}
function DrawLinkEnd(){
var range;
var url = LINK_DOCUMENT.getElementById('hyperLink').value;
if (url.match(/http:\/\/.{3,}/) == null) {
alert('请输入正确的URL地址');
return false;
}
WxEditorForm.focus();
DoSelect();
var element;
if (BROWSER == 'IE') {
if (SELECTION.type.toLowerCase() == 'control') {
var el = document.createElement("a");
el.href = url;
RANGE.item(0).applyElement(el);
} else if (SELECTION.type.toLowerCase() == 'text') {
ExecuteValue('CreateLink',url);
element = RANGE.parentElement();
}
}else{
ExecuteValue('CreateLink',url);
element = RANGE.startContainer.previousSibling;
}
DisableMenu();
}
function DoSelection(){
if (BROWSER == 'IE') {
SELECTION = EDITFORM_DOCUMENT.selection;
RANGE = SELECTION.createRange();
RANGE_TEXT = RANGE.text;
}else{
SELECTION = document.getElementById("WxEditorForm").contentWindow.getSelection();
RANGE = SELECTION.getRangeAt(0);
RANGE_TEXT = RANGE.toString();
}
}
function DoSelect(){
if (BROWSER == 'IE') {
RANGE.select();
}
}
function InsertItem(insertNode){
if (BROWSER == 'IE') {
if (SELECTION.type.toLowerCase() == 'control') {
RANGE.item(0).outerHTML = insertNode.outerHTML;
}else{
RANGE.pasteHTML(insertNode.outerHTML);
}
}else{
SELECTION.removeAllRanges();
RANGE.deleteContents();
var startRangeNode = RANGE.startContainer;
var startRangeOffset = RANGE.startOffset;
var newRange = document.createRange();
if (startRangeNode.nodeType == 3 && insertNode.nodeType == 3) {
startRangeNode.insertData(startRangeOffset,insertNode.nodeValue);
newRange.setEnd(startRangeNode,startRangeOffset + insertNode.length);
newRange.setStart(startRangeNode,startRangeOffset + insertNode.length);
}else{
var afterNode;
if (startRangeNode.nodeType == 3) {
var textNode = startRangeNode;
startRangeNode = textNode.parentNode;
var text = textNode.nodeValue;
var textBefore = text.substr(0,startRangeOffset);
var textAfter = text.substr(startRangeOffset);
var beforeNode = document.createTextNode(textBefore);
var afterNode = document.createTextNode(textAfter);
startRangeNode.insertBefore(afterNode,textNode);
startRangeNode.insertBefore(insertNode,afterNode);
startRangeNode.insertBefore(beforeNode,insertNode);
startRangeNode.removeChild(textNode);
}else{
if (startRangeNode.tagName.toLowerCase() == 'html') {
startRangeNode = startRangeNode.childNodes[0].nextSibling;
afterNode = startRangeNode.childNodes[0];
}else{
afterNode = startRangeNode.childNodes[startRangeOffset];
}
startRangeNode.insertBefore(insertNode,afterNode);
}
newRange.setEnd(afterNode,0);
newRange.setStart(afterNode,0);
}
SELECTION.addRange(newRange);
}
}
function ExecuteValue(cmd,value){
EDITFORM_DOCUMENT.execCommand(cmd,false,value);
}
function SimpleExecute(cmd){
WxEditorForm.focus();
EDITFORM_DOCUMENT.execCommand(cmd,false,null);
DisableMenu();
}
function DoExecute(cmd,value){
if (cmd=="SOURCE") {
if (value=="DESIGN"){
if (EDITMODE=="DESIGN") {alert("当前编辑器已处于编辑模式");return false;}
EDITFORM_DOCUMENT.body.innerHTML = HtmlToXhtml(EDITFORM_DOCUMENT.body.innerText);
document.getElementById("CODEMode").className="TabOff";
document.getElementById("DesignMode").className="TabOn";
EDITMODE = "DESIGN";
}else{
if (EDITMODE=="CODE") {alert("当前编辑器已处于代码模式");return false;}
EDITFORM_DOCUMENT.body.innerText = ClearScriptTag(EDITFORM_DOCUMENT.body.innerHTML);
document.getElementById("DesignMode").className="TabOff";
document.getElementById("CODEMode").className="TabOn";
EDITMODE = "CODE";
}
DisableToolbar();
}else{
if (EDITMODE=="CODE") {alert("代码模式不能使用本功能");
}else{
switch (cmd)
{
case 'UNDO':
SimpleExecute('undo');
break;
case 'REDO':
SimpleExecute('redo');
break;
case 'CUT':
SimpleExecute('cut');
break;
case 'COPY':
SimpleExecute('copy');
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -