|
(function ($) {
var ie = $.browser.msie,
iOS = /iphone|ipad|ipod/i.test(navigator.userAgent);
$.TE = {
version:'1.0', // 版本号
debug: 1, //调试开关
timeOut: 3000, //加载单个文件超时时间,单位为毫秒。
defaults: {
//默认参数controls,noRigths,plugins,定义加载插件
controls: "source,|,undo,redo,|,cut,copy,paste,pastetext,selectAll,blockquote,|,image,flash,table,hr,pagebreak,face,code,|,link,unlink,|,print,fullscreen,|,eq,|,style,font,fontsize,|,fontcolor,backcolor,|,bold,italic,underline,strikethrough,unformat,|,leftalign,centeralign,rightalign,blockjustify,|,orderedlist,unorderedlist,indent,outdent,|,subscript,superscript",
//noRights:"underline,strikethrough,superscript",
width: 740,
height: 500,
skins: "default",
resizeType: 2,
face_path: ['qq_face', 'qq_face'],
minHeight: 200,
minWidth: 500,
uploadURL: 'about:blank',
theme: 'default'
},
buttons: {
//按钮属性
//eq: {title: '等于',cmd: 'bold'},
bold: { title: "加粗", cmd: "bold" },
pastetext: { title: "粘贴无格式", cmd: "bold" },
pastefromword: { title: "粘贴word格式", cmd: "bold" },
selectAll: { title: "全选", cmd: "selectall" },
blockquote: { title: "引用" },
find: { title: "查找", cmd: "bold" },
flash: { title: "插入flash", cmd: "bold" },
media: { title: "插入多媒体", cmd: "bold" },
table: { title: "插入表格" },
pagebreak: { title: "插入分页符" },
face: { title: "插入表情", cmd: "bold" },
code: { title: "插入源码", cmd: "bold" },
print: { title: "打印", cmd: "print" },
about: { title: "关于", cmd: "bold" },
fullscreen: { title: "全屏", cmd: "fullscreen" },
source: { title: "HTML代码", cmd: "source" },
undo: { title: "后退", cmd: "undo" },
redo: { title: "前进", cmd: "redo" },
cut: { title: "剪贴", cmd: "cut" },
copy: { title: "复制", cmd: "copy" },
paste: { title: "粘贴", cmd: "paste" },
hr: { title: "插入横线", cmd: "inserthorizontalrule" },
link: { title: "创建链接", cmd: "createlink" },
unlink: { title: "删除链接", cmd: "unlink" },
italic: { title: "斜体", cmd: "italic" },
underline: { title: "下划线", cmd: "underline" },
strikethrough: { title: "删除线", cmd: "strikethrough" },
unformat: { title: "清除格式", cmd: "removeformat" },
subscript: { title: "下标", cmd: "subscript" },
superscript: { title: "上标", cmd: "superscript" },
orderedlist: { title: "有序列表", cmd: "insertorderedlist" },
unorderedlist: { title: "无序列表", cmd: "insertunorderedlist" },
indent: { title: "增加缩进", cmd: "indent" },
outdent: { title: "减少缩进", cmd: "outdent" },
leftalign: { title: "左对齐", cmd: "justifyleft" },
centeralign: { title: "居中对齐", cmd: "justifycenter" },
rightalign: { title: "右对齐", cmd: "justifyright" },
blockjustify: { title: "两端对齐", cmd: "justifyfull" },
font: { title: "字体", cmd: "fontname", value: "微软雅黑" },
fontsize: { title: "字号", cmd: "fontsize", value: "4" },
style: { title: "段落标题", cmd: "formatblock", value: "" },
fontcolor: { title: "前景颜色", cmd: "forecolor", value: "#ff6600" },
backcolor: { title: "背景颜色", cmd: "hilitecolor", value: "#ff6600" },
image: { title: "插入图片", cmd: "insertimage", value: "" }
},
defaultEvent: {
event: "click mouseover mouseout",
click: function (e) {
this.exec(e);
},
mouseover: function (e) {
var opt = this.editor.opt;
this.$btn.addClass(opt.cssname.mouseover);
},
mouseout: function (e) { },
noRight: function (e) { },
init: function (e) { },
exec: function () {
this.editor.restoreRange();
//执行命令
if ($.isFunction(this[this.cmd])) {
this[this.cmd](); //如果有已当前cmd为名的方法,则执行
} else {
this.editor.doc.execCommand(this.cmd, 0, this.value || null);
}
this.editor.focus();
this.editor.refreshBtn();
this.editor.hideDialog();
},
createDialog: function (v) {
//创建对话框
var editor = this.editor,
opt = editor.opt,
$btn = this.$btn,
_self = this;
var defaults = {
body: "", //对话框内容
closeBtn: opt.cssname.dialogCloseBtn,
okBtn: opt.cssname.dialogOkBtn,
ok: function () {
//点击ok按钮后执行函数
},
setDialog: function ($dialog) {
//设置对话框(位置)
var y = $btn.offset().top + $btn.outerHeight();
var x = $btn.offset().left;
$dialog.offset({
top: y,
left: x
});
}
};
var options = $.extend(defaults, v);
//初始化对话框
editor.$dialog.empty();
//加入内容
$body = $.type(options.body) == "string" ? $(options.body) : options.body;
$dialog = $body.appendTo(editor.$dialog);
$dialog.find("." + options.closeBtn).click(function () { _self.hideDialog(); });
$dialog.find("." + options.okBtn).click(options.ok);
//设置对话框
editor.$dialog.show();
options.setDialog(editor.$dialog);
},
hideDialog: function () {
this.editor.hideDialog();
}
//getEnable:function(){return false},
//disable:function(e){alert('disable')}
},
plugin: function (name, v) {
//新增或修改插件。
$.TE.buttons[name] = $.extend($.TE.buttons[name], v);
},
config: function (name, value) {
var _fn = arguments.callee;
if (!_fn.conf) _fn.conf = {};
if (value) {
_fn.conf[name] = value;
return true;
} else {
return name == 'default' ? $.TE.defaults : _fn.conf[name];
}
},
systemPlugins: ['system', 'upload_interface'], //系统自带插件
basePath: function () {
var jsFile = "ThinkEditor.js";
var src = $("script[src$='" + jsFile + "']").attr("src");
return src.substr(0, src.length - jsFile.length);
}
};
$.fn.extend({
//调用插件
ThinkEditor: function (v) {
//配置处理
var conf = '',
temp = '';
conf = v ? $.extend($.TE.config(v.theme ? v.theme : 'default'), v) : $.TE.config('default');
v = conf;
//配置处理完成
//载入皮肤
var skins = v.skins || $.TE.defaults.skins; //获得皮肤参数
var skinsDir = $.TE.basePath() + "skins/" + skins + "/",
jsFile = "@" + skinsDir + "config.js",
cssFile = "@" + skinsDir + "style.css";
var _self = this;
//加载插件
if ($.defined(v.plugins)) {
var myPlugins = $.type(v.plugins) == "string" ? [v.plugins] : v.plugins;
var files = $.merge($.merge([], $.TE.systemPlugins), myPlugins);
} else {
var files = $.TE.systemPlugins;
}
$.each(files, function (i, v) {
files[i] = v + ".js";
})
files.push(jsFile, cssFile);
files.push("@" + skinsDir + "dialog/css/base.css");
files.push("@" + skinsDir + "dialog/css/te_dialog.css");
$.loadFile(files, function () {
//设置css参数
v.cssname = $.extend({}, TECSS, v.cssname);
//创建编辑器,存储对象
$(_self).each(function (idx, elem) {
var data = $(elem).data("editorData");
if (!data) {
data = new ThinkEditor(elem, v);
$(elem).data("editorData", data);
}
});
});
}
});
//编辑器对象。
function ThinkEditor(area, v) {
//添加随机序列数防冲突
var _fn = arguments.callee;
this.guid = !_fn.guid ? _fn.guid = 1 : _fn.guid += 1;
//生成参数
var opt = this.opt = $.extend({}, $.TE.defaults, v);
var _self = this;
//结构:主层,工具层,分组层,按钮层,底部,dialog层
var $main = this.$main = $("<div></div>").addClass(opt.cssname.main),
$toolbar_box = $('<div></div>').addClass(opt.cssname.toolbar_box).appendTo($main),
$toolbar = this.$toolbar = $("<div></div>").addClass(opt.cssname.toolbar).appendTo($toolbar_box),
/*$toolbar=this.$toolbar=$("<div></div>").addClass(opt.cssname.toolbar).appendTo($main),*/
$group = $("<div></div>").addClass(opt.cssname.group).appendTo($toolbar),
$bottom = this.$bottom = $("<div></div>").addClass(opt.cssname.bottom),
$dialog = this.$dialog = $("<div></div>").addClass(opt.cssname.dialog),
$area = $(area).hide(),
$frame = $('<iframe frameborder="0"></iframe>');
opt.noRights = opt.noRights || "";
var noRights = opt.noRights.split(",");
//调整结构
$main.insertBefore($area)
.append($area);
//加入frame
$frame.appendTo($main);
//加入bottom
if (opt.resizeType != 0) {
//拖动改变编辑器高度
$("<div></div>").addClass(opt.cssname.resizeCenter).mousedown(function (e) {
var y = e.pageY,
x = e.pageX,
height = _self.$main.height(),
width = _self.$main.width();
$(document).add(_self.doc).mousemove(function (e) {
var mh = e.pageY - y;
_self.resize(width, height + mh);
});
$(document).add(_self.doc).mouseup(function (e) {
$(document).add(_self.doc).unbind("mousemove");
$(document).add(_self.doc).unbind("mousemup");
});
}).appendTo($bottom);
}
if (opt.resizeType == 2) {
//拖动改变编辑器高度和宽度
$("<div></div>").addClass(opt.cssname.resizeLeft).mousedown(function (e) {
var y = e.pageY,
x = e.pageX,
height = _self.$main.height(),
width = _self.$main.width();
$(document).add(_self.doc).mousemove(function (e) {
var mh = e.pageY - y,
mw = e.pageX - x;
_self.resize(width + mw, height + mh);
});
$(document).add(_self.doc).mouseup(function (e) {
$(document).add(_self.doc).unbind("mousemove");
$(document).add(_self.doc).unbind("mousemup");
});
}).appendTo($bottom);
}
$bottom.appendTo($main);
$dialog.appendTo($main);
//循环按钮处理。
//TODO 默认参数处理
$.each(opt.controls.split(","), function (idx, bname) {
var _fn = arguments.callee;
if (_fn.count == undefined) {
_fn.count = 0;
}
//处理分组
if (bname == "|") {
//设定分组宽
if (_fn.count) {
$toolbar.find('.' + opt.cssname.group + ':last').css('width', (opt.cssname.btnWidth * _fn.count + opt.cssname.lineWidth) + 'px');
_fn.count = 0;
}
//分组宽结束
$group = $("<div></div>").addClass(opt.cssname.group).appendTo($toolbar);
$("<div> </div>").addClass(opt.cssname.line).appendTo($group);
} else {
//更新统计数
_fn.count += 1;
//获取按钮属性
var btn = $.extend({}, $.TE.defaultEvent, $.TE.buttons[bname]);
//标记无权限
var noRightCss = "", noRightTitle = "";
if ($.inArray(bname, noRights) != -1) {
noRightCss = " " + opt.cssname.noRight;
noRightTitle = "(无权限)";
}
$btn = $("<div></div>").addClass(opt.cssname.btn + " " + opt.cssname.btnpre + bname + noRightCss)
.data("bname", bname)
.attr("title", btn.title + noRightTitle)
.appendTo($group)
.bind(btn.event, function (e) {
//不可用触发
if ($(this).is("." + opt.cssname.disable)) {
if ($.isFunction(btn.disable)) btn.disable.call(btn, e);
return false;
}
//判断权限和是否可用
if ($(this).is("." + opt.cssname.noRight)) {
//点击时触发无权限说明
btn['noRight'].call(btn, e);
return false;
}
if ($.isFunction(btn[e.type])) {
//触发事件
btn[e.type].call(btn, e);
//TODO 刷新按钮
}
});
if ($.isFunction(btn.init)) btn.init.call(btn); //初始化
if (ie) $btn.attr("unselectable", "on");
btn.editor = _self;
btn.$btn = $btn;
}
});
//调用核心
this.core = new editorCore($frame, $area);
this.doc = this.core.doc;
this.$frame = this.core.$frame;
this.$area = this.core.$area;
this.restoreRange = this.core.restoreRange;
this.selectedHTML = function () { return this.core.selectedHTML(); }
this.selectedText = function () { return this.core.selectedText(); }
this.pasteHTML = function (v) { this.core.pasteHTML(v); }
this.sourceMode = this.core.sourceMode;
this.focus = this.core.focus;
//监控变化
$(this.core.doc).click(function () {
//隐藏对话框
_self.hideDialog();
}).bind("keyup mouseup", function () {
_self.refreshBtn();
})
this.refreshBtn();
//调整大小
this.resize(opt.width, opt.height);
//获取DOM层级
this.core.focus();
}
//end ThinkEditor
ThinkEditor.prototype.resize = function (w, h) {
//最小高度和宽度
var opt = this.opt,
h = h < opt.minHeight ? opt.minHeight : h,
w = w < opt.minWidth ? opt.minWidth : w;
this.$main.width(w).height(h);
var height = h - (this.$toolbar.parent().outerHeight() + this.$bottom.height());
this.$frame.height(height).width("100%");
this.$area.height(height).width("100%");
};
//隐藏对话框
ThinkEditor.prototype.hideDialog = function () {
var opt = this.opt;
$("." + opt.cssname.dialog).hide();
};
//刷新按钮
ThinkEditor.prototype.refreshBtn = function () {
var sourceMode = this.sourceMode(); // 标记状态。
var opt = this.opt;
if (!iOS && $.browser.webkit && !this.focused) {
this.$frame[0].contentWindow.focus();
window.focus();
this.focused = true;
}
var queryObj = this.doc;
if (ie) queryObj = this.core.getRange();
//循环按钮
//TODO undo,redo等判断
this.$toolbar.find("." + opt.cssname.btn + ":not(." + opt.cssname.noRight + ")").each(function () {
var enabled = true,
btnName = $(this).data("bname"),
btn = $.extend({}, $.TE.defaultEvent, $.TE.buttons[btnName]),
command = btn.cmd;
if (sourceMode && btnName != "source") {
enabled = false;
} else if ($.isFunction(btn.getEnable)) {
enabled = btn.getEnable.call(btn);
} else if ($.isFunction(btn[command])) {
enabled = true; //如果命令为自定义命令,默认为可用
} else {
if (!ie || btn.cmd != "inserthtml") {
try {
enabled = queryObj.queryCommandEnabled(command);
$.debug(enabled.toString(), "命令:" + command);
}
catch (err) {
enabled = false;
}
}
//判断该功能是否有实现 @TODO 代码胶着
if ($.TE.buttons[btnName]) enabled = true;
}
if (enabled) {
$(this).removeClass(opt.cssname.disable);
} else {
$(this).addClass(opt.cssname.disable);
}
});
};
//core code start
function editorCore($frame, $area, v) {
//TODO 参数改为全局的。
var defaults = {
docType: '<!DOCTYPE HTML>',
docCss: "",
bodyStyle: "margin:4px; font:10pt Arial,Verdana; cursor:text",
focusExt: function (editor) {
//触发编辑器获得焦点时执行,比如刷新按钮
},
//textarea内容更新到iframe的处理函数
updateFrame: function (code) {
//翻转flash为占位符
code = code.replace(/(<embed[^>]*?type="application\/x-shockwave-flash" [^>]*?>)/ig, function ($1) {
var ret = '<img class="_flash_position" src="' + $.TE.basePath() + 'skins/default/img/spacer.gif" style="',
_width = $1.match(/width="(\d+)"/),
_height = $1.match(/height="(\d+)"/),
_src = $1.match(/src="([^"]+)"/),
_wmode = $1.match(/wmode="(\w+)"/),
_data = '';
_width = _width && _width[1] ? parseInt(_width[1]) : 0;
_height = _height && _height[1] ? parseInt(_height[1]) : 0;
_src = _src && _src[1] ? _src[1] : '';
_wmode = _wmode && _wmode[1] ? true : false;
_data = "{'src':'" + _src + "','width':'" + _width + "','height':'" + _height + "','wmode':" + (_wmode) + "}";
if (_width) ret += 'width:' + _width + 'px;';
if (_height) ret += 'height:' + _height + 'px;';
ret += 'border:1px solid #DDD; display:inline-block;text-align:center;line-height:' + _height + 'px;" ';
ret += '_data="' + _data + '"';
ret += ' alt="flash占位符" />';
return ret;
});
return code;
},
//iframe更新到text的, TODO 去掉
updateTextArea: function (html) {
//翻转占位符为flash
html = html.replace(/(<img[^>]*?class=(?:"|)_flash_position(?:"|)[^>]*?>)/ig, function ($1) {
var ret = '',
data = $1.match(/_data="([^"]*)"/);
if (data && data[1]) {
data = eval('(' + data + ')');
}
ret += '<embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" ';
ret += 'src="' + data.src + '" ';
ret += 'width="' + data.width + '" ';
ret += 'height="' + data.height + '" ';
if (data.wmode) ret += 'wmode="transparent" ';
ret += '/>';
return ret;
});
return html;
}
};
options = $.extend({}, defaults, v);
//存储属性
this.opt = options;
this.$frame = $frame;
this.$area = $area;
var contentWindow = $frame[0].contentWindow,
doc = this.doc = contentWindow.document,
$doc = $(doc);
var _self = this;
//初始化
doc.open();
doc.write(
options.docType +
'<html>' +
((options.docCss === '') ? '' : '<head><link rel="stylesheet" type="text/css" href="' + options.docCss + '" /></head>') +
'<body style="' + options.bodyStyle + '"></body></html>'
);
doc.close();
//设置frame编辑模式
try {
if (ie) {
doc.body.contentEditable = true;
}
else {
doc.designMode = "on";
}
} catch (err) {
$.debug(err, "创建编辑模式错误");
}
//统一 IE FF 等的 execCommand 行为
try {
this.e.execCommand("styleWithCSS", 0, 0)
}
catch (e) {
try {
this.e.execCommand("useCSS", 0, 1);
} catch (e) { }
}
//监听
if (ie)
$doc.click(function () {
_self.focus();
});
this.updateFrame(); //更新内容
if (ie) {
$doc.bind("beforedeactivate beforeactivate selectionchange keypress", function (e) {
if (e.type == "beforedeactivate")
_self.inactive = true;
else if (e.type == "beforeactivate") {
if (!_self.inactive && _self.range && _self.range.length > 1)
_self.range.shift();
delete _self.inactive;
}
else if (!_self.inactive) {
if (!_self.range)
_self.range = [];
_self.range.unshift(_self.getRange());
while (_self.range.length > 2)
_self.range.pop();
}
});
// Restore the text range when the iframe gains focus
$frame.focus(function () {
_self.restoreRange();
});
}
($.browser.mozilla ? $doc : $(contentWindow)).blur(function () {
_self.updateTextArea(true);
});
this.$area.blur(function () {
// Update the iframe when the textarea loses focus
_self.updateFrame(true);
});
/*
* //自动添加p标签
* $doc.keydown(function(e){
* if(e.keyCode == 13){
* //_self.pasteHTML('<p> </p>');
* //this.execCommand( 'formatblock', false, '<p>' );
* }
* });
*/
}
//是否为源码模式
editorCore.prototype.sourceMode = function () {
return this.$area.is(":visible");
};
//编辑器获得焦点
editorCore.prototype.focus = function () {
var opt = this.opt;
if (this.sourceMode()) {
this.$area.focus();
}
else {
this.$frame[0].contentWindow.focus();
}
if ($.isFunction(opt.focusExt)) opt.focusExt(this);
};
//textarea内容更新到iframe
editorCore.prototype.updateFrame = function (checkForChange) {
var code = this.$area.val(),
options = this.opt,
updateFrameCallback = options.updateFrame,
$body = $(this.doc.body);
//判断是否已经修改
if (updateFrameCallback) {
var sum = checksum(code);
if (checkForChange && this.areaChecksum == sum)
return;
this.areaChecksum = sum;
}
//回调函数处理
var html = updateFrameCallback ? updateFrameCallback(code) : code;
// 禁止script标签
html = html.replace(/<(?=\/?script)/ig, "<");
// TODO,判断是否有作用
if (options.updateTextArea)
this.frameChecksum = checksum(html);
if (html != $body.html()) {
$body.html(html);
}
};
editorCore.prototype.getRange = function () {
if (ie) return this.getSelection().createRange();
return this.getSelection().getRangeAt(0);
};
editorCore.prototype.getSelection = function () {
if (ie) return this.doc.selection;
return this.$frame[0].contentWindow.getSelection();
};
editorCore.prototype.restoreRange = function () {
if (ie && this.range)
this.range[0].select();
};
editorCore.prototype.selectedHTML = function () {
this.restoreRange();
var range = this.getRange();
if (ie)
return range.htmlText;
var layer = $("<layer>")[0];
layer.appendChild(range.cloneContents());
var html = layer.innerHTML;
layer = null;
return html;
};
editorCore.prototype.selectedText = function () {
this.restoreRange();
if (ie) return this.getRange().text;
return this.getSelection().toString();
};
editorCore.prototype.pasteHTML = function (value) {
this.restoreRange();
if (ie) {
this.getRange().pasteHTML(value);
} else {
this.doc.execCommand("inserthtml", 0, value || null);
}
//获得焦点
this.$frame[0].contentWindow.focus();
}
editorCore.prototype.updateTextArea = function (checkForChange) {
var html = $(this.doc.body).html(),
options = this.opt,
updateTextAreaCallback = options.updateTextArea,
$area = this.$area;
if (updateTextAreaCallback) {
var sum = checksum(html);
if (checkForChange && this.frameChecksum == sum)
return;
this.frameChecksum = sum;
}
var code = updateTextAreaCallback ? updateTextAreaCallback(html) : html;
// TODO 判断是否有必要
if (options.updateFrame)
this.areaChecksum = checksum(code);
if (code != $area.val()) {
$area.val(code);
}
};
function checksum(text) {
var a = 1, b = 0;
for (var index = 0; index < text.length; ++index) {
a = (a + text.charCodeAt(index)) % 65521;
b = (b + a) % 65521;
}
return (b << 16) | a;
}
$.extend({
teExt: {
//扩展配置
},
debug: function (msg, group) {
//判断是否有console对象
if ($.TE.debug && window.console !== undefined) {
//分组开始
if (group) console.group(group);
if ($.type(msg) == "string") {
//是否为执行特殊函数,用双冒号隔开
if (msg.indexOf("::") != -1) {
var arr = msg.split("::");
eval("console." + arr[0] + "('" + arr[1] + "')");
} else {
console.debug(msg);
}
} else {
if ($(msg).html() == null) {
console.dir(msg); //输出对象或数组
} else {
console.dirxml($(msg)[0]); //输出dom对象
}
}
//记录trace信息
if ($.TE.debug == 2) {
console.group("trace 信息:");
console.trace();
console.groupEnd();
}
//分组结束
if (group) console.groupEnd();
}
},
//end debug
defined: function (variable) {
return $.type(variable) == "undefined" ? false : true;
},
isTag: function (tn) {
if (!tn) return false;
return $(this)[0].tagName.toLowerCase() == tn ? true : false;
},
//end istag
include: function (file) {
if (!$.defined($.TE.loadUrl)) $.TE.loadUrl = {};
//定义皮肤路径和插件路径。
var basePath = $.TE.basePath(),
skinsDir = basePath + "skins/",
pluginDir = basePath + "plugins/";
var files = $.type(file) == "string" ? [file] : file;
for (var i = 0; i < files.length; i++) {
var loadurl = name = $.trim(files[i]);
//判断是否已经加载过
if ($.TE.loadUrl[loadurl]) {
continue;
}
//判断是否有@
var at = false;
if (name.indexOf("@") != -1) {
at = true;
name = name.substr(1);
}
var att = name.split('.');
var ext = att[att.length - 1].toLowerCase();
if (ext == "css") {
//加载css
var filepath = at ? name : skinsDir + name;
var newNode = document.createElement("link");
newNode.setAttribute('type', 'text/css');
newNode.setAttribute('rel', 'stylesheet');
newNode.setAttribute('href', filepath);
$.TE.loadUrl[loadurl] = 1;
} else {
var filepath = at ? name : pluginDir + name;
//$("<scri"+"pt>"+"</scr"+"ipt>").attr({src:filepath,type:'text/javascript'}).appendTo('head');
var newNode = document.createElement("script");
newNode.type = "text/javascript";
newNode.src = filepath;
newNode.id = loadurl; //实现批量加载
newNode.onload = function () {
$.TE.loadUrl[this.id] = 1;
};
newNode.onreadystatechange = function () {
//针对ie
if ((newNode.readyState == 'loaded' || newNode.readyState == 'complete')) {
$.TE.loadUrl[this.id] = 1;
}
};
}
$("head")[0].appendChild(newNode);
}
},
//end include
loadedFile: function (file) {
//判断是否加载
if (!$.defined($.TE.loadUrl)) return false;
var files = $.type(file) == "string" ? [file] : file,
result = true;
$.each(files, function (i, name) {
if (!$.TE.loadUrl[name]) result = false;
//alert(name+':'+result);
});
return result;
},
//end loaded
loadFile: function (file, fun) {
//加载文件,加载完毕后执行fun函数。
$.include(file);
var time = 0;
var check = function () {
//alert($.loadedFile(file));
if ($.loadedFile(file)) {
if ($.isFunction(fun)) fun();
} else {
//alert(time);
if (time >= $.TE.timeOut) {
// TODO 细化哪些文件加载失败。
$.debug(file, "文件加载失败");
} else {
//alert('time:'+time);
setTimeout(check, 50);
time += 50;
}
}
};
check();
}
//end loadFile
});
})(jQuery);
jQuery.TE.config( 'mini', {
'controls' : 'font,fontsize,fontcolor,backcolor,bold,italic,underline,unformat,leftalign,centeralign,rightalign,orderedlist,unorderedlist',
'width':498,
'height':400,
'resizeType':1
} );
|