/******************************************************************************* * kindeditor - wysiwyg html editor for internet * copyright (c) 2006-2010 longhao luo * * @author roddy * @site http://www.kindsoft.net/ * @licence lgpl(http://www.opensource.org/licenses/lgpl-license.php) * @version 3.5.2 (2010-12-02) *******************************************************************************/ (function (undefined) { var ke = {}; ke.version = '3.5.2 (2010-12-02)'; ke.scriptpath = (function() { var elements = document.getelementsbytagname('script'); for (var i = 0, len = elements.length; i < len; i++) { if (elements[i].src && elements[i].src.match(/kindeditor[\w\-\.]*\.js/)) { return elements[i].src.substring(0, elements[i].src.lastindexof('/') + 1); } } return ''; })(); ke.browser = (function() { var ua = navigator.useragent.tolowercase(); return { version: ua.match(/(msie|firefox|webkit|opera)[\/:\s](\d+)/) ? regexp.$2 : '0', ie: (ua.indexof('msie') > -1 && ua.indexof('opera') == -1), gecko: (ua.indexof('gecko') > -1 && ua.indexof('khtml') == -1), webkit: (ua.indexof('applewebkit') > -1), opera: (ua.indexof('opera') > -1) }; })(); ke.setting = { wyswygmode : true, loadstylemode : true, resizemode : 2, filtermode : false, autosetdatamode : true, shadowmode : true, urltype : '', skintype : 'default', newlinetag : 'p', dialogaligntype : 'page', csspath : '', skinspath : ke.scriptpath + 'skins/', pluginspath : ke.scriptpath + 'plugins/', minwidth : 200, minheight : 100, minchangesize : 5, toolbarlineheight : 24, statusbarheight : 11, //杩欓噷鏄疭dcms涓撶敤 items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', '|', 'justifyleft', 'justifycenter', 'justifyright','justifyfull', '|','insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', '|','plainpaste', 'wordpaste','undo', 'redo','source', 'fullscreen', '-', 'bold','italic', 'underline', 'strikethrough', '|', 'subscript','superscript','link', 'unlink', '|', 'advtable','image','flash', 'media', '|','file','flv','page','quotecode','runcode','about' ], /*杩欓噷鏄師鏉ョ殑 items : [ 'source', '|', 'fullscreen', 'undo', 'redo', 'print', 'cut', 'copy', 'paste', 'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript', 'superscript', '|', 'selectall', '-', 'title', 'fontname', 'fontsize', '|', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'strikethrough', 'removeformat', '|', 'image', 'flash', 'media', 'advtable', 'hr', 'emoticons', 'link', 'unlink', '|', 'about' ], 杩欓噷鏄紒涓欳ms涓撶敤 items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', '|', 'justifyleft', 'justifycenter', 'justifyright','justifyfull', '|','insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', '|','undo', 'redo','source', 'fullscreen', '-', 'bold','italic', 'underline', 'strikethrough', '|', 'subscript','superscript','link', 'unlink', '|', 'advtable','image','flash', 'media', '|','removeformat','plainpaste', 'wordpaste','about' ], */ colortable : [ ['#e53333', '#e56600', '#ff9900', '#64451d', '#dfc5a4', '#ffe500'], ['#009900', '#006600', '#99bb00', '#b8d100', '#60d978', '#00d5ff'], ['#337fe5', '#003399', '#4c33e5', '#9933e5', '#cc33e5', '#ee33ee'], ['#ffffff', '#cccccc', '#999999', '#666666', '#333333', '#000000'] ], noendtags : ['br', 'hr', 'img', 'area', 'col', 'embed', 'input', 'param'], inlinetags : ['b', 'del', 'em', 'font', 'i', 'span', 'strike', 'strong', 'sub', 'sup', 'u'], endlinetags : [ 'br', 'hr', 'table', 'tbody', 'td', 'tr', 'th', 'div', 'p', 'ol', 'ul', 'li', 'blockquote', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'script', 'style', 'marquee' ], htmltags : { font : ['color', 'size', 'face', '.background-color'], span : [ '.color', '.background-color', '.font-size', '.font-family', '.background', '.font-weight', '.font-style', '.text-decoration', '.vertical-align' ], div : [ 'align', '.border', '.margin', '.padding', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.font-weight', '.background', '.font-style', '.text-decoration', '.vertical-align', '.margin-left' ], table: [ 'border', 'cellspacing', 'cellpadding', 'width', 'height', 'align', 'bordercolor', '.padding', '.margin', '.border', 'bgcolor', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.font-weight', '.font-style', '.text-decoration', '.background', '.width', '.height' ], 'td,th': [ 'align', 'valign', 'width', 'height', 'colspan', 'rowspan', 'bgcolor', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.background' ], a : ['href', 'target', 'name'], embed : ['src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess', '/'], img : ['src', 'width', 'height', 'border', 'alt', 'title', '.width', '.height', '/'], hr : ['/'], br : ['/'], 'p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6' : [ 'align', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.background', '.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.text-indent', '.margin-left' ], 'tbody,tr,strong,b,sub,sup,em,i,u,strike' : [] }, mediatypes : { rm : 'audio/x-pn-realaudio-plugin', flash : 'application/x-shockwave-flash', media : 'video/x-ms-asf-plugin' } }; ke.g = {}; ke.plugin = {}; ke.$ = function(id, doc){ var doc = doc || document; return doc.getelementbyid(id); }; ke.$$ = function(name, doc){ var doc = doc || document; return doc.createelement(name); }; ke.event = { add : function(el, type, fn, id) { if (el.addeventlistener){ el.addeventlistener(type, fn, false); } else if (el.attachevent){ el.attachevent('on' + type, fn); } if (id !== undefined) { ke.g[id].eventstack.push({ el : el, type : type, fn : fn }); } }, remove : function(el, type, fn, id) { if (el.removeeventlistener){ el.removeeventlistener(type, fn, false); } else if (el.detachevent){ el.detachevent('on' + type, fn); } if (id !== undefined) { var stack = ke.g[id].eventstack; for (var i = 0, len = stack.length; i < len; i++) { var item = stack[i]; if (item && el === item.el && type === item.type && fn === item.fn) { delete stack[i]; } } } }, stop : function(e) { if (e.preventdefault) e.preventdefault(); if (e.stoppropagation) e.stoppropagation(); if (e.cancelbubble !== undefined) e.cancelbubble = true; if (e.returnvalue !== undefined) e.returnvalue = false; }, bind : function(el, type, fn, id) { this.add(el, type, function(e) { fn(e); ke.event.stop(e); return false; }, id); }, input : function(el, func, id) { this.add(el, 'keyup', function(e) { if (!e.ctrlkey && !e.altkey && (e.keycode < 16 || e.keycode > 18) && e.keycode != 116) { func(e); ke.event.stop(e); return false; } }, id); function handler (e) { window.settimeout(function() { func(e); }, 1); } var newelement = (el.nodename == '#document') ? el.body : el; this.add(newelement, 'paste', handler, id); this.add(newelement, 'cut', handler, id); }, ctrl : function(el, key, func, id) { key = key.tostring().match(/^\d{2,}$/) ? key : key.touppercase().charcodeat(0); this.add(el, 'keydown', function(e) { if (e.ctrlkey && e.keycode == key && !e.shiftkey && !e.altkey) { func(e); ke.event.stop(e); return false; } }, id); }, ready : function(func, win, doc, id) { var win = win || window; var doc = doc || document; var loaded = false; var readyfunc = function() { if (loaded) return; loaded = true; func(); }; if (doc.addeventlistener) { this.add(doc, "domcontentloaded", readyfunc, id); } else if (doc.attachevent){ this.add(doc, "readystatechange", function() { if (doc.readystate == "complete") readyfunc(); }, id); if ( doc.documentelement.doscroll && typeof win.frameelement === "undefined" ) { var iereadyfunc = function() { if (loaded) return; try { doc.documentelement.doscroll("left"); } catch(e) { window.settimeout(iereadyfunc, 0); return; } readyfunc(); }; iereadyfunc(); } } this.add(win, 'load', readyfunc, id); } }; ke.each = function(obj, func) { for (var key in obj) { if (obj.hasownproperty(key)) func(key, obj[key]); } }; ke.eachnode = function(node, func) { var walknodes = function(parent) { if (ke.util.getnodetype(parent) != 1) return true; var n = parent.firstchild; while (n) { var next = n.nextsibling; if (!func(n)) return false; if (!walknodes(n)) return false; n = next; } return true; }; walknodes(node); }; ke.selection = function(doc) { this.sel = null; this.range = null; this.kerange = null; this.iscontrol = false; var win = doc.parentwindow || doc.defaultview; this.init = function() { var sel = win.getselection ? win.getselection() : doc.selection; var range; try { if (sel.rangecount > 0) range = sel.getrangeat(0); else range = sel.createrange(); } catch(e) {} if (!range) range = ke.util.createrange(doc); this.sel = sel; this.range = range; var startnode, startpos, endnode, endpos; if (ke.browser.ie) { if (range.item) { this.iscontrol = true; var el = range.item(0); startnode = endnode = el; startpos = endpos = 0; } else { this.iscontrol = false; var getstartend = function(isstart) { var pointrange = range.duplicate(); pointrange.collapse(isstart); var parentnode = pointrange.parentelement(); var nodes = parentnode.childnodes; if (nodes.length == 0) return {node: parentnode, pos: 0}; var startnode; var endelement; var startpos = 0; var isend = false; var testrange = range.duplicate(); ke.util.movetoelementtext(testrange, parentnode); for (var i = 0, len = nodes.length; i < len; i++) { var node = nodes[i]; var cmp = testrange.compareendpoints('starttostart', pointrange); if (cmp > 0) { isend = true; } else if (cmp == 0) { if (node.nodetype == 1) { var kerange = new ke.range(doc); kerange.selecttextnode(node); return {node: kerange.startnode, pos: 0}; } else { return {node: node, pos: 0}; } } if (node.nodetype == 1) { var noderange = range.duplicate(); ke.util.movetoelementtext(noderange, node); testrange.setendpoint('starttoend', noderange); if (isend) startpos += noderange.text.replace(/\r\n|\n|\r/g, '').length; else startpos = 0; } else if (node.nodetype == 3) { //fix bug: typeof node.nodevalue can return "unknown" in ie. if (typeof node.nodevalue === 'string') { testrange.movestart('character', node.nodevalue.length); startpos += node.nodevalue.length; } } if (!isend) startnode = node; } if (!isend && startnode.nodetype == 1) { var startnode = parentnode.lastchild; return {node: startnode, pos: startnode.nodetype == 1 ? 1 : startnode.nodevalue.length}; } testrange = range.duplicate(); ke.util.movetoelementtext(testrange, parentnode); testrange.setendpoint('starttoend', pointrange); startpos -= testrange.text.replace(/\r\n|\n|\r/g, '').length; return {node: startnode, pos: startpos}; }; var start = getstartend(true); var end = getstartend(false); startnode = start.node; startpos = start.pos; endnode = end.node; endpos = end.pos; } } else { startnode = range.startcontainer; startpos = range.startoffset; endnode = range.endcontainer; endpos = range.endoffset; if (startnode.nodetype == 1 && typeof startnode.childnodes[startpos] != 'undefined') { startnode = startnode.childnodes[startpos]; startpos = 0; } if (endnode.nodetype == 1) { endpos = endpos == 0 ? 1 : endpos; if (typeof endnode.childnodes[endpos - 1] != 'undefined') { endnode = endnode.childnodes[endpos - 1]; endpos = (endnode.nodetype == 1) ? 0 : endnode.nodevalue.length; } } this.iscontrol = (startnode.nodetype == 1 && startnode === endnode && range.startoffset + 1 == range.endoffset); if (startnode.nodetype == 1 && endnode.nodetype == 3 && endpos == 0 && endnode.previoussibling) { var node = endnode.previoussibling; while (node) { if (node === startnode) { endnode = startnode; break; } if (node.childnodes.length != 1) break; node = node.childnodes[0]; } } if (range.collapsed) { var kerange = new ke.range(doc); kerange.settextstart(startnode, startpos); endnode = kerange.startnode; endpos = kerange.startpos; } } var kerange = new ke.range(doc); kerange.settextstart(startnode, startpos); kerange.settextend(endnode, endpos); this.kerange = kerange; }; this.init(); this.addrange = function(kerange) { if (ke.browser.gecko && ke.browser.version < 3) return; this.kerange = kerange; if (ke.browser.ie) { var getendrange = function(isstart) { var range = ke.util.createrange(doc); var node = isstart ? kerange.startnode : kerange.endnode; if (node.nodetype == 1) { ke.util.movetoelementtext(range, node); range.collapse(isstart); } else if (node.nodetype == 3) { range = ke.util.getnodestartrange(doc, node); var pos = isstart ? kerange.startpos : kerange.endpos; range.movestart('character', pos); } return range; } if (!this.range.item) { var node = kerange.startnode; if (node == kerange.endnode && ke.util.getnodetype(node) == 1 && ke.util.getnodetextlength(node) == 0) { var temp = doc.createtextnode(" "); node.appendchild(temp); ke.util.movetoelementtext(this.range, node); this.range.collapse(false); this.range.select(); node.removechild(temp); } else { if (node.nodetype == 3 && kerange.collapsed()) { this.range = getendrange(true); this.range.collapse(true); } else { this.range.setendpoint('starttostart', getendrange(true)); this.range.setendpoint('endtostart', getendrange(false)); } this.range.select(); } } } else { var getnodepos = function(node) { var pos = 0; while (node) { node = node.previoussibling; pos++; } return --pos; }; var range = new ke.range(doc); range.settextstart(kerange.startnode, kerange.startpos); range.settextend(kerange.endnode, kerange.endpos); var startnode = range.startnode; var endnode = range.endnode; if (ke.util.getnodetype(startnode) == 88) { this.range.setstart(startnode.parentnode, getnodepos(range.startnode)); } else { this.range.setstart(startnode, range.startpos); } if (ke.util.getnodetype(endnode) == 88) { this.range.setend(endnode.parentnode, getnodepos(range.endnode) + 1); } else { this.range.setend(endnode, range.endpos); } this.sel.removeallranges(); this.sel.addrange(this.range); } }; this.focus = function() { if (ke.browser.ie && this.range != null) this.range.select(); } }; ke.range = function(doc) { this.startnode = null; this.startpos = null; this.endnode = null; this.endpos = null; this.getparentelement = function() { var scanparent = function(node, func) { while (node && (!node.tagname || node.tagname.tolowercase() != 'body')) { node = node.parentnode; if (func(node)) return; } } var nodelist = []; scanparent(this.startnode, function(node) { nodelist.push(node); }); var parentnode; scanparent(this.endnode, function(node) { if (ke.util.inarray(node, nodelist)) { parentnode = node; return true; } }); return parentnode ? parentnode : doc.body; }; this.getnodelist = function() { var self = this; var parentnode = this.getparentelement(); var nodelist = []; var isstarted = false; if (parentnode == self.startnode) isstarted = true; if (isstarted) nodelist.push(parentnode); ke.eachnode(parentnode, function(node) { if (node == self.startnode) isstarted = true; var range = new ke.range(doc); range.selecttextnode(node); var cmp = range.comparepoints('start_to_end', self); if (cmp > 0) { return false; } else if (cmp == 0) { if (range.startnode !== range.endnode || range.startpos !== range.endpos) return false; } if (isstarted) nodelist.push(node); return true; }); return nodelist; }; this.comparepoints = function(how, range) { var comparenodes = function(nodea, posa, nodeb, posb) { var cmp; if (ke.browser.ie) { var getstartrange = function(node, pos, isstart) { var range = ke.util.createrange(doc); var type = ke.util.getnodetype(node); if (type == 1) { ke.util.movetoelementtext(range, node); range.collapse(isstart); } else if (type == 3) { range = ke.util.getnodestartrange(doc, node); range.movestart('character', pos); range.collapse(true); } return range; } var rangea, rangeb; if (how == 'start_to_start' || how == 'start_to_end') rangea = getstartrange(nodea, posa, true); else rangea = getstartrange(nodea, posa, false); if (how == 'start_to_start' || how == 'end_to_start') rangeb = getstartrange(nodeb, posb, true); else rangeb = getstartrange(nodeb, posb, false); return rangea.compareendpoints('starttostart', rangeb); } else { var rangea = ke.util.createrange(doc); rangea.selectnode(nodea); if (how == 'start_to_start' || how == 'start_to_end') rangea.collapse(true); else rangea.collapse(false); var rangeb = ke.util.createrange(doc); rangeb.selectnode(nodeb); if (how == 'start_to_start' || how == 'end_to_start') rangeb.collapse(true); else rangeb.collapse(false); if (rangea.compareboundarypoints(range.start_to_start, rangeb) > 0) { cmp = 1; } else if (rangea.compareboundarypoints(range.start_to_start, rangeb) == 0) { if (posa > posb) cmp = 1; else if (posa == posb) cmp = 0; else cmp = -1; } else { cmp = -1; } } return cmp; } if (how == 'start_to_start') return comparenodes(this.startnode, this.startpos, range.startnode, range.startpos); if (how == 'start_to_end') return comparenodes(this.startnode, this.startpos, range.endnode, range.endpos); if (how == 'end_to_start') return comparenodes(this.endnode, this.endpos, range.startnode, range.startpos); if (how == 'end_to_end') return comparenodes(this.endnode, this.endpos, range.endnode, range.endpos); }; this.collapsed = function() { return (this.startnode === this.endnode && this.startpos === this.endpos); }; this.collapse = function(tostart) { if (tostart) { this.setend(this.startnode, this.startpos); } else { this.setstart(this.endnode, this.endpos); } }; this.settextstart = function(node, pos) { var textnode = node; ke.eachnode(node, function(n) { if (ke.util.getnodetype(n) == 3 && n.nodevalue.length > 0 || ke.util.getnodetype(n) == 88) { textnode = n; pos = 0; return false; } return true; }); this.setstart(textnode, pos); }; this.setstart = function(node, pos) { this.startnode = node; this.startpos = pos; if (this.endnode === null) { this.endnode = node; this.endpos = pos; } }; this.settextend = function(node, pos) { var textnode = node; ke.eachnode(node, function(n) { if (ke.util.getnodetype(n) == 3 && n.nodevalue.length > 0 || ke.util.getnodetype(n) == 88) { textnode = n; pos = ke.util.getnodetype(n) == 3 ? n.nodevalue.length : 0; } return true; }); this.setend(textnode, pos); }; this.setend = function(node, pos) { this.endnode = node; this.endpos = pos; if (this.startnode === null) { this.startnode = node; this.startpos = pos; } }; this.selectnode = function(node) { this.setstart(node, 0); this.setend(node, node.nodetype == 1 ? 0 : node.nodevalue.length); }; this.selecttextnode = function(node) { this.settextstart(node, 0); this.settextend(node, node.nodetype == 1 ? 0 : node.nodevalue.length); }; this.extractcontents = function(isdelete) { isdelete = (isdelete === undefined) ? true : isdelete; var thisrange = this; var startnode = this.startnode; var startpos = this.startpos; var endnode = this.endnode; var endpos = this.endpos; var extracttextnode = function(node, startpos, endpos) { var length = node.nodevalue.length; var clonenode = node.clonenode(true); var centernode = clonenode.splittext(startpos); centernode.splittext(endpos - startpos); if (isdelete) { var center = node; if (startpos > 0) center = node.splittext(startpos); if (endpos < length) center.splittext(endpos - startpos); center.parentnode.removechild(center); } return centernode; }; var noendtaghash = ke.util.arraytohash(ke.setting.noendtags); var isstarted = false; var isend = false; var extractnodes = function(parent, frag) { if (ke.util.getnodetype(parent) != 1) return true; var node = parent.firstchild; while (node) { if (node == startnode) isstarted = true; if (node == endnode) isend = true; var nextnode = node.nextsibling; var type = node.nodetype; if (type == 1) { var range = new ke.range(doc); range.selectnode(node); var cmp = range.comparepoints('end_to_end', thisrange); if (isstarted && (cmp < 0 || (cmp == 0 && noendtaghash[node.nodename.tolowercase()] !== undefined))) { var clonenode = node.clonenode(true); frag.appendchild(clonenode); if (isdelete) { node.parentnode.removechild(node); } } else { var childflag = node.clonenode(false); if (noendtaghash[childflag.nodename.tolowercase()] === undefined) { frag.appendchild(childflag); if (!extractnodes(node, childflag)) return false; } } } else if (type == 3) { if (isstarted) { var textnode; if (node == startnode && node == endnode) { textnode = extracttextnode(node, startpos, endpos); frag.appendchild(textnode); return false; } else if (node == startnode) { textnode = extracttextnode(node, startpos, node.nodevalue.length); frag.appendchild(textnode); } else if (node == endnode) { textnode = extracttextnode(node, 0, endpos); frag.appendchild(textnode); return false; } else { textnode = extracttextnode(node, 0, node.nodevalue.length); frag.appendchild(textnode); } } } node = nextnode; if (isend) return false; } if (frag.innerhtml.replace(/<.*?>/g, '') === '' && frag.parentnode) { frag.parentnode.removechild(frag); } return true; } var parentnode = this.getparentelement(); var docfrag = parentnode.clonenode(false); extractnodes(parentnode, docfrag); return docfrag; }; this.clonecontents = function() { return this.extractcontents(false); }; this.gettext = function() { var html = this.clonecontents().innerhtml; return html.replace(/<.*?>/g, ""); }; }; ke.cmd = function(id) { this.doc = ke.g[id].iframedoc; this.kesel = ke.g[id].kesel; this.kerange = ke.g[id].kerange; this.mergeattributes = function(el, attr) { for (var i = 0, len = attr.length; i < len; i++) { ke.each(attr[i], function(key, value) { if (key.charat(0) == '.') { var jskey = ke.util.getjskey(key.substr(1)); el.style[jskey] = value; } else { if (ke.browser.ie && ke.browser.version < 8 && key == 'class') key = 'classname'; el.setattribute(key, value); } }); } return el; }; this.wraptextnode = function(node, startpos, endpos, element, attributes) { var length = node.nodevalue.length; var isfull = (startpos == 0 && endpos == length); var range = new ke.range(this.doc); range.selecttextnode(node.parentnode); if (isfull && node.parentnode.tagname == element.tagname && range.comparepoints('end_to_end', this.kerange) <= 0 && range.comparepoints('start_to_start', this.kerange) >= 0) { this.mergeattributes(node.parentnode, attributes); return node; } else { var el = element.clonenode(true); if (isfull) { var clonenode = node.clonenode(true); el.appendchild(clonenode); node.parentnode.replacechild(el, node); return clonenode; } else { var centernode = node; if (startpos < endpos) { if (startpos > 0) centernode = node.splittext(startpos); if (endpos < length) centernode.splittext(endpos - startpos); var clonenode = centernode.clonenode(true); el.appendchild(clonenode); centernode.parentnode.replacechild(el, centernode); return clonenode; } else { if (startpos < length) { centernode = node.splittext(startpos); centernode.parentnode.insertbefore(el, centernode); } else { if (centernode.nextsibling) { centernode.parentnode.insertbefore(el, centernode.nextsibling); } else { centernode.parentnode.appendchild(el); } } return el; } } } }; this.wrap = function(tagname, attributes) { attributes = attributes || []; var self = this; this.kesel.focus(); var element = ke.$$(tagname, this.doc); this.mergeattributes(element, attributes); var kerange = this.kerange; var startnode = kerange.startnode; var startpos = kerange.startpos; var endnode = kerange.endnode; var endpos = kerange.endpos; var parentnode = kerange.getparentelement(); if (ke.util.inmarquee(parentnode)) return; var isstarted = false; ke.eachnode(parentnode, function(node) { if (node == startnode) isstarted = true; if (node.nodetype == 1) { if (node == startnode && node == endnode) { if (ke.util.inarray(node.tagname.tolowercase(), ke.g[id].noendtags)) { if (startpos > 0) node.parentnode.appendchild(element); else node.parentnode.insertbefore(element, node); } else { node.appendchild(element); } kerange.selectnode(element); return false; } else if (node == startnode) { kerange.setstart(node, 0); } else if (node == endnode) { kerange.setend(node, 0); return false; } } else if (node.nodetype == 3) { if (isstarted) { if (node == startnode && node == endnode) { var rangenode = self.wraptextnode(node, startpos, endpos, element, attributes); kerange.selectnode(rangenode); return false; } else if (node == startnode) { var rangenode = self.wraptextnode(node, startpos, node.nodevalue.length, element, attributes); kerange.setstart(rangenode, 0); } else if (node == endnode) { var rangenode = self.wraptextnode(node, 0, endpos, element, attributes); kerange.setend(rangenode, rangenode.nodetype == 1 ? 0 : rangenode.nodevalue.length); return false; } else { self.wraptextnode(node, 0, node.nodevalue.length, element, attributes); } } } return true; }); this.kesel.addrange(kerange); }; this.gettopparent = function(tagnames, node) { var parent = null; while (node) { node = node.parentnode; if (ke.util.inarray(node.tagname.tolowercase(), tagnames)) { parent = node; } else { break; } } return parent; }; this.splitnodeparent = function(parent, node, pos) { var leftrange = new ke.range(this.doc); leftrange.selectnode(parent.firstchild); leftrange.setend(node, pos); var leftfrag = leftrange.extractcontents(); parent.parentnode.insertbefore(leftfrag, parent); return {left : leftfrag, right : parent}; }; this.remove = function(tags) { var self = this; var kerange = this.kerange; var startnode = kerange.startnode; var startpos = kerange.startpos; var endnode = kerange.endnode; var endpos = kerange.endpos; this.kesel.focus(); if (ke.util.inmarquee(kerange.getparentelement())) return; var iscollapsed = (kerange.gettext().replace(/\s+/g, '') === ''); if (iscollapsed && !ke.browser.ie) return; var tagnames = []; ke.each(tags, function(key, val) { if (key != '*') tagnames.push(key); }); var startparent = this.gettopparent(tagnames, startnode); var endparent = this.gettopparent(tagnames, endnode); if (startparent) { var startfrags = this.splitnodeparent(startparent, startnode, startpos); kerange.setstart(startfrags.right, 0); if (startnode == endnode && ke.util.getnodetextlength(startfrags.right) > 0) { kerange.selectnode(startfrags.right); var range = new ke.range(this.doc); range.selecttextnode(startfrags.left); if (startpos > 0) endpos -= range.endnode.nodevalue.length; range.selecttextnode(startfrags.right); endnode = range.startnode; } } if (iscollapsed) { var node = kerange.startnode; if (node.nodetype == 1) { if (node.nodename.tolowercase() == 'br') return; kerange.selectnode(node); } else { return; } } else if (endparent) { var endfrags = this.splitnodeparent(endparent, endnode, endpos); kerange.setend(endfrags.left, 0); if (startparent == endparent) { kerange.setstart(endfrags.left, 0); } } var removeattr = function(node, attr) { if (attr.charat(0) == '.') { var jskey = ke.util.getjskey(attr.substr(1)); node.style[jskey] = ''; } else { if (ke.browser.ie && ke.browser.version < 8 && attr == 'class') attr = 'classname'; node.removeattribute(attr); } }; var nodelist = kerange.getnodelist(); kerange.settextstart(kerange.startnode, kerange.startpos); kerange.settextend(kerange.endnode, kerange.endpos); for (var i = 0, length = nodelist.length; i < length; i++) { var node = nodelist[i]; if (node.nodetype == 1) { var tagname = node.tagname.tolowercase(); if (tags[tagname]) { var attr = tags[tagname]; for (var j = 0, len = attr.length; j < len; j++) { if (attr[j] == '*') { ke.util.removeparent(node); break; } else { removeattr(node, attr[j]); var attrs = []; if (node.outerhtml) { attrhash = ke.util.getattrlist(node.outerhtml); ke.each(attrhash, function(key, val) { attrs.push({ name : key, value : val }); }); } else { attrs = node.attributes; } if (attrs.length == 0) { ke.util.removeparent(node); break; } else if (attrs[0].name == 'style' && attrs[0].value === '') { ke.util.removeparent(node); break; } } } } if (tags['*']) { var attr = tags['*']; for (var j = 0, len = attr.length; j < len; j++) { removeattr(node, attr[j]); } } } } try { this.kesel.addrange(kerange); } catch(e) {} }; }; ke.format = { geturl : function(url, mode, host, pathname) { if (!mode) return url; mode = mode.tolowercase(); if (!ke.util.inarray(mode, ['absolute', 'relative', 'domain'])) return url; host = host || location.protocol + '//' + location.host; if (pathname === undefined) { var m = location.pathname.match(/^(\/.*)\//); pathname = m ? m[1] : ''; } var matches = url.match(/^(\w+:\/\/[^\/]*)/); if (matches) { if (matches[1] !== host) return url; } else if (url.match(/^\w+:/)) { return url; } var getrealpath = function(path) { var parts = path.split('/'); paths = []; for (var i = 0, len = parts.length; i < len; i++) { var part = parts[i]; if (part == '..') { if (paths.length > 0) paths.pop(); } else if (part !== '' && part != '.') { paths.push(part); } } return '/' + paths.join('/'); }; if (url.match(/^\//)) { url = host + getrealpath(url.substr(1)); } else if (!url.match(/^\w+:\/\//)) { url = host + getrealpath(pathname + '/' + url); } if (mode == 'relative') { var getrelativepath = function(path, depth) { if (url.substr(0, path.length) === path) { var arr = []; for (var i = 0; i < depth; i++) { arr.push('..'); } var prefix = '.'; if (arr.length > 0) prefix += '/' + arr.join('/'); if (pathname == '/') prefix += '/'; return prefix + url.substr(path.length); } else { var m = path.match(/^(.*)\//); if (m) { return getrelativepath(m[1], ++depth); } } }; url = getrelativepath(host + pathname, 0).substr(2); } else if (mode == 'absolute') { if (url.substr(0, host.length) === host) { url = url.substr(host.length); } } return url; }, gethtml : function(html, htmltags, urltype) { var isfilter = htmltags ? true : false; html = html.replace(/(]*>)([\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, '

 

'); html = html.replace(/\n<\/p>/ig, '

'); } var reg = ke.setting.inlinetags.join('|'); var trimhtml = function(inhtml) { var outhtml = inhtml.replace(new regexp('<(' + reg + ')[^>]*><\\/(' + reg + ')>', 'ig'), function($0, $1, $2) { if ($1 == $2) return ''; else return $0; }); if (inhtml !== outhtml) outhtml = trimhtml(outhtml); return outhtml; }; return ke.util.trim(trimhtml(html)); } }; ke.addclass = function(el, classname) { if (typeof el == 'object') { var cls = el.classname; if (cls) { if ((' ' + cls + ' ').indexof(' ' + classname + ' ') < 0) { el.classname = cls + ' ' + classname; } } else { el.classname = classname; } } else if (typeof el == 'string') { if (/\s+class\s*=/.test(el)) { el = el.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/, function($0, $1, $2, $3) { if ((' ' + $2 + ' ').indexof(' ' + classname + ' ') < 0) { return $2 === '' ? $1 + classname + $3 : $1 + $2 + ' ' + classname + $3; } else { return $0; } }); } else { el = el.substr(0, el.length - 1) + ' class="' + classname + '">'; } } return el; }; ke.removeclass = function(el, classname) { var cls = el.classname || ''; cls = ' ' + cls + ' '; classname = ' ' + classname + ' '; if (cls.indexof(classname) >= 0) { cls = ke.util.trim(cls.replace(new regexp(classname, 'ig'), '')); if (cls === '') { var key = el.getattribute('class') ? 'class' : 'classname'; el.removeattribute(key); } else { el.classname = cls; } } return el; }; ke.getcomputedstyle = function(el, key) { var doc = el.ownerdocument, win = doc.parentwindow || doc.defaultview, jskey = ke.util.getjskey(key), val = ''; if (win.getcomputedstyle) { var style = win.getcomputedstyle(el, null); val = style[jskey] || style.getpropertyvalue(key) || el.style[jskey]; } else if (el.currentstyle) { val = el.currentstyle[jskey] || el.style[jskey]; } return val; }; ke.getcommonancestor = function(kesel, tagname) { var range = kesel.range, kerange = kesel.kerange, startnode = kerange.startnode, endnode = kerange.endnode; if (ke.util.inarray(tagname, ['table', 'td', 'tr'])) { if (ke.browser.ie) { if (range.item) { if (range.item(0).nodename.tolowercase() === tagname) { startnode = endnode = range.item(0); } } else { var rangea = range.duplicate(); rangea.collapse(true); var rangeb = range.duplicate(); rangeb.collapse(false); startnode = rangea.parentelement(); endnode = rangeb.parentelement(); } } else { var rangea = range.clonerange(); rangea.collapse(true); var rangeb = range.clonerange(); rangeb.collapse(false); startnode = rangea.startcontainer; endnode = rangeb.startcontainer; } } function find(node) { while (node) { if (node.nodetype == 1) { if (node.tagname.tolowercase() === tagname) return node; } node = node.parentnode; } return null; }; var start = find(startnode), end = find(endnode); if (start && end && start === end) { return start; } return null; }; ke.querycommandvalue = function(doc, cmd) { cmd = cmd.tolowercase(); function commandvalue() { var val = doc.querycommandvalue(cmd); if (typeof val !== 'string') val = ''; return val; } var val = ''; if (cmd === 'fontname') { val = commandvalue(); val = val.replace(/['"]/g, ''); } else if (cmd === 'formatblock') { val = commandvalue(); if (val === '') { var kesel = new ke.selection(doc); var el = ke.getcommonancestor(kesel, 'h1'); if (!el) el = ke.getcommonancestor(kesel, 'h2'); if (!el) el = ke.getcommonancestor(kesel, 'h3'); if (!el) el = ke.getcommonancestor(kesel, 'h4'); if (!el) el = ke.getcommonancestor(kesel, 'p'); if (el) val = el.nodename; } if (val === 'normal') val = 'p'; } else if (cmd === 'fontsize') { var kesel = new ke.selection(doc); var el = ke.getcommonancestor(kesel, 'span'); if (el) val = ke.getcomputedstyle(el, 'font-size'); } else if (cmd === 'textcolor') { var kesel = new ke.selection(doc); var el = ke.getcommonancestor(kesel, 'span'); if (el) val = ke.getcomputedstyle(el, 'color'); val = ke.util.rgbtohex(val); if (val === '') val = 'default'; } else if (cmd === 'bgcolor') { var kesel = new ke.selection(doc); var el = ke.getcommonancestor(kesel, 'span'); if (el) val = ke.getcomputedstyle(el, 'background-color'); val = ke.util.rgbtohex(val); if (val === '') val = 'default'; } return val.tolowercase(); }; ke.util = { getdocumentelement : function(doc) { doc = doc || document; return (doc.compatmode != "css1compat") ? doc.body : doc.documentelement; }, getdocumentheight : function(doc) { var el = this.getdocumentelement(doc); return math.max(el.scrollheight, el.clientheight); }, getdocumentwidth : function(doc) { var el = this.getdocumentelement(doc); return math.max(el.scrollwidth, el.clientwidth); }, createtable : function(doc) { var table = ke.$$('table', doc); table.cellpadding = 0; table.cellspacing = 0; table.border = 0; return {table: table, cell: table.insertrow(0).insertcell(0)}; }, loadstyle : function(path) { var link = ke.$$('link'); link.setattribute('type', 'text/css'); link.setattribute('rel', 'stylesheet'); link.setattribute('href', path); document.getelementsbytagname("head")[0].appendchild(link); }, getattrlist : function(tag) { var re = /\s+(?:([\w-:]+)|(?:([\w-:]+)=([\w-:]+))|(?:([\w-:]+)="([^"]*)")|(?:([\w-:]+)='([^']*)'))(?=(?:\s|\/|>)+)/g; var arr, key, val, list = {}; while ((arr = re.exec(tag))) { key = arr[1] || arr[2] || arr[4] || arr[6]; val = arr[1] || (arr[2] ? arr[3] : (arr[4] ? arr[5] : arr[7])); list[key] = val; } return list; }, inarray : function(str, arr) { for (var i = 0; i < arr.length; i++) {if (str == arr[i]) return true;} return false; }, trim : function(str) { return str.replace(/^\s+|\s+$/g, ""); }, getjskey : function(key) { var arr = key.split('-'); key = ''; for (var i = 0, len = arr.length; i < len; i++) { key += (i > 0) ? arr[i].charat(0).touppercase() + arr[i].substr(1) : arr[i]; } return key; }, arraytohash : function(arr) { var hash = {}; for (var i = 0, len = arr.length; i < len; i++) hash[arr[i]] = 1; return hash; }, escape : function(str) { str = str.replace(/&/g, '&'); str = str.replace(//g, '>'); str = str.replace(/"/g, '"'); return str; }, unescape : function(str) { str = str.replace(/</g, '<'); str = str.replace(/>/g, '>'); str = str.replace(/"/g, '"'); str = str.replace(/&/g, '&'); return str; }, getscrollpos : function() { var x, y; if (ke.browser.ie || ke.browser.opera) { var el = this.getdocumentelement(); x = el.scrollleft; y = el.scrolltop; } else { x = window.scrollx; y = window.scrolly; } return {x : x, y : y}; }, getelementpos : function(el) { var x = 0, y = 0; if (el.getboundingclientrect) { var box = el.getboundingclientrect(); var pos = this.getscrollpos(); x = box.left + pos.x; y = box.top + pos.y; } else { x = el.offsetleft; y = el.offsettop; var parent = el.offsetparent; while (parent) { x += parent.offsetleft; y += parent.offsettop; parent = parent.offsetparent; } } return {x : x, y : y}; }, getcoords : function(ev) { ev = ev || window.event; return { x : ev.clientx, y : ev.clienty }; }, setopacity : function(el, opacity) { if (typeof el.style.opacity == "undefined") { el.style.filter = (opacity == 100) ? "" : "alpha(opacity=" + opacity + ")"; } else { el.style.opacity = (opacity == 100) ? "" : (opacity / 100); } }, getiframedoc : function(iframe) { return iframe.contentdocument || iframe.contentwindow.document; }, rgbtohex : function(str) { function hex(s) { s = parseint(s).tostring(16); return s.length > 1 ? s : '0' + s; }; return str.replace(/rgb\s*?\(\s*?(\d+)\s*?,\s*?(\d+)\s*?,\s*?(\d+)\s*?\)/ig, function($0, $1, $2, $3) { return '#' + hex($1) + hex($2) + hex($3); } ); }, parsejson : function (text) { //extract json string var match; if ((match = /\{[\s\s]*\}|\[[\s\s]*\]/.exec(text))) { text = match[0]; } var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; cx.lastindex = 0; if (cx.test(text)) { text = text.replace(cx, function (a) { return '\\u' + ('0000' + a.charcodeat(0).tostring(16)).slice(-4); }); } if (/^[\],:{}\s]*$/. test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fa-f]{4})/g, '@'). replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[ee][+\-]?\d+)?/g, ']'). replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { return eval('(' + text + ')'); } throw 'json parse error'; }, createrange : function(doc) { return doc.createrange ? doc.createrange() : doc.body.createtextrange(); }, getnodetype : function(node) { return (node.nodetype == 1 && ke.util.inarray(node.tagname.tolowercase(), ke.setting.noendtags)) ? 88 : node.nodetype; }, inmarquee : function(node) { var n = node; while (n) { if (n.nodename.tolowercase() === 'marquee') return true; n = n.parentnode; } return false; }, movetoelementtext : function (range, el) { if (!this.inmarquee(el)) range.movetoelementtext(el); }, getnodetextlength : function(node) { var type = ke.util.getnodetype(node); if (type == 1) { var html = node.innerhtml; return html.replace(/<.*?>/ig, "").length; } else if (type == 3) { return node.nodevalue.length; } }, getnodestartrange : function(doc, node) { var range = ke.util.createrange(doc); var type = node.nodetype; if (type == 1) { ke.util.movetoelementtext(range, node); return range; } else if (type == 3) { var offset = 0; var sibling = node.previoussibling; while (sibling) { if (sibling.nodetype == 1) { var noderange = ke.util.createrange(doc); ke.util.movetoelementtext(noderange, sibling); range.setendpoint('starttoend', noderange); range.movestart('character', offset); return range; } else if (sibling.nodetype == 3) { offset += sibling.nodevalue.length; } sibling = sibling.previoussibling; } ke.util.movetoelementtext(range, node.parentnode); range.movestart('character', offset); return range; } }, removeparent : function(parent) { if (parent.haschildnodes) { var node = parent.firstchild; while (node) { var nextnode = node.nextsibling; parent.parentnode.insertbefore(node, parent); node = nextnode; } } parent.parentnode.removechild(parent); }, pluginlang : function(pluginname, doc) { ke.each(ke.lang.plugins[pluginname], function (key, val) { var span = ke.$('lang.' + key, doc); if (span) { span.parentnode.insertbefore(doc.createtextnode(val), span); span.parentnode.removechild(span); } }); }, drag : function(id, mousedownobj, moveobj, func) { var g = ke.g[id]; mousedownobj.onmousedown = function(e) { var self = this; e = e || window.event; var pos = ke.util.getcoords(e); var objtop = parseint(moveobj.style.top); var objleft = parseint(moveobj.style.left); var objwidth = moveobj.style.width; var objheight = moveobj.style.height; if (objwidth.match(/%$/)) objwidth = moveobj.offsetwidth + 'px'; if (objheight.match(/%$/)) objheight = moveobj.offsetheight + 'px'; objwidth = parseint(objwidth); objheight = parseint(objheight); var mousetop = pos.y; var mouseleft = pos.x; var scrollpos = ke.util.getscrollpos(); var scrolltop = scrollpos.y; var scrollleft = scrollpos.x; var dragflag = true; function movelistener(e) { if (dragflag) { var pos = ke.util.getcoords(e); var scrollpos = ke.util.getscrollpos(); var top = parseint(pos.y - mousetop - scrolltop + scrollpos.y); var left = parseint(pos.x - mouseleft - scrollleft + scrollpos.x); func(objtop, objleft, objwidth, objheight, top, left); } } var iframepos = ke.util.getelementpos(g.iframe); function iframemovelistener(e) { if (dragflag) { var pos = ke.util.getcoords(e, g.iframedoc); var top = parseint(iframepos.y + pos.y - mousetop - scrolltop); var left = parseint(iframepos.x + pos.x - mouseleft - scrollleft); func(objtop, objleft, objwidth, objheight, top, left); } } var selectlistener = function() { return false; }; function uplistener(e) { dragflag = false; if (self.releasecapture) self.releasecapture(); ke.event.remove(document, 'mousemove', movelistener); ke.event.remove(document, 'mouseup', uplistener); ke.event.remove(g.iframedoc, 'mousemove', iframemovelistener); ke.event.remove(g.iframedoc, 'mouseup', uplistener); ke.event.remove(document, 'selectstart', selectlistener); ke.event.stop(e); return false; } ke.event.add(document, 'mousemove', movelistener); ke.event.add(document, 'mouseup', uplistener); ke.event.add(g.iframedoc, 'mousemove', iframemovelistener); ke.event.add(g.iframedoc, 'mouseup', uplistener); ke.event.add(document, 'selectstart', selectlistener); if (self.setcapture) self.setcapture(); ke.event.stop(e); return false; }; }, resize : function(id, width, height, ischeck, isresizewidth) { isresizewidth = (typeof isresizewidth == "undefined") ? true : isresizewidth; var g = ke.g[id]; if (!g.container) return; if (ischeck && (parseint(width) <= g.minwidth || parseint(height) <= g.minheight)) return; if (isresizewidth) g.container.style.width = width; if (ke.browser.ie) { //improve ie performance (issue #126) var temp = g.toolbartable && g.toolbartable.offsetheight; } g.container.style.height = height; var diff = parseint(height) - g.toolbarheight - g.statusbarheight; if (diff >= 0) { g.iframe.style.height = diff + 'px'; g.newtextarea.style.height = (((ke.browser.ie && ke.browser.version < 8 || document.compatmode != 'css1compat') && diff >= 2) ? diff - 2 : diff) + 'px'; } }, hideloadingpage : function(id) { var stack = ke.g[id].dialogstack; var dialog = stack[stack.length - 1]; dialog.loading.style.display = 'none'; dialog.iframe.style.display = ''; }, showloadingpage : function(id) { var stack = ke.g[id].dialogstack; var dialog = stack[stack.length - 1]; dialog.loading.style.display = ''; dialog.iframe.style.display = 'none'; }, setdefaultplugin : function(id) { var items = [ 'selectall', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript', 'superscript', 'bold', 'italic', 'underline', 'strikethrough' ]; var shortcuts = { bold : 'b', italic : 'i', underline : 'u' }; for (var i = 0; i < items.length; i++) { var item = items[i], plugin = {}; if (item in shortcuts) { plugin.init = (function(item) { return function(id) { ke.event.ctrl(ke.g[id].iframedoc, shortcuts[item], function(e) { ke.plugin[item].click(id); ke.util.focus(id); }, id); }; })(item); } plugin.click = (function(item) { return function(id) { ke.util.execcommand(id, item, null); }; })(item); ke.plugin[item] = plugin; } }, getfullhtml : function(id) { var html = ''; html += ''; html += ''; html += 'kindeditor'; html += ''; var csspath = ke.g[id].csspath; if (typeof csspath == 'string') csspath = [csspath]; for (var i = 0, len = csspath.length; i < len; i++) { if (csspath[i] !== '') html += ''; } html += ''; html += ''; html += ''; return html; }, getmediatype : function(src) { if (src.match(/\.(rm|rmvb)(\?|$)/i)) return 'rm'; else if (src.match(/\.(swf|flv)(\?|$)/i)) return 'flash'; else return 'media'; }, getmediaimage : function(id, type, attrs) { var width = attrs.width; var height = attrs.height; type = type || this.getmediatype(attrs.src); var srctag = this.getmediaembed(attrs); var style = ''; if (width > 0) style += 'width:' + width + 'px;'; if (height > 0) style += 'height:' + height + 'px;'; var classname = 'ke-' + type; var html = ''; return html; }, getmediaembed : function(attrs) { var html = ']*>\s*$/ig, ''); html = html.replace(/^\s*

\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(/]*>(\n|.)*?<\/style>/ig, ""); str = str.replace(/]*>(\n|.)*?<\/script>/ig, ""); str = str.replace(/]+>(\n|.)*?<\/w:[^>]+>/ig, ""); str = str.replace(/(\n|.)*?<\/xml>/ig, ""); str = str.replace(/\r\n|\n|\r/ig, ""); str = ke.util.execgethtmlhooks(id, str); str = ke.format.gethtml(str, ke.g[id].htmltags, ke.g[id].urltype); ke.util.inserthtml(id, str); this.dialog.hide(); ke.util.focus(id); } }; ke.plugin['fullscreen'] = { click : function(id) { var g = ke.g[id]; var self = this; var resetsize = function() { var el = ke.util.getdocumentelement(); g.width = el.clientwidth + 'px'; g.height = el.clientheight + 'px'; }; var windowsize = ''; var resizelistener = function() { if (!self.isselected) return; var el = ke.util.getdocumentelement(); var size = [el.clientwidth, el.clientheight].join(''); if (windowsize != size) { windowsize = size; resetsize(); ke.util.resize(id, g.width, g.height); } } if (this.isselected) { this.isselected = false; ke.util.setdata(id); ke.remove(id, 1); g.width = this.width; g.height = this.height; ke.create(id, 2); document.body.parentnode.style.overflow = 'auto'; ke.event.remove(window, 'resize', resizelistener); g.resizemode = g.config.resizemode; ke.toolbar.unselect(id, "fullscreen"); } else { this.isselected = true; this.width = g.container.style.width; this.height = g.container.style.height; ke.util.setdata(id); ke.remove(id, 2); document.body.parentnode.style.overflow = 'hidden'; resetsize(); ke.create(id, 1); var pos = ke.util.getscrollpos(); var div = g.container; div.style.position = 'absolute'; div.style.left = pos.x + 'px'; div.style.top = pos.y + 'px'; div.style.zindex = 19811211; ke.event.add(window, 'resize', resizelistener); g.resizemode = 0; ke.toolbar.select(id, "fullscreen"); } } }; ke.plugin['bgcolor'] = { click : function(id) { ke.util.selection(id); var color = ke.querycommandvalue(ke.g[id].iframedoc, 'bgcolor'); this.menu = new ke.menu({ id : id, cmd : 'bgcolor' }); this.menu.picker(color); }, exec : function(id, value) { var cmd = new ke.cmd(id); if (value == '') { cmd.remove({ 'span' : ['.background-color'] }); } else { cmd.wrap('span', [{'.background-color': value}]); } ke.util.execonchangehandler(id); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['fontname'] = { click : function(id) { var fontname = ke.lang.plugins.fontname.fontname; var cmd = 'fontname'; ke.util.selection(id); var menu = new ke.menu({ id : id, cmd : cmd, width : 150 }); var font = ke.querycommandvalue(ke.g[id].iframedoc, cmd); ke.each(fontname, function(key, value) { var html = '' + value + ''; menu.add( html, function() { ke.plugin[cmd].exec(id, key); }, { checked : (font === key.tolowercase() || font === value.tolowercase()) } ); }); menu.show(); this.menu = menu; }, exec : function(id, value) { var cmd = new ke.cmd(id); cmd.wrap('span', [{'.font-family': value}]); ke.util.execonchangehandler(id); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['fontsize'] = { click : function(id) { var fontsize = ['9px', '10px', '12px', '14px', '16px', '18px', '24px', '32px']; var cmd = 'fontsize'; ke.util.selection(id); var size = ke.querycommandvalue(ke.g[id].iframedoc, 'fontsize'); var menu = new ke.menu({ id : id, cmd : cmd, width : 120 }); for (var i = 0, len = fontsize.length; i < len; i++) { var value = fontsize[i]; var html = '' + value + ''; menu.add( html, (function(value) { return function() { ke.plugin[cmd].exec(id, value); }; })(value), { height : (parseint(value) + 12) + 'px', checked : (size === value) } ); } menu.show(); this.menu = menu; }, exec : function(id, value) { var cmd = new ke.cmd(id); cmd.wrap('span', [{'.font-size': value}]); ke.util.execonchangehandler(id); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['hr'] = { click : function(id) { ke.util.selection(id); ke.util.inserthtml(id, '


'); ke.util.focus(id); } }; ke.plugin['print'] = { click : function(id) { ke.util.selection(id); ke.g[id].iframewin.print(); } }; ke.plugin['removeformat'] = { click : function(id) { ke.util.selection(id); var cmd = new ke.cmd(id); var tags = { '*' : ['class', 'style'] }; for (var i = 0, len = ke.g[id].inlinetags.length; i < len; i++) { tags[ke.g[id].inlinetags[i]] = ['*']; } cmd.remove(tags); ke.util.execonchangehandler(id); ke.toolbar.updatestate(id); ke.util.focus(id); } }; ke.plugin['source'] = { click : function(id) { var g = ke.g[id]; if (!g.wyswygmode) { ke.util.setfullhtml(id, g.newtextarea.value); g.iframe.style.display = 'block'; g.newtextarea.style.display = 'none'; ke.toolbar.able(id, ['source', 'fullscreen']); g.wyswygmode = true; this.isselected = false; ke.toolbar.unselect(id, "source"); } else { ke.hidemenu(id); g.newtextarea.value = ke.util.getdata(id); g.iframe.style.display = 'none'; g.newtextarea.style.display = 'block'; ke.toolbar.disable(id, ['source', 'fullscreen']); g.wyswygmode = false; this.isselected = true; ke.toolbar.select(id, "source"); } ke.util.focus(id); } }; ke.plugin['textcolor'] = { click : function(id) { ke.util.selection(id); var color = ke.querycommandvalue(ke.g[id].iframedoc, 'textcolor'); this.menu = new ke.menu({ id : id, cmd : 'textcolor' }); this.menu.picker(color); }, exec : function(id, value) { var cmd = new ke.cmd(id); if (value == '') { cmd.remove({ 'span' : ['.color'], 'font' : ['color'] }); } else { cmd.wrap('span', [{'.color': value}]); } ke.util.execonchangehandler(id); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['title'] = { click : function(id) { var lang = ke.lang.plugins.title; var title = { 'h1' : lang.h1, 'h2' : lang.h2, 'h3' : lang.h3, 'h4' : lang.h4, 'p' : lang.p }; var sizehash = { 'h1' : 28, 'h2' : 24, 'h3' : 18, 'h4' : 14, 'p' : 12 }; var cmd = 'title'; ke.util.selection(id); var block = ke.querycommandvalue(ke.g[id].iframedoc, 'formatblock'); var menu = new ke.menu({ id : id, cmd : cmd, width : (ke.langtype == 'en' ? 200 : 150) }); ke.each(title, function(key, value) { var style = 'font-size:' + sizehash[key] + 'px;' if (key !== 'p') style += 'font-weight:bold;'; var html = '' + value + ''; menu.add(html, function() { ke.plugin[cmd].exec(id, '<' + key + '>'); }, { height : (sizehash[key] + 12) + 'px', checked : (block === key.tolowercase() || block === value.tolowercase() ) } ); }); menu.show(); this.menu = menu; }, exec : function(id, value) { ke.util.select(id); ke.util.execcommand(id, 'formatblock', value); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['emoticons'] = { click : function(id) { var self = this, cmd = 'emoticons', rows = 5, cols = 9, total = 135, startnum = 0, cells = rows * cols, pages = math.ceil(total / cells), colshalf = math.floor(cols / 2), g = ke.g[id], path = g.pluginspath + 'emoticons/', allowpreview = (g.allowpreviewemoticons === undefined) ? true : g.allowpreviewemoticons; ke.util.selection(id); var wrapperdiv = ke.$$('div'); wrapperdiv.classname = 'ke-plugin-emoticons-wrapper'; var previewdiv, previewimg; if (allowpreview) { previewdiv = ke.$$('div'); previewdiv.classname = 'ke-plugin-emoticons-preview'; previewdiv.style.right = 0; var previewimg = ke.$$('img'); previewimg.classname = 'ke-reset'; previewimg.src = path + '0.gif'; previewimg.border = 0; previewdiv.appendchild(previewimg); wrapperdiv.appendchild(previewdiv); } function createemoticonstable(pagenum) { var table = ke.$$('table'); if (previewdiv) { table.onmouseover = function() { previewdiv.style.display = 'block'; }; table.onmouseout = function() { previewdiv.style.display = 'none'; }; } table.classname = 'ke-plugin-emoticons-table'; table.cellpadding = 0; table.cellspacing = 0; table.border = 0; var num = (pagenum - 1) * cells + startnum; for (var i = 0; i < rows; i++) { var row = table.insertrow(i); for (var j = 0; j < cols; j++) { var cell = row.insertcell(j); cell.classname = 'ke-plugin-emoticons-cell'; if (previewdiv) { cell.onmouseover = (function(j, num) { return function() { if (j > colshalf) { previewdiv.style.left = 0; previewdiv.style.right = ''; } else { previewdiv.style.left = ''; previewdiv.style.right = 0; } previewimg.src = path + num + '.gif';; this.classname = 'ke-plugin-emoticons-cell ke-plugin-emoticons-cell-on'; }; })(j, num); } else { cell.onmouseover = function() { this.classname = 'ke-plugin-emoticons-cell ke-plugin-emoticons-cell-on'; }; } cell.onmouseout = function() { this.classname = 'ke-plugin-emoticons-cell'; }; cell.onclick = (function(num) { return function() { self.exec(id, num); return false; }; })(num); var span = ke.$$('span'); span.classname = 'ke-plugin-emoticons-img'; span.style.backgroundposition = '-' + (24 * num) + 'px 0px'; cell.appendchild(span); num++; } } return table; } var table = createemoticonstable(1); wrapperdiv.appendchild(table); var pagediv = ke.$$('div'); pagediv.classname = 'ke-plugin-emoticons-page'; wrapperdiv.appendchild(pagediv); function createpagetable(currentpagenum) { for (var pagenum = 1; pagenum <= pages; pagenum++) { if (currentpagenum !== pagenum) { var a = ke.$$('a'); a.href = 'javascript:;'; a.innerhtml = '[' + pagenum + ']'; a.onclick = (function(pagenum) { return function() { wrapperdiv.removechild(table); var newtable = createemoticonstable(pagenum); wrapperdiv.insertbefore(newtable, pagediv); table = newtable; pagediv.innerhtml = ''; createpagetable(pagenum); return false; }; })(pagenum); pagediv.appendchild(a); } else { pagediv.appendchild(document.createtextnode('[' + pagenum + ']')); } pagediv.appendchild(document.createtextnode(' ')); } } createpagetable(1); var menu = new ke.menu({ id : id, cmd : cmd }); menu.append(wrapperdiv); menu.show(); this.menu = menu; }, exec : function(id, num) { var src = ke.g[id].pluginspath + 'emoticons/' + num + '.gif'; var html = ''; ke.util.inserthtml(id, html); this.menu.hide(); ke.util.focus(id); } }; ke.plugin['flash'] = { init : function(id) { var self = this; ke.g[id].gethtmlhooks.push(function(html) { return html.replace(/]*class="?ke-flash"?[^>]*>/ig, function(imgstr) { var width = imgstr.match(/style="[^"]*;?\s*width:\s*(\d+)/i) ? regexp.$1 : 0; var height = imgstr.match(/style="[^"]*;?\s*height:\s*(\d+)/i) ? regexp.$1 : 0; width = width || (imgstr.match(/width="([^"]+)"/i) ? regexp.$1 : 0); height = height || (imgstr.match(/height="([^"]+)"/i) ? regexp.$1 : 0); if (imgstr.match(/kesrctag="([^"]+)"/i)) { var attrs = ke.util.getattrlist(unescape(regexp.$1)); attrs.width = width || attrs.width || 0; attrs.height = height || attrs.height || 0; attrs.kesrc = attrs.src; return ke.util.getmediaembed(attrs); } }); }); ke.g[id].sethtmlhooks.push(function(html) { return html.replace(/]*type="application\/x-shockwave-flash"[^>]*>(?:<\/embed>)?/ig, function($0) { var src = $0.match(/\s+src="([^"]+)"/i) ? regexp.$1 : ''; if ($0.match(/\s+kesrc="([^"]+)"/i)) src = regexp.$1; var width = $0.match(/\s+width="([^"]+)"/i) ? regexp.$1 : 0; var height = $0.match(/\s+height="([^"]+)"/i) ? regexp.$1 : 0; var attrs = ke.util.getattrlist($0); attrs.src = src; attrs.width = width; attrs.height = height; return ke.util.getmediaimage(id, 'flash', attrs); }); }); }, click : function(id) { ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : 'flash', file : 'flash.html', width : 400, height : 140, loadingmode : true, title : ke.lang['flash'], 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; if (!this.check(id, url, width, height)) return false; var html = ke.util.getmediaimage(id, 'flash', { src : url, type : ke.g[id].mediatypes['flash'], width : width, height : height, quality : 'high' }); ke.util.inserthtml(id, html); this.dialog.hide(); ke.util.focus(id); } }; ke.plugin['image'] = { getselectednode : function(id) { var g = ke.g[id]; var startnode = g.kerange.startnode; var endnode = g.kerange.endnode; if (!ke.browser.webkit && !g.kesel.iscontrol) return; if (startnode.nodetype != 1) return; if (startnode.tagname.tolowercase() != 'img') return; if (startnode != endnode) return; if (!startnode.classname.match(/^ke-\w+/i)) return startnode; }, init : function(id) { var self = this; var g = ke.g[id]; g.contextmenuitems.push({ text : ke.lang['editimage'], click : function(id, menu) { ke.util.select(id); menu.hide(); self.click(id); }, cond : function(id) { return self.getselectednode(id); }, options : { width : '150px', iconhtml : '' } }); g.contextmenuitems.push({ text : ke.lang['deleteimage'], click : function(id, menu) { ke.util.select(id); menu.hide(); var img = self.getselectednode(id); img.parentnode.removechild(img); ke.util.execonchangehandler(id); }, cond : function(id) { return self.getselectednode(id); }, options : { width : '150px' } }); g.contextmenuitems.push('-'); }, click : function(id) { ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : 'image', file : 'image/image.html', width : 400, height : 220, loadingmode : true, title : ke.lang['image'], yesbutton : ke.lang['yes'], nobutton : ke.lang['no'] }); this.dialog.show(); }, check : function(id) { var dialogdoc = ke.util.getiframedoc(this.dialog.iframe); var type = ke.$('type', dialogdoc).value; var width = ke.$('imgwidth', dialogdoc).value; var height = ke.$('imgheight', dialogdoc).value; var title = ke.$('imgtitle', dialogdoc).value; var urlbox; if (type == 2) { urlbox = ke.$('imgfile', dialogdoc); } else { urlbox = ke.$('url', dialogdoc); } if (!urlbox.value.match(/\.(jpg|jpeg|gif|bmp|png)(\s|\?|$)/i)) { alert(ke.lang['invalidimg']); urlbox.focus(); return false; } if (!width.match(/^\d*$/)) { alert(ke.lang['invalidwidth']); ke.$('imgwidth', dialogdoc).focus(); return false; } if (!height.match(/^\d*$/)) { alert(ke.lang['invalidheight']); ke.$('imgheight', dialogdoc).focus(); return false; } return true; }, exec : function(id) { var self = this; var dialogdoc = ke.util.getiframedoc(this.dialog.iframe); var type = ke.$('type', dialogdoc).value; var width = ke.$('imgwidth', dialogdoc).value; var height = ke.$('imgheight', dialogdoc).value; var title = ke.$('imgtitle', dialogdoc).value; var alignelements = dialogdoc.getelementsbyname('align'); var align = ''; for (var i = 0, len = alignelements.length; i < len; i++) { if (alignelements[i].checked) { align = alignelements[i].value; break; } } if (!this.check(id)) return false; if (type == 2) { 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, width, height, 0, align); } else { alert(data.message); return false; } } }; ke.event.add(uploadiframe, 'load', onloadfunc); dialogdoc.uploadform.submit(); return; } else { var url = ke.$('url', dialogdoc).value; this.insert(id, url, title, width, height, 0, align); } }, insert : function(id, url, title, width, height, border, align) { var html = ' 0) html += 'width="' + width + '" '; if (height > 0) html += 'height="' + height + '" '; if (title) html += 'title="' + title + '" '; if (align) html += 'align="' + align + '" '; html += 'alt="' + title + '" '; html += 'border="' + border + '" />'; ke.util.inserthtml(id, html); this.dialog.hide(); ke.util.focus(id); } }; ke.plugin['link'] = { getselectednode : function(id) { return ke.getcommonancestor(ke.g[id].kesel, 'a'); }, init : function(id) { var self = this; ke.g[id].contextmenuitems.push({ text : ke.lang['editlink'], click : function(id, menu) { ke.util.select(id); menu.hide(); self.click(id); }, cond : function(id) { return self.getselectednode(id); }, options : { width : '150px', iconhtml : '' } }); }, click : function(id) { ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : 'link', file : 'link/link.html', width : 400, height : 90, loadingmode : true, title : ke.lang['link'], yesbutton : ke.lang['yes'], nobutton : ke.lang['no'] }); this.dialog.show(); }, exec : function(id) { var g = ke.g[id]; ke.util.select(id); var range = g.kerange; var startnode = range.startnode; var endnode = range.endnode; var iframedoc = g.iframedoc; var dialogdoc = ke.util.getiframedoc(this.dialog.iframe); var url = ke.$('hyperlink', dialogdoc).value; var target = ke.$('linktype', dialogdoc).value; if (!url.match(/.+/) || url.match(/^\w+:\/\/\/?$/)) { alert(ke.lang['invalidurl']); ke.$('hyperlink', dialogdoc).focus(); return false; } var node = range.getparentelement(); while (node) { if (node.tagname.tolowercase() == 'a' || node.tagname.tolowercase() == 'body') break; node = node.parentnode; } node = node.parentnode; var isitem; if (ke.browser.ie) { isitem = !!g.range.item; } else { isitem = (startnode.nodetype == 1 && startnode === endnode && startnode.nodename.tolowercase() != 'br'); } var isempty = !isitem; if (!isitem) isempty = ke.browser.ie ? g.range.text === '' : g.range.tostring() === ''; if (isempty || ke.util.isempty(id)) { var html = ''; ke.util.inserthtml(id, html); } else { iframedoc.execcommand('createlink', false, '__ke_temp_url__'); var arr = node.getelementsbytagname('a'); for (var i = 0, l = arr.length; i < l; i++) { if (arr[i].href.match(/\/?__ke_temp_url__$/)) { arr[i].href = url; arr[i].setattribute('kesrc', url); if (target) arr[i].target = target; else arr[i].removeattribute('target'); } } if (ke.browser.webkit && isitem && startnode.tagname.tolowercase() == 'img') { var parent = startnode.parentnode; if (parent.tagname.tolowercase() != 'a') { var a = ke.$$('a', iframedoc); parent.insertbefore(a, startnode); a.appendchild(startnode); parent = a; } parent.href = url; parent.setattribute('kesrc', url); if (target) parent.target = target; else parent.removeattribute('target'); g.kesel.addrange(range); } } ke.util.execonchangehandler(id); this.dialog.hide(); ke.util.focus(id); } }; ke.plugin['unlink'] = { init : function(id) { var self = this; ke.g[id].contextmenuitems.push({ text : ke.lang['deletelink'], click : function(id, menu) { ke.util.select(id); menu.hide(); self.click(id); }, cond : function(id) { return ke.plugin['link'].getselectednode(id); }, options : { width : '150px', iconhtml : '' } }); ke.g[id].contextmenuitems.push('-'); }, click : function(id) { var g = ke.g[id]; var iframedoc = g.iframedoc; ke.util.selection(id); var range = g.kerange; var startnode = range.startnode; var endnode = range.endnode; var isitem = (startnode.nodetype == 1 && startnode === endnode); var isempty = !isitem; if (!isitem) isempty = ke.browser.ie ? g.range.text === '' : g.range.tostring() === ''; if (isempty) { var linknode = ke.plugin['link'].getselectednode(id); if (!linknode) return; var range = g.kerange; range.selecttextnode(linknode); g.kesel.addrange(range); ke.util.select(id); iframedoc.execcommand('unlink', false, null); if (ke.browser.webkit && startnode.tagname.tolowercase() == 'img') { var parent = startnode.parentnode; if (parent.tagname.tolowercase() == 'a') { ke.util.removeparent(parent); g.kesel.addrange(range); } } } else { iframedoc.execcommand('unlink', false, null); } ke.util.execonchangehandler(id); ke.toolbar.updatestate(id); ke.util.focus(id); } }; ke.plugin['media'] = { init : function(id) { var self = this; var typehash = {}; ke.each(ke.g[id].mediatypes, function(key, val) { typehash[val] = key; }); ke.g[id].gethtmlhooks.push(function(html) { return html.replace(/]*class="?ke-\w+"?[^>]*>/ig, function($0) { var width = $0.match(/style="[^"]*;?\s*width:\s*(\d+)/i) ? regexp.$1 : 0; var height = $0.match(/style="[^"]*;?\s*height:\s*(\d+)/i) ? regexp.$1 : 0; width = width || ($0.match(/width="([^"]+)"/i) ? regexp.$1 : 0); height = height || ($0.match(/height="([^"]+)"/i) ? regexp.$1 : 0); if ($0.match(/\s+kesrctag="([^"]+)"/i)) { var attrs = ke.util.getattrlist(unescape(regexp.$1)); attrs.width = width || attrs.width || 0; attrs.height = height || attrs.height || 0; attrs.kesrc = attrs.src; return ke.util.getmediaembed(attrs); } }); }); ke.g[id].sethtmlhooks.push(function(html) { return html.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/ig, function($0, $1) { if (typeof typehash[$1] == 'undefined') return $0; var src = $0.match(/\s+src="([^"]+)"/i) ? regexp.$1 : ''; if ($0.match(/\s+kesrc="([^"]+)"/i)) src = regexp.$1; var width = $0.match(/\s+width="([^"]+)"/i) ? regexp.$1 : 0; var height = $0.match(/\s+height="([^"]+)"/i) ? regexp.$1 : 0; var attrs = ke.util.getattrlist($0); attrs.src = src; attrs.width = width; attrs.height = height; return ke.util.getmediaimage(id, '', attrs); }); }); }, click : function(id) { ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : 'media', file : 'media.html', width : 400, height : 170, loadingmode : true, title : ke.lang['media'], 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,}\.(swf|flv|mp3|wav|wma|wmv|mid|avi|mpg|mpeg|asf|rm|rmvb)(\?|$)/i)) { alert(ke.lang['invalidmedia']); 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; if (!this.check(id, url, width, height)) return false; var autostart = ke.$('autostart', dialogdoc).checked ? 'true' : 'false'; var html = ke.util.getmediaimage(id, '', { src : url, type : ke.g[id].mediatypes[ke.util.getmediatype(url)], width : width, height : height, autostart : autostart, loop : 'true' }); ke.util.inserthtml(id, html); this.dialog.hide(); ke.util.focus(id); } }; ke.plugin['advtable'] = { getselectedtable : function(id) { return ke.getcommonancestor(ke.g[id].kesel, 'table'); }, getselectedrow : function(id) { return ke.getcommonancestor(ke.g[id].kesel, 'tr'); }, getselectedcell : function(id) { return ke.getcommonancestor(ke.g[id].kesel, 'td'); }, tableprop : function(id) { this.click(id); }, tableinsert : function(id) { this.click(id, 'insert'); }, tabledelete : function(id) { var table = this.getselectedtable(id); table.parentnode.removechild(table); }, tablecolinsert : function(id, offset) { var table = this.getselectedtable(id), cell = this.getselectedcell(id), index = cell.cellindex + offset; for (var i = 0, len = table.rows.length; i < len; i++) { var newcell = table.rows[i].insertcell(index); newcell.innerhtml = ' '; } }, tablecolinsertleft : function(id) { this.tablecolinsert(id, 0); }, tablecolinsertright : function(id) { this.tablecolinsert(id, 1); }, tablerowinsert : function(id, offset) { var table = this.getselectedtable(id), row = this.getselectedrow(id), newrow = table.insertrow(row.rowindex + offset); for (var i = 0, len = row.cells.length; i < len; i++) { var cell = newrow.insertcell(i); cell.innerhtml = ' '; } }, tablerowinsertabove : function(id) { this.tablerowinsert(id, 0); }, tablerowinsertbelow : function(id) { this.tablerowinsert(id, 1); }, tablecoldelete : function(id) { var table = this.getselectedtable(id); var cell = this.getselectedcell(id); for (var i = 0, len = table.rows.length; i < len; i++) { table.rows[i].deletecell(cell.cellindex); } }, tablerowdelete : function(id) { var table = this.getselectedtable(id); var row = this.getselectedrow(id); table.deleterow(row.rowindex); }, init : function(id) { var self = this; var zeroborder = 'ke-zeroborder'; var tablecmds = 'prop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,coldelete,rowdelete,insert,delete'.split(','); for (var i = 0, len = tablecmds.length; i < len; i++) { var name = 'table' + tablecmds[i]; ke.g[id].contextmenuitems.push({ text : ke.lang[name], click : (function(name) { return function(id, menu) { ke.util.select(id); menu.hide(); if (self[name] !== undefined) self[name](id); if (!/prop/.test(name)) { ke.util.execonchangehandler(id); } }; })(name), cond : (function(name) { if (ke.util.inarray(name, ['tableprop', 'tabledelete'])) { return function(id) { return self.getselectedtable(id); }; } else { return function(id) { return self.getselectedcell(id); }; } })(name), options : { width : '170px', iconhtml : '' } }); } ke.g[id].contextmenuitems.push('-'); ke.g[id].sethtmlhooks.push(function(html) { return html.replace(/]*)>/ig, function($0, $1) { if ($1.match(/\s+border=["']?(\d*)["']?/ig)) { var border = regexp.$1; if ($1.indexof(zeroborder) < 0 && (border === '' || border === '0')) { return ke.addclass($0, zeroborder); } else { return $0; } } else { return ke.addclass($0, zeroborder); } }); }); }, click : function(id, mode) { mode = mode || 'default'; var cmd = 'advtable'; ke.util.selection(id); this.dialog = new ke.dialog({ id : id, cmd : cmd, file : 'advtable/advtable.html?mode=' + mode, width : 420, height : 220, loadingmode : true, title : ke.lang['advtable'], yesbutton : ke.lang['yes'], nobutton : ke.lang['no'] }); this.dialog.show(); }, exec : function(id) { var zeroborder = 'ke-zeroborder'; var dialogdoc = ke.util.getiframedoc(this.dialog.iframe); var modebox = ke.$('mode', dialogdoc); var rowsbox = ke.$('rows', dialogdoc); var colsbox = ke.$('cols', dialogdoc); var widthbox = ke.$('width', dialogdoc); var heightbox = ke.$('height', dialogdoc); var widthtypebox = ke.$('widthtype', dialogdoc); var heighttypebox = ke.$('heighttype', dialogdoc); var paddingbox = ke.$('padding', dialogdoc); var spacingbox = ke.$('spacing', dialogdoc); var alignbox = ke.$('align', dialogdoc); var borderbox = ke.$('border', dialogdoc); var bordercolorbox = ke.$('bordercolor', dialogdoc); var backgroundcolorbox = ke.$('backgroundcolor', dialogdoc); var rows = rowsbox.value; var cols = colsbox.value; var width = widthbox.value; var height = heightbox.value; var widthtype = widthtypebox.value; var heighttype = heighttypebox.value; var padding = paddingbox.value; var spacing = spacingbox.value; var align = alignbox.value; var border = borderbox.value; var bordercolor = bordercolorbox.innerhtml; var backgroundcolor = backgroundcolorbox.innerhtml; if (rows == '' || rows == 0 || !rows.match(/^\d*$/)) { alert(ke.lang['invalidrows']); rowsbox.focus(); return false; } if (cols == '' || cols == 0 || !cols.match(/^\d*$/)) { alert(ke.lang['invalidcols']); colsbox.focus(); return false; } if (!width.match(/^\d*$/)) { alert(ke.lang['invalidwidth']); widthbox.focus(); return false; } if (!height.match(/^\d*$/)) { alert(ke.lang['invalidheight']); heightbox.focus(); return false; } if (!padding.match(/^\d*$/)) { alert(ke.lang['invalidpadding']); paddingbox.focus(); return false; } if (!spacing.match(/^\d*$/)) { alert(ke.lang['invalidspacing']); spacingbox.focus(); return false; } if (!border.match(/^\d*$/)) { alert(ke.lang['invalidborder']); borderbox.focus(); return false; } if (modebox.value === 'update') { var table = this.getselectedtable(id); if (width !== '') { table.style.width = width + widthtype; } else if (table.style.width) { table.style.width = ''; } if (table.width !== undefined) { table.removeattribute('width'); } if (height !== '') { table.style.height = height + heighttype; } else if (table.style.height) { table.style.height = ''; } if (table.height !== undefined) { table.removeattribute('height'); } if (backgroundcolor !== '') { table.style.backgroundcolor = backgroundcolor; } else if (table.style.backgroundcolor) { table.style.backgroundcolor = ''; } if (table.bgcolor !== undefined) { table.removeattribute('bgcolor'); } if (padding !== '') { table.cellpadding = padding; } else { table.removeattribute('cellpadding'); } if (spacing !== '') { table.cellspacing = spacing; } else { table.removeattribute('cellspacing'); } if (align !== '') { table.align = align; } else { table.removeattribute('align'); } if (border === '' || border === '0') { ke.addclass(table, zeroborder); } else { ke.removeclass(table, zeroborder); } if (border !== '') { table.setattribute('border', border); } else { table.removeattribute('border'); } if (bordercolor !== '') { table.setattribute('bordercolor', bordercolor); } else { table.removeattribute('bordercolor'); } ke.util.execonchangehandler(id); } else { var style = ''; if (width !== '') style += 'width:' + width + widthtype + ';'; if (height !== '') style += 'height:' + height + heighttype + ';'; if (backgroundcolor !== '') style += 'background-color:' + backgroundcolor + ';'; var html = '