/*******************************************************************************
* kindeditor - wysiwyg html editor for internet
* copyright (c) 2006-2011 longhao luo
*
* @author roddy ]*>)([\s\s]*?)(<\/pre>)/ig, function($0, $1, $2, $3){
return $1 + $2.replace(/
]*>/ig, '\n') + $3;
});
var htmltaghash = {};
var fontsizehash = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
if (isfilter) {
ke.each(htmltags, function(key, val) {
var arr = key.split(',');
for (var i = 0, len = arr.length; i < len; i++) htmltaghash[arr[i]] = ke.util.arraytohash(val);
});
}
var skipflag = false;
var noendtaghash = ke.util.arraytohash(ke.setting.noendtags);
var inlinetaghash = ke.util.arraytohash(ke.setting.inlinetags);
var endlinetaghash = ke.util.arraytohash(ke.setting.endlinetags);
var re = /((?:\r\n|\n|\r)*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:]+="[^"]*")|(?:\s+[\w\-:]+='[^']*'))*)(\/)?>((?:\r\n|\n|\r)*)/g;
html = html.replace(re, function($0, $1, $2, $3, $4, $5, $6) {
var startnewline = $1 || '';
var startslash = $2 || '';
var tagname = $3.tolowercase();
var attr = $4 || '';
var endslash = $5 ? ' ' + $5 : '';
var endnewline = $6 || '';
if (tagname === 'script' && startslash !== '') skipflag = false;
if (skipflag) return $0;
if (tagname === 'script' && startslash === '') skipflag = true;
if (isfilter && typeof htmltaghash[tagname] == "undefined") return '';
if (endslash === '' && typeof noendtaghash[tagname] != "undefined") endslash = ' /';
if (tagname in endlinetaghash) {
if (startslash || endslash) endnewline = '\n';
} else {
if (endnewline) endnewline = ' ';
}
if (tagname !== 'script' && tagname !== 'style') {
startnewline = '';
}
if (tagname === 'font') {
var style = {}, stylestr = '';
attr = attr.replace(/\s*([\w\-:]+)=([^\s"'<>]+|"[^"]*"|'[^']*')/g, function($0, $1, $2) {
var key = $1.tolowercase();
var val = $2 || '';
val = val.replace(/^["']|["']$/g, '');
if (key === 'color') {
style['color'] = val;
return ' ';
}
if (key === 'size') {
style['font-size'] = fontsizehash[parseint(val) - 1] || '';
return ' ';
}
if (key === 'face') {
style['font-family'] = val;
return ' ';
}
if (key === 'style') {
stylestr = val;
return ' ';
}
return $0;
});
if (stylestr && !/;$/.test(stylestr)) stylestr += ';';
ke.each(style, function(key, val) {
if (val !== '') {
if (/\s/.test(val)) val = "'" + val + "'";
stylestr += key + ':' + val + ';';
}
});
if (stylestr) attr += ' style="' + stylestr + '"';
tagname = 'span';
}
if (attr !== '') {
attr = attr.replace(/\s*([\w\-:]+)=([^\s"'<>]+|"[^"]*"|'[^']*')/g, function($0, $1, $2) {
var key = $1.tolowercase();
var val = $2 || '';
if (isfilter) {
if (key.charat(0) === "." || (key !== "style" && typeof htmltaghash[tagname][key] == "undefined")) return ' ';
}
if (val === '') {
val = '""';
} else {
if (key === "style") {
val = val.substr(1, val.length - 2);
val = val.replace(/\s*([^\s]+?)\s*:(.*?)(;|$)/g, function($0, $1, $2) {
var k = $1.tolowercase();
if (isfilter) {
if (typeof htmltaghash[tagname]['style'] == "undefined" && typeof htmltaghash[tagname]['.' + k] == "undefined") return '';
}
var v = ke.util.trim($2);
v = ke.util.rgbtohex(v);
return k + ':' + v + ';';
});
val = ke.util.trim(val);
if (val === '') return '';
val = '"' + val + '"';
}
if (ke.util.inarray(key, ['src', 'href'])) {
if (val.charat(0) === '"') {
val = val.substr(1, val.length - 2);
}
val = ke.format.geturl(val, urltype);
}
if (val.charat(0) !== '"') val = '"' + val + '"';
}
return ' ' + key + '=' + val + ' ';
});
attr = attr.replace(/\s+(checked|selected|disabled|readonly)(\s+|$)/ig, function($0, $1) {
var key = $1.tolowercase();
if (isfilter) {
if (key.charat(0) === "." || typeof htmltaghash[tagname][key] == "undefined") return ' ';
}
return ' ' + key + '="' + key + '"' + ' ';
});
attr = ke.util.trim(attr);
attr = attr.replace(/\s+/g, ' ');
if (attr) attr = ' ' + attr;
return startnewline + '<' + startslash + tagname + attr + endslash + '>' + endnewline;
} else {
return startnewline + '<' + startslash + tagname + endslash + '>' + endnewline;
}
});
if (!ke.browser.ie) {
html = html.replace(/
\n<\/p>/ig, '
\n<\/p>/ig, '
\s* \s*<\/p>\s*$/ig, '');
if (g.filtermode) {
return ke.format.gethtml(html, g.htmltags, g.urltype);
} else {
return ke.format.gethtml(html, null, g.urltype);
}
},
getdata : function(id, wyswygmode) {
var g = ke.g[id];
wyswygmode = (wyswygmode === undefined) ? g.wyswygmode : wyswygmode;
if (!wyswygmode) {
this.innerhtml(g.iframedoc.body, ke.util.execsethtmlhooks(id, g.newtextarea.value));
}
return this.todata(id, g.iframedoc.body.innerhtml);
},
getsrcdata : function(id) {
var g = ke.g[id];
if (!g.wyswygmode) {
this.innerhtml(g.iframedoc.body, ke.util.execsethtmlhooks(id, g.newtextarea.value));
}
return g.iframedoc.body.innerhtml;
},
getpuredata : function(id) {
return this.extracttext(this.getdata(id));
},
extracttext : function(str) {
str = str.replace(/<(?!img|embed).*?>/ig, '');
str = str.replace(/ /ig, ' ');
return str;
},
isempty : function(id) {
return this.getpuredata(id).replace(/\r\n|\n|\r/, '').replace(/^\s+|\s+$/, '') === '';
},
setdata : function(id) {
var g = ke.g[id];
if (g.srctextarea) g.srctextarea.value = this.getdata(id);
},
focus : function(id) {
var g = ke.g[id];
if (g.wyswygmode) {
g.iframewin.focus();
} else {
g.newtextarea.focus();
}
},
click : function(id, cmd) {
this.focus(id);
ke.hidemenu(id);
ke.plugin[cmd].click(id);
},
selection : function(id) {
if (!ke.browser.ie || !ke.g[id].kerange) {
this.setselection(id);
}
},
setselection : function(id) {
var g = ke.g[id];
var kesel = new ke.selection(g.iframedoc);
if (!ke.browser.ie || kesel.range.item || kesel.range.parentelement().ownerdocument === g.iframedoc) {
g.kesel = kesel;
g.kerange = g.kesel.kerange;
g.sel = g.kesel.sel;
g.range = g.kesel.range;
}
},
select : function(id) {
if (ke.browser.ie && ke.g[id].wyswygmode && ke.g[id].range) ke.g[id].range.select();
},
execcommand : function(id, cmd, value) {
ke.util.focus(id);
ke.util.select(id);
try {
ke.g[id].iframedoc.execcommand(cmd, false, value);
} catch(e) {}
ke.toolbar.updatestate(id);
ke.util.execonchangehandler(id);
},
innerhtml : function(el, html) {
if (ke.browser.ie) {
el.innerhtml = '' + html;
var temp = ke.$('__ke_temp_tag__', el.ownerdocument);
if (temp) temp.parentnode.removechild(temp);
} else {
el.innerhtml = html;
}
},
pastehtml : function(id, html, isstart) {
var g = ke.g[id];
var imgstr = '';
if (isstart) html = imgstr + html;
else html += imgstr;
if (ke.browser.ie) {
if (g.range.item) g.range.item(0).outerhtml = html;
else g.range.pastehtml(html);
} else {
g.range.deletecontents();
var frag = g.range.createcontextualfragment(html);
g.range.insertnode(frag);
}
var node = ke.$('__ke_temp_tag__', g.iframedoc);
var blank = g.iframedoc.createtextnode('');
node.parentnode.replacechild(blank, node);
g.kerange.selectnode(blank);
g.kesel.addrange(g.kerange);
},
inserthtml : function(id, html) {
if (html === '') return;
var g = ke.g[id];
if (!g.wyswygmode) return;
if (!g.range) return;
html = this.execsethtmlhooks(id, html);
if (ke.browser.ie) {
this.select(id);
if (g.range.item) {
try {
g.range.item(0).outerhtml = html;
} catch(e) {
var el = g.range.item(0);
var parent = el.parentnode;
parent.removechild(el);
if (parent.nodename.tolowercase() != 'body') parent = parent.parentnode;
this.innerhtml(parent, html + parent.innerhtml);
}
} else {
g.range.pastehtml('\u200b' + html);
var node = ke.$('__ke_temp_tag__', g.iframedoc);
node.parentnode.removechild(node);
}
} else if (ke.browser.gecko) {
this.execcommand(id, 'inserthtml', html);
return;
} else {
this.pastehtml(id, html);
}
ke.util.execonchangehandler(id);
},
setfullhtml : function(id, html) {
var g = ke.g[id];
if (!ke.browser.ie && html === '') html = '
';
var html = ke.util.execsethtmlhooks(id, html);
this.innerhtml(g.iframedoc.body, html);
if (!g.wyswygmode) g.newtextarea.value = ke.util.getdata(id, true);
ke.util.execonchangehandler(id);
},
selectimagewebkit : function(id, e, isselection) {
if (ke.browser.webkit) {
var target = e.srcelement || e.target;
if (target.tagname.tolowercase() == 'img') {
if (isselection) ke.util.selection(id);
var range = ke.g[id].kerange;
range.selectnode(target);
ke.g[id].kesel.addrange(range);
}
}
},
addtabevent : function(id) {
var g = ke.g[id];
ke.event.add(g.iframedoc, 'keydown', function(e) {
if (e.keycode == 9) {
if (g.aftertab) g.aftertab(id);
ke.event.stop(e);
return false;
}
}, id);
},
addcontextmenuevent : function(id) {
var g = ke.g[id];
if (g.contextmenuitems.length == 0) return;
if (!g.usecontextmenu) return;
ke.event.add(g.iframedoc, 'contextmenu', function(e){
ke.hidemenu(id);
ke.util.setselection(id);
ke.util.selectimagewebkit(id, e, false);
var maxwidth = 0;
var items = [];
for (var i = 0, len = g.contextmenuitems.length; i < len; i++) {
var item = g.contextmenuitems[i];
if (item === '-') {
items.push(item);
} else if (item.cond && item.cond(id)) {
items.push(item);
if (item.options) {
var width = parseint(item.options.width) || 0;
if (width > maxwidth) maxwidth = width;
}
}
previtem = item;
}
while (items.length > 0 && items[0] === '-') {
items.shift();
}
while (items.length > 0 && items[items.length - 1] === '-') {
items.pop();
}
var previtem = null;
for (var i = 0, len = items.length; i < len; i++) {
if (items[i] === '-' && previtem === '-') delete items[i];
previtem = items[i] || null;
}
if (items.length > 0) {
var menu = new ke.menu({
id : id,
event : e,
type : 'contextmenu',
width : maxwidth
});
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
if (!item) continue;
if (item === '-') {
if (i < len - 1) menu.addseparator();
} else {
menu.add(item.text, (function(item) {
return function() {
item.click(id, menu);
};
})(item), item.options);
}
}
menu.show();
ke.event.stop(e);
return false;
}
return true;
}, id);
},
addnewlineevent : function(id) {
var g = ke.g[id];
if (ke.browser.ie && g.newlinetag.tolowercase() != 'br') return;
if (ke.browser.gecko && ke.browser.version < 3 && g.newlinetag.tolowercase() != 'p') return;
if (ke.browser.opera) return;
ke.event.add(g.iframedoc, 'keydown', function(e) {
if (e.keycode != 13 || e.shiftkey || e.ctrlkey || e.altkey) return true;
ke.util.setselection(id);
var parent = g.kerange.getparentelement();
if (ke.util.inmarquee(parent)) return;
var tagname = parent.tagname.tolowercase();
if (g.newlinetag.tolowercase() == 'br') {
if (!ke.util.inarray(tagname, ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li'])) {
ke.util.pastehtml(id, '
');
var nextnode = g.kerange.startnode.nextsibling;
if (ke.browser.ie) {
if (!nextnode) ke.util.pastehtml(id, '
', true);
} else if (ke.browser.webkit) {
if (!nextnode) {
ke.util.pastehtml(id, '
', true);
} else {
var range = new ke.range(g.iframedoc);
range.selectnode(nextnode.parentnode);
range.setstart(nextnode, 0);
if (range.clonecontents().innerhtml.replace(/<(?!img|embed).*?>/ig, '') === '') {
ke.util.pastehtml(id, '
', true);
}
}
}
ke.event.stop(e);
return false;
}
} else {
if (!ke.util.inarray(tagname, ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre', 'div', 'li'])) {
ke.util.execcommand(id, 'formatblock', '
'); } } return true; }, id); } }; ke.layout = { hide : function(id) { var g = ke.g[id]; ke.hidemenu(id); var stack = g.dialogstack; while (stack.length > 0) { var dialog = stack[stack.length - 1]; dialog.hide(); } g.maskdiv.style.display = 'none'; } }; ke.hidemenu = function(id) { var g = ke.g[id]; g.hidediv.innerhtml = ''; g.hidediv.style.display = 'none'; }; ke.colorpicker = function(arg) { var wrapper; var x = arg.x || 0; var y = arg.y || 0; var z = arg.z || 0; var colors = arg.colors || ke.setting.colortable; var doc = arg.doc || document; var onclick = arg.onclick; var selectedcolor = (arg.selectedcolor || '').tolowercase(); function init() { wrapper = ke.$$('div'); wrapper.classname = 'ke-colorpicker'; wrapper.style.top = y + 'px'; wrapper.style.left = x + 'px'; wrapper.style.zindex = z; } init.call(this); this.remove = function() { doc.body.removechild(wrapper); }; this.getelement = function() { function addattr(cell, color, cls) { if (selectedcolor === color.tolowercase()) cls += ' ke-colorpicker-cell-selected'; cell.classname = cls; cell.title = color || ke.lang['nocolor']; cell.onmouseover = function() { this.classname = cls + ' ke-colorpicker-cell-on'; }; cell.onmouseout = function() { this.classname = cls; }; cell.onclick = function() { onclick(color); }; if (color) { var div = ke.$$('div'); div.classname = 'ke-colorpicker-cell-color'; div.style.backgroundcolor = color; cell.appendchild(div); } else { cell.innerhtml = ke.lang['nocolor']; } } var table = ke.$$('table'); table.classname = 'ke-colorpicker-table'; table.cellpadding = 0; table.cellspacing = 0; table.border = 0; var row = table.insertrow(0), cell = row.insertcell(0); cell.colspan = colors[0].length; addattr(cell, '', 'ke-colorpicker-cell-top'); for (var i = 0; i < colors.length; i++) { var row = table.insertrow(i + 1); for (var j = 0; j < colors[i].length; j++) { var color = colors[i][j], cell = row.insertcell(j); addattr(cell, color, 'ke-colorpicker-cell'); } } return table; }; this.create = function() { wrapper.appendchild(this.getelement()); ke.event.bind(wrapper, 'click', function(e){}); ke.event.bind(wrapper, 'mousedown', function(e){}); doc.body.appendchild(wrapper); }; }; ke.menu = function(arg){ function getpos(width, height) { var id = arg.id; var x = 0; var y = 0; if (this.type == 'menu') { var obj = ke.g[id].toolbaricon[arg.cmd]; var pos = ke.util.getelementpos(obj[0]); x = pos.x; y = pos.y + obj[0].offsetheight; } else { var pos = ke.util.getcoords(arg.event); var iframepos = ke.util.getelementpos(ke.g[id].iframe); x = pos.x + iframepos.x; y = pos.y + iframepos.y + 5; } if (width > 0 || height > 0) { var scrollpos = ke.util.getscrollpos(); var docel = ke.util.getdocumentelement(); var maxleft = scrollpos.x + docel.clientwidth - width - 2; if (x > maxleft) x = maxleft; } return {x : x, y : y}; }; function init() { var width = arg.width; this.type = (arg.type && arg.type == 'contextmenu') ? arg.type : 'menu'; var div = ke.$$('div'); div.classname = 'ke-' + this.type; div.setattribute('name', arg.cmd); var pos = getpos.call(this, 0, 0); div.style.top = pos.y + 'px'; div.style.left = pos.x + 'px'; if (arg.width) div.style.width = (/^\d+$/.test(width)) ? width + 'px' : width; ke.event.bind(div, 'click', function(e){}, arg.id); ke.event.bind(div, 'mousedown', function(e){}, arg.id); this.div = div; }; init.call(this); this.add = function(html, event, options) { var height, iconhtml, checked = false; if (options !== undefined) { height = options.height; iconhtml = options.iconhtml; checked = options.checked; } var self = this; var cdiv = ke.$$('div'); cdiv.classname = 'ke-' + self.type + '-item'; if (height) cdiv.style.height = height; var left = ke.$$('div'); left.classname = 'ke-' + this.type + '-left'; var center = ke.$$('div'); center.classname = 'ke-' + self.type + '-center'; if (height) center.style.height = height; var right = ke.$$('div'); right.classname = 'ke-' + this.type + '-right'; if (height) right.style.lineheight = height; cdiv.onmouseover = function() { this.classname = 'ke-' + self.type + '-item ke-' + self.type + '-item-on'; center.classname = 'ke-' + self.type + '-center ke-' + self.type + '-center-on'; }; cdiv.onmouseout = function() { this.classname = 'ke-' + self.type + '-item'; center.classname = 'ke-' + self.type + '-center'; }; cdiv.onclick = event; cdiv.appendchild(left); cdiv.appendchild(center); cdiv.appendchild(right); if (checked) { ke.util.innerhtml(left, ''); } else { if (iconhtml) ke.util.innerhtml(left, iconhtml); } ke.util.innerhtml(right, html); this.append(cdiv); }; this.addseparator = function() { var div = ke.$$('div'); div.classname = 'ke-' + this.type + '-separator'; this.append(div); }; this.append = function(el) { this.div.appendchild(el); }; this.insert = function(html) { ke.util.innerhtml(this.div, html); }; this.hide = function() { ke.hidemenu(arg.id); }; this.show = function() { this.hide(); var id = arg.id; ke.g[id].hidediv.style.display = ''; ke.g[id].hidediv.appendchild(this.div); var pos = getpos.call(this, this.div.clientwidth, this.div.clientheight); this.div.style.top = pos.y + 'px'; this.div.style.left = pos.x + 'px'; }; this.picker = function(color) { var colortable = ke.g[arg.id].colortable; var picker = new ke.colorpicker({ colors : colortable, onclick : function(color) { ke.plugin[arg.cmd].exec(arg.id, color); }, selectedcolor : color }); this.append(picker.getelement()); this.show(); }; }; ke.button = function(arg) { arg = arg || {}; doc = arg.doc || document; var span = ke.$$('span', doc); span.classname = 'ke-button-common ke-button-outer ' + (arg.classname || ''); span.title = arg.text; btn = ke.$$('input', doc); btn.classname = 'ke-button-common ke-button'; btn.type = 'button'; btn.value = arg.text || ''; if (arg.clickfn) { btn.onclick = arg.clickfn; } span.appendchild(btn); return {span : span, btn : btn}; } ke.dialog = function(arg){ var self = this; this.widthmargin = 30; this.heightmargin = 100; this.zindex = 19811214; this.width = arg.width; this.height = arg.height; var mintop, minleft; function setlimitnumber() { var docel = ke.util.getdocumentelement(); var pos = ke.util.getscrollpos(); mintop = pos.y; minleft = pos.x; } function init() { this.beforehide = arg.beforehide; this.afterhide = arg.afterhide; this.beforeshow = arg.beforeshow; this.aftershow = arg.aftershow; this.ondrag = arg.ondrag; } init.call(this); function getpos() { var width = this.width + this.widthmargin; var height = this.height + this.heightmargin; var id = arg.id; var g = ke.g[id]; var x = 0, y = 0; if (g.dialogaligntype == 'page') { var el = ke.util.getdocumentelement(); var scrollpos = ke.util.getscrollpos(); x = math.round(scrollpos.x + (el.clientwidth - width) / 2); y = math.round(scrollpos.y + (el.clientheight - height) / 2); } else { var pos = ke.util.getelementpos(ke.g[id].container); var el = g.container; var xdiff = math.round(el.clientwidth / 2) - math.round(width / 2); var ydiff = math.round(el.clientheight / 2) - math.round(height / 2); x = xdiff < 0 ? pos.x : pos.x + xdiff; y = ydiff < 0 ? pos.y : pos.y + ydiff; } x = x < 0 ? 0 : x; y = y < 0 ? 0 : y; return {x : x, y : y}; }; this.resize = function(width, height) { if (width) this.width = width; if (height) this.height = height; this.hide(); this.show(); }; this.hide = function() { if (this.beforehide) this.beforehide(id); var id = arg.id; var stack = ke.g[id].dialogstack; if (stack[stack.length - 1] != this) return; var dialog = stack.pop(); var iframe = dialog.iframe; iframe.src = 'javascript:false'; iframe.parentnode.removechild(iframe); document.body.removechild(this.div); if (stack.length < 1) { ke.g[id].maskdiv.style.display = 'none'; } ke.event.remove(window, 'resize', setlimitnumber); ke.event.remove(window, 'scroll', setlimitnumber); if (this.afterhide) this.afterhide(id); ke.util.focus(id); }; this.show = function() { if (this.beforeshow) this.beforeshow(id); var self = this; var id = arg.id; var div = ke.$$('div'); div.classname = 'ke-dialog'; ke.event.bind(div, 'click', function(e){}, id); var stack = ke.g[id].dialogstack; if (stack.length > 0) { this.zindex = stack[stack.length - 1].zindex + 1; } div.style.zindex = this.zindex; var pos = getpos.call(this); div.style.top = pos.y + 'px'; div.style.left = pos.x + 'px'; if (ke.g[id].shadowmode) { ke.addclass(div, 'ke-dialog-shadow'); } else { ke.addclass(div, 'ke-dialog-no-shadow'); } var titlediv = ke.$$('div'); titlediv.classname = 'ke-dialog-title'; titlediv.innerhtml = arg.title; var span = ke.$$('span'); span.classname = 'ke-dialog-close'; span.alt = ke.lang['close']; span.title = ke.lang['close']; span.onclick = function () { self.hide(); ke.util.select(id); }; titlediv.appendchild(span); setlimitnumber(); ke.event.add(window, 'resize', setlimitnumber); ke.event.add(window, 'scroll', setlimitnumber); ke.util.drag(id, titlediv, div, function(objtop, objleft, objwidth, objheight, top, left) { if (self.ondrag) self.ondrag(id); setlimitnumber(); top = objtop + top; left = objleft + left; if (top < mintop) top = mintop; if (left < minleft) left = minleft; div.style.top = top + 'px'; div.style.left = left + 'px'; }); div.appendchild(titlediv); var bodydiv = ke.$$('div'); bodydiv.classname = 'ke-dialog-body'; var loadingtable = ke.util.createtable(); loadingtable.table.classname = 'ke-loading-table'; loadingtable.table.style.width = this.width + 'px'; loadingtable.table.style.height = this.height + 'px'; var loadingimg = ke.$$('span'); loadingimg.classname = 'ke-loading-img'; loadingtable.cell.appendchild(loadingimg); var iframe = (ke.g[id].dialogstack.length == 0 && ke.g[id].dialog) ? ke.g[id].dialog : ke.$$('iframe'); if (arg.useframecss) { iframe.classname = 'ke-dialog-iframe ke-dialog-iframe-border'; } else { iframe.classname = 'ke-dialog-iframe'; } iframe.setattribute("frameborder", "0"); iframe.style.width = this.width + 'px'; iframe.style.height = this.height + 'px'; iframe.style.display = 'none'; bodydiv.appendchild(iframe); bodydiv.appendchild(loadingtable.table); div.appendchild(bodydiv); var bottomdiv = ke.$$('div'); bottomdiv.classname = 'ke-dialog-bottom'; var nobutton = null; var yesbutton = null; var previewbutton = null; if (arg.previewbutton) { var btn = ke.button({ classname : 'ke-dialog-preview', text : arg.previewbutton, clickfn : function() { var stack = ke.g[id].dialogstack; if (stack[stack.length - 1] == self) { if (arg.previewclickfn) { arg.previewclickfn(id); } else { ke.plugin[arg.cmd].preview(id); } } } }); previewbutton = btn.btn; bottomdiv.appendchild(btn.span); } if (arg.yesbutton) { var btn = ke.button({ classname : 'ke-dialog-yes', text : arg.yesbutton, clickfn : function() { var stack = ke.g[id].dialogstack; if (stack[stack.length - 1] == self) { if (arg.yesclickfn) { arg.yesclickfn(id); } else { ke.plugin[arg.cmd].exec(id); } } } }); yesbutton = btn.btn; bottomdiv.appendchild(btn.span); } if (arg.nobutton) { var btn = ke.button({ classname : 'ke-dialog-no', text : arg.nobutton, clickfn : function() { self.hide(); ke.util.select(id); } }); nobutton = btn.btn; bottomdiv.appendchild(btn.span); } if (arg.yesbutton || arg.nobutton || arg.previewbutton) { div.appendchild(bottomdiv); } document.body.appendchild(div); ke.event.bind(div, 'mousedown', function(e){}, id); window.focus(); if (arg.html !== undefined) { var dialogdoc = ke.util.getiframedoc(iframe); var html = ke.util.getfullhtml(id); dialogdoc.open(); dialogdoc.write(html); dialogdoc.close(); ke.util.innerhtml(dialogdoc.body, arg.html); } else if (arg.url !== undefined) { iframe.src = arg.url; } else { var param = 'id=' + escape(id) + '&ver=' + escape(ke.version); if (arg.file === undefined) { iframe.src = ke.g[id].pluginspath + arg.cmd + '.html?' + param; } else { param = (/\?/.test(arg.file) ? '&' : '?') + param; iframe.src = ke.g[id].pluginspath + arg.file + param; } } ke.g[id].maskdiv.style.width = ke.util.getdocumentwidth() + 'px'; ke.g[id].maskdiv.style.height = ke.util.getdocumentheight() + 'px'; ke.g[id].maskdiv.style.display = 'block'; this.iframe = iframe; this.loading = loadingtable.table; this.nobutton = nobutton; this.yesbutton = yesbutton; this.previewbutton = previewbutton; this.div = div; ke.g[id].dialogstack.push(this); ke.g[id].dialog = iframe; ke.g[id].yesbutton = yesbutton; ke.g[id].nobutton = nobutton; ke.g[id].previewbutton = previewbutton; if (!arg.loadingmode) ke.util.hideloadingpage(id); if (this.aftershow) this.aftershow(id); if (ke.g[id].afterdialogcreate) ke.g[id].afterdialogcreate(id); }; }; ke.toolbar = { updatestate : function(id) { var cmdlist = [ 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript','superscript', 'bold', 'italic', 'underline', 'strikethrough' ]; for (var i = 0; i < cmdlist.length; i++) { var cmd = cmdlist[i]; var state = false; try { state = ke.g[id].iframedoc.querycommandstate(cmd); } catch(e) {} if (state) { ke.toolbar.select(id, cmd); } else { ke.toolbar.unselect(id, cmd); } } }, isselected : function(id, cmd) { if (ke.plugin[cmd] && ke.plugin[cmd].isselected) return true; else return false; }, select : function(id, cmd) { if (ke.g[id].toolbaricon[cmd]) { var a = ke.g[id].toolbaricon[cmd][0]; a.classname = 'ke-icon ke-icon-selected'; a.onmouseover = null; a.onmouseout = null; } }, unselect : function(id, cmd) { if (ke.g[id].toolbaricon[cmd]) { var a = ke.g[id].toolbaricon[cmd][0]; a.classname = 'ke-icon'; a.onmouseover = function(){ this.classname = 'ke-icon ke-icon-on'; }; a.onmouseout = function(){ this.classname = 'ke-icon'; }; } }, _setattr : function(id, a, cmd) { a.classname = 'ke-icon'; a.href = 'javascript:;'; a.onclick = function(e) { e = e || window.event; var div = ke.g[id].hidediv.firstchild; if (div && div.getattribute('name') == cmd) { ke.hidemenu(id); } else { ke.util.click(id, cmd); } if (e.preventdefault) e.preventdefault(); if (e.stoppropagation) e.stoppropagation(); if (e.cancelbubble !== undefined) e.cancelbubble = true; return false; }; a.onmouseover = function(){ this.classname = 'ke-icon ke-icon-on'; }; a.onmouseout = function(){ this.classname = 'ke-icon'; }; a.hidefocus = true; a.title = ke.lang[cmd]; }, able : function(id, arr) { var self = this; ke.each(ke.g[id].toolbaricon, function(cmd, obj) { if (!ke.util.inarray(cmd, arr)) { var a = obj[0]; var span = obj[1]; self._setattr(id, a, cmd); ke.util.setopacity(span, 100); } }); }, disable : function(id, arr) { ke.each(ke.g[id].toolbaricon, function(cmd, obj) { if (!ke.util.inarray(cmd, arr)) { var a = obj[0]; var span = obj[1]; a.classname = 'ke-icon ke-icon-disabled'; ke.util.setopacity(span, 50); a.onclick = null; a.onmouseover = null; a.onmouseout = null; } }); }, create : function(id) { var self = this; var defaultitemhash = ke.util.arraytohash(ke.setting.items); ke.g[id].toolbaricon = []; var tableobj = ke.util.createtable(); var toolbar = tableobj.table; toolbar.classname = 'ke-toolbar'; toolbar.oncontextmenu = function() { return false; }; toolbar.onmousedown = function() { return false; }; toolbar.onmousemove = function() { return false; }; var toolbarcell = tableobj.cell; var length = ke.g[id].items.length; var cellnum = 0; var row; ke.g[id].toolbarheight = ke.g[id].toolbarlineheight; for (var i = 0; i < length; i++) { var cmd = ke.g[id].items[i]; if (i == 0 || cmd == '-') { var table = ke.$$('table'); table.cellpadding = 0; table.cellspacing = 0; table.border = 0; table.classname = 'ke-toolbar-table'; row = table.insertrow(0); cellnum = 0; toolbarcell.appendchild(table); if (cmd == '-') { ke.g[id].toolbarheight += ke.g[id].toolbarlineheight; continue; } } var cell = row.insertcell(cellnum); cell.hideforcus = true; cellnum++; if (cmd == '|') { var div = ke.$$('div'); div.classname = 'ke-toolbar-separator'; cell.appendchild(div); continue; } var a = ke.$$('a'); a.tabindex = -1; self._setattr(id, a, cmd); var span = ke.$$('span'); if (typeof defaultitemhash[cmd] == 'undefined') { span.classname = 'ke-common-icon ke-icon-' + cmd; } else { span.classname = 'ke-common-icon ke-common-icon-url ke-icon-' + cmd; } a.appendchild(span); cell.appendchild(a); ke.g[id].toolbaricon[cmd] = [a, span]; if (ke.toolbar.isselected(id, cmd)) ke.toolbar.select(id, cmd); } return toolbar; } }; ke.history = { addstackdata : function(stack, data) { var prev = ''; if (stack.length > 0) { prev = stack[stack.length - 1]; } if (stack.length == 0 || data !== prev) stack.push(data); }, add : function(id, minchangesize) { var g = ke.g[id]; var html = ke.util.getsrcdata(id); if (g.undostack.length > 0) { var prevhtml = g.undostack[g.undostack.length - 1]; if (math.abs(html.length - prevhtml.length) < minchangesize) return; } this.addstackdata(g.undostack, html); }, undo : function(id) { var g = ke.g[id]; if (g.undostack.length == 0) return; var html = ke.util.getsrcdata(id); this.addstackdata(g.redostack, html); var prevhtml = g.undostack.pop(); if (html === prevhtml && g.undostack.length > 0) { prevhtml = g.undostack.pop(); } prevhtml = ke.util.todata(id, prevhtml); if (g.wyswygmode) { ke.util.innerhtml(g.iframedoc.body, ke.util.execsethtmlhooks(id, prevhtml)); } else { g.newtextarea.value = prevhtml; } }, redo : function(id) { var g = ke.g[id]; if (g.redostack.length == 0) return; var html = ke.util.getsrcdata(id); this.addstackdata(g.undostack, html); var nexthtml = g.redostack.pop(); nexthtml = ke.util.todata(id, nexthtml); if (g.wyswygmode) { ke.util.innerhtml(g.iframedoc.body, ke.util.execsethtmlhooks(id, nexthtml)); } else { g.newtextarea.value = nexthtml; } } }; ke.readonly = function(id, isreadonly) { isreadonly = isreadonly == undefined ? true : isreadonly; var g = ke.g[id]; if (ke.browser.ie) g.iframedoc.body.contenteditable = isreadonly ? 'false' : 'true'; else g.iframedoc.designmode = isreadonly ? 'off' : 'on'; }; ke.focus = function(id, position) { position = (position || '').tolowercase(); if (!ke.g[id].container) return; ke.util.focus(id); if (position === 'end') { ke.util.setselection(id); if (!ke.g[id].sel) return; //issue #120: sometimes firefox does not get selection var sel = ke.g[id].kesel, range = ke.g[id].kerange, doc = ke.g[id].iframedoc; range.selecttextnode(doc.body); range.collapse(false); sel.addrange(range); } }; ke.blur = function(id) { var g = ke.g[id]; if (!g.container) return; if (ke.browser.ie) { var input = ke.$$('input'); input.type = 'text'; g.container.appendchild(input); input.focus(); g.container.removechild(input); } else { g.wyswygmode ? g.iframewin.blur() : g.newtextarea.blur(); } }; ke.html = function(id, val) { if (val === undefined) { return ke.util.getdata(id); } else { if (!ke.g[id].container) return; ke.util.setfullhtml(id, val); ke.focus(id); } }; ke.text = function(id, val) { if (val === undefined) { val = ke.html(id); val = val.replace(/<.*?>/ig, ''); val = val.replace(/ /ig, ' '); val = ke.util.trim(val); return val; } else { ke.html(id, ke.util.escape(val)); } }; ke.inserthtml = function(id, val) { if (!ke.g[id].container) return; var range = ke.g[id].range; if (!range) { ke.appendhtml(id, val); } else { ke.focus(id); ke.util.selection(id); ke.util.inserthtml(id, val); } }; ke.appendhtml = function(id, val) { ke.html(id, ke.html(id) + val); }; ke.isempty = function(id) { return ke.util.isempty(id); }; ke.selectedhtml = function(id) { var range = ke.g[id].range; if (!range) return ''; var html = ''; if (ke.browser.ie) { if (range.item) { html = range.item(0).outerhtml; } else { html = range.htmltext; } } else { var temp = ke.$$('div', ke.g[id].iframedoc); temp.appendchild(range.clonecontents()); html = temp.innerhtml; } return ke.util.todata(id, html); }; ke.count = function(id, mode) { mode = (mode || 'html').tolowercase(); if (mode === 'html') { return ke.html(id).length; } else if (mode === 'text') { var data = ke.util.getpuredata(id); data = data.replace(/<(?:img|embed).*?>/ig, 'k'); data = data.replace(/\r\n|\n|\r/g, ''); data = ke.util.trim(data); return data.length; } return 0; }; ke.sync = function(id) { return ke.util.setdata(id); }; ke.remove = function(id, mode) { var g = ke.g[id]; if (!g.container) return false; mode = (typeof mode == "undefined") ? 0 : mode; ke.util.setdata(id); var container = g.container; var eventstack = g.eventstack; for (var i = 0, len = eventstack.length; i < len; i++) { var item = eventstack[i]; if (item) ke.event.remove(item.el, item.type, item.fn, id); } g.iframedoc.src = 'javascript:false'; g.iframe.parentnode.removechild(g.iframe); if (mode == 1) { document.body.removechild(container); } else { var srctextarea = g.srctextarea; srctextarea.parentnode.removechild(container); if (mode == 0) srctextarea.style.display = ''; } document.body.removechild(g.hidediv); document.body.removechild(g.maskdiv); g.container = null; g.dialogstack = []; g.contextmenuitems = []; g.gethtmlhooks = []; g.sethtmlhooks = []; g.onchangehandlerstack = []; g.eventstack = []; }; ke.create = function(id, mode) { if (ke.g[id].beforecreate) ke.g[id].beforecreate(id); if (ke.browser.ie && ke.browser.version < 7) try { document.execcommand('backgroundimagecache', false, true); }catch(e){} var srctextarea = ke.$(id) || document.getelementsbyname(id)[0]; mode = (typeof mode == "undefined") ? 0 : mode; if (mode == 0 && ke.g[id].container) return; var width = ke.g[id].width || srctextarea.style.width || srctextarea.offsetwidth + 'px'; var height = ke.g[id].height || srctextarea.style.height || srctextarea.offsetheight + 'px'; var tableobj = ke.util.createtable(); var container = tableobj.table; container.classname = 'ke-container'; container.style.width = width; container.style.height = height; var toolbarouter = tableobj.cell; toolbarouter.classname = 'ke-toolbar-outer'; var textareaouter = container.insertrow(1).insertcell(0); textareaouter.classname = 'ke-textarea-outer'; tableobj = ke.util.createtable(); var textareatable = tableobj.table; textareatable.classname = 'ke-textarea-table'; var textareacell = tableobj.cell; textareaouter.appendchild(textareatable); var bottomouter = container.insertrow(2).insertcell(0); bottomouter.classname = 'ke-bottom-outer'; srctextarea.style.display = 'none'; if (mode == 1) document.body.appendchild(container); else srctextarea.parentnode.insertbefore(container, srctextarea); var toolbartable = ke.toolbar.create(id); toolbartable.style.height = ke.g[id].toolbarheight + 'px'; toolbarouter.appendchild(toolbartable); var iframe = ke.g[id].iframe || ke.$$('iframe'); iframe.tabindex = ke.g[id].tabindex || srctextarea.tabindex; iframe.classname = 'ke-iframe'; iframe.setattribute("frameborder", "0"); var newtextarea = ke.$$('textarea'); newtextarea.tabindex = iframe.tabindex; newtextarea.classname = 'ke-textarea'; newtextarea.style.display = 'none'; ke.g[id].container = container; ke.g[id].iframe = iframe; ke.g[id].newtextarea = newtextarea; ke.util.resize(id, width, height); textareacell.appendchild(iframe); textareacell.appendchild(newtextarea); var bottom = ke.$$('table'); bottom.classname = 'ke-bottom'; bottom.cellpadding = 0; bottom.cellspacing = 0; bottom.border = 0; bottom.style.height = ke.g[id].statusbarheight + 'px'; var row = bottom.insertrow(0); var bottomleft = row.insertcell(0); bottomleft.classname = 'ke-bottom-left'; var leftimg = ke.$$('span'); leftimg.classname = 'ke-bottom-left-img'; if (ke.g[id].config.resizemode == 0 || mode == 1) { bottomleft.style.cursor = 'default'; leftimg.style.visibility = 'hidden'; } bottomleft.appendchild(leftimg); var bottomright = row.insertcell(1); bottomright.classname = 'ke-bottom-right'; var rightimg = ke.$$('span'); rightimg.classname = 'ke-bottom-right-img'; if (ke.g[id].config.resizemode == 0 || mode == 1) { bottomright.style.cursor = 'default'; rightimg.style.visibility = 'hidden'; } else if (ke.g[id].config.resizemode == 1) { bottomright.style.cursor = 's-resize'; rightimg.style.visibility = 'hidden'; } bottomright.appendchild(rightimg); bottomouter.appendchild(bottom); var hidediv = ke.$$('div'); hidediv.classname = 'ke-reset'; hidediv.style.display = 'none'; var maskdiv = ke.$$('div'); maskdiv.classname = 'ke-mask'; ke.util.setopacity(maskdiv, 50); ke.event.bind(maskdiv, 'click', function(e){}, id); ke.event.bind(maskdiv, 'mousedown', function(e){}, id); document.body.appendchild(hidediv); document.body.appendchild(maskdiv); ke.util.setdefaultplugin(id); var iframewin = iframe.contentwindow; var iframedoc = ke.util.getiframedoc(iframe); if (!ke.browser.ie) iframedoc.designmode = 'on'; var html = ke.util.getfullhtml(id); iframedoc.open(); iframedoc.write(html); iframedoc.close(); if (!ke.g[id].wyswygmode) { newtextarea.value = ke.util.execsethtmlhooks(id, srctextarea.value); newtextarea.style.display = 'block'; iframe.style.display = 'none'; ke.toolbar.disable(id, ['source', 'fullscreen']); ke.toolbar.select(id, 'source'); } if (ke.g[id].synctype == 'form') { var el = srctextarea; while ((el = el.parentnode)) { if (el.nodename.tolowercase() == 'form') { ke.event.add(el, 'submit', function() { ke.sync(id); }, id); break; } } } function hidemenu() { ke.hidemenu(id); } function updatetoolbar() { ke.toolbar.updatestate(id); } if (ke.browser.webkit) { ke.event.add(iframedoc, 'click', function(e) { ke.util.selectimagewebkit(id, e, true); }, id); } if (ke.browser.ie) { ke.event.add(iframedoc, 'keydown', function(e) { if (e.keycode == 8) { var range = ke.g[id].range; if (range.item) { var item = range.item(0); item.parentnode.removechild(item); ke.util.execonchangehandler(id); ke.event.stop(id); return false; } } }, id); } function afterfocus() { if (ke.g[id].afterfocus) ke.g[id].afterfocus(id); } function afterblur() { if (ke.g[id].afterblur) ke.g[id].afterblur(id); } ke.event.add(iframedoc, 'mousedown', hidemenu, id); ke.event.add(iframedoc, 'click', updatetoolbar, id); ke.event.input(iframedoc, updatetoolbar, id); ke.event.bind(newtextarea, 'click', hidemenu, id); ke.event.add(document, 'click', hidemenu, id); ke.event.add(iframewin, 'focus', afterfocus); ke.event.add(newtextarea, 'focus', afterfocus); ke.event.add(iframewin, 'blur', afterblur); ke.event.add(newtextarea, 'blur', afterblur); ke.g[id].toolbartable = toolbartable; ke.g[id].textareatable = textareatable; ke.g[id].srctextarea = srctextarea; ke.g[id].bottom = bottom; ke.g[id].hidediv = hidediv; ke.g[id].maskdiv = maskdiv; ke.g[id].iframewin = iframewin; ke.g[id].iframedoc = iframedoc; ke.g[id].width = width; ke.g[id].height = height; ke.util.drag(id, bottomright, container, function(objtop, objleft, objwidth, objheight, top, left) { if (ke.g[id].resizemode == 2) ke.util.resize(id, (objwidth + left) + 'px', (objheight + top) + 'px', true); else if (ke.g[id].resizemode == 1) ke.util.resize(id, objwidth + 'px', (objheight + top) + 'px', true, false); }); ke.util.drag(id, bottomleft, container, function(objtop, objleft, objwidth, objheight, top, left) { if (ke.g[id].resizemode > 0) ke.util.resize(id, objwidth + 'px', (objheight + top) + 'px', true, false); }); ke.each(ke.plugin, function(cmd, plugin) { if (plugin.init) plugin.init(id); }); ke.g[id].gethtmlhooks.push(function(html) { html = html.replace(/(<[^>]*)kesrc="([^"]+)"([^>]*>)/ig, function(full, start, src, end) { full = full.replace(/(\s+(?:href|src)=")[^"]+(")/i, '$1' + src + '$2'); full = full.replace(/\s+kesrc="[^"]+"/i, ''); return full; }); html = html.replace(/(<[^>]+\s)ke-(on\w+="[^"]+"[^>]*>)/ig, function(full, start, end) { return start + end; }); return html; }); ke.g[id].sethtmlhooks.push(function(html) { html = html.replace(/(<[^>]*)(href|src)="([^"]+)"([^>]*>)/ig, function(full, start, key, src, end) { if (full.match(/\skesrc="[^"]+"/i)) return full; full = start + key + '="' + src + '"' + ' kesrc="' + src + '"' + end; return full; }); html = html.replace(/(<[^>]+\s)(on\w+="[^"]+"[^>]*>)/ig, function(full, start, end) { return start + 'ke-' + end; }); return html; }); ke.util.addcontextmenuevent(id); ke.util.addnewlineevent(id); ke.util.addtabevent(id); function setselectionhandler() { ke.util.setselection(id); } ke.event.input(iframedoc, setselectionhandler, id); ke.event.add(iframedoc, 'mouseup', setselectionhandler, id); ke.event.add(document, 'mousedown', setselectionhandler, id); ke.onchange(id, function(id) { if (ke.g[id].autosetdatamode || ke.g[id].synctype == 'auto') { ke.util.setdata(id); if (ke.g[id].aftersetdata) ke.g[id].aftersetdata(id); } if (ke.g[id].afterchange) ke.g[id].afterchange(id); ke.history.add(id, ke.g[id].minchangesize); }); if (ke.browser.ie) { iframedoc.body.disabled = true; ke.readonly(id, false); iframedoc.body.removeattribute('disabled'); } ke.util.setfullhtml(id, srctextarea.value); ke.history.add(id, 0); if (mode > 0) ke.util.focus(id); if (ke.g[id].aftercreate) ke.g[id].aftercreate(id); }; ke.onchange = function(id, func) { var g = ke.g[id]; function handler() { func(id); }; g.onchangehandlerstack.push(handler); ke.event.input(g.iframedoc, handler, id); ke.event.input(g.newtextarea, handler, id); ke.event.add(g.iframedoc, 'mouseup', function(e) { window.settimeout(function() { func(id); }, 0); }, id); }; var _needstyle = true; ke.init = function(args) { var g = ke.g[args.id] = args; g.config = {}; g.undostack = []; g.redostack = []; g.dialogstack = []; g.contextmenuitems = []; g.gethtmlhooks = []; g.sethtmlhooks = []; g.onchangehandlerstack = []; g.eventstack = []; ke.each(ke.setting, function(key, val) { g[key] = (typeof args[key] == 'undefined') ? val : args[key]; g.config[key] = g[key]; }); if (g.loadstylemode && _needstyle) { ke.util.loadstyle(g.skinspath + g.skintype + '.css'); _needstyle = false; } } ke.show = function(args) { ke.init(args); ke.event.ready(function() { ke.create(args.id); }); }; if (window.ke === undefined) window.ke = ke; window.kindeditor = ke; })(); (function (ke, undefined) { ke.langtype = 'zh_cn'; ke.lang = { source : 'html代码', undo : '后退(ctrl+z)', redo : '前进(ctrl+y)', cut : '剪切(ctrl+x)', copy : '复制(ctrl+c)', paste : '粘贴(ctrl+v)', plainpaste : '粘贴为无格式文本', wordpaste : '从word粘贴', selectall : '全选', justifyleft : '左对齐', justifycenter : '居中', justifyright : '右对齐', justifyfull : '两端对齐', insertorderedlist : '编号', insertunorderedlist : '项目符号', indent : '增加缩进', outdent : '减少缩进', subscript : '下标', superscript : '上标', title : '标题', fontname : '字体', fontsize : '文字大小', textcolor : '文字颜色', bgcolor : '文字背景', bold : '粗体(ctrl+b)', italic : '斜体(ctrl+i)', underline : '下划线(ctrl+u)', strikethrough : '删除线', removeformat : '删除格式', image : '图片', flash : '插入flash', media : '插入多媒体', table : '插入表格', hr : '插入横线', emoticons : '插入表情', link : '超级链接', unlink : '取消超级链接', fullscreen : '全屏显示', about : '关于', print : '打印', filemanager : '浏览服务器', advtable : '表格', tablecell : '单元格', yes : '确定', no : '取消', close : '关闭', editimage : '图片属性', deleteimage : '删除图片', editlink : '超级链接属性', deletelink : '取消超级链接', tableprop : '表格属性', tablecellprop : '单元格属性', tableinsert : '插入表格', tabledelete : '删除表格', tablecolinsertleft : '左侧插入列', tablecolinsertright : '右侧插入列', tablerowinsertabove : '上方插入行', tablerowinsertbelow : '下方插入行', tablecoldelete : '删除列', tablerowdelete : '删除行', nocolor : '无颜色', invalidimg : "请输入有效的url地址。\n只允许jpg,gif,bmp,png格式。", invalidmedia : "请输入有效的url地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。", invalidwidth : "宽度必须为数字。", invalidheight : "高度必须为数字。", invalidborder : "边框必须为数字。", invalidurl : "请输入有效的url地址。", invalidrows : '行数为必选项,只允许输入大于0的数字。', invalidcols : '列数为必选项,只允许输入大于0的数字。', invalidpadding : '边距必须为数字。', invalidspacing : '间距必须为数字。', invalidborder : '边框必须为数字。', pleaseinput : "请输入内容。", invalidjson : '服务器发生故障。', cuterror : '您的浏览器安全设置不允许使用剪切操作,请使用快捷键(ctrl+x)来完成。', copyerror : '您的浏览器安全设置不允许使用复制操作,请使用快捷键(ctrl+c)来完成。', pasteerror : '您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(ctrl+v)来完成。', preview : '预览', date : '插入日期', time : '插入时间', specialchar : '插入特殊字符', nextpage : "插入分页符", fieldset : "插入栏目框", fieldsetwidth : "栏目框宽度必须为数字", fieldborder : "栏目框边框粗细必须为数字", insertiframe : "插入框架网页", iframewidth : "框架宽度必须为数字", iframeheight : "框架高度必须为数字", iframesrcnull : "框架页地址不能为空", layer : '插入层' }; var plugins = ke.lang.plugins = {}; plugins.about = { version : ke.version, title : 'html可视化编辑器' }; plugins.plainpaste = { comment : '请使用快捷键(ctrl+v)把内容粘贴到下面的方框里。' }; plugins.wordpaste = { comment : '请使用快捷键(ctrl+v)把内容粘贴到下面的方框里。' }; plugins.link = { url : 'url地址', linktype : '打开类型', newwindow : '新窗口', selfwindow : '当前窗口' }; plugins.flash = { url : 'flash地址', width : '宽度', height : '高度' }; plugins.media = { url : '媒体文件地址', width : '宽度', height : '高度', autostart : '自动播放' }; plugins.image = { remoteimage : '远程图片', localimage : '本地上传', remoteurl : '图片地址', localurl : '图片地址', size : '图片大小', width : '宽', height : '高', resetsize : '重置大小', align : '对齐方式', defaultalign : '默认方式', leftalign : '左对齐', rightalign : '右对齐', imgtitle : '图片说明', viewserver : '浏览...' }; plugins.file_manager = { emptyfolder : '空文件夹', moveup : '移到上一级文件夹', viewtype : '显示方式:', viewimage : '缩略图', listimage : '详细信息', ordertype : '排序方式:', filename : '名称', filesize : '大小', filetype : '类型' }; plugins.advtable = { cells : '单元格数', rows : '行数', cols : '列数', size : '大小', width : '宽度', height : '高度', percent : '%', px : 'px', space : '边距间距', padding : '边距', spacing : '间距', align : '对齐方式', textalign : '水平对齐', verticalalign : '垂直对齐', aligndefault : '默认', alignleft : '左对齐', aligncenter : '居中', alignright : '右对齐', aligntop : '顶部', alignmiddle : '中部', alignbottom : '底部', alignbaseline : '基线', border : '边框', borderwidth : '边框', bordercolor : '颜色', backgroundcolor : '背景颜色' }; plugins.title = { h1 : '标题 1', h2 : '标题 2', h3 : '标题 3', h4 : '标题 4', p : '正 文' }; plugins.fontname = { fontname : { 'simsun' : '宋体', 'nsimsun' : '新宋体', 'fangsong_gb2312' : '仿宋_gb2312', 'kaiti_gb2312' : '楷体_gb2312', 'simhei' : '黑体', 'microsoft yahei' : '微软雅黑', 'arial' : 'arial', 'arial black' : 'arial black', 'times new roman' : 'times new roman', 'courier new' : 'courier new', 'tahoma' : 'tahoma', 'verdana' : 'verdana' } }; })(kindeditor); (function (ke, undefined) { ke.plugin.about = { click : function(id) { ke.util.selection(id); var dialog = new ke.dialog({ id : id, cmd : 'about', file : 'about.html', width : 380, height : 100, loadingmode : true, title : ke.lang['about'], nobutton : ke.lang['close'] }); dialog.show(); } }; ke.plugin.undo = { init : function(id) { ke.event.ctrl(ke.g[id].iframedoc, 'z', function(e) { ke.plugin['undo'].click(id); ke.util.focus(id); }, id); ke.event.ctrl(ke.g[id].newtextarea, 'z', function(e) { ke.plugin['undo'].click(id); ke.util.focus(id); }, id); }, click : function(id) { ke.history.undo(id); ke.util.execonchangehandler(id); } }; ke.plugin.redo = { init : function(id) { ke.event.ctrl(ke.g[id].iframedoc, 'y', function(e) { ke.plugin['redo'].click(id); ke.util.focus(id); }, id); ke.event.ctrl(ke.g[id].newtextarea, 'y', function(e) { ke.plugin['redo'].click(id); ke.util.focus(id); }, id); }, click : function(id) { ke.history.redo(id); ke.util.execonchangehandler(id); } }; ke.plugin.cut = { click : function(id) { try { if (!ke.g[id].iframedoc.querycommandsupported('cut')) throw 'e'; } catch(e) { alert(ke.lang.cuterror); return; } ke.util.execcommand(id, 'cut', null); } }; ke.plugin.copy = { click : function(id) { try { if (!ke.g[id].iframedoc.querycommandsupported('copy')) throw 'e'; } catch(e) { alert(ke.lang.copyerror); return; } ke.util.execcommand(id, 'copy', null); } }; ke.plugin.paste = { click : function(id) { try { if (!ke.g[id].iframedoc.querycommandsupported('paste')) throw 'e'; } catch(e) { alert(ke.lang.pasteerror); return; } ke.util.execcommand(id, 'paste', null); } }; ke.plugin.plainpaste = { click : function(id) { ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : 'plainpaste', file : 'plainpaste.html', width : 450, height : 300, loadingmode : true, title : ke.lang['plainpaste'], yesbutton : ke.lang['yes'], nobutton : ke.lang['no'] }); this.dialog.show(); }, exec : function(id) { var dialogdoc = ke.util.getiframedoc(this.dialog.iframe); var html = ke.$('textarea', dialogdoc).value; html = ke.util.escape(html); html = html.replace(/ /g, ' '); if (ke.g[id].newlinetag == 'p') { html = html.replace(/^/, '
').replace(/$/, '
').replace(/\r\n|\n|\r/g, '');
} else {
html = html.replace(/\r\n|\n|\r/g, '
$&');
}
ke.util.inserthtml(id, html);
this.dialog.hide();
ke.util.focus(id);
}
};
ke.plugin.wordpaste = {
click : function(id) {
ke.util.selection(id);
this.dialog = new ke.dialog({
id : id,
cmd : 'wordpaste',
file : 'wordpaste.html',
width : 450,
height : 300,
loadingmode : true,
title : ke.lang['wordpaste'],
yesbutton : ke.lang['yes'],
nobutton : ke.lang['no']
});
this.dialog.show();
},
exec : function(id) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var wordiframe = ke.$('wordiframe', dialogdoc);
var str = ke.util.getiframedoc(wordiframe).body.innerhtml;
str = str.replace(//ig, "");
str = str.replace(//ig, "");
str = str.replace(/