📄 editor.js
字号:
/**************************************************************
FTBBS Editor 2008-6-10 DESIGN
**************************************************************/
var IMAGE_PATH;
var ICON_PATH;
var IMAGE_ATTACH_PATH;
var IMAGE_UPLOAD_CGI;
var MENU_BORDER_COLOR;
var MENU_BG_COLOR;
var MENU_TEXT_COLOR;
var MENU_SELECTED_COLOR;
var TOOLBAR_BORDER_COLOR;
var TOOLBAR_BG_COLOR;
var FORM_BORDER_COLOR;
var FORM_BG_COLOR;
var BUTTON_COLOR;
var OBJ_NAME;
var SELECTION;
var RANGE;
var RANGE_TEXT;
var EDITFORM_DOCUMENT;
var IMAGE_DOCUMENT;
var FLASH_DOCUMENT;
var MEDIA_DOCUMENT;
var LINK_DOCUMENT;
var BROWSER;
var TOOLBAR_ICON;
var EDITOR_TYPE;
var SAFE_MODE;
var CurrentMode = "design";
var text_enter_url = "请输入连接网址";
var text_enter_image = "请输入图片网址";
var error_no_url = "您必须输入网址";
var MSG_INPUT_URL = "请输入正确的URL地址。";
var MSG_SELECT_IMAGE = "请选择图片。";
var MSG_INVALID_IMAGE = "只能输入GIF,JPG,PNG,BMP格式的图片,请重新输入。";
var MSG_INVALID_FLASH = "只能输入了SWF格式的文件,请重新输入。";
var MSG_INVALID_IMGSWF = "你输入了格式错误的文件,请重新输入。";
var MSG_INVALID_FLV = "你选择了FLV格式的文件但你输入的格式不对,请重新输入。";
var MSG_INVALID_MEDIA = "你选择了MP3,WAV,WMA,WMV,MID,AVI,MPG,ASF格式的文件,但你输入的格式不对,请重新输入。";
var MSG_INVALID_REAL = "你选择了RM,RMVB格式的文件但你输入的格式不对,请重新输入。";
var MSG_INVALID_WIDTH = "宽度不是数字,请重新输入。";
var MSG_INVALID_HEIGHT = "高度不是数字,请重新输入。";
var MSG_INVALID_BORDER = "边框不是数字,请重新输入。";
var MSG_INVALID_HSPACE = "横隔不是数字,请重新输入。";
var MSG_INVALID_VSPACE = "竖隔不是数字,请重新输入。";
var STR_TITLE = "描述";
var STR_WIDTH = "宽";
var STR_HEIGHT = "高";
var STR_BORDER = "边";
var STR_ALIGN = "对齐方式";
var STR_HSPACE = "横隔";
var STR_VSPACE = "竖隔";
var STR_BUTTON_CONFIRM = "确定";
var STR_BUTTON_CANCEL = "取消";
var STR_BUTTON_PREVIEW = "预览";
var STR_IMAGE_LOCAL = "本地";
var STR_IMAGE_REMOTE = "地址";
var STR_LINK_BLANK = "新窗口";
var STR_LINK_NOBLANK = "当前窗口";
var STR_LINK_TARGET = "目标";
var STR_INPUT_CONTENT = "请输入内容";
var EDITOR_FONT_FAMILY = "SimSun";
var FONT_NAME = Array(
Array('SimSun', '宋体'),
Array('SimHei', '黑体'),
Array('FangSong_GB2312', '仿宋体'),
Array('KaiTi_GB2312', '楷体'),
Array('NSimSun', '新宋体'),
Array('Arial', 'Arial'),
Array('Arial Black', 'Arial Black'),
Array('Courier New', 'Courier New'),
Array('Tahoma', 'Tahoma'),
Array('Verdana', 'Verdana'),
Array('GulimChe', 'GulimChe'),
Array('MS Gothic', 'MS Gothic')
);
var ZOOM_TABLE = Array('250%', '200%', '150%', '120%', '100%', '80%', '50%');
var TITLE_TABLE = Array(
Array('H1', '标题 1'),
Array('H2', '标题 2'),
Array('H3', '标题 3'),
Array('H4', '标题 4'),
Array('H5', '标题 5'),
Array('H6', '标题 6')
);
var FONT_SIZE = Array(
Array(1,'8pt'),
Array(2,'10pt'),
Array(3,'12pt'),
Array(4,'14pt'),
Array(5,'18pt'),
Array(6,'24pt'),
Array(7,'36pt')
);
var TOP_TOOLBAR_ICON = Array(
Array('Ft_UNDO', 'undo.gif', '回退'),
Array('Ft_REDO', 'redo.gif', '前进'),
Array('Ft_CUT', 'cut.gif', '剪切'),
Array('Ft_COPY', 'copy.gif', '复制'),
Array('Ft_PASTE', 'paste.gif', '粘贴'),
Array('Ft_SELECTALL', 'selectall.gif', '全选'),
Array('Ft_JUSTIFYLEFT', 'justifyleft.gif', '左对齐'),
Array('Ft_JUSTIFYCENTER', 'justifycenter.gif', '居中'),
Array('Ft_JUSTIFYRIGHT', 'justifyright.gif', '右对齐'),
Array('Ft_JUSTIFYFULL', 'justifyfull.gif', '两端对齐'),
Array('Ft_NUMBEREDLIST', 'numberedlist.gif', '编号'),
Array('Ft_UNORDERLIST', 'unorderedlist.gif', '项目符号'),
Array('Ft_INDENT', 'indent.gif', '减少缩进'),
Array('Ft_OUTDENT', 'outdent.gif', '增加缩进'),
Array('Ft_SUBSCRIPT', 'subscript.gif', '下标'),
Array('Ft_SUPERSCRIPT', 'superscript.gif', '上标'),
Array('Ft_DATE', 'date.gif', '日期'),
Array('Ft_TIME', 'time.gif', '时间')
);
var BOTTOM_TOOLBAR_ICON = Array(
Array('Ft_FONTNAME', 'font.gif', '字体'),
Array('Ft_FONTSIZE', 'fontsize.gif', '文字大小'),
Array('Ft_TEXTCOLOR', 'textcolor.gif', '文字颜色'),
Array('Ft_BGCOLOR', 'bgcolor.gif', '文字背景'),
Array('Ft_BOLD', 'bold.gif', '粗体'),
Array('Ft_ITALIC', 'italic.gif', '斜体'),
Array('Ft_UNDERLINE', 'underline.gif', '下划线'),
Array('Ft_STRIKE', 'strikethrough.gif', '删除线'),
Array('Ft_REMOVE', 'removeformat.gif', '删除格式'),
Array('Ft_TABLE', 'table.gif', '插入表格'),
Array('Ft_HR', 'hr.gif', '插入横线'),
Array('Ft_LINK', 'link.gif', '创建超级连接'),
Array('Ft_UNLINK', 'unlink.gif', '删除超级连接'),
Array('Ft_IMAGE', 'image.gif', '插入图片'),
Array('Ft_FLASH', 'flash.gif', '插入Flash'),
Array('Ft_MEDIA', 'video.gif', '插入在线视频'),
Array('Ft_ICON', 'emoticons.gif', '插入表情')
);
var SIMPLE_TOOLBAR_ICON = Array(
Array('Ft_FONTNAME', 'font.gif', '字体'),
Array('Ft_FONTSIZE', 'fontsize.gif', '文字大小'),
Array('Ft_TEXTCOLOR', 'textcolor.gif', '文字颜色'),
Array('Ft_BGCOLOR', 'bgcolor.gif', '文字背景'),
Array('Ft_BOLD', 'bold.gif', '粗体'),
Array('Ft_ITALIC', 'italic.gif', '斜体'),
Array('Ft_UNDERLINE', 'underline.gif', '下划线'),
Array('Ft_JUSTIFYLEFT', 'justifyleft.gif', '左对齐'),
Array('Ft_JUSTIFYCENTER', 'justifycenter.gif', '居中'),
Array('Ft_JUSTIFYRIGHT', 'justifyright.gif', '右对齐'),
Array('Ft_IMAGE', 'image.gif', '插入图片'),
Array('Ft_FLASH', 'flash.gif', '插入Flash'),
Array('Ft_MEDIA', 'video.gif', '插入在线视频'),
Array('Ft_HR', 'hr.gif', '插入横线'),
Array('Ft_LINK', 'link.gif', '创建超级连接'),
Array('Ft_UNLINK', 'unlink.gif', '删除超级连接'),
Array('Ft_ICON', 'emoticons.gif', '插入表情')
);
var UBB_TOOLBAR_ICON = Array(
Array('Ft_BOLD', 'bold.gif', '粗体'),
Array('Ft_ITALIC', 'italic.gif', '斜体'),
Array('Ft_UNDERLINE', 'underline.gif', '下划线'),
Array('Ft_STRIKE', 'strikethrough.gif', '删除线'),
Array('Ft_JUSTIFYLEFT', 'justifyleft.gif', '左对齐'),
Array('Ft_JUSTIFYCENTER', 'justifycenter.gif', '居中'),
Array('Ft_JUSTIFYRIGHT', 'justifyright.gif', '右对齐'),
Array('Ft_LINK', 'link.gif', '创建超级连接'),
Array('Ft_IMAGE', 'image.gif', '插入图片'),
Array('Ft_FLASH', 'flash.gif', '插入Flash'),
Array('Ft_MEDIA', 'video.gif', '插入在线视频'),
Array('Ft_SUBSCRIPT', 'subscript.gif', '下标'),
Array('Ft_SUPERSCRIPT', 'superscript.gif', '上标'),
Array('Ft_MAQUEE', 'maquee.gif', '滚动文字')
);
var POPUP_MENU_TABLE = Array("Ft_TITLE", "Ft_FONTNAME", "Ft_FONTSIZE", "Ft_TEXTCOLOR", "Ft_BGCOLOR", "Ft_TABLE", "Ft_HR", "Ft_ICON", "Ft_IMAGE", "Ft_FLASH", "Ft_MEDIA", "Ft_LINK");
var COLOR_TABLE = Array(
"#FF0000", "#FF1493", "#FF00FF", "#FF69B4", "#FFB6C1", "#999999", "#DB7093", "#C71585", "#800080", "#8B008B",
"#FFFFFF", "#2E8B57", "#006400", "#008000", "#228B22", "#000000", "#191970", "#000080", "#00008B", "#0000CD",
"#FF6347", "#FF8C00", "#FFA500", "#FFA07A", "#FF7F50"
);
var IMAGE_ALIGN_TABLE = new Array("baseline", "top", "middle", "bottom", "texttop", "absmiddle", "absbottom", "left", "right");
function FtGetBrowser()
{
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 FtGetFileName(file, separator)
{
var temp = file.split(separator);
var len = temp.length;
var fileName = temp[len-1];
return fileName;
}
function FtGetFileExt(fileName)
{
var temp = fileName.split(".");
var len = temp.length;
var fileExt = temp[len-1].toLowerCase();
return fileExt;
}
function FtCheckImageFileType(file, separator)
{
if (separator == "/" && file.match(/http:\/\/.{3,}/) == null) {
alert(MSG_INPUT_URL);
return false;
}
var fileName = FtGetFileName(file, separator);
var fileExt = FtGetFileExt(fileName);
if (fileExt != 'gif' && fileExt != 'jpg' && fileExt != 'png' && fileExt != 'bmp') {
alert(MSG_INVALID_IMAGE);
return false;
}
return true;
}
function FtCheckFlashFileType(file, separator)
{
if (file.match(/http:\/\/.{3,}/) == null) {
alert(MSG_INPUT_URL);
return false;
}
var fileName = FtGetFileName(file, "/");
var fileExt = FtGetFileExt(fileName);
if (fileExt != 'swf') {
alert(MSG_INVALID_FLASH);
return false;
}
return true;
}
function FtCheckFlvFileType(file, separator)
{
if (file.match(/http:\/\/.{3,}/) == null) {
alert(MSG_INPUT_URL);
return false;
}
var fileName = FtGetFileName(file, "/");
var fileExt = FtGetFileExt(fileName);
if (fileExt != 'flv'){
alert(MSG_INVALID_FLV);
return false;
}
return true;
}
function FtCheckMediaFileType(cmd,file,separator,media)
{
if (file.match(/http:\/\/.{3,}/) == null) {
alert(MSG_INPUT_URL);
return false;
}
var fileName = FtGetFileName(file, "/");
var fileExt = FtGetFileExt(fileName);
if (media == 'rm') {
if (fileExt != 'rm' && fileExt != 'rmvb') {
alert(MSG_INVALID_REAL);
return false;
}
} else if (media == 'wmv'){
if (fileExt != 'mp3' && fileExt != 'wav' && fileExt != 'wma' && fileExt != 'wmv' && fileExt != 'mid' && fileExt != 'avi' && fileExt != 'mpg' && fileExt != 'asf') {
alert(MSG_INVALID_MEDIA);
return false;
}
} else if (media == 'flv'){
if (fileExt != 'flv' ) {
alert(MSG_INVALID_FLV);
return false;
}
}
return true;
}
function FtHtmlToXhtml(str)
{
str = str.replace(/<br.*?>/gi, "<br />");
str = str.replace(/(<hr[^>]*[^\/])(>)/gi, "$1 />");
str = str.replace(/(<img[^>]*[^\/])(>)/gi, "$1 />");
str = str.replace(/(<\w+)(.*?>)/gi, function ($0,$1,$2) {
return($1.toLowerCase() + FtConvertAttribute($2));
}
);
str = str.replace(/(<\/\w+>)/gi, function ($0,$1) {
return($1.toLowerCase());
}
);
str = FtTrim(str);
return str;
}
function htmltoubb(str) {
str = str.replace(/\r/g,"");
str = str.replace(/on(load|click|dbclick|mouseover|mousedown|mouseup)="[^"]+"/ig,"");
str = str.replace(/<script[^>]*?>([\w\W]*?)<\/script>/ig,"");
str = str.replace(/<a[^>]+href="([^"]+)"[^>]*>(.*?)<\/a>/ig,"[url=$1]$2[/url]");
str = str.replace(/<font[^>]+color=([^ >]+)[^>]*>(.*?)<\/font>/ig,"[color=$1]$2[/color]");
str = str.replace(/<div[^>]+align=([^ >]+)[^>]*>(.*?)<\/div>/ig,"[$1]$2[/$1]");
str = str.replace(/<P[^>]+align=([^ >]+)[^>]*>(.*?)<\/P>/ig,"[$1]$2[/$1][br]");
str = str.replace(/<strike>(.*?)<\/strike>/ig,"[strike]$1[/strike]");
str = str.replace(/<font[^>]+face=([^ >]+)[^>]*>(.*?)<\/font>/ig,"[face=$1]$2[/face]");
str = str.replace(/<font[^>]+size=([^ >]+)[^>]*>(.*?)<\/font>/ig,"[size=$1]$2[/size]");
str = str.replace(/<FONT[^>]+style=(.*?)>(.*?)<\/FONT>/ig,"[bgcolor=$1]$2[/bgcolor]");
str = str.replace(/<HR(.*?)>/gi,"[HR size=1]");
str = str.replace(/<sup>(.*?)<\/sup>/ig,"[sup]$1[/sup]");
str = str.replace(/<sub>(.*?)<\/sub>/ig,"[sub]$1[/sub]");
str = str.replace(/<P>(.*?)<\/P>/ig,"$1[br]");
str = str.replace(/<P.*?>(.*?)<\/P>/ig,"$1[br]");
str = str.replace(/<br.*?>/gi, "[br]");
str = str.replace(/<img[^>]+src="([^"]+)"[^>]*>/ig,"[img]$1[/img]");
str = str.replace(/<([\/]?)b>/ig,"[$1b]");
str = str.replace(/<([\/]?)strong>/ig,"[$1b]");
str = str.replace(/<([\/]?)u>/ig,"[$1u]");
str = str.replace(/<([\/]?)i>/ig,"[$1i]");
str = str.replace(/ /g," ");
str = str.replace(/&/g,"&");
str = str.replace(/"/g,"\"");
str = str.replace(/</g,"<");
str = str.replace(/>/g,">");
str = str.replace(/<br>/ig,"\n");
str = str.replace(/<br.*?>/ig,"\n");
str = str.replace(/<[^>]*?>/g,"");
str = str.replace(/\[url=([^\]]+)\]\n(\[img\]\1\[\/img\])\n\[\/url\]/g,"$2");
str = str.replace(/\n+/g,"\n");
return str;
}
function ubbtohtml(str) {
str=str.toLowerCase();
str=str.replace(/\[br\]/ig,"<br/>");/*回车*/
str=str.replace(/\[u\](.+?)\[\/u\]/ig,"<u>$1</u>");/*下划线*/
str=str.replace(/\[i\](.+?)\[\/i\]/ig,"<i>$1</i>");/*斜体*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -