/*******************************************************************************
* kindeditor - wysiwyg html editor for internet
* copyright (c) 2006-2010 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 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 (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(html);
}
} else if (ke.browser.gecko && ke.browser.version < 3) {
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) {
ke.event.add(ke.g[id].iframedoc, 'keydown', function(e) {
if (e.keycode == 9) {
ke.util.setselection(id);
ke.util.inserthtml(id, ' ');
ke.event.stop(e);
return false;
}
}, id);
},
addcontextmenuevent : function(id) {
var g = ke.g[id];
if (g.contextmenuitems.length == 0) 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.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);
ke.event.bind(div, 'mousedown', 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';
var contentcell;
if (ke.g[id].shadowmode) {
var table = ke.$$('table');
table.classname = 'ke-dialog-table';
table.cellpadding = 0;
table.cellspacing = 0;
table.border = 0;
var rownames = ['t', 'm', 'b'];
var colnames = ['l', 'c', 'r'];
for (var i = 0, len = 3; i < len; i++) {
var row = table.insertrow(i);
for (var j = 0, l = 3; j < l; j++) {
var cell = row.insertcell(j);
cell.classname = 'ke-' + rownames[i] + colnames[j];
if (i == 1 && j == 1) contentcell = cell;
else cell.innerhtml = '';
}
}
div.appendchild(table);
} else {
ke.addclass(div, 'ke-dialog-no-shadow');
contentcell = div;
}
var titlediv = ke.$$('div');
titlediv.classname = 'ke-dialog-title';
titlediv.innerhtml = arg.title;
var span = ke.$$('span');
span.classname = 'ke-dialog-close';
if (ke.g[id].shadowmode) ke.addclass(span, 'ke-dialog-close-shadow');
else ke.addclass(span, 'ke-dialog-close-no-shadow');
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';
});
contentcell.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);
contentcell.appendchild(bodydiv);
var bottomdiv = ke.$$('div');
bottomdiv.classname = 'ke-dialog-bottom';
var nobutton = null;
var yesbutton = null;
var previewbutton = null;
if (arg.previewbutton) {
previewbutton = ke.$$('input');
previewbutton.classname = 'ke-button ke-dialog-preview';
previewbutton.type = 'button';
previewbutton.name = 'previewbutton';
previewbutton.value = arg.previewbutton;
previewbutton.onclick = function() {
var stack = ke.g[id].dialogstack;
if (stack[stack.length - 1] == self) {
ke.plugin[arg.cmd].preview(id);
}
};
bottomdiv.appendchild(previewbutton);
}
if (arg.yesbutton) {
yesbutton = ke.$$('input');
yesbutton.classname = 'ke-button ke-dialog-yes';
yesbutton.type = 'button';
yesbutton.name = 'yesbutton';
yesbutton.value = arg.yesbutton;
yesbutton.onclick = function() {
var stack = ke.g[id].dialogstack;
if (stack[stack.length - 1] == self) {
ke.plugin[arg.cmd].exec(id);
}
};
bottomdiv.appendchild(yesbutton);
}
if (arg.nobutton) {
nobutton = ke.$$('input');
nobutton.classname = 'ke-button ke-dialog-no';
nobutton.type = 'button';
nobutton.name = 'nobutton';
nobutton.value = arg.nobutton;
nobutton.onclick = function () {
self.hide();
ke.util.select(id);
};
bottomdiv.appendchild(nobutton);
}
if (arg.yesbutton || arg.nobutton || arg.previewbutton) {
contentcell.appendchild(bottomdiv);
}
document.body.appendchild(div);
window.focus();
if (yesbutton) yesbutton.focus();
else if (nobutton) nobutton.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.util.createtable().table;
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');
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.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, 'end');
}
};
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.focus(id, 'end');
};
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.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.classname = 'ke-iframe';
iframe.setattribute("frameborder", "0");
var newtextarea = ke.$$('textarea');
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 || ke.browser.version < 8) 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');
}
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);
}
ke.event.add(iframedoc, 'click', 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.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) {
return 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;
});
});
ke.g[id].sethtmlhooks.push(function(html) {
return 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;
});
});
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.util.setdata(id);
if (ke.g[id].aftersetdata) ke.g[id].aftersetdata(id);
}
ke.history.add(id, ke.g[id].minchangesize);
});
if (ke.browser.ie && ke.browser.version > 7) ke.readonly(id, false);
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);
};
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) ke.util.loadstyle(g.skinspath + g.skintype + '.css');
}
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浠g爜',
undo : '鍚庨€€(ctrl+z)',
redo : '鍓嶈繘(ctrl+y)',
cut : '鍓垏(ctrl+x)',
copy : '澶嶅埗(ctrl+c)',
paste : '绮樿创(ctrl+v)',
plainpaste : '绮樿创涓烘棤鏍煎紡鏂囨湰',
wordpaste : '浠嶹ord绮樿创',
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 : '琛ㄦ牸',
yes : '纭畾',
no : '鍙栨秷',
close : '鍏抽棴',
editimage : '鍥剧墖灞炴€?,
deleteimage : '鍒犻櫎鍥剧墖',
editlink : '瓒呯骇閾炬帴灞炴€?,
deletelink : '鍙栨秷瓒呯骇閾炬帴',
tableprop : '琛ㄦ牸灞炴€?,
tableinsert : '鎻掑叆琛ㄦ牸',
tabledelete : '鍒犻櫎琛ㄦ牸',
tablecolinsertleft : '宸︿晶鎻掑叆鍒?,
tablecolinsertright : '鍙充晶鎻掑叆鍒?,
tablerowinsertabove : '涓婃柟鎻掑叆琛?,
tablerowinsertbelow : '涓嬫柟鎻掑叆琛?,
tablecoldelete : '鍒犻櫎鍒?,
tablerowdelete : '鍒犻櫎琛?,
nocolor : '鏃犻鑹?,
invalidimg : "璇疯緭鍏ユ湁鏁堢殑url鍦板潃銆俓n鍙厑璁竕pg,gif,bmp,png鏍煎紡銆?,
invalidmedia : "璇疯緭鍏ユ湁鏁堢殑url鍦板潃銆俓n鍙厑璁竤wf,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 : '鏈嶅姟鍣ㄥ彂鐢熸晠闅溿€?,
//add by it骞虫皯
file : '鎻掑叆闄勪欢',
invalidfile : "璇疯緭鍏ユ湁鏁堢殑url鍦板潃銆俓n\n鍙厑璁竏oc,docx,rar,zip,7z,xls,xlsx,pdf,ppt,flv鏍煎紡銆?,
page:'鎻掑叆鍒嗛〉绗?,
quotecode:'鎻掑叆寮曠敤',
runcode:'鎻掑叆浠g爜',
flv:'鎻掑叆flv',
//add over
cuterror : '鎮ㄧ殑娴忚鍣ㄥ畨鍏ㄨ缃笉鍏佽浣跨敤鍓垏鎿嶄綔锛岃浣跨敤蹇嵎閿?ctrl+x)鏉ュ畬鎴愩€?,
copyerror : '鎮ㄧ殑娴忚鍣ㄥ畨鍏ㄨ缃笉鍏佽浣跨敤澶嶅埗鎿嶄綔锛岃浣跨敤蹇嵎閿?ctrl+c)鏉ュ畬鎴愩€?,
pasteerror : '鎮ㄧ殑娴忚鍣ㄥ畨鍏ㄨ缃笉鍏佽浣跨敤绮樿创鎿嶄綔锛岃浣跨敤蹇嵎閿?ctrl+v)鏉ュ畬鎴愩€?
};
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 : '楂樺害'
};
//flv
plugins.flv = {
url : 'flv鍦板潃',
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 : '瀵归綈鏂瑰紡',
aligndefault : '榛樿',
alignleft : '宸﹀榻?,
aligncenter : '灞呬腑',
alignright : '鍙冲榻?,
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['file'] = {
click : function(id) {
ke.util.selection(id);
this.dialog = new ke.dialog({
id : id,
cmd : 'file',
width : 310,
height : 60,
title : ke.lang['file'],
yesbutton : ke.lang['yes'],
nobutton : ke.lang['no']
});
this.dialog.show();
},
check : function(id) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var url = '';
url = ke.$('imgfile', dialogdoc).value;
if (url.match(/\.(doc|xls|ppt|pdf|rar|zip|7z|docx|xlsx|flv)$/i) == null) {
alert(ke.lang['invalidfile']);
window.focus();
ke.g[id].yesbutton.focus();
return false;
}
return true;
},
exec : function(id) {
var self = this;
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var title = ke.$('imgtitle', dialogdoc).value;
if (!this.check(id)) return false;
ke.$('editorid', dialogdoc).value = id;
var uploadiframe = ke.$('uploadiframe', dialogdoc);
ke.util.showloadingpage(id);
var onloadfunc = function() {
ke.event.remove(uploadiframe, 'load', onloadfunc);
ke.util.hideloadingpage(id);
var uploaddoc = ke.util.getiframedoc(uploadiframe);
var data = '';
try {
data = ke.util.parsejson(uploaddoc.body.innerhtml);
} catch(e) {
alert(ke.lang.invalidjson);
}
if (typeof data === 'object' && 'error' in data) {
if (data.error === 0) {
self.insert(id, data.url, title);
} else {
alert(data.message);
return false;
}
}
};
ke.event.add(uploadiframe, 'load', onloadfunc);
dialogdoc.uploadform.submit();
return;
},
insert : function(id, url, title) {
var html = '';
html += '
';
if (title){html += title}else{html += url};
html += '';
ke.util.inserthtml(id, html);
this.dialog.hide();
ke.util.focus(id);
}
};
//闄勪欢閮ㄥ垎缁撴潫,鍒嗛〉绗﹀紑濮?
ke.plugin['page'] = {
click : function(id) {
ke.util.selection(id);
ke.util.inserthtml(id, '$show_page$');
ke.util.focus(id);
}
};
//鍒嗛〉绗﹂儴鍒嗙粨鏉?寮曠敤寮€濮?
ke.plugin['quotecode'] = {
click : function(id) {
ke.util.selection(id);
this.dialog = new ke.dialog({
id : id,
cmd : 'quotecode',
file : 'quotecode.html',
width : 450,
height : 300,
loadingmode : true,
title : ke.lang['quotecode'],
yesbutton : ke.lang['yes'],
nobutton : ke.lang['no']
});
this.dialog.show();
},
exec : function(id) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var title = ke.$('title', dialogdoc).value;
var content = ke.$('textarea', dialogdoc).value;
if(title!=''&&content!='')
{
var html='[quote title="';
html+=title;
html+='"]';
html+=content;
html+='[/quote]';
ke.util.inserthtml(id, html);
}
this.dialog.hide();
ke.util.focus(id);
}
};
//寮曠敤閮ㄥ垎缁撴潫,杩愯浠g爜寮€濮?
ke.plugin['runcode'] = {
click : function(id) {
ke.util.selection(id);
this.dialog = new ke.dialog({
id : id,
cmd : 'runcode',
file : 'runcode.html',
width : 450,
height : 300,
loadingmode : true,
title : ke.lang['runcode'],
yesbutton : ke.lang['yes'],
nobutton : ke.lang['no']
});
this.dialog.show();
},
exec : function(id) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var content = ke.$('textarea', dialogdoc).value;
if(content!='')
{
var html='[code]';
html+=content;
html+='[/code]';
ke.util.inserthtml(id, html);
}
this.dialog.hide();
ke.util.focus(id);
}
};
//杩愯浠g爜缁撴潫,flv寮€濮?
ke.plugin['flv'] = {
click : function(id) {
ke.util.selection(id);
this.dialog = new ke.dialog({
id : id,
cmd : 'flv',
file : 'flv.html',
width : 400,
height : 140,
loadingmode : true,
title : ke.lang['flv'],
yesbutton : ke.lang['yes'],
nobutton : ke.lang['no']
});
this.dialog.show();
},
check : function(id, url, width, height) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
if (!url.match(/^.{3,}$/)) {
alert(ke.lang['invalidurl']);
ke.$('url', dialogdoc).focus();
return false;
}
if (!width.match(/^\d*$/)) {
alert(ke.lang['invalidwidth']);
ke.$('width', dialogdoc).focus();
return false;
}
if (!height.match(/^\d*$/)) {
alert(ke.lang['invalidheight']);
ke.$('height', dialogdoc).focus();
return false;
}
return true;
},
exec : function(id) {
var dialogdoc = ke.util.getiframedoc(this.dialog.iframe);
var url = ke.$('url', dialogdoc).value;
var width = ke.$('width', dialogdoc).value;
var height = ke.$('height', dialogdoc).value;
var html='[flv width="';
html+=width;
html+='" ';
html+='height="';
html+=height;
html+='"]';
html+=url;
html+='[/flv]';
ke.util.inserthtml(id, html);
this.dialog.hide();
ke.util.focus(id);
}
};
//flv缁撴潫
ke.plugin['about'] = {
click : function(id) {
ke.util.selection(id);
var dialog = new ke.dialog({
id : id,
cmd : 'about',
file : 'about.html',
width : 300,
height : 70,
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, ' ');
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(/