DiscuzX/upload/static/image/editor/editor_base.js

760 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var gSetColorType = "";
var gIsIE = document.all;
var gIEVer = fGetIEVer();
var gLoaded = false;
var ev = null;
var gIsHtml = true;
var pos = 0;
var sLength = 0;
function fGetEv(e){
ev = e;
}
function fGetIEVer(){
var iVerNo = 0;
var sVer = navigator.userAgent;
if(sVer.indexOf("MSIE")>-1){
var sVerNo = sVer.split(";")[1];
sVerNo = sVerNo.replace("MSIE","");
iVerNo = parseFloat(sVerNo);
}
return iVerNo;
}
function fSetEditable(){
var f = window.frames["HtmlEditor"];
f.document.designMode="on";
if(!gIsIE)
f.document.execCommand("useCSS",false, true);
}
function renewContent() {
var evalevent = function (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]);
}
};
if(window.confirm('您确定要恢复上次保存?')) {
var data = loadUserdata('home');
if(in_array((data = trim(data)), ['', 'null', 'false', null, false])) {
parent.showDialog('没有可以恢复的数据!');
return;
}
var data = data.split(/\x09\x09/);
if(parent.$('subject')) {
var formObj = parent.$('subject').form;
} else if(parent.$('title')) {
var formObj = parent.$('title').form;
} else {
return;
}
for(var i = 0; i < formObj.elements.length; i++) {
var el = formObj.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 < data.length; j++) {
var ele = data[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' || ele[0] == 'content') {
var f = window.frames["HtmlEditor"];
f.document.body.innerHTML = elvalue;
} else {
el.value = elvalue;
}
}
break
}
}
}
}
}
}
function fSetFrmClick(){
var f = window.frames["HtmlEditor"];
f.document.onclick = function(){
fHideMenu();
}
if(gIsIE) {
f.document.attachEvent("onkeydown", listenKeyDown);
} else {
f.addEventListener('keydown', function(e) {listenKeyDown(e);}, true);
}
}
function listenKeyDown(event) {
parent.gIsEdited = true;
parent.ctrlEnter(event, 'issuance');
}
window.onload = function(){
try{
gLoaded = true;
fSetEditable();
fSetFrmClick();
}catch(e){
}
}
window.onbeforeunload = parent.edit_save;
function fSetColor(){
var dvForeColor =$("dvForeColor");
if(dvForeColor.getElementsByTagName("TABLE").length == 1){
dvForeColor.innerHTML = drawCube() + dvForeColor.innerHTML;
}
}
document.onmousemove = function(e){
if(gIsIE) var el = event.srcElement;
else var el = e.target;
var tdView = $("tdView");
var tdColorCode = $("tdColorCode");
if(el.tagName == "IMG"){
try{
if(fInObj(el, "dvForeColor")){
tdView.bgColor = el.parentNode.bgColor;
tdColorCode.innerHTML = el.parentNode.bgColor
}
}catch(e){}
}
}
function fInObj(el, id){
if(el){
if(el.id == id){
return true;
}else{
if(el.parentNode){
return fInObj(el.parentNode, id);
}else{
return false;
}
}
}
}
function fDisplayObj(id){
var o = $(id);
if(o) o.style.display = "";
}
document.onclick = function(e){
if(gIsIE) var el = event.srcElement;
else var el = e.target;
var dvForeColor =$("dvForeColor");
var dvPortrait =$("dvPortrait");
if(el.tagName == "IMG"){
try{
if(fInObj(el, "dvForeColor")){
format(gSetColorType, el.parentNode.bgColor);
dvForeColor.style.display = "none";
return;
}
}catch(e){}
try{
if(fInObj(el, "dvPortrait")){
format("InsertImage", el.src);
dvPortrait.style.display = "none";
return;
}
}catch(e){}
}
try{
if(fInObj(el, "createUrl") || fInObj(el, "createImg") || fInObj(el, "createSwf") || fInObj(el, "createPage")){
return;
}
}catch(e){}
fHideMenu();
var hideId = "";
if(arrMatch[el.id]){
hideId = arrMatch[el.id];
fDisplayObj(hideId);
}
}
var arrMatch = {
imgFontface:"fontface",
imgFontsize:"fontsize",
imgFontColor:"dvForeColor",
imgBackColor:"dvForeColor",
imgFace:"dvPortrait",
imgAlign:"divAlign",
imgList:"divList",
imgInOut:"divInOut",
faceBox:"editFaceBox",
icoUrl:"createUrl",
icoSwf:"createSwf",
icoPage:"createPage"
}
function format(type, para){
var f = window.frames["HtmlEditor"];
var sAlert = "";
if(!gIsIE){
switch(type){
case "Cut":
sAlert = "您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl+X)来完成";
break;
case "Copy":
sAlert = "您的浏览器安全设置不允许编辑器自动执行拷贝操作,请使用键盘快捷键(Ctrl+C)来完成";
break;
case "Paste":
sAlert = "您的浏览器安全设置不允许编辑器自动执行粘贴操作,请使用键盘快捷键(Ctrl+V)来完成";
break;
}
}
if(sAlert != ""){
alert(sAlert);
return;
}
f.focus();
if(!para){
if(gIsIE){
f.document.execCommand(type);
}else{
f.document.execCommand(type,false,false);
}
}else{
if(type == 'insertHTML') {
try{
f.document.execCommand('insertHTML', false, para);
}catch(exp){
var obj = f.document.selection.createRange();
obj.pasteHTML(para);
obj.collapse(false);
obj.select();
}
} else {
try{
f.document.execCommand(type,false,para);
}catch(exp){}
}
}
f.focus();
}
function setMode(bStatus){
var sourceEditor = $("sourceEditor");
var HtmlEditor = $("HtmlEditor");
var divEditor = $("divEditor");
var f = window.frames["HtmlEditor"];
var body = f.document.getElementsByTagName("BODY")[0];
if(bStatus){
sourceEditor.style.display = "block";
divEditor.style.display = "none";
sourceEditor.value = body.innerHTML;
$('uchome-editstatus').value = 'code';
}else{
sourceEditor.style.display = "none";
divEditor.style.display = "";
body.innerHTML = sourceEditor.value;
$('uchome-editstatus').value = 'html';
}
}
function foreColor(e) {
fDisplayColorBoard(e);
gSetColorType = "foreColor";
}
function faceBox(e) {
if(gIsIE){
var e = window.event;
}
var dvFaceBox = $("editFaceBox");
var iX = e.clientX;
var iY = e.clientY;
dvFaceBox.style.display = "";
dvFaceBox.style.left = (iX-140) + "px";
dvFaceBox.style.top = 33 + "px";
dvFaceBox.innerHTML = "";
var faceul = document.createElement("ul");
for(i=1; i<31; i++) {
var faceli = document.createElement("li");
faceli.innerHTML = '<img src="' + parent.STATICURL + 'image/smiley/comcom/'+i+'.gif" onclick="insertImg(this.src);" class="cur1" />';
faceul.appendChild(faceli);
}
dvFaceBox.appendChild(faceul);
return true;
}
function insertImg(src) {
format("insertHTML", '<img src="' + src + '"/>');
}
function doodleBox(event, id) {
if(parent.$('uchome-ttHtmlEditor') != null) {
parent.showWindow(id, 'home.php?mod=magic&mid=doodle&showid=blog_doodle&target=uchome-ttHtmlEditor&from=editor');
} else {
alert("找不到涂鸦板初始化数据");
}
}
function backColor(e){
var sColor = fDisplayColorBoard(e);
if(gIsIE)
gSetColorType = "backcolor";
else
gSetColorType = "backcolor";
}
function fDisplayColorBoard(e){
if(gIsIE){
var e = window.event;
}
if(gIEVer<=5.01 && gIsIE){
var arr = showModalDialog("ColorSelect.htm", "", "font-family:Verdana; font-size:12; status:no; dialogWidth:21em; dialogHeight:21em");
if (arr != null) return arr;
return;
}
var dvForeColor =$("dvForeColor");
var iX = e.clientX;
var iY = e.clientY;
dvForeColor.style.display = "";
dvForeColor.style.left = (iX-30) + "px";
dvForeColor.style.top = 33 + "px";
return true;
}
function createLink(e, show) {
if(typeof show == 'undefined') {
var urlObj = $('insertUrl');
var sURL = urlObj.value;
if ((sURL!=null) && (sURL!="http://")){
setCaret();
format("CreateLink", sURL);
}
fHide($('createUrl'));
urlObj.value = 'http://';
} else {
if(gIsIE){
var e = window.event;
}
getCaret();
var dvUrlBox = $("createUrl");
var iX = e.clientX;
var iY = e.clientY;
dvUrlBox.style.display = "";
dvUrlBox.style.left = (iX-300) + "px";
dvUrlBox.style.top = 33 + "px";
}
}
function getCaret() {
if(gIsIE){
window.frames["HtmlEditor"].focus();
var ran = window.frames["HtmlEditor"].document.selection.createRange();
pos = ran.getBookmark();
}
}
function setCaret() {
if(gIsIE){
window.frames["HtmlEditor"].focus();
var range = window.frames["HtmlEditor"].document.body.createTextRange();
range.moveToBookmark(pos);
range.select();
pos = null;
}
}
function clearLink() {
format("Unlink", false);
}
function createImg(e, show) {
if(typeof show == 'undefined') {
var imgObj = $('imgUrl');
var sPhoto = imgObj.value;
if ((sPhoto!=null) && (sPhoto!="http://")){
setCaret();
format("InsertImage", sPhoto);
}
fHide($('createImg'));
imgObj.value = 'http://';
} else {
if(gIsIE){
var e = window.event;
}
getCaret();
var dvImgBox = $("createImg");
var iX = e.clientX;
var iY = e.clientY;
dvImgBox.style.display = "";
dvImgBox.style.left = (iX-300) + "px";
dvImgBox.style.top = 33 + "px";
}
}
function createFlash(e, show) {
if(typeof show == 'undefined') {
var flashtag = '';
var vObj = $('videoUrl');
var sFlash = vObj.value;
if ((sFlash!=null) && (sFlash!="http://")){
setCaret();
var sFlashType = $('vtype').value;
if(sFlashType==1) {
flashtag = '[flash=media]';
} else if(sFlashType==2) {
flashtag = '[flash=real]';
} else if(sFlashType==3) {
flashtag = '[flash=mp3]';
} else {
flashtag = '[flash]';
}
format("insertHTML", flashtag + sFlash + '[/flash]');
}
fHide($('createSwf'));
vObj.value = 'http://';
} else {
if(gIsIE){
var e = window.event;
}
getCaret();
var dvSwfBox = $("createSwf");
var iX = e.clientX;
var iY = e.clientY;
dvSwfBox.style.display = "";
dvSwfBox.style.left = (iX-350) + "px";
dvSwfBox.style.top = 33 + "px";
}
}
String.prototype.trim = function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
}
function fSetBorderMouseOver(obj) {
obj.style.borderRight="1px solid #aaa";
obj.style.borderBottom="1px solid #aaa";
obj.style.borderTop="1px solid #fff";
obj.style.borderLeft="1px solid #fff";
}
function fSetBorderMouseOut(obj) {
obj.style.border="none";
}
function fSetBorderMouseDown(obj) {
obj.style.borderRight="1px #F3F8FC solid";
obj.style.borderBottom="1px #F3F8FC solid";
obj.style.borderTop="1px #cccccc solid";
obj.style.borderLeft="1px #cccccc solid";
}
function fDisplayElement(element,displayValue) {
if(gIEVer<=5.01 && gIsIE){
alert('只支持IE 5.01以上版本');
return;
}
fHideMenu();
if ( typeof element == "string" )
element = $(element);
if (element == null) return;
element.style.display = displayValue;
if(gIsIE){
var e = event;
var target = e.srcElement;
}else{
var e = ev;
var target = e.target;
}
var iX = f_GetX(target);
element.style.display = "";
element.style.left = (iX) + "px";
element.style.top = 33 + "px";
return true;
}
function fSetModeTip(obj){
var x = f_GetX(obj);
var y = f_GetY(obj);
var dvModeTip = $("dvModeTip");
if(!dvModeTip){
var dv = document.createElement("DIV");
dv.style.position = "absolute";
dv.style.top = 33 + "px";
dv.style.left = (x-40) + "px";
dv.style.zIndex = "999";
dv.style.fontSize = "12px";
dv.id = "dvModeTip";
dv.style.padding = "2px";
dv.style.border = "1px #000000 solid";
dv.style.backgroundColor = "#FFFFCC";
dv.innerHTML = "编辑源码";
document.body.appendChild(dv);
}else{
dvModeTip.style.display = "";
}
}
function fHideTip(){
$("dvModeTip").style.display = "none";
}
function f_GetX(e)
{
var l=e.offsetLeft;
while(e=e.offsetParent){
l+=e.offsetLeft;
}
return l;
}
function f_GetY(e)
{
var t=e.offsetTop;
while(e=e.offsetParent){
t+=e.offsetTop;
}
return t;
}
function fHideMenu(){
try{
var arr = ["fontface", "fontsize", "dvForeColor", "dvPortrait", "divAlign", "divList" ,"divInOut", "editFaceBox", "createUrl", "createImg", "createSwf", "createPage"];
for(var i=0;i<arr.length;i++){
var obj = $(arr[i]);
if(obj){
obj.style.display = "none";
}
}
try{
parent.LetterPaper.control(window, "hide");
}catch(exp){}
}catch(exp){}
}
function $(id){
return document.getElementById(id);
}
function fHide(obj){
obj.style.display="none";
}
function pageBreak(e, show) {
if(!show) {
var obj = $('pageTitle');
var title = obj ? obj.value : '';
if(obj) {
obj.value = '';
}
var insertText = title ? '[title='+title+']': '';
setCaret();
format("insertHTML", '<br /><strong>##########NextPage'+insertText+'##########</strong><br /><br />');
if(parent.showInnerNav && typeof parent.showInnerNav == 'function') {
parent.showInnerNav();
}
fHide($('createPage'));
} else {
if(gIsIE){
var e = window.event;
}
getCaret();
var dvSwfBox = $("createPage");
var iX = e.clientX;
var iY = e.clientY;
dvSwfBox.style.display = "";
dvSwfBox.style.left = (iX-300) + "px";
dvSwfBox.style.top = 33 + "px";
}
}
function changeEditType(flag, ev){
gIsHtml = flag;
try{
var mod = parent.MM["compose"];
mod.html = flag;
}catch(exp){}
try{
var dvhtml = $("dvhtml");
var dvtext = $("dvtext");
var HtmlEditor = window.frames["HtmlEditor"];
var ifmHtmlEditor = $("HtmlEditor");
var sourceEditor = $("sourceEditor");
var switchMode = $("switchMode");
var sourceEditor = $("sourceEditor");
var dvHtmlLnk = $("dvHtmlLnk");
var dvToolbar = $('dvToolbar');
if(flag){
dvhtml.style.display = "";
dvtext.style.display = "none";
dvToolbar.className = 'toobar';
if(switchMode.checked){
sourceEditor.value = dvtext.value;
$('uchome-editstatus').value = 'code';
}else{
if(document.all){
HtmlEditor.document.body.innerText = dvtext.value;
} else {
HtmlEditor.document.body.innerHTML = dvtext.value.unescapeHTML();
}
$('uchome-editstatus').value = 'html';
}
}else{
function sub1(){
dvhtml.style.display = "none";
dvtext.style.display = "";
dvToolbar.className = 'toobarmini';
if(switchMode.checked){
dvtext.value = sourceEditor.value.unescapeHTML();
}else{
if(document.all){
dvtext.value = HtmlEditor.document.body.innerText;
}else{
dvtext.value = HtmlEditor.document.body.innerHTML.unescapeHTML();
}
}
}
ev = ev || event;
if(ev){
if(window.confirm("转换为纯文本时将会遗失某些格式。\n您确定要继续吗")){
$('uchome-editstatus').value = 'text';
sub1();
}else{
return;
}
}
}
}catch(exp){
}
}
function changeEditFull(flag, ev) {
if(parent.changeEditFull) {
parent.changeEditFull(flag);
ev = ev || event;
var ele = ev.target || ev.srcElement;
ele.innerHTML = flag ? '返回' : '全屏';
ele.onclick = function() {changeEditFull(!flag, ev)};
}
}
String.prototype.stripTags = function(){
return this.replace(/<\/?[^>]+>/gi, '');
};
String.prototype.unescapeHTML = function(){
var div = document.createElement('div');
div.innerHTML = this.stripTags();
return div.childNodes[0].nodeValue;
};
var s = "";
var hex = new Array(6)
hex[0] = "FF"
hex[1] = "CC"
hex[2] = "99"
hex[3] = "66"
hex[4] = "33"
hex[5] = "00"
function drawCell(red, green, blue) {
var color = '#' + red + green + blue;
if(color == "#000066") color = "#000000";
s += '<TD BGCOLOR="' + color + '" style="height:12px;width:12px;" >';
s += '<IMG '+ ((document.all)?"":"src='editor_none.gif'") +' HEIGHT=12 WIDTH=12>';
s += '</TD>';
}
function drawRow(red, blue) {
s += '<TR>';
for (var i = 0; i < 6; ++i) {
drawCell(red, hex[i], blue)
}
s += '</TR>';
}
function drawTable(blue) {
s += '<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0>';
for (var i = 0; i < 6; ++i) {
drawRow(hex[i], blue)
}
s += '</TABLE>';
}
function drawCube() {
s += '<TABLE CELLPADDING=0 CELLSPACING=0 style="border:1px #888888 solid"><TR>';
for (var i = 0; i < 2; ++i) {
s += '<TD BGCOLOR="#FFFFFF">';
drawTable(hex[i])
s += '</TD>';
}
s += '</TR><TR>';
for (var i = 2; i < 4; ++i) {
s += '<TD BGCOLOR="#FFFFFF">';
drawTable(hex[i])
s += '</TD>';
}
s += '</TR></TABLE>';
return s;
}
function EV(){}
EV.getTarget = fGetTarget;
EV.getEvent = fGetEvent;
EV.stopEvent = fStopEvent;
EV.stopPropagation = fStopPropagation;
EV.preventDefault = fPreventDefault;
function fGetTarget(ev, resolveTextNode){
if(!ev) ev = this.getEvent();
var t = ev.target || ev.srcElement;
if (resolveTextNode && t && "#text" == t.nodeName) {
return t.parentNode;
} else {
return t;
}
}
function fGetEvent (e) {
var ev = e || window.event;
if (!ev) {
var c = this.getEvent.caller;
while (c) {
ev = c.arguments[0];
if (ev && Event == ev.constructor) {
break;
}
c = c.caller;
}
}
return ev;
}
function fStopEvent(ev) {
if(!ev) ev = this.getEvent();
this.stopPropagation(ev);
this.preventDefault(ev);
}
function fStopPropagation(ev) {
if(!ev) ev = this.getEvent();
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
}
function fPreventDefault(ev) {
if(!ev) ev = this.getEvent();
if (ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
}
function getExt(path) {
return path.lastIndexOf('.') == -1 ? '' : path.substr(path.lastIndexOf('.') + 1, path.length).toLowerCase();
}
function checkURL(obj, mod) {
if(mod) {
if(obj.value == 'http://') {
obj.value = '';
}
} else {
if(obj.value == '') {
obj.value = 'http://';
}
}
}