From 94547ee4c70baec99f29c59b6f5e9d86e23b8872 Mon Sep 17 00:00:00 2001 From: Catouse Date: Mon, 15 Oct 2018 14:27:08 +0800 Subject: [PATCH] * update kindeditor, finish task #5014 and fix bug #2082. --- module/common/view/kindeditor.html.php | 33 +- www/js/kindeditor/Makefile | 2 +- www/js/kindeditor/kindeditor-min.js | 182 - www/js/kindeditor/kindeditor.js | 16500 ++++++++++------ www/js/kindeditor/kindeditor.min.css | 1 + www/js/kindeditor/kindeditor.min.js | 6 + .../kindeditor/themes/default/background.png | Bin 704 -> 0 bytes www/js/kindeditor/themes/default/default.css | 9 - www/js/kindeditor/themes/qq/editor.gif | Bin 1449 -> 0 bytes www/js/kindeditor/themes/qq/qq.css | 143 - www/js/kindeditor/themes/simple/simple.css | 100 - 11 files changed, 10693 insertions(+), 6283 deletions(-) delete mode 100755 www/js/kindeditor/kindeditor-min.js mode change 100755 => 100644 www/js/kindeditor/kindeditor.js create mode 100644 www/js/kindeditor/kindeditor.min.css create mode 100644 www/js/kindeditor/kindeditor.min.js delete mode 100755 www/js/kindeditor/themes/default/background.png delete mode 100644 www/js/kindeditor/themes/default/default.css delete mode 100755 www/js/kindeditor/themes/qq/editor.gif delete mode 100755 www/js/kindeditor/themes/qq/qq.css delete mode 100755 www/js/kindeditor/themes/simple/simple.css diff --git a/module/common/view/kindeditor.html.php b/module/common/view/kindeditor.html.php index 382b70479a..fe4a6a062c 100755 --- a/module/common/view/kindeditor.html.php +++ b/module/common/view/kindeditor.html.php @@ -11,8 +11,7 @@ $editorLang = isset($editorLangs[$app->getClientLang()]) ? $editorLangs[$app-> /* set uid for upload. */ $uid = uniqid(''); ?> - - + '; + }) + .replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/ig, function(full, attr, code) { + return '' + unescape(code) + ''; + }) + .replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/ig, function(full, start, src, end) { + full = full.replace(/(\s+(?:href|src)=")[^"]*(")/i, function($0, $1, $2) { + return $1 + _unescape(src) + $2; + }); + full = full.replace(/\s+data-ke-src="[^"]*"/i, ''); + return full; + }) + .replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/ig, function(full, start, end) { + return start + end; + }); + }); + self.beforeSetHtml(function(html) { + if(_IE && _V <= 8) { + html = html.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/ig, function(full) { + var attrs = _getAttrList(full); + var styles = _getCssList(attrs.style || ''); + if(styles.display == 'none') { + return '
'; + } + return full; + }); + } + return html.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/ig, function(full) { + var attrs = _getAttrList(full); + attrs.src = _undef(attrs.src, ''); + attrs.width = _undef(attrs.width, 0); + attrs.height = _undef(attrs.height, 0); + return _mediaImg(self.themesPath + 'common/blank.gif', attrs); + }) + .replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/ig, function(full) { + var attrs = _getAttrList(full); + if(attrs.href !== undefined) { + return full; + } + return ''; + }) + .replace(/]*)>([\s\S]*?)<\/script>/ig, function(full, attr, code) { + return '
' + escape(code) + '
'; + }) + .replace(/]*)>([\s\S]*?)<\/noscript>/ig, function(full, attr, code) { + return '
' + escape(code) + '
'; + }) + .replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/ig, function(full, start, key, src, end) { + if(full.match(/\sdata-ke-src="[^"]*"/i)) { + return full; + } + full = start + key + '="' + src + '"' + ' data-ke-src="' + _escape(src) + '"' + end; + return full; + }) + .replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/ig, function(full, start, end) { + return start + 'data-ke-' + end; + }) + .replace(/]*\s+border="0"[^>]*>/ig, function(full) { + if(full.indexOf('ke-zeroborder') >= 0) { + return full; + } + return _addClassToTag(full, 'ke-zeroborder'); + }); + }); + }); +})(window); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.lang({ + source: 'HTML代码', + preview: '预览', + undo: '后退(Ctrl+Z)', + redo: '前进(Ctrl+Y)', + cut: '剪切(Ctrl+X)', + copy: '复制(Ctrl+C)', + paste: '粘贴(Ctrl+V)', + plainpaste: '粘贴为无格式文本', + wordpaste: '从Word粘贴', + selectall: '全选(Ctrl+A)', + justifyleft: '左对齐', + justifycenter: '居中', + justifyright: '右对齐', + justifyfull: '两端对齐', + insertorderedlist: '编号', + insertunorderedlist: '项目符号', + indent: '增加缩进', + outdent: '减少缩进', + subscript: '下标', + superscript: '上标', + formatblock: '段落', + fontname: '字体', + fontsize: '文字大小', + forecolor: '文字颜色', + hilitecolor: '文字背景', + bold: '粗体(Ctrl+B)', + italic: '斜体(Ctrl+I)', + underline: '下划线(Ctrl+U)', + strikethrough: '删除线', + removeformat: '删除格式', + image: '图片', + multiimage: '批量图片上传', + flash: 'Flash', + media: '视音频', + table: '表格', + tablecell: '单元格', + hr: '插入横线', + emoticons: '插入表情', + link: '超级链接', + unlink: '取消超级链接', + fullscreen: '全屏显示', + about: '关于', + print: '打印(Ctrl+P)', + filemanager: '文件空间', + code: '插入程序代码', + map: 'Google地图', + baidumap: '百度地图', + lineheight: '行距', + clearhtml: '清理HTML代码', + pagebreak: '插入分页符', + quickformat: '一键排版', + insertfile: '插入文件', + template: '插入模板', + anchor: '锚点', + yes: '确定', + no: '取消', + close: '关闭', + editImage: '图片属性', + deleteImage: '删除图片', + editFlash: 'Flash属性', + deleteFlash: '删除Flash', + editMedia: '视音频属性', + deleteMedia: '删除视音频', + editLink: '超级链接属性', + deleteLink: '取消超级链接', + editAnchor: '锚点属性', + deleteAnchor: '删除锚点', + tableprop: '表格属性', + tablecellprop: '单元格属性', + tableinsert: '插入表格', + tabledelete: '删除表格', + tablecolinsertleft: '左侧插入列', + tablecolinsertright: '右侧插入列', + tablerowinsertabove: '上方插入行', + tablerowinsertbelow: '下方插入行', + tablerowmerge: '向下合并单元格', + tablecolmerge: '向右合并单元格', + tablerowsplit: '拆分行', + tablecolsplit: '拆分列', + tablecoldelete: '删除列', + tablerowdelete: '删除行', + noColor: '无颜色', + pleaseSelectFile: '请选择文件。', + invalidImg: "请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。", + invalidMedia: "请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。", + invalidWidth: "宽度必须为数字。", + invalidHeight: "高度必须为数字。", + invalidBorder: "边框必须为数字。", + invalidUrl: "请输入有效的URL地址。", + invalidRows: '行数为必选项,只允许输入大于0的数字。', + invalidCols: '列数为必选项,只允许输入大于0的数字。', + invalidPadding: '边距必须为数字。', + invalidSpacing: '间距必须为数字。', + invalidJson: '服务器发生故障。', + uploadSuccess: '上传成功。', + cutError: '您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。', + copyError: '您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。', + pasteError: '您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。', + ajaxLoading: '加载中,请稍候 ...', + uploadLoading: '上传中,请稍候 ...', + uploadError: '上传错误', + 'plainpaste.comment': '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。', + 'wordpaste.comment': '请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。', + 'code.pleaseInput': '请输入程序代码。', + 'link.url': 'URL', + 'link.linkType': '打开类型', + 'link.newWindow': '新窗口', + 'link.selfWindow': '当前窗口', + 'flash.url': 'URL', + 'flash.width': '宽度', + 'flash.height': '高度', + 'flash.upload': '上传', + 'flash.viewServer': '文件空间', + 'media.url': 'URL', + 'media.width': '宽度', + 'media.height': '高度', + 'media.autostart': '自动播放', + 'media.upload': '上传', + 'media.viewServer': '文件空间', + 'image.remoteImage': '网络图片', + 'image.localImage': '本地上传', + 'image.remoteUrl': '图片地址', + 'image.localUrl': '上传文件', + 'image.size': '图片大小', + 'image.width': '宽', + 'image.height': '高', + 'image.resetSize': '重置大小', + 'image.align': '对齐方式', + 'image.defaultAlign': '默认方式', + 'image.leftAlign': '左对齐', + 'image.rightAlign': '右对齐', + 'image.imgTitle': '图片说明', + 'image.upload': '浏览...', + 'image.viewServer': '图片空间', + 'multiimage.uploadDesc': '允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>', + 'multiimage.startUpload': '开始上传', + 'multiimage.clearAll': '全部清空', + 'multiimage.insertAll': '全部插入', + 'multiimage.queueLimitExceeded': '文件数量超过限制。', + 'multiimage.fileExceedsSizeLimit': '文件大小超过限制。', + 'multiimage.zeroByteFile': '无法上传空文件。', + 'multiimage.invalidFiletype': '文件类型不正确。', + 'multiimage.unknownError': '发生异常,无法上传。', + 'multiimage.pending': '等待上传', + 'multiimage.uploadError': '上传失败', + 'filemanager.emptyFolder': '空文件夹', + 'filemanager.moveup': '移到上一级文件夹', + 'filemanager.viewType': '显示方式:', + 'filemanager.viewImage': '缩略图', + 'filemanager.listImage': '详细信息', + 'filemanager.orderType': '排序方式:', + 'filemanager.fileName': '名称', + 'filemanager.fileSize': '大小', + 'filemanager.fileType': '类型', + 'insertfile.url': 'URL', + 'insertfile.title': '文件说明', + 'insertfile.upload': '上传', + 'insertfile.viewServer': '文件空间', + 'table.cells': '单元格数', + 'table.rows': '行数', + 'table.cols': '列数', + 'table.size': '大小', + 'table.width': '宽度', + 'table.height': '高度', + 'table.percent': '%', + 'table.px': 'px', + 'table.space': '边距间距', + 'table.padding': '边距', + 'table.spacing': '间距', + 'table.align': '对齐方式', + 'table.textAlign': '水平对齐', + 'table.verticalAlign': '垂直对齐', + 'table.alignDefault': '默认', + 'table.alignLeft': '左对齐', + 'table.alignCenter': '居中', + 'table.alignRight': '右对齐', + 'table.alignTop': '顶部', + 'table.alignMiddle': '中部', + 'table.alignBottom': '底部', + 'table.alignBaseline': '基线', + 'table.border': '边框', + 'table.borderWidth': '边框', + 'table.borderColor': '颜色', + 'table.backgroundColor': '背景颜色', + 'map.address': '地址: ', + 'map.search': '搜索', + 'baidumap.address': '地址: ', + 'baidumap.search': '搜索', + 'baidumap.insertDynamicMap': '插入动态地图', + 'anchor.name': '锚点名称', + 'formatblock.formatBlock': { + h1: '标题 1', + h2: '标题 2', + h3: '标题 3', + h4: '标题 4', + p: '正 文' + }, + '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' + }, + 'lineheight.lineHeight': [{ + '1': '单倍行距' + }, { + '1.5': '1.5倍行距' + }, { + '2': '2倍行距' + }, { + '2.5': '2.5倍行距' + }, { + '3': '3倍行距' + }], + 'template.selectTemplate': '可选模板', + 'template.replaceContent': '替换当前内容', + 'template.fileList': { + '1.html': '图片和文字', + '2.html': '表格', + '3.html': '项目编号' + } +}, 'zh_CN'); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('anchor', function(K) { + var self = this, + name = 'anchor', + lang = self.lang(name + '.'); + self.plugin.anchor = { + edit: function() { + var html = ['
', + '
', + '', + '', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 300, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + self.insertHtml('').hideDialog().focus(); + } + } + }); + var div = dialog.div, + nameBox = K('input[name="name"]', div); + var img = self.plugin.getSelectedAnchor(); + if(img) { + nameBox.val(unescape(img.attr('data-ke-name'))); + } + nameBox[0].focus(); + nameBox[0].select(); + }, + 'delete': function() { + self.plugin.getSelectedAnchor().remove(); + } + }; + self.clickToolbar(name, self.plugin.anchor.edit); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('autoheight', function(K) { + var self = this; + + if(!self.autoHeightMode) { + return; + } + + var edit = self.edit; + var body = edit.doc.body; + var minHeight = K.removeUnit(self.height); + + edit.iframe[0].scroll = 'no'; + body.style.overflowY = 'hidden'; + + function resetHeight() { + edit.iframe.height(minHeight); + self.resize(null, Math.max((K.IE ? body.scrollHeight : body.offsetHeight) + 76, minHeight)); + } + + /* + * 如何实现真正的自动高度? + * 修改编辑器高度之后,再次获取body内容高度时,最小值只会是当前iframe的设置高度,这样就导致高度只增不减。 + * 所以每次获取body内容高度之前,先将iframe的高度重置为最小高度,这样就能获取body的实际高度。 + * 由此就实现了真正的自动高度 + * 测试:chrome、firefox、IE9、IE8 + * */ + + edit.afterChange(resetHeight); + + if(self.isCreated) { + resetHeight(); + } else { + self.afterCreate(resetHeight); + } +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +// Baidu Maps: http://dev.baidu.com/wiki/map/index.php?title=%E9%A6%96%E9%A1%B5 + +KindEditor.plugin('baidumap', function(K) { + var self = this, + name = 'baidumap', + lang = self.lang(name + '.'); + var mapWidth = K.undef(self.mapWidth, 558); + var mapHeight = K.undef(self.mapHeight, 360); + self.clickToolbar(name, function() { + var html = ['
', + '
', + // left start + '
', + lang.address + ' ', + '', + '', + '', + '
', + // right start + '
', + ' ', + '
', + '
', + '
', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: mapWidth + 42, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var map = win.map; + var centerObj = map.getCenter(); + var center = centerObj.lng + ',' + centerObj.lat; + var zoom = map.getZoom(); + var url = [checkbox[0].checked ? self.pluginsPath + 'baidumap/index.html' : 'http://api.map.baidu.com/staticimage', + '?center=' + encodeURIComponent(center), + '&zoom=' + encodeURIComponent(zoom), + '&width=' + mapWidth, + '&height=' + mapHeight, + '&markers=' + encodeURIComponent(center), + '&markerStyles=' + encodeURIComponent('l,A') + ].join(''); + if(checkbox[0].checked) { + self.insertHtml(''); + } else { + self.exec('insertimage', url); + } + self.hideDialog().focus(); + } + }, + beforeRemove: function() { + searchBtn.remove(); + if(doc) { + doc.write(''); + } + iframe.remove(); + } + }); + var div = dialog.div, + addressBox = K('[name="address"]', div), + searchBtn = K('[name="searchBtn"]', div), + checkbox = K('[name="insertDynamicMap"]', dialog.div), + win, doc; + var iframe = K(''); + + function ready() { + win = iframe[0].contentWindow; + doc = K.iframeDoc(iframe); + } + iframe.bind('load', function() { + iframe.unbind('load'); + if(K.IE) { + ready(); + } else { + setTimeout(ready, 0); + } + }); + K('.ke-map', div).replaceWith(iframe); + // search map + searchBtn.click(function() { + win.search(addressBox.val()); + }); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('clearhtml', function(K) { + var self = this, + name = 'clearhtml'; + self.clickToolbar(name, function() { + self.focus(); + var html = self.html(); + html = html.replace(/(]*>)([\s\S]*?)(<\/script>)/ig, ''); + html = html.replace(/(]*>)([\s\S]*?)(<\/style>)/ig, ''); + html = K.formatHtml(html, { + a: ['href', 'target'], + embed: ['src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess'], + img: ['src', 'width', 'height', 'border', 'alt', 'title', '.width', '.height'], + table: ['border'], + 'td,th': ['rowspan', 'colspan'], + 'div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6': [] + }); + self.html(html); + self.cmd.selection(true); + self.addBookmark(); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +// google code prettify: http://google-code-prettify.googlecode.com/ +// http://google-code-prettify.googlecode.com/ + +KindEditor.plugin('code', function(K) { + var self = this, + name = 'code'; + self.clickToolbar(name, function() { + var lang = self.lang(name + '.'), + html = ['
', + '
', + '', + '
', + '', + '
' + ].join(''), + dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var type = K('.ke-code-type', dialog.div).val(), + code = textarea.val(), + cls = type === '' ? '' : ' lang-' + type, + html = '
\n' + K.escape(code) + '
'; + if(K.trim(code) === '') { + alert(lang.pleaseInput); + textarea[0].focus(); + return; + } + self.insertHtml(html).hideDialog().focus(); + } + } + }), + textarea = K('textarea', dialog.div); + textarea[0].focus(); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('emoticons', function(K) { + var self = this, + name = 'emoticons', + path = (self.emoticonsPath || self.pluginsPath + 'emoticons/images/'), + allowPreview = self.allowPreviewEmoticons === undefined ? true : self.allowPreviewEmoticons, + currentPageNum = 1; + self.clickToolbar(name, function() { + var rows = 5, + cols = 9, + total = 135, + startNum = 0, + cells = rows * cols, + pages = Math.ceil(total / cells), + colsHalf = Math.floor(cols / 2), + wrapperDiv = K('
'), + elements = [], + menu = self.createMenu({ + name: name, + beforeRemove: function() { + removeEvent(); + } + }); + menu.div.append(wrapperDiv); + var previewDiv, previewImg; + if(allowPreview) { + previewDiv = K('
').css('right', 0); + previewImg = K(''); + wrapperDiv.append(previewDiv); + previewDiv.append(previewImg); + } + + function bindCellEvent(cell, j, num) { + if(previewDiv) { + cell.mouseover(function() { + if(j > colsHalf) { + previewDiv.css('left', 0); + previewDiv.css('right', ''); + } else { + previewDiv.css('left', ''); + previewDiv.css('right', 0); + } + previewImg.attr('src', path + num + '.gif'); + K(this).addClass('ke-on'); + }); + } else { + cell.mouseover(function() { + K(this).addClass('ke-on'); + }); + } + cell.mouseout(function() { + K(this).removeClass('ke-on'); + }); + cell.click(function(e) { + self.insertHtml('').hideMenu().focus(); + e.stop(); + }); + } + + function createEmoticonsTable(pageNum, parentDiv) { + var table = document.createElement('table'); + parentDiv.append(table); + if(previewDiv) { + K(table).mouseover(function() { + previewDiv.show('block'); + }); + K(table).mouseout(function() { + previewDiv.hide(); + }); + elements.push(K(table)); + } + table.className = 'ke-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 = K(row.insertCell(j)); + cell.addClass('ke-cell'); + bindCellEvent(cell, j, num); + var span = K('') + .css('background-position', '-' + (24 * num) + 'px 0px') + .css('background-image', 'url(' + path + 'static.gif)'); + cell.append(span); + elements.push(cell); + num++; + } + } + return table; + } + var table = createEmoticonsTable(currentPageNum, wrapperDiv); + + function removeEvent() { + K.each(elements, function() { + this.unbind(); + }); + } + var pageDiv; + + function bindPageEvent(el, pageNum) { + el.click(function(e) { + removeEvent(); + table.parentNode.removeChild(table); + pageDiv.remove(); + table = createEmoticonsTable(pageNum, wrapperDiv); + createPageTable(pageNum); + currentPageNum = pageNum; + e.stop(); + }); + } + + function createPageTable(currentPageNum) { + pageDiv = K('
'); + wrapperDiv.append(pageDiv); + for(var pageNum = 1; pageNum <= pages; pageNum++) { + if(currentPageNum !== pageNum) { + var a = K('
[' + pageNum + ']'); + bindPageEvent(a, pageNum); + pageDiv.append(a); + elements.push(a); + } else { + pageDiv.append(K('@[' + pageNum + ']')); + } + pageDiv.append(K('@ ')); + } + } + createPageTable(currentPageNum); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('filemanager', function(K) { + var self = this, + name = 'filemanager', + fileManagerJson = K.undef(self.fileManagerJson, self.basePath + 'php/file_manager_json.php'), + imgPath = self.pluginsPath + name + '/images/', + lang = self.lang(name + '.'); + + function makeFileTitle(filename, filesize, datetime) { + return filename + ' (' + Math.ceil(filesize / 1024) + 'KB, ' + datetime + ')'; + } + + function bindTitle(el, data) { + if(data.is_dir) { + el.attr('title', data.filename); + } else { + el.attr('title', makeFileTitle(data.filename, data.filesize, data.datetime)); + } + } + self.plugin.filemanagerDialog = function(options) { + var width = K.undef(options.width, 650), + height = K.undef(options.height, 510), + dirName = K.undef(options.dirName, ''), + viewType = K.undef(options.viewType, 'VIEW').toUpperCase(), // "LIST" or "VIEW" + clickFn = options.clickFn; + var html = [ + '
', + // header start + '
', + // left start + '
', + ' ', + '' + lang.moveup + '', + '
', + // right start + '
', + lang.viewType + ' ', + lang.orderType + ' ', + '
', + '
', + '
', + // body start + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: width, + height: height, + title: self.lang(name), + body: html + }), + div = dialog.div, + bodyDiv = K('.ke-plugin-filemanager-body', div), + moveupImg = K('[name="moveupImg"]', div), + moveupLink = K('[name="moveupLink"]', div), + viewServerBtn = K('[name="viewServer"]', div), + viewTypeBox = K('[name="viewType"]', div), + orderTypeBox = K('[name="orderType"]', div); + + function reloadPage(path, order, func) { + var param = 'path=' + path + '&order=' + order + '&dir=' + dirName; + dialog.showLoading(self.lang('ajaxLoading')); + K.ajax(K.addParam(fileManagerJson, param + '&' + new Date().getTime()), function(data) { + dialog.hideLoading(); + func(data); + }); + } + var elList = []; + + function bindEvent(el, result, data, createFunc) { + var fileUrl = K.formatUrl(result.current_url + data.filename, 'absolute'), + dirPath = encodeURIComponent(result.current_dir_path + data.filename + '/'); + if(data.is_dir) { + el.click(function(e) { + reloadPage(dirPath, orderTypeBox.val(), createFunc); + }); + } else if(data.is_photo) { + el.click(function(e) { + clickFn.call(this, fileUrl, data.filename); + }); + } else { + el.click(function(e) { + clickFn.call(this, fileUrl, data.filename); + }); + } + elList.push(el); + } + + function createCommon(result, createFunc) { + // remove events + K.each(elList, function() { + this.unbind(); + }); + moveupLink.unbind(); + viewTypeBox.unbind(); + orderTypeBox.unbind(); + // add events + if(result.current_dir_path) { + moveupLink.click(function(e) { + reloadPage(result.moveup_dir_path, orderTypeBox.val(), createFunc); + }); + } + + function changeFunc() { + if(viewTypeBox.val() == 'VIEW') { + reloadPage(result.current_dir_path, orderTypeBox.val(), createView); + } else { + reloadPage(result.current_dir_path, orderTypeBox.val(), createList); + } + } + viewTypeBox.change(changeFunc); + orderTypeBox.change(changeFunc); + bodyDiv.html(''); + } + + function createList(result) { + createCommon(result, createList); + var table = document.createElement('table'); + table.className = 'ke-table'; + table.cellPadding = 0; + table.cellSpacing = 0; + table.border = 0; + bodyDiv.append(table); + var fileList = result.file_list; + for(var i = 0, len = fileList.length; i < len; i++) { + var data = fileList[i], + row = K(table.insertRow(i)); + row.mouseover(function(e) { + K(this).addClass('ke-on'); + }) + .mouseout(function(e) { + K(this).removeClass('ke-on'); + }); + var iconUrl = imgPath + (data.is_dir ? 'folder-16.gif' : 'file-16.gif'), + img = K('' + data.filename + ''), + cell0 = K(row[0].insertCell(0)).addClass('ke-cell ke-name').append(img).append(document.createTextNode(' ' + data.filename)); + if(!data.is_dir || data.has_file) { + row.css('cursor', 'pointer'); + cell0.attr('title', data.filename); + bindEvent(cell0, result, data, createList); + } else { + cell0.attr('title', lang.emptyFolder); + } + K(row[0].insertCell(1)).addClass('ke-cell ke-size').html(data.is_dir ? '-' : Math.ceil(data.filesize / 1024) + 'KB'); + K(row[0].insertCell(2)).addClass('ke-cell ke-datetime').html(data.datetime); + } + } + + function createView(result) { + createCommon(result, createView); + var fileList = result.file_list; + for(var i = 0, len = fileList.length; i < len; i++) { + var data = fileList[i], + div = K('
'); + bodyDiv.append(div); + var photoDiv = K('
') + .mouseover(function(e) { + K(this).addClass('ke-on'); + }) + .mouseout(function(e) { + K(this).removeClass('ke-on'); + }); + div.append(photoDiv); + var fileUrl = result.current_url + data.filename, + iconUrl = data.is_dir ? imgPath + 'folder-64.gif' : (data.is_photo ? fileUrl : imgPath + 'file-64.gif'); + var img = K('' + data.filename + ''); + if(!data.is_dir || data.has_file) { + photoDiv.css('cursor', 'pointer'); + bindTitle(photoDiv, data); + bindEvent(photoDiv, result, data, createView); + } else { + photoDiv.attr('title', lang.emptyFolder); + } + photoDiv.append(img); + div.append('
' + data.filename + '
'); + } + } + viewTypeBox.val(viewType); + reloadPage('', orderTypeBox.val(), viewType == 'VIEW' ? createView : createList); + return dialog; + } + +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('flash', function(K) { + var self = this, + name = 'flash', + lang = self.lang(name + '.'), + allowFlashUpload = K.undef(self.allowFlashUpload, true), + allowFileManager = K.undef(self.allowFileManager, false), + formatUploadUrl = K.undef(self.formatUploadUrl, true), + extraParams = K.undef(self.extraFileUploadParams, {}), + filePostName = K.undef(self.filePostName, 'imgFile'), + uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'); + self.plugin.flash = { + edit: function() { + var html = [ + '
', + //url + '
', + '', + '  ', + '  ', + '', + '', + '', + '
', + //width + '
', + '', + ' ', + '
', + //height + '
', + '', + ' ', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var url = K.trim(urlBox.val()), + width = widthBox.val(), + height = heightBox.val(); + if(url == 'http://' || K.invalidUrl(url)) { + alert(self.lang('invalidUrl')); + urlBox[0].focus(); + return; + } + if(!/^\d*$/.test(width)) { + alert(self.lang('invalidWidth')); + widthBox[0].focus(); + return; + } + if(!/^\d*$/.test(height)) { + alert(self.lang('invalidHeight')); + heightBox[0].focus(); + return; + } + var html = K.mediaImg(self.themesPath + 'common/blank.gif', { + src: url, + type: K.mediaType('.swf'), + width: width, + height: height, + quality: 'high' + }); + self.insertHtml(html).hideDialog().focus(); + } + } + }), + div = dialog.div, + urlBox = K('[name="url"]', div), + viewServerBtn = K('[name="viewServer"]', div), + widthBox = K('[name="width"]', div), + heightBox = K('[name="height"]', div); + urlBox.val('http://'); + + if(allowFlashUpload) { + var uploadbutton = K.uploadbutton({ + button: K('.ke-upload-button', div)[0], + fieldName: filePostName, + extraParams: extraParams, + url: K.addParam(uploadJson, 'dir=flash'), + afterUpload: function(data) { + dialog.hideLoading(); + if(data.error === 0) { + var url = data.url; + if(formatUploadUrl) { + url = K.formatUrl(url, 'absolute'); + } + urlBox.val(url); + if(self.afterUpload) { + self.afterUpload.call(self, url, data, name); + } + alert(self.lang('uploadSuccess')); + } else { + alert(data.message); + } + }, + afterError: function(html) { + dialog.hideLoading(); + self.errorDialog(html); + } + }); + uploadbutton.fileBox.change(function(e) { + dialog.showLoading(self.lang('uploadLoading')); + uploadbutton.submit(); + }); + } else { + K('.ke-upload-button', div).hide(); + } + + if(allowFileManager) { + viewServerBtn.click(function(e) { + self.loadPlugin('filemanager', function() { + self.plugin.filemanagerDialog({ + viewType: 'LIST', + dirName: 'flash', + clickFn: function(url, title) { + if(self.dialogs.length > 1) { + K('[name="url"]', div).val(url); + if(self.afterSelectFile) { + self.afterSelectFile.call(self, url); + } + self.hideDialog(); + } + } + }); + }); + }); + } else { + viewServerBtn.hide(); + } + + var img = self.plugin.getSelectedFlash(); + if(img) { + var attrs = K.mediaAttrs(img.attr('data-ke-tag')); + urlBox.val(attrs.src); + widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0); + heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0); + } + urlBox[0].focus(); + urlBox[0].select(); + }, + 'delete': function() { + self.plugin.getSelectedFlash().remove(); + // [IE] 删除图片后立即点击图片按钮出错 + self.addBookmark(); + } + }; + self.clickToolbar(name, self.plugin.flash.edit); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('image', function(K) { + var self = this, + name = 'image', + allowImageUpload = K.undef(self.allowImageUpload, true), + allowImageRemote = K.undef(self.allowImageRemote, true), + formatUploadUrl = K.undef(self.formatUploadUrl, true), + allowFileManager = K.undef(self.allowFileManager, false), + uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'), + imageTabIndex = K.undef(self.imageTabIndex, 0), + imgPath = self.pluginsPath + 'image/images/', + extraParams = K.undef(self.extraFileUploadParams, {}), + filePostName = K.undef(self.filePostName, 'imgFile'), + fillDescAfterUploadImage = K.undef(self.fillDescAfterUploadImage, false), + lang = self.lang(name + '.'); + + self.plugin.imageDialog = function(options) { + var imageUrl = options.imageUrl, + imageWidth = K.undef(options.imageWidth, ''), + imageHeight = K.undef(options.imageHeight, ''), + imageTitle = K.undef(options.imageTitle, ''), + imageAlign = K.undef(options.imageAlign, ''), + showRemote = K.undef(options.showRemote, true), + showLocal = K.undef(options.showLocal, true), + tabIndex = K.undef(options.tabIndex, 0), + clickFn = options.clickFn; + var target = 'kindeditor_upload_iframe_' + new Date().getTime(); + var hiddenElements = []; + for(var k in extraParams) { + hiddenElements.push(''); + } + var html = [ + '
', + //tabs + '
', + //remote image - start + '', + //remote image - end + //local upload - start + '', + //local upload - end + '
' + ].join(''); + var dialogWidth = showLocal || allowFileManager ? 450 : 400, + dialogHeight = showLocal && showRemote ? 300 : 250; + var dialog = self.createDialog({ + name: name, + width: dialogWidth, + height: dialogHeight, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + // Bugfix: http://code.google.com/p/kindeditor/issues/detail?id=319 + if(dialog.isLoading) { + return; + } + // insert local image + if(showLocal && showRemote && tabs && tabs.selectedIndex === 1 || !showRemote) { + if(uploadbutton.fileBox.val() == '') { + alert(self.lang('pleaseSelectFile')); + return; + } + dialog.showLoading(self.lang('uploadLoading')); + uploadbutton.submit(); + localUrlBox.val(''); + return; + } + // insert remote image + var url = K.trim(urlBox.val()), + width = widthBox.val(), + height = heightBox.val(), + title = titleBox.val(), + align = ''; + alignBox.each(function() { + if(this.checked) { + align = this.value; + return false; + } + }); + if(url == 'http://' || K.invalidUrl(url)) { + alert(self.lang('invalidUrl')); + urlBox[0].focus(); + return; + } + if(!/^\d*$/.test(width)) { + alert(self.lang('invalidWidth')); + widthBox[0].focus(); + return; + } + if(!/^\d*$/.test(height)) { + alert(self.lang('invalidHeight')); + heightBox[0].focus(); + return; + } + clickFn.call(self, url, title, width, height, 0, align); + } + }, + beforeRemove: function() { + viewServerBtn.unbind(); + widthBox.unbind(); + heightBox.unbind(); + refreshBtn.unbind(); + } + }), + div = dialog.div; + + var urlBox = K('[name="url"]', div), + localUrlBox = K('[name="localUrl"]', div), + viewServerBtn = K('[name="viewServer"]', div), + widthBox = K('.tab1 [name="width"]', div), + heightBox = K('.tab1 [name="height"]', div), + refreshBtn = K('.ke-refresh-btn', div), + titleBox = K('.tab1 [name="title"]', div), + alignBox = K('.tab1 [name="align"]', div); + + var tabs; + if(showRemote && showLocal) { + tabs = K.tabs({ + src: K('.tabs', div), + afterSelect: function(i) {} + }); + tabs.add({ + title: lang.remoteImage, + panel: K('.tab1', div) + }); + tabs.add({ + title: lang.localImage, + panel: K('.tab2', div) + }); + tabs.select(tabIndex); + } else if(showRemote) { + K('.tab1', div).show(); + } else if(showLocal) { + K('.tab2', div).show(); + } + + var uploadbutton = K.uploadbutton({ + button: K('.ke-upload-button', div)[0], + fieldName: filePostName, + form: K('.ke-form', div), + target: target, + width: 70, + afterUpload: function(data) { + dialog.hideLoading(); + if(data.error === 0) { + var url = data.url; + if(formatUploadUrl) { + url = K.formatUrl(url, 'absolute'); + } + if(self.afterUpload) { + self.afterUpload.call(self, url, data, name); + } + if(!fillDescAfterUploadImage) { + clickFn.call(self, url, data.title, data.width, data.height, data.border, data.align); + } else { + K(".ke-dialog-row #remoteUrl", div).val(url); + K(".ke-tabs-li", div)[0].click(); + K(".ke-refresh-btn", div).click(); + } + } else { + alert(data.message); + } + }, + afterError: function(html) { + dialog.hideLoading(); + self.errorDialog(html); + } + }); + uploadbutton.fileBox.change(function(e) { + localUrlBox.val(uploadbutton.fileBox.val()); + }); + if(allowFileManager) { + viewServerBtn.click(function(e) { + self.loadPlugin('filemanager', function() { + self.plugin.filemanagerDialog({ + viewType: 'VIEW', + dirName: 'image', + clickFn: function(url, title) { + if(self.dialogs.length > 1) { + K('[name="url"]', div).val(url); + if(self.afterSelectFile) { + self.afterSelectFile.call(self, url); + } + self.hideDialog(); + } + } + }); + }); + }); + } else { + viewServerBtn.hide(); + } + var originalWidth = 0, + originalHeight = 0; + + function setSize(width, height) { + widthBox.val(width); + heightBox.val(height); + originalWidth = width; + originalHeight = height; + } + refreshBtn.click(function(e) { + var tempImg = K('', document).css({ + position: 'absolute', + visibility: 'hidden', + top: 0, + left: '-1000px' + }); + tempImg.bind('load', function() { + setSize(tempImg.width(), tempImg.height()); + tempImg.remove(); + }); + K(document.body).append(tempImg); + }); + widthBox.change(function(e) { + if(originalWidth > 0) { + heightBox.val(Math.round(originalHeight / originalWidth * parseInt(this.value, 10))); + } + }); + heightBox.change(function(e) { + if(originalHeight > 0) { + widthBox.val(Math.round(originalWidth / originalHeight * parseInt(this.value, 10))); + } + }); + urlBox.val(options.imageUrl); + setSize(options.imageWidth, options.imageHeight); + titleBox.val(options.imageTitle); + alignBox.each(function() { + if(this.value === options.imageAlign) { + this.checked = true; + return false; + } + }); + if(showRemote && tabIndex === 0) { + urlBox[0].focus(); + urlBox[0].select(); + } + return dialog; + }; + self.plugin.image = { + edit: function() { + var img = self.plugin.getSelectedImage(); + self.plugin.imageDialog({ + imageUrl: img ? img.attr('data-ke-src') : 'http://', + imageWidth: img ? img.width() : '', + imageHeight: img ? img.height() : '', + imageTitle: img ? img.attr('title') : '', + imageAlign: img ? img.attr('align') : '', + showRemote: allowImageRemote, + showLocal: allowImageUpload, + tabIndex: img ? 0 : imageTabIndex, + clickFn: function(url, title, width, height, border, align) { + if(img) { + img.attr('src', url); + img.attr('data-ke-src', url); + img.attr('width', width); + img.attr('height', height); + img.attr('title', title); + img.attr('align', align); + img.attr('alt', title); + } else { + self.exec('insertimage', url, title, width, height, border, align); + } + // Bugfix: [Firefox] 上传图片后,总是出现正在加载的样式,需要延迟执行hideDialog + setTimeout(function() { + self.hideDialog().focus(); + }, 0); + } + }); + }, + 'delete': function() { + var target = self.plugin.getSelectedImage(); + if(target.parent().name == 'a') { + target = target.parent(); + } + target.remove(); + // [IE] 删除图片后立即点击图片按钮出错 + self.addBookmark(); + } + }; + self.clickToolbar(name, self.plugin.image.edit); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('insertfile', function(K) { + var self = this, + name = 'insertfile', + allowFileUpload = K.undef(self.allowFileUpload, true), + allowFileManager = K.undef(self.allowFileManager, false), + formatUploadUrl = K.undef(self.formatUploadUrl, true), + uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'), + extraParams = K.undef(self.extraFileUploadParams, {}), + filePostName = K.undef(self.filePostName, 'imgFile'), + lang = self.lang(name + '.'); + self.plugin.fileDialog = function(options) { + var fileUrl = K.undef(options.fileUrl, 'http://'), + fileTitle = K.undef(options.fileTitle, ''), + clickFn = options.clickFn; + var html = [ + '
', + '
', + '', + '  ', + '  ', + '', + '', + '', + '
', + //title + '
', + '', + '
', + '
', + //form end + '', + '' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var url = K.trim(urlBox.val()), + title = titleBox.val(); + if(url == 'http://' || K.invalidUrl(url)) { + alert(self.lang('invalidUrl')); + urlBox[0].focus(); + return; + } + if(K.trim(title) === '') { + title = url; + } + clickFn.call(self, url, title); + } + } + }), + div = dialog.div; + + var urlBox = K('[name="url"]', div), + viewServerBtn = K('[name="viewServer"]', div), + titleBox = K('[name="title"]', div); + + if(allowFileUpload) { + var uploadbutton = K.uploadbutton({ + button: K('.ke-upload-button', div)[0], + fieldName: filePostName, + url: K.addParam(uploadJson, 'dir=file'), + extraParams: extraParams, + afterUpload: function(data) { + dialog.hideLoading(); + if(data.error === 0) { + var url = data.url; + if(formatUploadUrl) { + url = K.formatUrl(url, 'absolute'); + } + urlBox.val(url); + if(self.afterUpload) { + self.afterUpload.call(self, url, data, name); + } + alert(self.lang('uploadSuccess')); + } else { + alert(data.message); + } + }, + afterError: function(html) { + dialog.hideLoading(); + self.errorDialog(html); + } + }); + uploadbutton.fileBox.change(function(e) { + dialog.showLoading(self.lang('uploadLoading')); + uploadbutton.submit(); + }); + } else { + K('.ke-upload-button', div).hide(); + } + if(allowFileManager) { + viewServerBtn.click(function(e) { + self.loadPlugin('filemanager', function() { + self.plugin.filemanagerDialog({ + viewType: 'LIST', + dirName: 'file', + clickFn: function(url, title) { + if(self.dialogs.length > 1) { + K('[name="url"]', div).val(url); + if(self.afterSelectFile) { + self.afterSelectFile.call(self, url); + } + self.hideDialog(); + } + } + }); + }); + }); + } else { + viewServerBtn.hide(); + } + urlBox.val(fileUrl); + titleBox.val(fileTitle); + urlBox[0].focus(); + urlBox[0].select(); + }; + self.clickToolbar(name, function() { + self.plugin.fileDialog({ + clickFn: function(url, title) { + var html = '' + title + ''; + self.insertHtml(html).hideDialog().focus(); + } + }); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('lineheight', function(K) { + var self = this, + name = 'lineheight', + lang = self.lang(name + '.'); + self.clickToolbar(name, function() { + var curVal = '', + commonNode = self.cmd.commonNode({ + '*': '.line-height' + }); + if(commonNode) { + curVal = commonNode.css('line-height'); + } + var menu = self.createMenu({ + name: name, + width: 150 + }); + K.each(lang.lineHeight, function(i, row) { + K.each(row, function(key, val) { + menu.addItem({ + title: val, + checked: curVal === key, + click: function() { + self.cmd.toggle('', { + span: '.line-height=' + key + }); + self.updateState(); + self.addBookmark(); + self.hideMenu(); + } + }); + }); + }); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('link', function(K) { + var self = this, + name = 'link'; + self.plugin.link = { + edit: function() { + var lang = self.lang(name + '.'), + html = '
' + + //url + '
' + + '' + + '
' + + //type + '
' + + '' + + '' + + '
' + + '
', + dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var url = K.trim(urlBox.val()); + if(url == 'http://' || K.invalidUrl(url)) { + alert(self.lang('invalidUrl')); + urlBox[0].focus(); + return; + } + self.exec('createlink', url, typeBox.val()).hideDialog().focus(); + } + } + }), + div = dialog.div, + urlBox = K('input[name="url"]', div), + typeBox = K('select[name="type"]', div); + urlBox.val('http://'); + typeBox[0].options[0] = new Option(lang.newWindow, '_blank'); + typeBox[0].options[1] = new Option(lang.selfWindow, ''); + self.cmd.selection(); + var a = self.plugin.getSelectedLink(); + if(a) { + self.cmd.range.selectNode(a[0]); + self.cmd.select(); + urlBox.val(a.attr('data-ke-src')); + typeBox.val(a.attr('target')); + } + urlBox[0].focus(); + urlBox[0].select(); + }, + 'delete': function() { + self.exec('unlink', null); + } + }; + self.clickToolbar(name, self.plugin.link.edit); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +// Google Maps: http://code.google.com/apis/maps/index.html + +KindEditor.plugin('map', function(K) { + var self = this, + name = 'map', + lang = self.lang(name + '.'); + self.clickToolbar(name, function() { + var html = ['
', + '
', + lang.address + ' ', + '', + '', + '', + '
', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 600, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var geocoder = win.geocoder, + map = win.map, + center = map.getCenter().lat() + ',' + map.getCenter().lng(), + zoom = map.getZoom(), + maptype = map.getMapTypeId(), + url = 'http://maps.googleapis.com/maps/api/staticmap'; + url += '?center=' + encodeURIComponent(center); + url += '&zoom=' + encodeURIComponent(zoom); + url += '&size=558x360'; + url += '&maptype=' + encodeURIComponent(maptype); + url += '&markers=' + encodeURIComponent(center); + url += '&language=' + self.langType; + url += '&sensor=false'; + self.exec('insertimage', url).hideDialog().focus(); + } + }, + beforeRemove: function() { + searchBtn.remove(); + if(doc) { + doc.write(''); + } + iframe.remove(); + } + }); + var div = dialog.div, + addressBox = K('[name="address"]', div), + searchBtn = K('[name="searchBtn"]', div), + win, doc; + var iframeHtml = ['', + '', + '', + '', + '', + '', + '', + '
', + '' + ].join('\n'); + // TODO:用doc.write(iframeHtml)方式加载时,在IE6上第一次加载报错,暂时使用src方式 + var iframe = K(''); + + function ready() { + win = iframe[0].contentWindow; + doc = K.iframeDoc(iframe); + //doc.open(); + //doc.write(iframeHtml); + //doc.close(); + } + iframe.bind('load', function() { + iframe.unbind('load'); + if(K.IE) { + ready(); + } else { + setTimeout(ready, 0); + } + }); + K('.ke-map', div).replaceWith(iframe); + // search map + searchBtn.click(function() { + win.search(addressBox.val()); + }); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('media', function(K) { + var self = this, + name = 'media', + lang = self.lang(name + '.'), + allowMediaUpload = K.undef(self.allowMediaUpload, true), + allowFileManager = K.undef(self.allowFileManager, false), + formatUploadUrl = K.undef(self.formatUploadUrl, true), + extraParams = K.undef(self.extraFileUploadParams, {}), + filePostName = K.undef(self.filePostName, 'imgFile'), + uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'); + self.plugin.media = { + edit: function() { + var html = [ + '
', + //url + '
', + '', + '  ', + '  ', + '', + '', + '', + '
', + //width + '
', + '', + '', + '
', + //height + '
', + '', + '', + '
', + //autostart + '
', + '', + ' ', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 450, + height: 230, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var url = K.trim(urlBox.val()), + width = widthBox.val(), + height = heightBox.val(); + if(url == 'http://' || K.invalidUrl(url)) { + alert(self.lang('invalidUrl')); + urlBox[0].focus(); + return; + } + if(!/^\d*$/.test(width)) { + alert(self.lang('invalidWidth')); + widthBox[0].focus(); + return; + } + if(!/^\d*$/.test(height)) { + alert(self.lang('invalidHeight')); + heightBox[0].focus(); + return; + } + var html = K.mediaImg(self.themesPath + 'common/blank.gif', { + src: url, + type: K.mediaType(url), + width: width, + height: height, + autostart: autostartBox[0].checked ? 'true' : 'false', + loop: 'true' + }); + self.insertHtml(html).hideDialog().focus(); + } + } + }), + div = dialog.div, + urlBox = K('[name="url"]', div), + viewServerBtn = K('[name="viewServer"]', div), + widthBox = K('[name="width"]', div), + heightBox = K('[name="height"]', div), + autostartBox = K('[name="autostart"]', div); + urlBox.val('http://'); + + if(allowMediaUpload) { + var uploadbutton = K.uploadbutton({ + button: K('.ke-upload-button', div)[0], + fieldName: filePostName, + extraParams: extraParams, + url: K.addParam(uploadJson, 'dir=media'), + afterUpload: function(data) { + dialog.hideLoading(); + if(data.error === 0) { + var url = data.url; + if(formatUploadUrl) { + url = K.formatUrl(url, 'absolute'); + } + urlBox.val(url); + if(self.afterUpload) { + self.afterUpload.call(self, url, data, name); + } + alert(self.lang('uploadSuccess')); + } else { + alert(data.message); + } + }, + afterError: function(html) { + dialog.hideLoading(); + self.errorDialog(html); + } + }); + uploadbutton.fileBox.change(function(e) { + dialog.showLoading(self.lang('uploadLoading')); + uploadbutton.submit(); + }); + } else { + K('.ke-upload-button', div).hide(); + } + + if(allowFileManager) { + viewServerBtn.click(function(e) { + self.loadPlugin('filemanager', function() { + self.plugin.filemanagerDialog({ + viewType: 'LIST', + dirName: 'media', + clickFn: function(url, title) { + if(self.dialogs.length > 1) { + K('[name="url"]', div).val(url); + if(self.afterSelectFile) { + self.afterSelectFile.call(self, url); + } + self.hideDialog(); + } + } + }); + }); + }); + } else { + viewServerBtn.hide(); + } + + var img = self.plugin.getSelectedMedia(); + if(img) { + var attrs = K.mediaAttrs(img.attr('data-ke-tag')); + urlBox.val(attrs.src); + widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0); + heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0); + autostartBox[0].checked = (attrs.autostart === 'true'); + } + urlBox[0].focus(); + urlBox[0].select(); + }, + 'delete': function() { + self.plugin.getSelectedMedia().remove(); + // [IE] 删除图片后立即点击图片按钮出错 + self.addBookmark(); + } + }; + self.clickToolbar(name, self.plugin.media.edit); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + + +(function(K) { + + function KSWFUpload(options) { + this.init(options); + } + K.extend(KSWFUpload, { + init: function(options) { + var self = this; + options.afterError = options.afterError || function(str) { + alert(str); + }; + self.options = options; + self.progressbars = {}; + // template + self.div = K(options.container).html([ + '
', + '
', + '
', + '', + '
', + '
' + options.uploadDesc + '
', + '', + '', + '', + '
', + '
', + '
' + ].join('')); + self.bodyDiv = K('.ke-swfupload-body', self.div); + + function showError(itemDiv, msg) { + K('.ke-status > div', itemDiv).hide(); + K('.ke-message', itemDiv).addClass('ke-error').show().html(K.escape(msg)); + } + + var settings = { + debug: false, + upload_url: options.uploadUrl, + flash_url: options.flashUrl, + file_post_name: options.filePostName, + button_placeholder: K('.ke-swfupload-button > input', self.div)[0], + button_image_url: options.buttonImageUrl, + button_width: options.buttonWidth, + button_height: options.buttonHeight, + button_cursor: SWFUpload.CURSOR.HAND, + file_types: options.fileTypes, + file_types_description: options.fileTypesDesc, + file_upload_limit: options.fileUploadLimit, + file_size_limit: options.fileSizeLimit, + post_params: options.postParams, + file_queued_handler: function(file) { + file.url = self.options.fileIconUrl; + self.appendFile(file); + }, + file_queue_error_handler: function(file, errorCode, message) { + var errorName = ''; + switch(errorCode) { + case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED: + errorName = options.queueLimitExceeded; + break; + case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: + errorName = options.fileExceedsSizeLimit; + break; + case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: + errorName = options.zeroByteFile; + break; + case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: + errorName = options.invalidFiletype; + break; + default: + errorName = options.unknownError; + break; + } + K.DEBUG && alert(errorName); + }, + upload_start_handler: function(file) { + var self = this; + var itemDiv = K('div[data-id="' + file.id + '"]', self.bodyDiv); + K('.ke-status > div', itemDiv).hide(); + K('.ke-progressbar', itemDiv).show(); + }, + upload_progress_handler: function(file, bytesLoaded, bytesTotal) { + var percent = Math.round(bytesLoaded * 100 / bytesTotal); + var progressbar = self.progressbars[file.id]; + progressbar.bar.css('width', Math.round(percent * 80 / 100) + 'px'); + progressbar.percent.html(percent + '%'); + }, + upload_error_handler: function(file, errorCode, message) { + if(file && file.filestatus == SWFUpload.FILE_STATUS.ERROR) { + var itemDiv = K('div[data-id="' + file.id + '"]', self.bodyDiv).eq(0); + showError(itemDiv, self.options.errorMessage); + } + }, + upload_success_handler: function(file, serverData) { + var itemDiv = K('div[data-id="' + file.id + '"]', self.bodyDiv).eq(0); + var data = {}; + try { + data = K.json(serverData); + } catch(e) { + self.options.afterError.call(this, '' + serverData + ''); + } + if(data.error !== 0) { + showError(itemDiv, K.DEBUG ? data.message : self.options.errorMessage); + return; + } + file.url = data.url; + K('.ke-img', itemDiv).attr('src', file.url).attr('data-status', file.filestatus).data('data', data); + K('.ke-status > div', itemDiv).hide(); + } + }; + self.swfu = new SWFUpload(settings); + + K('.ke-swfupload-startupload input', self.div).click(function() { + self.swfu.startUpload(); + }); + }, + getUrlList: function() { + var list = []; + K('.ke-img', self.bodyDiv).each(function() { + var img = K(this); + var status = img.attr('data-status'); + if(status == SWFUpload.FILE_STATUS.COMPLETE) { + list.push(img.data('data')); + } + }); + return list; + }, + removeFile: function(fileId) { + var self = this; + self.swfu.cancelUpload(fileId); + var itemDiv = K('div[data-id="' + fileId + '"]', self.bodyDiv); + K('.ke-photo', itemDiv).unbind(); + K('.ke-delete', itemDiv).unbind(); + itemDiv.remove(); + }, + removeFiles: function() { + var self = this; + K('.ke-item', self.bodyDiv).each(function() { + self.removeFile(K(this).attr('data-id')); + }); + }, + appendFile: function(file) { + var self = this; + var itemDiv = K('
'); + self.bodyDiv.append(itemDiv); + var photoDiv = K('
') + .mouseover(function(e) { + K(this).addClass('ke-on'); + }) + .mouseout(function(e) { + K(this).removeClass('ke-on'); + }); + itemDiv.append(photoDiv); + + var img = K('' + file.name + ''); + photoDiv.append(img); + K('').appendTo(photoDiv).click(function() { + self.removeFile(file.id); + }); + var statusDiv = K('
').appendTo(photoDiv); + // progressbar + K(['
', + '
', + '
0%
' + ].join('')).hide().appendTo(statusDiv); + // message + K('
' + self.options.pendingMessage + '
').appendTo(statusDiv); + + itemDiv.append('
' + file.name + '
'); + + self.progressbars[file.id] = { + bar: K('.ke-progressbar-bar-inner', photoDiv), + percent: K('.ke-progressbar-percent', photoDiv) + }; + }, + remove: function() { + this.removeFiles(); + this.swfu.destroy(); + this.div.html(''); + } + }); + + K.swfupload = function(element, options) { + return new KSWFUpload(element, options); + }; + +})(KindEditor); + +KindEditor.plugin('multiimage', function(K) { + var self = this, + name = 'multiimage', + formatUploadUrl = K.undef(self.formatUploadUrl, true), + uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'), + imgPath = self.pluginsPath + 'multiimage/images/', + imageSizeLimit = K.undef(self.imageSizeLimit, '1MB'), + imageFileTypes = K.undef(self.imageFileTypes, '*.jpg;*.gif;*.png'), + imageUploadLimit = K.undef(self.imageUploadLimit, 20), + filePostName = K.undef(self.filePostName, 'imgFile'), + lang = self.lang(name + '.'); + + self.plugin.multiImageDialog = function(options) { + var clickFn = options.clickFn, + uploadDesc = K.tmpl(lang.uploadDesc, { + uploadLimit: imageUploadLimit, + sizeLimit: imageSizeLimit + }); + var html = [ + '
', + '
', + '
', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 650, + height: 510, + title: self.lang(name), + body: html, + previewBtn: { + name: lang.insertAll, + click: function(e) { + clickFn.call(self, swfupload.getUrlList()); + } + }, + yesBtn: { + name: lang.clearAll, + click: function(e) { + swfupload.removeFiles(); + } + }, + beforeRemove: function() { + // IE9 bugfix: https://github.com/kindsoft/kindeditor/issues/72 + if(!K.IE || K.V <= 8) { + swfupload.remove(); + } + } + }), + div = dialog.div; + + var swfupload = K.swfupload({ + container: K('.swfupload', div), + buttonImageUrl: imgPath + (self.langType == 'zh_CN' ? 'select-files-zh_CN.png' : 'select-files-en.png'), + buttonWidth: self.langType == 'zh_CN' ? 72 : 88, + buttonHeight: 23, + fileIconUrl: imgPath + 'image.png', + uploadDesc: uploadDesc, + startButtonValue: lang.startUpload, + uploadUrl: K.addParam(uploadJson, 'dir=image'), + flashUrl: imgPath + 'swfupload.swf', + filePostName: filePostName, + fileTypes: '*.jpg;*.jpeg;*.gif;*.png;*.bmp', + fileTypesDesc: 'Image Files', + fileUploadLimit: imageUploadLimit, + fileSizeLimit: imageSizeLimit, + postParams: K.undef(self.extraFileUploadParams, {}), + queueLimitExceeded: lang.queueLimitExceeded, + fileExceedsSizeLimit: lang.fileExceedsSizeLimit, + zeroByteFile: lang.zeroByteFile, + invalidFiletype: lang.invalidFiletype, + unknownError: lang.unknownError, + pendingMessage: lang.pending, + errorMessage: lang.uploadError, + afterError: function(html) { + self.errorDialog(html); + } + }); + + return dialog; + }; + self.clickToolbar(name, function() { + self.plugin.multiImageDialog({ + clickFn: function(urlList) { + if(urlList.length === 0) { + return; + } + K.each(urlList, function(i, data) { + if(self.afterUpload) { + self.afterUpload.call(self, data.url, data, 'multiimage'); + } + self.exec('insertimage', data.url, data.title, data.width, data.height, data.border, data.align); + }); + // Bugfix: [Firefox] 上传图片后,总是出现正在加载的样式,需要延迟执行hideDialog + setTimeout(function() { + self.hideDialog().focus(); + }, 0); + } + }); + }); +}); + + +/** + * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com + * + * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ + * + * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilz閚 and Mammon Media and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ + + +/* ******************* */ +/* Constructor & Init */ +/* ******************* */ + +(function() { + + window.SWFUpload = function(settings) { + this.initSWFUpload(settings); + }; + + SWFUpload.prototype.initSWFUpload = function(settings) { + try { + this.customSettings = {}; // A container where developers can place their own settings associated with this instance. + this.settings = settings; + this.eventQueue = []; + this.movieName = "KindEditor_SWFUpload_" + SWFUpload.movieCount++; + this.movieElement = null; + + + // Setup global control tracking + SWFUpload.instances[this.movieName] = this; + + // Load the settings. Load the Flash movie. + this.initSettings(); + this.loadFlash(); + this.displayDebugInfo(); + } catch(ex) { + delete SWFUpload.instances[this.movieName]; + throw ex; + } + }; + + /* *************** */ + /* Static Members */ + /* *************** */ + SWFUpload.instances = {}; + SWFUpload.movieCount = 0; + SWFUpload.version = "2.2.0 2009-03-25"; + SWFUpload.QUEUE_ERROR = { + QUEUE_LIMIT_EXCEEDED: -100, + FILE_EXCEEDS_SIZE_LIMIT: -110, + ZERO_BYTE_FILE: -120, + INVALID_FILETYPE: -130 + }; + SWFUpload.UPLOAD_ERROR = { + HTTP_ERROR: -200, + MISSING_UPLOAD_URL: -210, + IO_ERROR: -220, + SECURITY_ERROR: -230, + UPLOAD_LIMIT_EXCEEDED: -240, + UPLOAD_FAILED: -250, + SPECIFIED_FILE_ID_NOT_FOUND: -260, + FILE_VALIDATION_FAILED: -270, + FILE_CANCELLED: -280, + UPLOAD_STOPPED: -290 + }; + SWFUpload.FILE_STATUS = { + QUEUED: -1, + IN_PROGRESS: -2, + ERROR: -3, + COMPLETE: -4, + CANCELLED: -5 + }; + SWFUpload.BUTTON_ACTION = { + SELECT_FILE: -100, + SELECT_FILES: -110, + START_UPLOAD: -120 + }; + SWFUpload.CURSOR = { + ARROW: -1, + HAND: -2 + }; + SWFUpload.WINDOW_MODE = { + WINDOW: "window", + TRANSPARENT: "transparent", + OPAQUE: "opaque" + }; + + // Private: takes a URL, determines if it is relative and converts to an absolute URL + // using the current site. Only processes the URL if it can, otherwise returns the URL untouched + SWFUpload.completeURL = function(url) { + if(typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) { + return url; + } + + var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : ""); + + var indexSlash = window.location.pathname.lastIndexOf("/"); + if(indexSlash <= 0) { + path = "/"; + } else { + path = window.location.pathname.substr(0, indexSlash) + "/"; + } + + return /*currentURL +*/ path + url; + + }; + + + /* ******************** */ + /* Instance Members */ + /* ******************** */ + + // Private: initSettings ensures that all the + // settings are set, getting a default value if one was not assigned. + SWFUpload.prototype.initSettings = function() { + this.ensureDefault = function(settingName, defaultValue) { + this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName]; + }; + + // Upload backend settings + this.ensureDefault("upload_url", ""); + this.ensureDefault("preserve_relative_urls", false); + this.ensureDefault("file_post_name", "Filedata"); + this.ensureDefault("post_params", {}); + this.ensureDefault("use_query_string", false); + this.ensureDefault("requeue_on_error", false); + this.ensureDefault("http_success", []); + this.ensureDefault("assume_success_timeout", 0); + + // File Settings + this.ensureDefault("file_types", "*.*"); + this.ensureDefault("file_types_description", "All Files"); + this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited" + this.ensureDefault("file_upload_limit", 0); + this.ensureDefault("file_queue_limit", 0); + + // Flash Settings + this.ensureDefault("flash_url", "swfupload.swf"); + this.ensureDefault("prevent_swf_caching", true); + + // Button Settings + this.ensureDefault("button_image_url", ""); + this.ensureDefault("button_width", 1); + this.ensureDefault("button_height", 1); + this.ensureDefault("button_text", ""); + this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;"); + this.ensureDefault("button_text_top_padding", 0); + this.ensureDefault("button_text_left_padding", 0); + this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES); + this.ensureDefault("button_disabled", false); + this.ensureDefault("button_placeholder_id", ""); + this.ensureDefault("button_placeholder", null); + this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW); + this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW); + + // Debug Settings + this.ensureDefault("debug", false); + this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API + + // Event Handlers + this.settings.return_upload_start_handler = this.returnUploadStart; + this.ensureDefault("swfupload_loaded_handler", null); + this.ensureDefault("file_dialog_start_handler", null); + this.ensureDefault("file_queued_handler", null); + this.ensureDefault("file_queue_error_handler", null); + this.ensureDefault("file_dialog_complete_handler", null); + + this.ensureDefault("upload_start_handler", null); + this.ensureDefault("upload_progress_handler", null); + this.ensureDefault("upload_error_handler", null); + this.ensureDefault("upload_success_handler", null); + this.ensureDefault("upload_complete_handler", null); + + this.ensureDefault("debug_handler", this.debugMessage); + + this.ensureDefault("custom_settings", {}); + + // Other settings + this.customSettings = this.settings.custom_settings; + + // Update the flash url if needed + if(!!this.settings.prevent_swf_caching) { + this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime(); + } + + if(!this.settings.preserve_relative_urls) { + //this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url); // Don't need to do this one since flash doesn't look at it + this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url); + this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url); + } + + delete this.ensureDefault; + }; + + // Private: loadFlash replaces the button_placeholder element with the flash movie. + SWFUpload.prototype.loadFlash = function() { + var targetElement, tempParent; + + // Make sure an element with the ID we are going to use doesn't already exist + if(document.getElementById(this.movieName) !== null) { + throw "ID " + this.movieName + " is already in use. The Flash Object could not be added"; + } + + // Get the element where we will be placing the flash movie + targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder; + + if(targetElement == undefined) { + throw "Could not find the placeholder element: " + this.settings.button_placeholder_id; + } + + // Append the container and load the flash + tempParent = document.createElement("div"); + tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers) + targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement); + + // Fix IE Flash/Form bug + if(window[this.movieName] == undefined) { + window[this.movieName] = this.getMovieElement(); + } + + }; + + // Private: getFlashHTML generates the object tag needed to embed the flash in to the document + SWFUpload.prototype.getFlashHTML = function() { + // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay + // Fix bug for IE9 + // http://www.kindsoft.net/view.php?bbsid=7&postid=5825&pagenum=1 + var classid = ''; + if(KindEditor.IE && KindEditor.V > 8) { + classid = ' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'; + } + return ['', + '', + '', + '', + '', + '', + '', + '' + ].join(""); + }; + + // Private: getFlashVars builds the parameter string that will be passed + // to flash in the flashvars param. + SWFUpload.prototype.getFlashVars = function() { + // Build a string from the post param object + var paramString = this.buildParamString(); + var httpSuccessString = this.settings.http_success.join(","); + + // Build the parameter string + return ["movieName=", encodeURIComponent(this.movieName), + "&uploadURL=", encodeURIComponent(this.settings.upload_url), + "&useQueryString=", encodeURIComponent(this.settings.use_query_string), + "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), + "&httpSuccess=", encodeURIComponent(httpSuccessString), + "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), + "&params=", encodeURIComponent(paramString), + "&filePostName=", encodeURIComponent(this.settings.file_post_name), + "&fileTypes=", encodeURIComponent(this.settings.file_types), + "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), + "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), + "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), + "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), + "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), + "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), + "&buttonWidth=", encodeURIComponent(this.settings.button_width), + "&buttonHeight=", encodeURIComponent(this.settings.button_height), + "&buttonText=", encodeURIComponent(this.settings.button_text), + "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), + "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), + "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), + "&buttonAction=", encodeURIComponent(this.settings.button_action), + "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), + "&buttonCursor=", encodeURIComponent(this.settings.button_cursor) + ].join(""); + }; + + // Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload + // The element is cached after the first lookup + SWFUpload.prototype.getMovieElement = function() { + if(this.movieElement == undefined) { + this.movieElement = document.getElementById(this.movieName); + } + + if(this.movieElement === null) { + throw "Could not find Flash element"; + } + + return this.movieElement; + }; + + // Private: buildParamString takes the name/value pairs in the post_params setting object + // and joins them up in to a string formatted "name=value&name=value" + SWFUpload.prototype.buildParamString = function() { + var postParams = this.settings.post_params; + var paramStringPairs = []; + + if(typeof(postParams) === "object") { + for(var name in postParams) { + if(postParams.hasOwnProperty(name)) { + paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString())); + } + } + } + + return paramStringPairs.join("&"); + }; + + // Public: Used to remove a SWFUpload instance from the page. This method strives to remove + // all references to the SWF, and other objects so memory is properly freed. + // Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state. + // Credits: Major improvements provided by steffen + SWFUpload.prototype.destroy = function() { + try { + // Make sure Flash is done before we try to remove it + this.cancelUpload(null, false); + + + // Remove the SWFUpload DOM nodes + var movieElement = null; + movieElement = this.getMovieElement(); + + if(movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE + // Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround) + for(var i in movieElement) { + try { + if(typeof(movieElement[i]) === "function") { + movieElement[i] = null; + } + } catch(ex1) {} + } + + // Remove the Movie Element from the page + try { + movieElement.parentNode.removeChild(movieElement); + } catch(ex) {} + } + + // Remove IE form fix reference + window[this.movieName] = null; + + // Destroy other references + SWFUpload.instances[this.movieName] = null; + delete SWFUpload.instances[this.movieName]; + + this.movieElement = null; + this.settings = null; + this.customSettings = null; + this.eventQueue = null; + this.movieName = null; + + + return true; + } catch(ex2) { + return false; + } + }; + + + // Public: displayDebugInfo prints out settings and configuration + // information about this SWFUpload instance. + // This function (and any references to it) can be deleted when placing + // SWFUpload in production. + SWFUpload.prototype.displayDebugInfo = function() { + this.debug( + [ + "---SWFUpload Instance Info---\n", + "Version: ", SWFUpload.version, "\n", + "Movie Name: ", this.movieName, "\n", + "Settings:\n", + "\t", "upload_url: ", this.settings.upload_url, "\n", + "\t", "flash_url: ", this.settings.flash_url, "\n", + "\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n", + "\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n", + "\t", "http_success: ", this.settings.http_success.join(", "), "\n", + "\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n", + "\t", "file_post_name: ", this.settings.file_post_name, "\n", + "\t", "post_params: ", this.settings.post_params.toString(), "\n", + "\t", "file_types: ", this.settings.file_types, "\n", + "\t", "file_types_description: ", this.settings.file_types_description, "\n", + "\t", "file_size_limit: ", this.settings.file_size_limit, "\n", + "\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n", + "\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n", + "\t", "debug: ", this.settings.debug.toString(), "\n", + + "\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n", + + "\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n", + "\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", + "\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n", + "\t", "button_width: ", this.settings.button_width.toString(), "\n", + "\t", "button_height: ", this.settings.button_height.toString(), "\n", + "\t", "button_text: ", this.settings.button_text.toString(), "\n", + "\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n", + "\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n", + "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", + "\t", "button_action: ", this.settings.button_action.toString(), "\n", + "\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n", + + "\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n", + "Event Handlers:\n", + "\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", + "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", + "\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", + "\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", + "\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", + "\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", + "\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", + "\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", + "\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", + "\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n" + ].join("") + ); + }; + + /* Note: addSetting and getSetting are no longer used by SWFUpload but are included + the maintain v2 API compatibility + */ + // Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used. + SWFUpload.prototype.addSetting = function(name, value, default_value) { + if(value == undefined) { + return(this.settings[name] = default_value); + } else { + return(this.settings[name] = value); + } + }; + + // Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found. + SWFUpload.prototype.getSetting = function(name) { + if(this.settings[name] != undefined) { + return this.settings[name]; + } + + return ""; + }; + + + + // Private: callFlash handles function calls made to the Flash element. + // Calls are made with a setTimeout for some functions to work around + // bugs in the ExternalInterface library. + SWFUpload.prototype.callFlash = function(functionName, argumentArray) { + argumentArray = argumentArray || []; + + var movieElement = this.getMovieElement(); + var returnValue, returnString; + + // Flash's method if calling ExternalInterface methods (code adapted from MooTools). + try { + returnString = movieElement.CallFunction('' + __flash__argumentsToXML(argumentArray, 0) + ''); + returnValue = eval(returnString); + } catch(ex) { + throw "Call to " + functionName + " failed"; + } + + // Unescape file post param values + if(returnValue != undefined && typeof returnValue.post === "object") { + returnValue = this.unescapeFilePostParams(returnValue); + } + + return returnValue; + }; + + /* ***************************** + -- Flash control methods -- + Your UI should use these + to operate SWFUpload + ***************************** */ + + // WARNING: this function does not work in Flash Player 10 + // Public: selectFile causes a File Selection Dialog window to appear. This + // dialog only allows 1 file to be selected. + SWFUpload.prototype.selectFile = function() { + this.callFlash("SelectFile"); + }; + + // WARNING: this function does not work in Flash Player 10 + // Public: selectFiles causes a File Selection Dialog window to appear/ This + // dialog allows the user to select any number of files + // Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names. + // If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around + // for this bug. + SWFUpload.prototype.selectFiles = function() { + this.callFlash("SelectFiles"); + }; + + + // Public: startUpload starts uploading the first file in the queue unless + // the optional parameter 'fileID' specifies the ID + SWFUpload.prototype.startUpload = function(fileID) { + this.callFlash("StartUpload", [fileID]); + }; + + // Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index. + // If you do not specify a fileID the current uploading file or first file in the queue is cancelled. + // If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter. + SWFUpload.prototype.cancelUpload = function(fileID, triggerErrorEvent) { + if(triggerErrorEvent !== false) { + triggerErrorEvent = true; + } + this.callFlash("CancelUpload", [fileID, triggerErrorEvent]); + }; + + // Public: stopUpload stops the current upload and requeues the file at the beginning of the queue. + // If nothing is currently uploading then nothing happens. + SWFUpload.prototype.stopUpload = function() { + this.callFlash("StopUpload"); + }; + + /* ************************ + * Settings methods + * These methods change the SWFUpload settings. + * SWFUpload settings should not be changed directly on the settings object + * since many of the settings need to be passed to Flash in order to take + * effect. + * *********************** */ + + // Public: getStats gets the file statistics object. + SWFUpload.prototype.getStats = function() { + return this.callFlash("GetStats"); + }; + + // Public: setStats changes the SWFUpload statistics. You shouldn't need to + // change the statistics but you can. Changing the statistics does not + // affect SWFUpload accept for the successful_uploads count which is used + // by the upload_limit setting to determine how many files the user may upload. + SWFUpload.prototype.setStats = function(statsObject) { + this.callFlash("SetStats", [statsObject]); + }; + + // Public: getFile retrieves a File object by ID or Index. If the file is + // not found then 'null' is returned. + SWFUpload.prototype.getFile = function(fileID) { + if(typeof(fileID) === "number") { + return this.callFlash("GetFileByIndex", [fileID]); + } else { + return this.callFlash("GetFile", [fileID]); + } + }; + + // Public: addFileParam sets a name/value pair that will be posted with the + // file specified by the Files ID. If the name already exists then the + // exiting value will be overwritten. + SWFUpload.prototype.addFileParam = function(fileID, name, value) { + return this.callFlash("AddFileParam", [fileID, name, value]); + }; + + // Public: removeFileParam removes a previously set (by addFileParam) name/value + // pair from the specified file. + SWFUpload.prototype.removeFileParam = function(fileID, name) { + this.callFlash("RemoveFileParam", [fileID, name]); + }; + + // Public: setUploadUrl changes the upload_url setting. + SWFUpload.prototype.setUploadURL = function(url) { + this.settings.upload_url = url.toString(); + this.callFlash("SetUploadURL", [url]); + }; + + // Public: setPostParams changes the post_params setting + SWFUpload.prototype.setPostParams = function(paramsObject) { + this.settings.post_params = paramsObject; + this.callFlash("SetPostParams", [paramsObject]); + }; + + // Public: addPostParam adds post name/value pair. Each name can have only one value. + SWFUpload.prototype.addPostParam = function(name, value) { + this.settings.post_params[name] = value; + this.callFlash("SetPostParams", [this.settings.post_params]); + }; + + // Public: removePostParam deletes post name/value pair. + SWFUpload.prototype.removePostParam = function(name) { + delete this.settings.post_params[name]; + this.callFlash("SetPostParams", [this.settings.post_params]); + }; + + // Public: setFileTypes changes the file_types setting and the file_types_description setting + SWFUpload.prototype.setFileTypes = function(types, description) { + this.settings.file_types = types; + this.settings.file_types_description = description; + this.callFlash("SetFileTypes", [types, description]); + }; + + // Public: setFileSizeLimit changes the file_size_limit setting + SWFUpload.prototype.setFileSizeLimit = function(fileSizeLimit) { + this.settings.file_size_limit = fileSizeLimit; + this.callFlash("SetFileSizeLimit", [fileSizeLimit]); + }; + + // Public: setFileUploadLimit changes the file_upload_limit setting + SWFUpload.prototype.setFileUploadLimit = function(fileUploadLimit) { + this.settings.file_upload_limit = fileUploadLimit; + this.callFlash("SetFileUploadLimit", [fileUploadLimit]); + }; + + // Public: setFileQueueLimit changes the file_queue_limit setting + SWFUpload.prototype.setFileQueueLimit = function(fileQueueLimit) { + this.settings.file_queue_limit = fileQueueLimit; + this.callFlash("SetFileQueueLimit", [fileQueueLimit]); + }; + + // Public: setFilePostName changes the file_post_name setting + SWFUpload.prototype.setFilePostName = function(filePostName) { + this.settings.file_post_name = filePostName; + this.callFlash("SetFilePostName", [filePostName]); + }; + + // Public: setUseQueryString changes the use_query_string setting + SWFUpload.prototype.setUseQueryString = function(useQueryString) { + this.settings.use_query_string = useQueryString; + this.callFlash("SetUseQueryString", [useQueryString]); + }; + + // Public: setRequeueOnError changes the requeue_on_error setting + SWFUpload.prototype.setRequeueOnError = function(requeueOnError) { + this.settings.requeue_on_error = requeueOnError; + this.callFlash("SetRequeueOnError", [requeueOnError]); + }; + + // Public: setHTTPSuccess changes the http_success setting + SWFUpload.prototype.setHTTPSuccess = function(http_status_codes) { + if(typeof http_status_codes === "string") { + http_status_codes = http_status_codes.replace(" ", "").split(","); + } + + this.settings.http_success = http_status_codes; + this.callFlash("SetHTTPSuccess", [http_status_codes]); + }; + + // Public: setHTTPSuccess changes the http_success setting + SWFUpload.prototype.setAssumeSuccessTimeout = function(timeout_seconds) { + this.settings.assume_success_timeout = timeout_seconds; + this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]); + }; + + // Public: setDebugEnabled changes the debug_enabled setting + SWFUpload.prototype.setDebugEnabled = function(debugEnabled) { + this.settings.debug_enabled = debugEnabled; + this.callFlash("SetDebugEnabled", [debugEnabled]); + }; + + // Public: setButtonImageURL loads a button image sprite + SWFUpload.prototype.setButtonImageURL = function(buttonImageURL) { + if(buttonImageURL == undefined) { + buttonImageURL = ""; + } + + this.settings.button_image_url = buttonImageURL; + this.callFlash("SetButtonImageURL", [buttonImageURL]); + }; + + // Public: setButtonDimensions resizes the Flash Movie and button + SWFUpload.prototype.setButtonDimensions = function(width, height) { + this.settings.button_width = width; + this.settings.button_height = height; + + var movie = this.getMovieElement(); + if(movie != undefined) { + movie.style.width = width + "px"; + movie.style.height = height + "px"; + } + + this.callFlash("SetButtonDimensions", [width, height]); + }; + // Public: setButtonText Changes the text overlaid on the button + SWFUpload.prototype.setButtonText = function(html) { + this.settings.button_text = html; + this.callFlash("SetButtonText", [html]); + }; + // Public: setButtonTextPadding changes the top and left padding of the text overlay + SWFUpload.prototype.setButtonTextPadding = function(left, top) { + this.settings.button_text_top_padding = top; + this.settings.button_text_left_padding = left; + this.callFlash("SetButtonTextPadding", [left, top]); + }; + + // Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button + SWFUpload.prototype.setButtonTextStyle = function(css) { + this.settings.button_text_style = css; + this.callFlash("SetButtonTextStyle", [css]); + }; + // Public: setButtonDisabled disables/enables the button + SWFUpload.prototype.setButtonDisabled = function(isDisabled) { + this.settings.button_disabled = isDisabled; + this.callFlash("SetButtonDisabled", [isDisabled]); + }; + // Public: setButtonAction sets the action that occurs when the button is clicked + SWFUpload.prototype.setButtonAction = function(buttonAction) { + this.settings.button_action = buttonAction; + this.callFlash("SetButtonAction", [buttonAction]); + }; + + // Public: setButtonCursor changes the mouse cursor displayed when hovering over the button + SWFUpload.prototype.setButtonCursor = function(cursor) { + this.settings.button_cursor = cursor; + this.callFlash("SetButtonCursor", [cursor]); + }; + + /* ******************************* + Flash Event Interfaces + These functions are used by Flash to trigger the various + events. + + All these functions a Private. + + Because the ExternalInterface library is buggy the event calls + are added to a queue and the queue then executed by a setTimeout. + This ensures that events are executed in a determinate order and that + the ExternalInterface bugs are avoided. + ******************************* */ + + SWFUpload.prototype.queueEvent = function(handlerName, argumentArray) { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + + if(argumentArray == undefined) { + argumentArray = []; + } else if(!(argumentArray instanceof Array)) { + argumentArray = [argumentArray]; + } + + var self = this; + if(typeof this.settings[handlerName] === "function") { + // Queue the event + this.eventQueue.push(function() { + this.settings[handlerName].apply(this, argumentArray); + }); + + // Execute the next queued event + setTimeout(function() { + self.executeNextEvent(); + }, 0); + + } else if(this.settings[handlerName] !== null) { + throw "Event handler " + handlerName + " is unknown or is not a function"; + } + }; + + // Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout + // we must queue them in order to garentee that they are executed in order. + SWFUpload.prototype.executeNextEvent = function() { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + + var f = this.eventQueue ? this.eventQueue.shift() : null; + if(typeof(f) === "function") { + f.apply(this); + } + }; + + // Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have + // properties that contain characters that are not valid for JavaScript identifiers. To work around this + // the Flash Component escapes the parameter names and we must unescape again before passing them along. + SWFUpload.prototype.unescapeFilePostParams = function(file) { + var reg = /[$]([0-9a-f]{4})/i; + var unescapedPost = {}; + var uk; + + if(file != undefined) { + for(var k in file.post) { + if(file.post.hasOwnProperty(k)) { + uk = k; + var match; + while((match = reg.exec(uk)) !== null) { + uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16))); + } + unescapedPost[uk] = file.post[k]; + } + } + + file.post = unescapedPost; + } + + return file; + }; + + // Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working) + SWFUpload.prototype.testExternalInterface = function() { + try { + return this.callFlash("TestExternalInterface"); + } catch(ex) { + return false; + } + }; + + // Private: This event is called by Flash when it has finished loading. Don't modify this. + // Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded. + SWFUpload.prototype.flashReady = function() { + // Check that the movie element is loaded correctly with its ExternalInterface methods defined + var movieElement = this.getMovieElement(); + + if(!movieElement) { + this.debug("Flash called back ready but the flash movie can't be found."); + return; + } + + this.cleanUp(movieElement); + + this.queueEvent("swfupload_loaded_handler"); + }; + + // Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE. + // This function is called by Flash each time the ExternalInterface functions are created. + SWFUpload.prototype.cleanUp = function(movieElement) { + // Pro-actively unhook all the Flash functions + try { + if(this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE + this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)"); + for(var key in movieElement) { + try { + if(typeof(movieElement[key]) === "function") { + movieElement[key] = null; + } + } catch(ex) {} + } + } + } catch(ex1) { + + } + + // Fix Flashes own cleanup code so if the SWFMovie was removed from the page + // it doesn't display errors. + window["__flash__removeCallback"] = function(instance, name) { + try { + if(instance) { + instance[name] = null; + } + } catch(flashEx) { + + } + }; + + }; + + + /* This is a chance to do something before the browse window opens */ + SWFUpload.prototype.fileDialogStart = function() { + this.queueEvent("file_dialog_start_handler"); + }; + + + /* Called when a file is successfully added to the queue. */ + SWFUpload.prototype.fileQueued = function(file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queued_handler", file); + }; + + + /* Handle errors that occur when an attempt to queue a file fails. */ + SWFUpload.prototype.fileQueueError = function(file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queue_error_handler", [file, errorCode, message]); + }; + + /* Called after the file dialog has closed and the selected files have been queued. + You could call startUpload here if you want the queued files to begin uploading immediately. */ + SWFUpload.prototype.fileDialogComplete = function(numFilesSelected, numFilesQueued, numFilesInQueue) { + this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]); + }; + + SWFUpload.prototype.uploadStart = function(file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("return_upload_start_handler", file); + }; + + SWFUpload.prototype.returnUploadStart = function(file) { + var returnValue; + if(typeof this.settings.upload_start_handler === "function") { + file = this.unescapeFilePostParams(file); + returnValue = this.settings.upload_start_handler.call(this, file); + } else if(this.settings.upload_start_handler != undefined) { + throw "upload_start_handler must be a function"; + } + + // Convert undefined to true so if nothing is returned from the upload_start_handler it is + // interpretted as 'true'. + if(returnValue === undefined) { + returnValue = true; + } + + returnValue = !!returnValue; + + this.callFlash("ReturnUploadStart", [returnValue]); + }; + + + + SWFUpload.prototype.uploadProgress = function(file, bytesComplete, bytesTotal) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]); + }; + + SWFUpload.prototype.uploadError = function(file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_error_handler", [file, errorCode, message]); + }; + + SWFUpload.prototype.uploadSuccess = function(file, serverData, responseReceived) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_success_handler", [file, serverData, responseReceived]); + }; + + SWFUpload.prototype.uploadComplete = function(file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_complete_handler", file); + }; + + /* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the + internal debug console. You can override this event and have messages written where you want. */ + SWFUpload.prototype.debug = function(message) { + this.queueEvent("debug_handler", message); + }; + + + /* ********************************** + Debug Console + The debug console is a self contained, in page location + for debug message to be sent. The Debug Console adds + itself to the body if necessary. + + The console is automatically scrolled as messages appear. + + If you are using your own debug handler or when you deploy to production and + have debug disabled you can remove these functions to reduce the file size + and complexity. + ********************************** */ + + // Private: debugMessage is the default debug_handler. If you want to print debug messages + // call the debug() function. When overriding the function your own function should + // check to see if the debug setting is true before outputting debug information. + SWFUpload.prototype.debugMessage = function(message) { + if(this.settings.debug) { + var exceptionMessage, exceptionValues = []; + + // Check for an exception object and print it nicely + if(typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { + for(var key in message) { + if(message.hasOwnProperty(key)) { + exceptionValues.push(key + ": " + message[key]); + } + } + exceptionMessage = exceptionValues.join("\n") || ""; + exceptionValues = exceptionMessage.split("\n"); + exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); + SWFUpload.Console.writeLine(exceptionMessage); + } else { + SWFUpload.Console.writeLine(message); + } + } + }; + + SWFUpload.Console = {}; + SWFUpload.Console.writeLine = function(message) { + var console, documentForm; + + try { + console = document.getElementById("SWFUpload_Console"); + + if(!console) { + documentForm = document.createElement("form"); + document.getElementsByTagName("body")[0].appendChild(documentForm); + + console = document.createElement("textarea"); + console.id = "SWFUpload_Console"; + console.style.fontFamily = "monospace"; + console.setAttribute("wrap", "off"); + console.wrap = "off"; + console.style.overflow = "auto"; + console.style.width = "700px"; + console.style.height = "350px"; + console.style.margin = "5px"; + documentForm.appendChild(console); + } + + console.value += message + "\n"; + + console.scrollTop = console.scrollHeight - console.clientHeight; + } catch(ex) { + alert("Exception: " + ex.name + " Message: " + ex.message); + } + }; + +})(); + +(function() { + /* + Queue Plug-in + + Features: + *Adds a cancelQueue() method for cancelling the entire queue. + *All queued files are uploaded when startUpload() is called. + *If false is returned from uploadComplete then the queue upload is stopped. + If false is not returned (strict comparison) then the queue upload is continued. + *Adds a QueueComplete event that is fired when all the queued files have finished uploading. + Set the event handler with the queue_complete_handler setting. + + */ + + if(typeof(SWFUpload) === "function") { + SWFUpload.queue = {}; + + SWFUpload.prototype.initSettings = (function(oldInitSettings) { + return function() { + if(typeof(oldInitSettings) === "function") { + oldInitSettings.call(this); + } + + this.queueSettings = {}; + + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + + this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; + this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; + this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; + + this.settings.queue_complete_handler = this.settings.queue_complete_handler || null; + }; + })(SWFUpload.prototype.initSettings); + + SWFUpload.prototype.startUpload = function(fileID) { + this.queueSettings.queue_cancelled_flag = false; + this.callFlash("StartUpload", [fileID]); + }; + + SWFUpload.prototype.cancelQueue = function() { + this.queueSettings.queue_cancelled_flag = true; + this.stopUpload(); + + var stats = this.getStats(); + while(stats.files_queued > 0) { + this.cancelUpload(); + stats = this.getStats(); + } + }; + + SWFUpload.queue.uploadStartHandler = function(file) { + var returnValue; + if(typeof(this.queueSettings.user_upload_start_handler) === "function") { + returnValue = this.queueSettings.user_upload_start_handler.call(this, file); + } + + // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. + returnValue = (returnValue === false) ? false : true; + + this.queueSettings.queue_cancelled_flag = !returnValue; + + return returnValue; + }; + + SWFUpload.queue.uploadCompleteHandler = function(file) { + var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; + var continueUpload; + + if(file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { + this.queueSettings.queue_upload_count++; + } + + if(typeof(user_upload_complete_handler) === "function") { + continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; + } else if(file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { + // If the file was stopped and re-queued don't restart the upload + continueUpload = false; + } else { + continueUpload = true; + } + + if(continueUpload) { + var stats = this.getStats(); + if(stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { + this.startUpload(); + } else if(this.queueSettings.queue_cancelled_flag === false) { + this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); + this.queueSettings.queue_upload_count = 0; + } else { + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + } + } + }; + } + +})(); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('pagebreak', function(K) { + var self = this; + var name = 'pagebreak'; + var pagebreakHtml = K.undef(self.pagebreakHtml, '
'); + + self.clickToolbar(name, function() { + var cmd = self.cmd, + range = cmd.range; + self.focus(); + var tail = self.newlineTag == 'br' || K.WEBKIT ? '' : ''; + self.insertHtml(pagebreakHtml + tail); + if(tail !== '') { + var p = K('#__kindeditor_tail_tag__', self.edit.doc); + range.selectNodeContents(p[0]); + p.removeAttr('id'); + cmd.select(); + } + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('plainpaste', function(K) { + var self = this, + name = 'plainpaste'; + self.clickToolbar(name, function() { + var lang = self.lang(name + '.'), + html = '
' + + '
' + lang.comment + '
' + + '' + + '
', + dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var html = textarea.val(); + html = K.escape(html); + html = html.replace(/ {2}/g, '  '); + if(self.newlineTag == 'p') { + html = html.replace(/^/, '

').replace(/$/, '

').replace(/\n/g, '

'); + } else { + html = html.replace(/\n/g, '
$&'); + } + self.insertHtml(html).hideDialog().focus(); + } + } + }), + textarea = K('textarea', dialog.div); + textarea[0].focus(); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('preview', function(K) { + var self = this, + name = 'preview', + undefined; + self.clickToolbar(name, function() { + var lang = self.lang(name + '.'), + html = '

' + + '' + + '
', + dialog = self.createDialog({ + name: name, + width: 750, + title: self.lang(name), + body: html + }), + iframe = K('iframe', dialog.div), + doc = K.iframeDoc(iframe); + doc.open(); + doc.write(self.fullHtml()); + doc.close(); + K(doc.body).css('background-color', '#FFF'); + iframe[0].contentWindow.focus(); + }); +}); +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('quickformat', function(K) { + var self = this, + name = 'quickformat', + blockMap = K.toMap('blockquote,center,div,h1,h2,h3,h4,h5,h6,p'); + + function getFirstChild(knode) { + var child = knode.first(); + while(child && child.first()) { + child = child.first(); + } + return child; + } + self.clickToolbar(name, function() { + self.focus(); + var doc = self.edit.doc, + range = self.cmd.range, + child = K(doc.body).first(), + next, + nodeList = [], + subList = [], + bookmark = range.createBookmark(true); + while(child) { + next = child.next(); + var firstChild = getFirstChild(child); + if(!firstChild || firstChild.name != 'img') { + if(blockMap[child.name]) { + child.html(child.html().replace(/^(\s| | )+/ig, '')); + child.css('text-indent', '2em'); + } else { + subList.push(child); + } + if(!next || (blockMap[next.name] || blockMap[child.name] && !blockMap[next.name])) { + if(subList.length > 0) { + nodeList.push(subList); + } + subList = []; + } + } + child = next; + } + K.each(nodeList, function(i, subList) { + var wrapper = K('

', doc); + subList[0].before(wrapper); + K.each(subList, function(i, knode) { + wrapper.append(knode); + }); + }); + range.moveToBookmark(bookmark); + self.addBookmark(); + }); +}); + +/** +-------------------------- +abcd
+1234
+ +to + +

+ abcd
+ 1234
+

+ +-------------------------- + +  abcd1233 +

1234

+ +to + +

abcd1233

+

1234

+ +-------------------------- +*/ /******************************************************************************* * KindEditor - WYSIWYG HTML Editor for Internet -* Copyright (C) 2006-2012 kindsoft.net +* Copyright (C) 2006-2011 kindsoft.net * * @author Roddy -* @website http://www.kindsoft.net/ +* @site http://www.kindsoft.net/ * @licence http://www.kindsoft.net/license.php -* @version 4.1.4 (2012-11-11) -* -* 调试前必读:务必将DEBUG设成true,否则,死的很惨! added by zentao team. - *******************************************************************************/ -(function (window, undefined) { - if (window.KindEditor) { - return; - } -if (!window.console) { - window.console = {}; -} -if (!console.log) { - console.log = function () {}; -} -var _VERSION = '4.1.4', - _ua = navigator.userAgent.toLowerCase(), - _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, - _MOBILE = _ua.indexOf('mobile') > -1, - _IOS = /ipad|iphone|ipod/.test(_ua), - _QUIRKS = document.compatMode != 'CSS1Compat', - _matches = /(?:msie|firefox|webkit|opera)[\/:\s](\d+)/.exec(_ua), - _V = _matches ? _matches[1] : '0', - _TIME = new Date().getTime(); -function _isArray(val) { - if (!val) { - return false; - } - return Object.prototype.toString.call(val) === '[object Array]'; -} -function _isFunction(val) { - if (!val) { - return false; - } - return Object.prototype.toString.call(val) === '[object Function]'; -} -function _inArray(val, arr) { - for (var i = 0, len = arr.length; i < len; i++) { - if (val === arr[i]) { - return i; - } - } - return -1; -} -function _each(obj, fn) { - if (_isArray(obj)) { - for (var i = 0, len = obj.length; i < len; i++) { - if (fn.call(obj[i], i, obj[i]) === false) { - break; - } - } - } else { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - if (fn.call(obj[key], key, obj[key]) === false) { - break; - } - } - } - } -} -function _trim(str) { - return str.replace(/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, ''); -} -function _inString(val, str, delimiter) { - delimiter = delimiter === undefined ? ',' : delimiter; - return (delimiter + str + delimiter).indexOf(delimiter + val + delimiter) >= 0; -} -function _addUnit(val, unit) { - unit = unit || 'px'; - return val && /^\d+$/.test(val) ? val + unit : val; -} -function _removeUnit(val) { - var match; - return val && (match = /(\d+)/.exec(val)) ? parseInt(match[1], 10) : 0; -} -function _escape(val) { - return val.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); -} -function _unescape(val) { - return val.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&'); -} -function _toCamel(str) { - var arr = str.split('-'); - str = ''; - _each(arr, function(key, val) { - str += (key > 0) ? val.charAt(0).toUpperCase() + val.substr(1) : val; - }); - return str; -} -function _toHex(val) { - function hex(d) { - var s = parseInt(d, 10).toString(16).toUpperCase(); - return s.length > 1 ? s : '0' + s; - } - return val.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); - } - ); -} -function _toMap(val, delimiter) { - delimiter = delimiter === undefined ? ',' : delimiter; - var map = {}, arr = _isArray(val) ? val : val.split(delimiter), match; - _each(arr, function(key, val) { - if ((match = /^(\d+)\.\.(\d+)$/.exec(val))) { - for (var i = parseInt(match[1], 10); i <= parseInt(match[2], 10); i++) { - map[i.toString()] = true; - } - } else { - map[val] = true; - } - }); - return map; -} -function _toArray(obj, offset) { - return Array.prototype.slice.call(obj, offset || 0); -} -function _undef(val, defaultVal) { - return val === undefined ? defaultVal : val; -} -function _invalidUrl(url) { - return !url || /[<>"]/.test(url); -} -function _addParam(url, param) { - return url.indexOf('?') >= 0 ? url + '&' + param : url + '?' + param; -} -function _extend(child, parent, proto) { - if (!proto) { - proto = parent; - parent = null; - } - var childProto; - if (parent) { - var fn = function () {}; - fn.prototype = parent.prototype; - childProto = new fn(); - _each(proto, function(key, val) { - childProto[key] = val; - }); - } else { - childProto = proto; - } - childProto.constructor = child; - child.prototype = childProto; - child.parent = parent ? parent.prototype : null; -} -function _json(text) { - 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'; -} -var _round = Math.round; -var K = { - DEBUG : false, - VERSION : _VERSION, - IE : _IE, - GECKO : _GECKO, - WEBKIT : _WEBKIT, - OPERA : _OPERA, - V : _V, - TIME : _TIME, - each : _each, - isArray : _isArray, - isFunction : _isFunction, - inArray : _inArray, - inString : _inString, - trim : _trim, - addUnit : _addUnit, - removeUnit : _removeUnit, - escape : _escape, - unescape : _unescape, - toCamel : _toCamel, - toHex : _toHex, - toMap : _toMap, - toArray : _toArray, - undef : _undef, - invalidUrl : _invalidUrl, - addParam : _addParam, - extend : _extend, - json : _json -}; -var _INLINE_TAG_MAP = _toMap('a,abbr,acronym,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,img,input,ins,kbd,label,map,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'), - _BLOCK_TAG_MAP = _toMap('address,applet,blockquote,body,center,dd,dir,div,dl,dt,fieldset,form,frameset,h1,h2,h3,h4,h5,h6,head,hr,html,iframe,ins,isindex,li,map,menu,meta,noframes,noscript,object,ol,p,pre,script,style,table,tbody,td,tfoot,th,thead,title,tr,ul'), - _SINGLE_TAG_MAP = _toMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed'), - _STYLE_TAG_MAP = _toMap('b,basefont,big,del,em,font,i,s,small,span,strike,strong,sub,sup,u'), - _CONTROL_TAG_MAP = _toMap('img,table,input,textarea,button'), - _PRE_TAG_MAP = _toMap('pre,style,script'), - _NOSPLIT_TAG_MAP = _toMap('html,head,body,td,tr,table,ol,ul,li'), - _AUTOCLOSE_TAG_MAP = _toMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'), - _FILL_ATTR_MAP = _toMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'), - _VALUE_TAG_MAP = _toMap('input,button,textarea,select'); -function _getBasePath() { - var els = document.getElementsByTagName('script'), src; - for (var i = 0, len = els.length; i < len; i++) { - src = els[i].src || ''; - if (/kindeditor[\w\-\.]*\.js/.test(src)) { - return src.substring(0, src.lastIndexOf('/') + 1); - } - } - return ''; -} -K.basePath = _getBasePath(); -K.options = { - designMode : true, - fullscreenMode : false, - filterMode : true, - wellFormatMode : true, - shadowMode : true, - loadStyleMode : true, - basePath : K.basePath, - themesPath : K.basePath + 'themes/', - langPath : K.basePath + 'lang/', - pluginsPath : K.basePath + 'plugins/', - themeType : 'default', - langType : 'zh_CN', - urlType : '', - newlineTag : 'p', - resizeType : 2, - syncType : 'form', - pasteType : 2, - dialogAlignType : 'page', - useContextmenu : true, - fullscreenShortcut : false, - bodyClass : 'ke-content', - indentChar : '', - cssPath : '', - cssData : '', - minWidth : 650, - minHeight : 100, - minChangeSize : 50, - items : [ - 'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste', - 'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright', - 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript', - 'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/', - 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', - 'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage', - 'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak', - 'anchor', 'link', 'unlink', '|', 'about' - ], - noDisableItems : ['source', 'fullscreen'], - 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'] - ], - fontSizeTable : ['9px', '10px', '12px', '14px', '16px', '18px', '24px', '32px'], - htmlTags : { - font : ['id', 'class', 'color', 'size', 'face', '.background-color'], - span : [ - 'id', 'class', '.color', '.background-color', '.font-size', '.font-family', '.background', - '.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.line-height' - ], - div : [ - 'id', 'class', '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: [ - 'id', 'class', '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', '.border-collapse' - ], - 'td,th': [ - 'id', 'class', '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', '.border' - ], - a : ['id', 'class', 'href', 'target', 'name'], - embed : ['id', 'class', 'src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess'], - img : ['id', 'class', 'src', 'width', 'height', 'border', 'alt', 'title', 'align', '.width', '.height', '.border'], - 'p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6' : [ - 'id', 'class', 'align', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.background', - '.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.text-indent', '.margin-left' - ], - pre : ['id', 'class'], - hr : ['id', 'class', '.page-break-after'], - 'br,tbody,tr,strong,b,sub,sup,em,i,u,strike,s,del' : ['id', 'class'], - iframe : ['id', 'class', 'src', 'frameborder', 'width', 'height', '.width', '.height'] - }, - layout : '
' -}; -var _useCapture = false; -var _INPUT_KEY_MAP = _toMap('8,9,13,32,46,48..57,59,61,65..90,106,109..111,188,190..192,219..222'); -var _CURSORMOVE_KEY_MAP = _toMap('33..40'); -var _CHANGE_KEY_MAP = {}; -_each(_INPUT_KEY_MAP, function(key, val) { - _CHANGE_KEY_MAP[key] = val; + +KindEditor.plugin('table', function (K) { + var self = this; + var name = 'table'; + var allLangs = { + zh_cn: { + name: '表格', + xRxC: '{0}行 × {1}列', + headerRow: '标题行', + headerCol: '标题列', + tableStyle: '表格样式', + addHeaderRow: '添加表格标题行', + stripedRows: '隔行变色效果', + hoverRows: '鼠标悬停效果', + autoChangeTableWidth: '自动调整表格尺寸', + tableWidthFixed: '按表格文字自适应', + tableWidthFull: '按页面宽度自适应', + tableBorder: '表格边框', + tableHead: '标题', + tableContent: '内容' + }, + zh_tw: { +            name: '表格', +            xRxC:'{0}行×{1}列', +            headerRow:'標題行', +            headerCol:'標題列', + tableStyle: '表格樣式', + addHeaderRow: '添加表格標題行', + stripedRows: '隔行變色效果', + hoverRows: '鼠標懸停效果', + autoChangeTableWidth: '自動調整表格尺寸', + tableWidthFixed: '按表格文字自適應', + tableWidthFull: '按頁面寬度自適應', + tableBorder: '表格邊框', + tableHead: '標題', + tableContent: '內容' + }, + en: { + name: 'Table', + xRxC: '{0} Rows × {1} Columns', + headerRow: 'Header Row', + headerCol: 'Header Column', + tableStyle: 'Table style', + addHeaderRow: 'Add header row', + stripedRows: 'Striped effection', + hoverRows: 'Mouse hover effection', + autoChangeTableWidth: 'Automatically adjust table size', + tableWidthFixed: 'Adaptive by form text', + tableWidthFull: 'Page width adaptive', + tableBorder: 'Table border', + tableHead: 'Title', + tableContent: 'Text' + } + }; + var $elements = []; + var lang = $.extend({}, self.lang('table.'), allLangs[($.clientLang || $.zui.clientLang)()]); + + // 设置颜色 + function _setColor(box, color) { + color = color.toLowerCase(); + box.css('background-color', color); + if (color) { + box.css('color', color === '#000000' ? '#FFFFFF' : '#000000'); + } + box.name === 'input' ? box.val(color) : box.html(color); + } + // 初始化取色器 + var pickerList = []; + function _initColorPicker(dialogDiv, colorBox, onSetColor) { + colorBox.bind('click,mousedown', function (e) { + e.stopPropagation(); + }); + function removePicker() { + K.each(pickerList, function () { + this.remove(); + }); + pickerList = []; + K(document).unbind('click,mousedown', removePicker); + dialogDiv.unbind('click,mousedown', removePicker); + } + colorBox.click(function (e) { + removePicker(); + var box = K(this), + pos = box.pos(); + var picker = K.colorpicker({ + x: pos.x, + y: pos.y + box.height(), + z: 811214, + selectedColor: K(this).html(), + colors: self.colorTable, + noColor: self.lang('table.defaultBorderColor'), + shadowMode: self.shadowMode, + click: function (color) { + _setColor(box, color); + removePicker(); + onSetColor && onSetColor(color); + } + }); + pickerList.push(picker); + K(document).bind('click,mousedown', removePicker); + dialogDiv.bind('click,mousedown', removePicker); + }); + } + // 取得下一行cell的index + function _getCellIndex(table, row, cell) { + var rowSpanCount = 0; + for (var i = 0, len = row.cells.length; i < len; i++) { + if (row.cells[i] == cell) { + break; + } + rowSpanCount += row.cells[i].rowSpan - 1; + } + return cell.cellIndex - rowSpanCount; + } + + function removeEvent() { + K.each($elements, function () { + this.off('.kTable'); + }); + } + + function updateTable(setting, $table, onUpdateSetting) { + if (!$table) { + var table = self.plugin.getSelectedTable(); + $table = $(table[0]); + } + if (!$table || !$table.length) return; + if (setting.header !== undefined) { + if ($table.is('.ke-plugin-table-example')) { + $table.find('thead').toggleClass('hidden', !setting.header); + } else { + var $thead = $table.find('thead'); + if (setting.header) { + if (!$thead.length) { + var theadHtml = ['']; + var $firstRow = $table.find('tbody>tr:first').children(); + var colsCount = 0; + $firstRow.each(function() { + var $cell = $(this); + var cellSpan = $cell.attr('colspan'); + colsCount += cellSpan ? parseInt(cellSpan) : 1; + }); + for(var i = 0; i < colsCount; ++i) { + theadHtml.push('' + (K.IE ? ' ' : '
') + ''); + } + theadHtml.push(''); + $thead = $(theadHtml.join('')); + $table.prepend($thead); + } + } else { + $thead.remove(); + } + } + onUpdateSetting && onUpdateSetting('header', setting.header); + } + if (setting.stripedRows !== undefined) { + $table.toggleClass('table-striped', !!setting.stripedRows); + onUpdateSetting && onUpdateSetting('stripedRows', setting.stripedRows); + } + if (setting.hoverRows !== undefined) { + $table.toggleClass('table-hover', !!setting.hoverRows); + onUpdateSetting && onUpdateSetting('hoverRows', setting.hoverRows); + } + if (setting.autoWidth !== undefined) { + $table.toggleClass('table-auto', !!setting.autoWidth); + onUpdateSetting && onUpdateSetting('autoWidth', setting.autoWidth); + } + if (setting.borderColor !== undefined) { + $table.find('td,th').css('border', '1px solid ' + setting.borderColor); + onUpdateSetting && onUpdateSetting('borderColor', setting.borderColor); + } + } + + function insertTable(row, col, headerRow, headerCol) { + if (!(row * col)) { + return; + } + var $table = $('
'); + var $body = $(''); + for (var r = 0; r < row; r++) { + var $row = $(''); + for (var c = 0; c < col; c++) { + var $cell = $('' + (K.IE ? ' ' : '
') + ''); + $row.append($cell); + } + $body.append($row); + } + $table.append($body); + var html = $('
').append($table).html(); + if (!K.IE) { + html += '
'; + } + self.insertHtml(html); + return $table; + } + + function modifyTable(table) { + var $table = $(table[0]); + var theadHtml = ['']; + var tbodyHtml = ['']; + for(var i = 0; i < 6; ++i) { + theadHtml.push('{tableHead}'); + tbodyHtml.push(''); + for(var j = 0; j < 6; ++j) { + tbodyHtml.push('{tableContent}'); + } + tbodyHtml.push(''); + } + theadHtml.push(''); + tbodyHtml.push(''); + var dialogHtml = [ +'
', + '
', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '', + '
', + '{borderColor}', + '', + '
', + '
', + '
', + '
', + '', + theadHtml.join(''), + tbodyHtml.join(''), + '
', + '', + '', +''].join('').format(lang); + var $dialog = $(dialogHtml); + var $exampleTable = $dialog.find('.ke-plugin-table-example'); + var bookmark = self.cmd.range.createBookmark(); + var $colorBox = $dialog.find('.ke-plugin-table-input-color'); + var colorBox = K($colorBox[0]); + $dialog.on('change.kTable', 'input[name]', function() { + var $input = $(this); + var updateSetting = {}; + updateSetting[$input.attr('name')] = $input.is('[type="checkbox"]') ? $input.is(':checked') : $input.val(); + updateTable(updateSetting, $exampleTable); + }); + + var dialog = self.createDialog({ + name: name + 'test', + width: 550, + title: self.lang(name), + body: $dialog[0], + beforeRemove: function () { + $dialog.off('.kTable'); + }, + yesBtn: { + name: self.lang('yes'), + click: function (e) { + updateTable({ + borderColor: $dialog.find('[name="borderColor"]').val(), + header: $dialog.find('[name="header"]').is(':checked'), + stripedRows: $dialog.find('[name="stripedRows"]').is(':checked'), + hoverRows: $dialog.find('[name="hoverRows"]').is(':checked'), + autoWidth: $dialog.find('[name="autoWidth"]:checked').val(), + }, $table); + self.hideDialog().focus(); + self.cmd.range.moveToBookmark(bookmark); + self.cmd.select(); + self.addBookmark(); + } + } + }); + _initColorPicker(dialog.div, colorBox, function(color) { + updateTable({borderColor: color}, $exampleTable); + }); + + updateTable({ + borderColor: $table.find('td,th').first().css('borderColor'), + header: $table.find('thead').length, + stripedRows: $table.hasClass('table-striped'), + hoverRows: $table.hasClass('table-hover'), + autoWidth: $table.hasClass('table-auto'), + }, $exampleTable, function(name, value) { + switch (name) { + case 'borderColor': + _setColor(colorBox, value || '#dddddd'); + break; + case 'header': + $dialog.find('[name="header"]').prop('checked', !!value); + break; + case 'stripedRows': + $dialog.find('[name="stripedRows"]').prop('checked', !!value); + break; + case 'hoverRows': + $dialog.find('[name="hoverRows"]').prop('checked', !!value); + break; + case 'autoWidth': + $dialog.find('[name="autoWidth"][value="' + (value ? 'auto' : '') + '"]').prop('checked', true); + break; + } + }); + } + + self.plugin.table = { + // modify table + prop: function () { + var table = self.plugin.getSelectedTable(); + if (table && table.length) { + modifyTable(table); + } + }, + //modify cell + cellprop: function () { + var html = [ + '
', + //width, height + '
', + '', + lang.width + '   ', + '   ', + lang.height + '   ', + '', + '
', + //align + '
', + '', + lang.textAlign + ' ', + lang.verticalAlign + ' ', + '
', + //border + '
', + '', + lang.borderColor + ' ', + '
', + //background color + '
', + '', + '', + '
', + '
' + ].join(''); + var bookmark = self.cmd.range.createBookmark(); + var dialog = self.createDialog({ + name: name, + width: 500, + title: self.lang('tablecell'), + body: html, + beforeRemove: function () { + colorBox.unbind(); + }, + yesBtn: { + name: self.lang('yes'), + click: function (e) { + var width = widthBox.val(), + height = heightBox.val(), + widthType = widthTypeBox.val(), + heightType = heightTypeBox.val(), + padding = paddingBox.val(), + spacing = spacingBox.val(), + textAlign = textAlignBox.val(), + verticalAlign = verticalAlignBox.val(), + borderColor = K(colorBox[0]).html() || '', + bgColor = K(colorBox[1]).html() || ''; + if (!/^\d*$/.test(width)) { + alert(self.lang('invalidWidth')); + widthBox[0].focus(); + return; + } + if (!/^\d*$/.test(height)) { + alert(self.lang('invalidHeight')); + heightBox[0].focus(); + return; + } + cell.css({ + width: width !== '' ? (width + widthType) : '', + height: height !== '' ? (height + heightType) : '', + 'background-color': bgColor, + 'text-align': textAlign, + 'vertical-align': verticalAlign, + 'border-style': 'solid', + 'border-color': borderColor + }); + self.hideDialog().focus(); + self.cmd.range.moveToBookmark(bookmark); + self.cmd.select(); + self.addBookmark(); + } + } + }), + div = dialog.div, + widthBox = K('[name="width"]', div).val(100), + heightBox = K('[name="height"]', div), + widthTypeBox = K('[name="widthType"]', div), + heightTypeBox = K('[name="heightType"]', div), + paddingBox = K('[name="padding"]', div).val(2), + spacingBox = K('[name="spacing"]', div).val(0), + textAlignBox = K('[name="textAlign"]', div), + verticalAlignBox = K('[name="verticalAlign"]', div), + colorBox = K('.ke-input-color', div); + _initColorPicker(div, colorBox.eq(0)); + _initColorPicker(div, colorBox.eq(1)); + _setColor(colorBox.eq(0), '#000000'); + _setColor(colorBox.eq(1), ''); + // foucs and select + widthBox[0].focus(); + widthBox[0].select(); + // get selected cell + var cell = self.plugin.getSelectedCell(); + var match, + cellWidth = cell[0].style.width || cell[0].width || '', + cellHeight = cell[0].style.height || cell[0].height || ''; + if ((match = /^(\d+)((?:px|%)*)$/.exec(cellWidth))) { + widthBox.val(match[1]); + widthTypeBox.val(match[2]); + } else { + widthBox.val(''); + } + if ((match = /^(\d+)((?:px|%)*)$/.exec(cellHeight))) { + heightBox.val(match[1]); + heightTypeBox.val(match[2]); + } + textAlignBox.val(cell[0].style.textAlign || ''); + verticalAlignBox.val(cell[0].style.verticalAlign || ''); + _setColor(colorBox.eq(0), K.toHex(cell[0].style.borderColor || '')); + _setColor(colorBox.eq(1), K.toHex(cell[0].style.backgroundColor || '')); + widthBox[0].focus(); + widthBox[0].select(); + }, + insert: function () { + console.warn('Table insert not available.'); + }, + 'delete': function () { + var table = self.plugin.getSelectedTable(); + self.cmd.range.setStartBefore(table[0]).collapse(true); + self.cmd.select(); + table.remove(); + self.addBookmark(); + }, + colinsert: function (offset) { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + index = cell.cellIndex + offset; + // 取得第一行的index + index += table.rows[0].cells.length - row.cells.length; + + for (var i = 0, len = table.rows.length; i < len; i++) { + var newRow = table.rows[i], + newCell = newRow.insertCell(index); + if (newRow.parentNode.tagName === 'THEAD') { + newCell.outerHTML = ''; + } + newCell.innerHTML = K.IE ? '' : '
'; + // 调整下一行的单元格index + index = _getCellIndex(table, newRow, newCell); + } + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + colinsertleft: function () { + this.colinsert(0); + }, + colinsertright: function () { + this.colinsert(1); + }, + rowinsert: function (offset) { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0]; + var rowIndex = row.rowIndex; + if (offset === 1) { + rowIndex = row.rowIndex + (cell.rowSpan - 1) + offset; + } + var newRow = table.insertRow(rowIndex); + + for (var i = 0, len = row.cells.length; i < len; i++) { + // 调整cell个数 + if (row.cells[i].rowSpan > 1) { + len -= row.cells[i].rowSpan - 1; + } + var newCell = newRow.insertCell(i); + // copy colspan + if (offset === 1 && row.cells[i].colSpan > 1) { + newCell.colSpan = row.cells[i].colSpan; + } + newCell.innerHTML = K.IE ? '' : '
'; + } + // 调整rowspan + for (var j = rowIndex; j >= 0; j--) { + var cells = table.rows[j].cells; + if (cells.length > i) { + for (var k = cell.cellIndex; k >= 0; k--) { + if (cells[k].rowSpan > 1) { + cells[k].rowSpan += 1; + } + } + break; + } + } + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + rowinsertabove: function () { + this.rowinsert(0); + }, + rowinsertbelow: function () { + this.rowinsert(1); + }, + rowmerge: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + rowIndex = row.rowIndex, // 当前行的index + nextRowIndex = rowIndex + cell.rowSpan, // 下一行的index + nextRow = table.rows[nextRowIndex]; // 下一行 + // 最后一行不能合并 + if (table.rows.length <= nextRowIndex) { + return; + } + var cellIndex = cell.cellIndex; // 下一行单元格的index + if (nextRow.cells.length <= cellIndex) { + return; + } + var nextCell = nextRow.cells[cellIndex]; // 下一行单元格 + // 上下行的colspan不一致时不能合并 + if (cell.colSpan !== nextCell.colSpan) { + return; + } + cell.rowSpan += nextCell.rowSpan; + nextRow.deleteCell(cellIndex); + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + colmerge: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + rowIndex = row.rowIndex, // 当前行的index + cellIndex = cell.cellIndex, + nextCellIndex = cellIndex + 1; + // 最后一列不能合并 + if (row.cells.length <= nextCellIndex) { + return; + } + var nextCell = row.cells[nextCellIndex]; + // 左右列的rowspan不一致时不能合并 + if (cell.rowSpan !== nextCell.rowSpan) { + return; + } + cell.colSpan += nextCell.colSpan; + row.deleteCell(nextCellIndex); + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + rowsplit: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + rowIndex = row.rowIndex; + // 不是可分割单元格 + if (cell.rowSpan === 1) { + return; + } + var cellIndex = _getCellIndex(table, row, cell); + for (var i = 1, len = cell.rowSpan; i < len; i++) { + var newRow = table.rows[rowIndex + i], + newCell = newRow.insertCell(cellIndex); + if (cell.colSpan > 1) { + newCell.colSpan = cell.colSpan; + } + newCell.innerHTML = K.IE ? '' : '
'; + // 调整下一行的单元格index + cellIndex = _getCellIndex(table, newRow, newCell); + } + K(cell).removeAttr('rowSpan'); + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + colsplit: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + cellIndex = cell.cellIndex; + // 不是可分割单元格 + if (cell.colSpan === 1) { + return; + } + for (var i = 1, len = cell.colSpan; i < len; i++) { + var newCell = row.insertCell(cellIndex + i); + if (cell.rowSpan > 1) { + newCell.rowSpan = cell.rowSpan; + } + newCell.innerHTML = K.IE ? '' : '
'; + } + K(cell).removeAttr('colSpan'); + self.cmd.range.selectNodeContents(cell).collapse(true); + self.cmd.select(); + self.addBookmark(); + }, + coldelete: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + index = cell.cellIndex; + for (var i = 0, len = table.rows.length; i < len; i++) { + var newRow = table.rows[i], + newCell = newRow.cells[index]; + if (newCell.colSpan > 1) { + newCell.colSpan -= 1; + if (newCell.colSpan === 1) { + K(newCell).removeAttr('colSpan'); + } + } else { + newRow.deleteCell(index); + } + // 跳过不需要删除的行 + if (newCell.rowSpan > 1) { + i += newCell.rowSpan - 1; + } + } + if (row.cells.length === 0) { + self.cmd.range.setStartBefore(table).collapse(true); + self.cmd.select(); + K(table).remove(); + } else { + self.cmd.selection(true); + } + self.addBookmark(); + }, + rowdelete: function () { + var table = self.plugin.getSelectedTable()[0], + row = self.plugin.getSelectedRow()[0], + cell = self.plugin.getSelectedCell()[0], + rowIndex = row.rowIndex; + // 从下到上删除 + for (var i = cell.rowSpan - 1; i >= 0; i--) { + table.deleteRow(rowIndex + i); + } + if (table.rows.length === 0) { + self.cmd.range.setStartBefore(table).collapse(true); + self.cmd.select(); + K(table).remove(); + } else { + self.cmd.selection(true); + } + self.addBookmark(); + } + }; + + self.clickToolbar(name, function () { + if (self.menu) return; + + var menu = self.createMenu({ + name: name, + beforeRemove: function () { + removeEvent(); + } + }); + + var $wrapperDiv = $('
'); + var $header = $('
' + lang.xRxC.format(0, 0) + '
'); + $wrapperDiv.append($header); + var $grid = $('
'); + $grid.on('mouseenter.kTable', '.ke-plugin-table-grid-cell', function () { + var $cell = $(this); + var row = $cell.data('row'); + var col = $cell.data('col'); + $header.text(lang.xRxC.format(row, col)); + var $cells = $grid.find('.ke-plugin-table-grid-cell'); + $cells.each(function () { + var $c = $(this); + var r = $c.data('row'); + var c = $c.data('col'); + if (r <= row && c <= col) { + $c.css({ + border: '1px solid #2286d2', + background: '#eff7ff' + }); + } else { + $c.css({ + border: '1px solid #ddd', + background: '#f1f1f1' + }); + } + }); + }).on('click.kTable', '.ke-plugin-table-grid-cell', function (e) { + var $cell = $(this); + var row = $cell.data('row'); + var col = $cell.data('col'); + insertTable(row, col); + self.hideMenu().focus(); + self.addBookmark(); + e.stopPropagation(); + }); + for (var r = 1; r < 11; r++) { + for (var c = 1; c < 11; c++) { + $grid.append('
'); + } + } + $elements.push($grid); + $wrapperDiv.append($grid); + menu.div.append($wrapperDiv[0]); + }); }); -_each(_CURSORMOVE_KEY_MAP, function(key, val) { - _CHANGE_KEY_MAP[key] = val; + +KindEditor.lang({ + table: KindEditor.lang('table') }); -function _bindEvent(el, type, fn) { - if (el.addEventListener){ - el.addEventListener(type, fn, _useCapture); - } else if (el.attachEvent){ - el.attachEvent('on' + type, fn); - } -} -function _unbindEvent(el, type, fn) { - if (el.removeEventListener){ - el.removeEventListener(type, fn, _useCapture); - } else if (el.detachEvent){ - el.detachEvent('on' + type, fn); - } -} -var _EVENT_PROPS = ('altKey,attrChange,attrName,bubbles,button,cancelable,charCode,clientX,clientY,ctrlKey,currentTarget,' + - 'data,detail,eventPhase,fromElement,handler,keyCode,metaKey,newValue,offsetX,offsetY,originalTarget,pageX,' + - 'pageY,prevValue,relatedNode,relatedTarget,screenX,screenY,shiftKey,srcElement,target,toElement,view,wheelDelta,which').split(','); -function KEvent(el, event) { - this.init(el, event); -} -_extend(KEvent, { - init : function(el, event) { - var self = this, doc = el.ownerDocument || el.document || el; - self.event = event; - _each(_EVENT_PROPS, function(key, val) { - self[val] = event[val]; - }); - if (!self.target) { - self.target = self.srcElement || doc; - } - if (self.target.nodeType === 3) { - self.target = self.target.parentNode; - } - if (!self.relatedTarget && self.fromElement) { - self.relatedTarget = self.fromElement === self.target ? self.toElement : self.fromElement; - } - if (self.pageX == null && self.clientX != null) { - var d = doc.documentElement, body = doc.body; - self.pageX = self.clientX + (d && d.scrollLeft || body && body.scrollLeft || 0) - (d && d.clientLeft || body && body.clientLeft || 0); - self.pageY = self.clientY + (d && d.scrollTop || body && body.scrollTop || 0) - (d && d.clientTop || body && body.clientTop || 0); - } - if (!self.which && ((self.charCode || self.charCode === 0) ? self.charCode : self.keyCode)) { - self.which = self.charCode || self.keyCode; - } - if (!self.metaKey && self.ctrlKey) { - self.metaKey = self.ctrlKey; - } - if (!self.which && self.button !== undefined) { - self.which = (self.button & 1 ? 1 : (self.button & 2 ? 3 : (self.button & 4 ? 2 : 0))); - } - switch (self.which) { - case 186 : - self.which = 59; - break; - case 187 : - case 107 : - case 43 : - self.which = 61; - break; - case 189 : - case 45 : - self.which = 109; - break; - case 42 : - self.which = 106; - break; - case 47 : - self.which = 111; - break; - case 78 : - self.which = 110; - break; - } - if (self.which >= 96 && self.which <= 105) { - self.which -= 48; - } - }, - preventDefault : function() { - var ev = this.event; - if (ev.preventDefault) { - ev.preventDefault(); - } - ev.returnValue = false; - }, - stopPropagation : function() { - var ev = this.event; - if (ev.stopPropagation) { - ev.stopPropagation(); - } - ev.cancelBubble = true; - }, - stop : function() { - this.preventDefault(); - this.stopPropagation(); - } +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('template', function(K) { + var self = this, + name = 'template', + lang = self.lang(name + '.'), + htmlPath = self.pluginsPath + name + '/html/'; + + function getFilePath(fileName) { + return htmlPath + fileName + '?ver=' + encodeURIComponent(K.DEBUG ? K.TIME : K.VERSION); + } + self.clickToolbar(name, function() { + var lang = self.lang(name + '.'), + arr = ['
', + '
', + // left start + '
', + lang.selectTemplate + '
', + // right start + '
', + ' ', + '
', + '
', + '
', + '', + '
' + ].join(''); + var dialog = self.createDialog({ + name: name, + width: 500, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var doc = K.iframeDoc(iframe); + self[checkbox[0].checked ? 'html' : 'insertHtml'](doc.body.innerHTML).hideDialog().focus(); + } + } + }); + var selectBox = K('select', dialog.div), + checkbox = K('[name="replaceFlag"]', dialog.div), + iframe = K('iframe', dialog.div); + checkbox[0].checked = true; + iframe.attr('src', getFilePath(selectBox.val())); + selectBox.change(function() { + iframe.attr('src', getFilePath(this.value)); + }); + }); }); -var _eventExpendo = 'kindeditor_' + _TIME, _eventId = 0, _eventData = {}; -function _getId(el) { - return el[_eventExpendo] || null; -} -function _setId(el) { - el[_eventExpendo] = ++_eventId; - return _eventId; -} -function _removeId(el) { - try { - delete el[_eventExpendo]; - } catch(e) { - if (el.removeAttribute) { - el.removeAttribute(_eventExpendo); - } - } -} -function _bind(el, type, fn) { - if (type.indexOf(',') >= 0) { - _each(type.split(','), function() { - _bind(el, this, fn); - }); - return; - } - var id = _getId(el); - if (!id) { - id = _setId(el); - } - if (_eventData[id] === undefined) { - _eventData[id] = {}; - } - var events = _eventData[id][type]; - if (events && events.length > 0) { - _unbindEvent(el, type, events[0]); - } else { - _eventData[id][type] = []; - _eventData[id].el = el; - } - events = _eventData[id][type]; - if (events.length === 0) { - events[0] = function(e) { - var kevent = e ? new KEvent(el, e) : undefined; - _each(events, function(i, event) { - if (i > 0 && event) { - event.call(el, kevent); - } - }); - }; - } - if (_inArray(fn, events) < 0) { - events.push(fn); - } - _bindEvent(el, type, events[0]); -} -function _unbind(el, type, fn) { - if (type && type.indexOf(',') >= 0) { - _each(type.split(','), function() { - _unbind(el, this, fn); - }); - return; - } - var id = _getId(el); - if (!id) { - return; - } - if (type === undefined) { - if (id in _eventData) { - _each(_eventData[id], function(key, events) { - if (key != 'el' && events.length > 0) { - _unbindEvent(el, key, events[0]); - } - }); - delete _eventData[id]; - _removeId(el); - } - return; - } - if (!_eventData[id]) { - return; - } - var events = _eventData[id][type]; - if (events && events.length > 0) { - if (fn === undefined) { - _unbindEvent(el, type, events[0]); - delete _eventData[id][type]; - } else { - _each(events, function(i, event) { - if (i > 0 && event === fn) { - events.splice(i, 1); - } - }); - if (events.length == 1) { - _unbindEvent(el, type, events[0]); - delete _eventData[id][type]; - } - } - var count = 0; - _each(_eventData[id], function() { - count++; - }); - if (count < 2) { - delete _eventData[id]; - _removeId(el); - } - } -} -function _fire(el, type) { - if (type.indexOf(',') >= 0) { - _each(type.split(','), function() { - _fire(el, this); - }); - return; - } - var id = _getId(el); - if (!id) { - return; - } - var events = _eventData[id][type]; - if (_eventData[id] && events && events.length > 0) { - events[0](); - } -} -function _ctrl(el, key, fn) { - var self = this; - key = /^\d{2,}$/.test(key) ? key : key.toUpperCase().charCodeAt(0); - _bind(el, 'keydown', function(e) { - if (e.ctrlKey && e.which == key && !e.shiftKey && !e.altKey) { - fn.call(el); - e.stop(); - } - }); -} -function _ready(fn) { - var loaded = false; - function readyFunc() { - if (!loaded) { - loaded = true; - fn(KindEditor); - } - } - function ieReadyFunc() { - if (!loaded) { - try { - document.documentElement.doScroll('left'); - } catch(e) { - setTimeout(ieReadyFunc, 100); - return; - } - readyFunc(); - } - } - function ieReadyStateFunc() { - if (document.readyState === 'complete') { - readyFunc(); - } - } - if (document.addEventListener) { - _bind(document, 'DOMContentLoaded', readyFunc); - } else if (document.attachEvent) { - _bind(document, 'readystatechange', ieReadyStateFunc); - var toplevel = false; - try { - toplevel = window.frameElement == null; - } catch(e) {} - if (document.documentElement.doScroll && toplevel) { - ieReadyFunc(); - } - } - _bind(window, 'load', readyFunc); -} -if (_IE) { - window.attachEvent('onunload', function() { - _each(_eventData, function(key, events) { - if (events.el) { - _unbind(events.el); - } - }); - }); -} -K.ctrl = _ctrl; -K.ready = _ready; -function _getCssList(css) { - var list = {}, - reg = /\s*([\w\-]+)\s*:([^;]*)(;|$)/g, - match; - while ((match = reg.exec(css))) { - var key = _trim(match[1].toLowerCase()), - val = _trim(_toHex(match[2])); - list[key] = val; - } - return list; -} -function _getAttrList(tag) { - var list = {}, - reg = /\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g, - match; - while ((match = reg.exec(tag))) { - var key = (match[1] || match[2] || match[4] || match[6]).toLowerCase(), - val = (match[2] ? match[3] : (match[4] ? match[5] : match[7])) || ''; - list[key] = val; - } - return list; -} -function _addClassToTag(tag, className) { - if (/\s+class\s*=/.test(tag)) { - tag = tag.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 { - tag = tag.substr(0, tag.length - 1) + ' class="' + className + '">'; - } - return tag; -} -function _formatCss(css) { - var str = ''; - _each(_getCssList(css), function(key, val) { - str += key + ':' + val + ';'; - }); - return str; -} -function _formatUrl(url, mode, host, pathname) { - mode = _undef(mode, '').toLowerCase(); - if (url.substr(0, 5) != 'data:') { - url = url.replace(/([^:])\/\//g, '$1/'); - } - if (_inArray(mode, ['absolute', 'relative', 'domain']) < 0) { - return url; - } - host = host || location.protocol + '//' + location.host; - if (pathname === undefined) { - var m = location.pathname.match(/^(\/.*)\//); - pathname = m ? m[1] : ''; - } - var match; - if ((match = /^(\w+:\/\/[^\/]*)/.exec(url))) { - if (match[1] !== host) { - return url; - } - } else if (/^\w+:/.test(url)) { - return url; - } - function getRealPath(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 (/^\//.test(url)) { - url = host + getRealPath(url.substr(1)); - } else if (!/^\w+:\/\//.test(url)) { - url = host + getRealPath(pathname + '/' + url); - } - function getRelativePath(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 { - if ((match = /^(.*)\//.exec(path))) { - return getRelativePath(match[1], ++depth); - } - } - } - if (mode === 'relative') { - 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; -} -function _formatHtml(html, htmlTags, urlType, wellFormatted, indentChar) { - urlType = urlType || ''; - wellFormatted = _undef(wellFormatted, false); - indentChar = _undef(indentChar, '\t'); - var fontSizeList = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(','); - html = html.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/ig, function($0, $1, $2, $3) { - return $1 + $2.replace(/<(?:br|br\s[^>]*)>/ig, '\n') + $3; - }); - html = html.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/ig, '

'); - html = html.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/ig, '$1
$2'); - html = html.replace(/\u200B/g, ''); - html = html.replace(/\u00A9/g, '©'); - var htmlTagMap = {}; - if (htmlTags) { - _each(htmlTags, function(key, val) { - var arr = key.split(','); - for (var i = 0, len = arr.length; i < len; i++) { - htmlTagMap[arr[i]] = _toMap(val); - } - }); - if (!htmlTagMap.script) { - html = html.replace(/(<(?:script|script\s[^>]*)>)([\s\S]*?)(<\/script>)/ig, ''); - } - if (!htmlTagMap.style) { - html = html.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/ig, ''); - } - } - var re = /([ \t\n\r]*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>([ \t\n\r]*)/g; - var tagStack = []; - html = html.replace(re, function($0, $1, $2, $3, $4, $5, $6) { - var full = $0, - startNewline = $1 || '', - startSlash = $2 || '', - tagName = $3.toLowerCase(), - attr = $4 || '', - endSlash = $5 ? ' ' + $5 : '', - endNewline = $6 || ''; - if (htmlTags && !htmlTagMap[tagName]) { - return ''; - } - if (endSlash === '' && _SINGLE_TAG_MAP[tagName]) { - endSlash = ' /'; - } - if (_INLINE_TAG_MAP[tagName]) { - if (startNewline) { - startNewline = ' '; - } - if (endNewline) { - endNewline = ' '; - } - } - if (_PRE_TAG_MAP[tagName]) { - if (startSlash) { - endNewline = '\n'; - } else { - startNewline = '\n'; - } - } - if (wellFormatted && tagName == 'br') { - endNewline = '\n'; - } - if (_BLOCK_TAG_MAP[tagName] && !_PRE_TAG_MAP[tagName]) { - if (wellFormatted) { - if (startSlash && tagStack.length > 0 && tagStack[tagStack.length - 1] === tagName) { - tagStack.pop(); - } else { - tagStack.push(tagName); - } - startNewline = ''; - endNewline = ''; - for (var i = 0, len = startSlash ? tagStack.length : tagStack.length - 1; i < len; i++) { - startNewline += indentChar; - if (!startSlash) { - endNewline += indentChar; - } - } - if (endSlash) { - tagStack.pop(); - } else if (!startSlash) { - endNewline += indentChar; - } - } else { - startNewline = endNewline = ''; - } - } - if (attr !== '') { - var attrMap = _getAttrList(full); - if (tagName === 'font') { - var fontStyleMap = {}, fontStyle = ''; - _each(attrMap, function(key, val) { - if (key === 'color') { - fontStyleMap.color = val; - delete attrMap[key]; - } - if (key === 'size') { - fontStyleMap['font-size'] = fontSizeList[parseInt(val, 10) - 1] || ''; - delete attrMap[key]; - } - if (key === 'face') { - fontStyleMap['font-family'] = val; - delete attrMap[key]; - } - if (key === 'style') { - fontStyle = val; - } - }); - if (fontStyle && !/;$/.test(fontStyle)) { - fontStyle += ';'; - } - _each(fontStyleMap, function(key, val) { - if (val === '') { - return; - } - if (/\s/.test(val)) { - val = "'" + val + "'"; - } - fontStyle += key + ':' + val + ';'; - }); - attrMap.style = fontStyle; - } - _each(attrMap, function(key, val) { - if (_FILL_ATTR_MAP[key]) { - attrMap[key] = key; - } - if (_inArray(key, ['src', 'href']) >= 0) { - attrMap[key] = _formatUrl(val, urlType); - } - if (htmlTags && key !== 'style' && !htmlTagMap[tagName]['*'] && !htmlTagMap[tagName][key] || - tagName === 'body' && key === 'contenteditable' || - /^kindeditor_\d+$/.test(key)) { - delete attrMap[key]; - } - if (key === 'style' && val !== '') { - var styleMap = _getCssList(val); - _each(styleMap, function(k, v) { - if (htmlTags && !htmlTagMap[tagName].style && !htmlTagMap[tagName]['.' + k]) { - delete styleMap[k]; - } - }); - var style = ''; - _each(styleMap, function(k, v) { - style += k + ':' + v + ';'; - }); - attrMap.style = style; - } - }); - attr = ''; - _each(attrMap, function(key, val) { - if (key === 'style' && val === '') { - return; - } - val = val.replace(/"/g, '"'); - attr += ' ' + key + '="' + val + '"'; - }); - } - if (tagName === 'font') { - tagName = 'span'; - } - return startNewline + '<' + startSlash + tagName + attr + endSlash + '>' + endNewline; - }); - html = html.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/ig, function($0, $1, $2, $3) { - return $1 + $2.replace(/\n/g, '\n') + $3; - }); - html = html.replace(/\n\s*\n/g, '\n'); - html = html.replace(/\n/g, '\n'); - html = html.replace(/>\n<'); - return _trim(html); -} -function _clearMsWord(html, htmlTags) { - html = html.replace(//ig, '') - .replace(//ig, '') - .replace(/]*>[\s\S]*?<\/style>/ig, '') - .replace(/]*>[\s\S]*?<\/script>/ig, '') - .replace(/]+>[\s\S]*?<\/w:[^>]+>/ig, '') - .replace(/]+>[\s\S]*?<\/o:[^>]+>/ig, '') - .replace(/[\s\S]*?<\/xml>/ig, '') - .replace(/<(?:table|td)[^>]*>/ig, function(full) { - return full.replace(/border-bottom:([#\w\s]+)/ig, 'border:$1'); - }); - return _formatHtml(html, htmlTags); -} -function _mediaType(src) { - if (/\.(rm|rmvb)(\?|$)/i.test(src)) { - return 'audio/x-pn-realaudio-plugin'; - } - if (/\.(swf|flv)(\?|$)/i.test(src)) { - return 'application/x-shockwave-flash'; - } - return 'video/x-ms-asf-plugin'; -} -function _mediaClass(type) { - if (/realaudio/i.test(type)) { - return 'ke-rm'; - } - if (/flash/i.test(type)) { - return 'ke-flash'; - } - return 'ke-media'; -} -function _mediaAttrs(srcTag) { - return _getAttrList(unescape(srcTag)); -} -function _mediaEmbed(attrs) { - var html = ' 0) { - style += 'width:' + width + 'px;'; - } - if (height > 0) { - style += 'height:' + height + 'px;'; - } - var html = ''; - return html; -} -function _tmpl(str, data) { - var fn = new Function("obj", - "var p=[],print=function(){p.push.apply(p,arguments);};" + - "with(obj){p.push('" + - str.replace(/[\r\t\n]/g, " ") - .split("<%").join("\t") - .replace(/((^|%>)[^\t]*)'/g, "$1\r") - .replace(/\t=(.*?)%>/g, "',$1,'") - .split("\t").join("');") - .split("%>").join("p.push('") - .split("\r").join("\\'") + "');}return p.join('');"); - return data ? fn(data) : fn; -} -K.formatUrl = _formatUrl; -K.formatHtml = _formatHtml; -K.getCssList = _getCssList; -K.getAttrList = _getAttrList; -K.mediaType = _mediaType; -K.mediaAttrs = _mediaAttrs; -K.mediaEmbed = _mediaEmbed; -K.mediaImg = _mediaImg; -K.clearMsWord = _clearMsWord; -K.tmpl = _tmpl; -function _contains(nodeA, nodeB) { - if (nodeA.nodeType == 9 && nodeB.nodeType != 9) { - return true; - } - while ((nodeB = nodeB.parentNode)) { - if (nodeB == nodeA) { - return true; - } - } - return false; -} -var _getSetAttrDiv = document.createElement('div'); -_getSetAttrDiv.setAttribute('className', 't'); -var _GET_SET_ATTRIBUTE = _getSetAttrDiv.className !== 't'; -function _getAttr(el, key) { - key = key.toLowerCase(); - var val = null; - if (!_GET_SET_ATTRIBUTE && el.nodeName.toLowerCase() != 'script') { - var div = el.ownerDocument.createElement('div'); - div.appendChild(el.cloneNode(false)); - var list = _getAttrList(_unescape(div.innerHTML)); - if (key in list) { - val = list[key]; - } - } else { - try { - val = el.getAttribute(key, 2); - } catch(e) { - val = el.getAttribute(key, 1); - } - } - if (key === 'style' && val !== null) { - val = _formatCss(val); - } - return val; -} -function _queryAll(expr, root) { - var exprList = expr.split(','); - if (exprList.length > 1) { - var mergedResults = []; - _each(exprList, function() { - _each(_queryAll(this, root), function() { - if (_inArray(this, mergedResults) < 0) { - mergedResults.push(this); - } - }); - }); - return mergedResults; - } - root = root || document; - function escape(str) { - if (typeof str != 'string') { - return str; - } - return str.replace(/([^\w\-])/g, '\\$1'); - } - function stripslashes(str) { - return str.replace(/\\/g, ''); - } - function cmpTag(tagA, tagB) { - return tagA === '*' || tagA.toLowerCase() === escape(tagB.toLowerCase()); - } - function byId(id, tag, root) { - var arr = [], - doc = root.ownerDocument || root, - el = doc.getElementById(stripslashes(id)); - if (el) { - if (cmpTag(tag, el.nodeName) && _contains(root, el)) { - arr.push(el); - } - } - return arr; - } - function byClass(className, tag, root) { - var doc = root.ownerDocument || root, arr = [], els, i, len, el; - if (root.getElementsByClassName) { - els = root.getElementsByClassName(stripslashes(className)); - for (i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (cmpTag(tag, el.nodeName)) { - arr.push(el); - } - } - } else if (doc.querySelectorAll) { - els = doc.querySelectorAll((root.nodeName !== '#document' ? root.nodeName + ' ' : '') + tag + '.' + className); - for (i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (_contains(root, el)) { - arr.push(el); - } - } - } else { - els = root.getElementsByTagName(tag); - className = ' ' + className + ' '; - for (i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (el.nodeType == 1) { - var cls = el.className; - if (cls && (' ' + cls + ' ').indexOf(className) > -1) { - arr.push(el); - } - } - } - } - return arr; - } - function byName(name, tag, root) { - var arr = [], doc = root.ownerDocument || root, - els = doc.getElementsByName(stripslashes(name)), el; - for (var i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (cmpTag(tag, el.nodeName) && _contains(root, el)) { - if (el.getAttributeNode('name')) { - arr.push(el); - } - } - } - return arr; - } - function byAttr(key, val, tag, root) { - var arr = [], els = root.getElementsByTagName(tag), el; - for (var i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (el.nodeType == 1) { - if (val === null) { - if (_getAttr(el, key) !== null) { - arr.push(el); - } - } else { - if (val === escape(_getAttr(el, key))) { - arr.push(el); - } - } - } - } - return arr; - } - function select(expr, root) { - var arr = [], matches; - matches = /^((?:\\.|[^.#\s\[<>])+)/.exec(expr); - var tag = matches ? matches[1] : '*'; - if ((matches = /#((?:[\w\-]|\\.)+)$/.exec(expr))) { - arr = byId(matches[1], tag, root); - } else if ((matches = /\.((?:[\w\-]|\\.)+)$/.exec(expr))) { - arr = byClass(matches[1], tag, root); - } else if ((matches = /\[((?:[\w\-]|\\.)+)\]/.exec(expr))) { - arr = byAttr(matches[1].toLowerCase(), null, tag, root); - } else if ((matches = /\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(expr))) { - var key = matches[1].toLowerCase(), val = matches[2]; - if (key === 'id') { - arr = byId(val, tag, root); - } else if (key === 'class') { - arr = byClass(val, tag, root); - } else if (key === 'name') { - arr = byName(val, tag, root); - } else { - arr = byAttr(key, val, tag, root); - } - } else { - var els = root.getElementsByTagName(tag), el; - for (var i = 0, len = els.length; i < len; i++) { - el = els[i]; - if (el.nodeType == 1) { - arr.push(el); - } - } - } - return arr; - } - var parts = [], arr, re = /((?:\\.|[^\s>])+|[\s>])/g; - while ((arr = re.exec(expr))) { - if (arr[1] !== ' ') { - parts.push(arr[1]); - } - } - var results = []; - if (parts.length == 1) { - return select(parts[0], root); - } - var isChild = false, part, els, subResults, val, v, i, j, k, length, len, l; - for (i = 0, lenth = parts.length; i < lenth; i++) { - part = parts[i]; - if (part === '>') { - isChild = true; - continue; - } - if (i > 0) { - els = []; - for (j = 0, len = results.length; j < len; j++) { - val = results[j]; - subResults = select(part, val); - for (k = 0, l = subResults.length; k < l; k++) { - v = subResults[k]; - if (isChild) { - if (val === v.parentNode) { - els.push(v); - } - } else { - els.push(v); - } - } - } - results = els; - } else { - results = select(part, root); - } - if (results.length === 0) { - return []; - } - } - return results; -} -function _query(expr, root) { - var arr = _queryAll(expr, root); - return arr.length > 0 ? arr[0] : null; -} -K.query = _query; -K.queryAll = _queryAll; -function _get(val) { - return K(val)[0]; -} -function _getDoc(node) { - if (!node) { - return document; - } - return node.ownerDocument || node.document || node; -} -function _getWin(node) { - if (!node) { - return window; - } - var doc = _getDoc(node); - return doc.parentWindow || doc.defaultView; -} -function _setHtml(el, html) { - if (el.nodeType != 1) { - return; - } - var doc = _getDoc(el); - try { - el.innerHTML = '' + html; - var temp = doc.getElementById('__kindeditor_temp_tag__'); - temp.parentNode.removeChild(temp); - } catch(e) { - K(el).empty(); - K('@' + html, doc).each(function() { - el.appendChild(this); - }); - } -} -function _hasClass(el, cls) { - return _inString(cls, el.className, ' '); -} -function _setAttr(el, key, val) { - if (_IE && _V < 8 && key.toLowerCase() == 'class') { - key = 'className'; - } - el.setAttribute(key, '' + val); -} -function _removeAttr(el, key) { - if (_IE && _V < 8 && key.toLowerCase() == 'class') { - key = 'className'; - } - _setAttr(el, key, ''); - el.removeAttribute(key); -} -function _getNodeName(node) { - if (!node || !node.nodeName) { - return ''; - } - return node.nodeName.toLowerCase(); -} -function _computedCss(el, key) { - var self = this, win = _getWin(el), camelKey = _toCamel(key), val = ''; - if (win.getComputedStyle) { - var style = win.getComputedStyle(el, null); - val = style[camelKey] || style.getPropertyValue(key) || el.style[camelKey]; - } else if (el.currentStyle) { - val = el.currentStyle[camelKey] || el.style[camelKey]; - } - return val; -} -function _hasVal(node) { - return !!_VALUE_TAG_MAP[_getNodeName(node)]; -} -function _docElement(doc) { - doc = doc || document; - return _QUIRKS ? doc.body : doc.documentElement; -} -function _docHeight(doc) { - var el = _docElement(doc); - return Math.max(el.scrollHeight, el.clientHeight); -} -function _docWidth(doc) { - var el = _docElement(doc); - return Math.max(el.scrollWidth, el.clientWidth); -} -function _getScrollPos(doc) { - doc = doc || document; - var x, y; - if (_IE || _OPERA) { - x = _docElement(doc).scrollLeft; - y = _docElement(doc).scrollTop; - } else { - x = _getWin(doc).scrollX; - y = _getWin(doc).scrollY; - } - return {x : x, y : y}; -} -function KNode(node) { - this.init(node); -} -_extend(KNode, { - init : function(node) { - var self = this; - node = _isArray(node) ? node : [node]; - var length = 0; - for (var i = 0, len = node.length; i < len; i++) { - if (node[i]) { - self[i] = node[i].constructor === KNode ? node[i][0] : node[i]; - length++; - } - } - self.length = length; - self.doc = _getDoc(self[0]); - self.name = _getNodeName(self[0]); - self.type = self.length > 0 ? self[0].nodeType : null; - self.win = _getWin(self[0]); - }, - each : function(fn) { - var self = this; - for (var i = 0; i < self.length; i++) { - if (fn.call(self[i], i, self[i]) === false) { - return self; - } - } - return self; - }, - bind : function(type, fn) { - this.each(function() { - _bind(this, type, fn); - }); - return this; - }, - unbind : function(type, fn) { - this.each(function() { - _unbind(this, type, fn); - }); - return this; - }, - fire : function(type) { - if (this.length < 1) { - return this; - } - _fire(this[0], type); - return this; - }, - hasAttr : function(key) { - if (this.length < 1) { - return false; - } - return !!_getAttr(this[0], key); - }, - attr : function(key, val) { - var self = this; - if (key === undefined) { - return _getAttrList(self.outer()); - } - if (typeof key === 'object') { - _each(key, function(k, v) { - self.attr(k, v); - }); - return self; - } - if (val === undefined) { - val = self.length < 1 ? null : _getAttr(self[0], key); - return val === null ? '' : val; - } - self.each(function() { - _setAttr(this, key, val); - }); - return self; - }, - removeAttr : function(key) { - this.each(function() { - _removeAttr(this, key); - }); - return this; - }, - get : function(i) { - if (this.length < 1) { - return null; - } - return this[i || 0]; - }, - eq : function(i) { - if (this.length < 1) { - return null; - } - return this[i] ? new KNode(this[i]) : null; - }, - hasClass : function(cls) { - if (this.length < 1) { - return false; - } - return _hasClass(this[0], cls); - }, - addClass : function(cls) { - this.each(function() { - if (!_hasClass(this, cls)) { - this.className = _trim(this.className + ' ' + cls); - } - }); - return this; - }, - removeClass : function(cls) { - this.each(function() { - if (_hasClass(this, cls)) { - this.className = _trim(this.className.replace(new RegExp('(^|\\s)' + cls + '(\\s|$)'), ' ')); - } - }); - return this; - }, - html : function(val) { - var self = this; - if (val === undefined) { - if (self.length < 1 || self.type != 1) { - return ''; - } - return _formatHtml(self[0].innerHTML); - } - self.each(function() { - _setHtml(this, val); - }); - return self; - }, - text : function() { - var self = this; - if (self.length < 1) { - return ''; - } - return _IE ? self[0].innerText : self[0].textContent; - }, - hasVal : function() { - if (this.length < 1) { - return false; - } - return _hasVal(this[0]); - }, - val : function(val) { - var self = this; - if (val === undefined) { - if (self.length < 1) { - return ''; - } - return self.hasVal() ? self[0].value : self.attr('value'); - } else { - self.each(function() { - if (_hasVal(this)) { - this.value = val; - } else { - _setAttr(this, 'value' , val); - } - }); - return self; - } - }, - css : function(key, val) { - var self = this; - if (key === undefined) { - return _getCssList(self.attr('style')); - } - if (typeof key === 'object') { - _each(key, function(k, v) { - self.css(k, v); - }); - return self; - } - if (val === undefined) { - if (self.length < 1) { - return ''; - } - return self[0].style[_toCamel(key)] || _computedCss(self[0], key) || ''; - } - self.each(function() { - this.style[_toCamel(key)] = val; - }); - return self; - }, - width : function(val) { - var self = this; - if (val === undefined) { - if (self.length < 1) { - return 0; - } - return self[0].offsetWidth; - } - return self.css('width', _addUnit(val)); - }, - height : function(val) { - var self = this; - if (val === undefined) { - if (self.length < 1) { - return 0; - } - return self[0].offsetHeight; - } - return self.css('height', _addUnit(val)); - }, - opacity : function(val) { - this.each(function() { - if (this.style.opacity === undefined) { - this.style.filter = val == 1 ? '' : 'alpha(opacity=' + (val * 100) + ')'; - } else { - this.style.opacity = val == 1 ? '' : val; - } - }); - return this; - }, - data : function(key, val) { - var self = this; - key = 'kindeditor_data_' + key; - if (val === undefined) { - if (self.length < 1) { - return null; - } - return self[0][key]; - } - this.each(function() { - this[key] = val; - }); - return self; - }, - pos : function() { - var self = this, node = self[0], x = 0, y = 0; - if (node) { - if (node.getBoundingClientRect) { - var box = node.getBoundingClientRect(), - pos = _getScrollPos(self.doc); - x = box.left + pos.x; - y = box.top + pos.y; - } else { - while (node) { - x += node.offsetLeft; - y += node.offsetTop; - node = node.offsetParent; - } - } - } - return {x : _round(x), y : _round(y)}; - }, - clone : function(bool) { - if (this.length < 1) { - return new KNode([]); - } - return new KNode(this[0].cloneNode(bool)); - }, - append : function(expr) { - this.each(function() { - if (this.appendChild) { - this.appendChild(_get(expr)); - } - }); - return this; - }, - appendTo : function(expr) { - this.each(function() { - _get(expr).appendChild(this); - }); - return this; - }, - before : function(expr) { - this.each(function() { - this.parentNode.insertBefore(_get(expr), this); - }); - return this; - }, - after : function(expr) { - this.each(function() { - if (this.nextSibling) { - this.parentNode.insertBefore(_get(expr), this.nextSibling); - } else { - this.parentNode.appendChild(_get(expr)); - } - }); - return this; - }, - replaceWith : function(expr) { - var nodes = []; - this.each(function(i, node) { - _unbind(node); - var newNode = _get(expr); - node.parentNode.replaceChild(newNode, node); - nodes.push(newNode); - }); - return K(nodes); - }, - empty : function() { - var self = this; - self.each(function(i, node) { - var child = node.firstChild; - while (child) { - if (!node.parentNode) { - return; - } - var next = child.nextSibling; - child.parentNode.removeChild(child); - child = next; - } - }); - return self; - }, - remove : function(keepChilds) { - var self = this; - self.each(function(i, node) { - if (!node.parentNode) { - return; - } - _unbind(node); - if (keepChilds) { - var child = node.firstChild; - while (child) { - var next = child.nextSibling; - node.parentNode.insertBefore(child, node); - child = next; - } - } - node.parentNode.removeChild(node); - delete self[i]; - }); - self.length = 0; - return self; - }, - show : function(val) { - var self = this; - if (val === undefined) { - val = self._originDisplay || ''; - } - if (self.css('display') != 'none') { - return self; - } - return self.css('display', val); - }, - hide : function() { - var self = this; - if (self.length < 1) { - return self; - } - self._originDisplay = self[0].style.display; - return self.css('display', 'none'); - }, - outer : function() { - var self = this; - if (self.length < 1) { - return ''; - } - var div = self.doc.createElement('div'), html; - div.appendChild(self[0].cloneNode(true)); - html = _formatHtml(div.innerHTML); - div = null; - return html; - }, - isSingle : function() { - return !!_SINGLE_TAG_MAP[this.name]; - }, - isInline : function() { - return !!_INLINE_TAG_MAP[this.name]; - }, - isBlock : function() { - return !!_BLOCK_TAG_MAP[this.name]; - }, - isStyle : function() { - return !!_STYLE_TAG_MAP[this.name]; - }, - isControl : function() { - return !!_CONTROL_TAG_MAP[this.name]; - }, - contains : function(otherNode) { - if (this.length < 1) { - return false; - } - return _contains(this[0], _get(otherNode)); - }, - parent : function() { - if (this.length < 1) { - return null; - } - var node = this[0].parentNode; - return node ? new KNode(node) : null; - }, - children : function() { - if (this.length < 1) { - return new KNode([]); - } - var list = [], child = this[0].firstChild; - while (child) { - if (child.nodeType != 3 || _trim(child.nodeValue) !== '') { - list.push(child); - } - child = child.nextSibling; - } - return new KNode(list); - }, - first : function() { - var list = this.children(); - return list.length > 0 ? list.eq(0) : null; - }, - last : function() { - var list = this.children(); - return list.length > 0 ? list.eq(list.length - 1) : null; - }, - index : function() { - if (this.length < 1) { - return -1; - } - var i = -1, sibling = this[0]; - while (sibling) { - i++; - sibling = sibling.previousSibling; - } - return i; - }, - prev : function() { - if (this.length < 1) { - return null; - } - var node = this[0].previousSibling; - return node ? new KNode(node) : null; - }, - next : function() { - if (this.length < 1) { - return null; - } - var node = this[0].nextSibling; - return node ? new KNode(node) : null; - }, - scan : function(fn, order) { - if (this.length < 1) { - return; - } - order = (order === undefined) ? true : order; - function walk(node) { - var n = order ? node.firstChild : node.lastChild; - while (n) { - var next = order ? n.nextSibling : n.previousSibling; - if (fn(n) === false) { - return false; - } - if (walk(n) === false) { - return false; - } - n = next; - } - } - walk(this[0]); - return this; - } +/******************************************************************************* + * KindEditor - WYSIWYG HTML Editor for Internet + * Copyright (C) 2006-2011 kindsoft.net + * + * @author Roddy + * @site http://www.kindsoft.net/ + * @licence http://www.kindsoft.net/license.php + *******************************************************************************/ + +KindEditor.plugin('wordpaste', function(K) { + var self = this, + name = 'wordpaste'; + self.clickToolbar(name, function() { + var lang = self.lang(name + '.'), + html = '
' + + '
' + lang.comment + '
' + + '' + + '
', + dialog = self.createDialog({ + name: name, + width: 450, + title: self.lang(name), + body: html, + yesBtn: { + name: self.lang('yes'), + click: function(e) { + var str = doc.body.innerHTML; + str = K.clearMsWord(str, self.filterMode ? self.htmlTags : K.options.htmlTags); + self.insertHtml(str).hideDialog().focus(); + } + } + }), + div = dialog.div, + iframe = K('iframe', div), + doc = K.iframeDoc(iframe); + if(!K.IE) { + doc.designMode = 'on'; + } + doc.open(); + doc.write('WordPaste'); + doc.write(''); + if(!K.IE) { + doc.write('
'); + } + doc.write(''); + doc.close(); + if(K.IE) { + doc.body.contentEditable = 'true'; + } + iframe[0].contentWindow.focus(); + }); }); -_each(('blur,focus,focusin,focusout,load,resize,scroll,unload,click,dblclick,' + - 'mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,' + - 'change,select,submit,keydown,keypress,keyup,error,contextmenu').split(','), function(i, type) { - KNode.prototype[type] = function(fn) { - return fn ? this.bind(type, fn) : this.fire(type); - }; -}); -var _K = K; -K = function(expr, root) { - if (expr === undefined || expr === null) { - return; - } - function newNode(node) { - if (!node[0]) { - node = []; - } - return new KNode(node); - } - if (typeof expr === 'string') { - if (root) { - root = _get(root); - } - var length = expr.length; - if (expr.charAt(0) === '@') { - expr = expr.substr(1); - } - if (expr.length !== length || /<.+>/.test(expr)) { - var doc = root ? root.ownerDocument || root : document, - div = doc.createElement('div'), list = []; - div.innerHTML = '' + expr; - for (var i = 0, len = div.childNodes.length; i < len; i++) { - var child = div.childNodes[i]; - if (child.id == '__kindeditor_temp_tag__') { - continue; - } - list.push(child); - } - return newNode(list); - } - return newNode(_queryAll(expr, root)); - } - if (expr && expr.constructor === KNode) { - return expr; - } - if (expr.toArray) { - expr = expr.toArray(); - } - if (_isArray(expr)) { - return newNode(expr); - } - return newNode(_toArray(arguments)); -}; -_each(_K, function(key, val) { - K[key] = val; -}); -K.NodeClass = KNode; -window.KindEditor = K; -var _START_TO_START = 0, - _START_TO_END = 1, - _END_TO_END = 2, - _END_TO_START = 3, - _BOOKMARK_ID = 0; -function _updateCollapsed(range) { - range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset); - return range; -} -function _copyAndDelete(range, isCopy, isDelete) { - var doc = range.doc, nodeList = []; - function splitTextNode(node, startOffset, endOffset) { - var length = node.nodeValue.length, centerNode; - if (isCopy) { - var cloneNode = node.cloneNode(true); - if (startOffset > 0) { - centerNode = cloneNode.splitText(startOffset); - } else { - centerNode = cloneNode; - } - if (endOffset < length) { - centerNode.splitText(endOffset - startOffset); - } - } - if (isDelete) { - var center = node; - if (startOffset > 0) { - center = node.splitText(startOffset); - range.setStart(node, startOffset); - } - if (endOffset < length) { - var right = center.splitText(endOffset - startOffset); - range.setEnd(right, 0); - } - nodeList.push(center); - } - return centerNode; - } - function removeNodes() { - if (isDelete) { - range.up().collapse(true); - } - for (var i = 0, len = nodeList.length; i < len; i++) { - var node = nodeList[i]; - if (node.parentNode) { - node.parentNode.removeChild(node); - } - } - } - var copyRange = range.cloneRange().down(); - var start = -1, incStart = -1, incEnd = -1, end = -1, - ancestor = range.commonAncestor(), frag = doc.createDocumentFragment(); - if (ancestor.nodeType == 3) { - var textNode = splitTextNode(ancestor, range.startOffset, range.endOffset); - if (isCopy) { - frag.appendChild(textNode); - } - removeNodes(); - return isCopy ? frag : range; - } - function extractNodes(parent, frag) { - var node = parent.firstChild, nextNode; - while (node) { - var testRange = new KRange(doc).selectNode(node); - start = testRange.compareBoundaryPoints(_START_TO_END, range); - if (start >= 0 && incStart <= 0) { - incStart = testRange.compareBoundaryPoints(_START_TO_START, range); - } - if (incStart >= 0 && incEnd <= 0) { - incEnd = testRange.compareBoundaryPoints(_END_TO_END, range); - } - if (incEnd >= 0 && end <= 0) { - end = testRange.compareBoundaryPoints(_END_TO_START, range); - } - if (end >= 0) { - return false; - } - nextNode = node.nextSibling; - if (start > 0) { - if (node.nodeType == 1) { - if (incStart >= 0 && incEnd <= 0) { - if (isCopy) { - frag.appendChild(node.cloneNode(true)); - } - if (isDelete) { - nodeList.push(node); - } - } else { - var childFlag; - if (isCopy) { - childFlag = node.cloneNode(false); - frag.appendChild(childFlag); - } - if (extractNodes(node, childFlag) === false) { - return false; - } - } - } else if (node.nodeType == 3) { - var textNode; - if (node == copyRange.startContainer) { - textNode = splitTextNode(node, copyRange.startOffset, node.nodeValue.length); - } else if (node == copyRange.endContainer) { - textNode = splitTextNode(node, 0, copyRange.endOffset); - } else { - textNode = splitTextNode(node, 0, node.nodeValue.length); - } - if (isCopy) { - try { - frag.appendChild(textNode); - } catch(e) {} - } - } - } - node = nextNode; - } - } - extractNodes(ancestor, frag); - if (isDelete) { - range.up().collapse(true); - } - for (var i = 0, len = nodeList.length; i < len; i++) { - var node = nodeList[i]; - if (node.parentNode) { - node.parentNode.removeChild(node); - } - } - return isCopy ? frag : range; -} -function _moveToElementText(range, el) { - var node = el; - while (node) { - var knode = K(node); - if (knode.name == 'marquee' || knode.name == 'select') { - return; - } - node = node.parentNode; - } - try { - range.moveToElementText(el); - } catch(e) {} -} -function _getStartEnd(rng, isStart) { - var doc = rng.parentElement().ownerDocument, - pointRange = rng.duplicate(); - pointRange.collapse(isStart); - var parent = pointRange.parentElement(), - nodes = parent.childNodes; - if (nodes.length === 0) { - return {node: parent.parentNode, offset: K(parent).index()}; - } - var startNode = doc, startPos = 0, cmp = -1; - var testRange = rng.duplicate(); - _moveToElementText(testRange, parent); - for (var i = 0, len = nodes.length; i < len; i++) { - var node = nodes[i]; - cmp = testRange.compareEndPoints('StartToStart', pointRange); - if (cmp === 0) { - return {node: node.parentNode, offset: i}; - } - if (node.nodeType == 1) { - var nodeRange = rng.duplicate(), dummy, knode = K(node), newNode = node; - if (knode.isControl()) { - dummy = doc.createElement('span'); - knode.after(dummy); - newNode = dummy; - startPos += knode.text().replace(/\r\n|\n|\r/g, '').length; - } - _moveToElementText(nodeRange, newNode); - testRange.setEndPoint('StartToEnd', nodeRange); - if (cmp > 0) { - startPos += nodeRange.text.replace(/\r\n|\n|\r/g, '').length; - } else { - startPos = 0; - } - if (dummy) { - K(dummy).remove(); - } - } else if (node.nodeType == 3) { - testRange.moveStart('character', node.nodeValue.length); - startPos += node.nodeValue.length; - } - if (cmp < 0) { - startNode = node; - } - } - if (cmp < 0 && startNode.nodeType == 1) { - return {node: parent, offset: K(parent.lastChild).index() + 1}; - } - if (cmp > 0) { - while (startNode.nextSibling && startNode.nodeType == 1) { - startNode = startNode.nextSibling; - } - } - testRange = rng.duplicate(); - _moveToElementText(testRange, parent); - testRange.setEndPoint('StartToEnd', pointRange); - startPos -= testRange.text.replace(/\r\n|\n|\r/g, '').length; - if (cmp > 0 && startNode.nodeType == 3) { - var prevNode = startNode.previousSibling; - while (prevNode && prevNode.nodeType == 3) { - startPos -= prevNode.nodeValue.length; - prevNode = prevNode.previousSibling; - } - } - return {node: startNode, offset: startPos}; -} -function _getEndRange(node, offset) { - var doc = node.ownerDocument || node, - range = doc.body.createTextRange(); - if (doc == node) { - range.collapse(true); - return range; - } - if (node.nodeType == 1 && node.childNodes.length > 0) { - var children = node.childNodes, isStart, child; - if (offset === 0) { - child = children[0]; - isStart = true; - } else { - child = children[offset - 1]; - isStart = false; - } - if (!child) { - return range; - } - if (K(child).name === 'head') { - if (offset === 1) { - isStart = true; - } - if (offset === 2) { - isStart = false; - } - range.collapse(isStart); - return range; - } - if (child.nodeType == 1) { - var kchild = K(child), span; - if (kchild.isControl()) { - span = doc.createElement('span'); - if (isStart) { - kchild.before(span); - } else { - kchild.after(span); - } - child = span; - } - _moveToElementText(range, child); - range.collapse(isStart); - if (span) { - K(span).remove(); - } - return range; - } - node = child; - offset = isStart ? 0 : child.nodeValue.length; - } - var dummy = doc.createElement('span'); - K(node).before(dummy); - _moveToElementText(range, dummy); - range.moveStart('character', offset); - K(dummy).remove(); - return range; -} -function _toRange(rng) { - var doc, range; - function tr2td(start) { - if (K(start.node).name == 'tr') { - start.node = start.node.cells[start.offset]; - start.offset = 0; - } - } - if (_IE) { - if (rng.item) { - doc = _getDoc(rng.item(0)); - range = new KRange(doc); - range.selectNode(rng.item(0)); - return range; - } - doc = rng.parentElement().ownerDocument; - var start = _getStartEnd(rng, true), - end = _getStartEnd(rng, false); - tr2td(start); - tr2td(end); - range = new KRange(doc); - range.setStart(start.node, start.offset); - range.setEnd(end.node, end.offset); - return range; - } - var startContainer = rng.startContainer; - doc = startContainer.ownerDocument || startContainer; - range = new KRange(doc); - range.setStart(startContainer, rng.startOffset); - range.setEnd(rng.endContainer, rng.endOffset); - return range; -} -function KRange(doc) { - this.init(doc); -} -_extend(KRange, { - init : function(doc) { - var self = this; - self.startContainer = doc; - self.startOffset = 0; - self.endContainer = doc; - self.endOffset = 0; - self.collapsed = true; - self.doc = doc; - }, - commonAncestor : function() { - function getParents(node) { - var parents = []; - while (node) { - parents.push(node); - node = node.parentNode; - } - return parents; - } - var parentsA = getParents(this.startContainer), - parentsB = getParents(this.endContainer), - i = 0, lenA = parentsA.length, lenB = parentsB.length, parentA, parentB; - while (++i) { - parentA = parentsA[lenA - i]; - parentB = parentsB[lenB - i]; - if (!parentA || !parentB || parentA !== parentB) { - break; - } - } - return parentsA[lenA - i + 1]; - }, - setStart : function(node, offset) { - var self = this, doc = self.doc; - self.startContainer = node; - self.startOffset = offset; - if (self.endContainer === doc) { - self.endContainer = node; - self.endOffset = offset; - } - return _updateCollapsed(this); - }, - setEnd : function(node, offset) { - var self = this, doc = self.doc; - self.endContainer = node; - self.endOffset = offset; - if (self.startContainer === doc) { - self.startContainer = node; - self.startOffset = offset; - } - return _updateCollapsed(this); - }, - setStartBefore : function(node) { - return this.setStart(node.parentNode || this.doc, K(node).index()); - }, - setStartAfter : function(node) { - return this.setStart(node.parentNode || this.doc, K(node).index() + 1); - }, - setEndBefore : function(node) { - return this.setEnd(node.parentNode || this.doc, K(node).index()); - }, - setEndAfter : function(node) { - return this.setEnd(node.parentNode || this.doc, K(node).index() + 1); - }, - selectNode : function(node) { - return this.setStartBefore(node).setEndAfter(node); - }, - selectNodeContents : function(node) { - var knode = K(node); - if (knode.type == 3 || knode.isSingle()) { - return this.selectNode(node); - } - var children = knode.children(); - if (children.length > 0) { - return this.setStartBefore(children[0]).setEndAfter(children[children.length - 1]); - } - return this.setStart(node, 0).setEnd(node, 0); - }, - collapse : function(toStart) { - if (toStart) { - return this.setEnd(this.startContainer, this.startOffset); - } - return this.setStart(this.endContainer, this.endOffset); - }, - compareBoundaryPoints : function(how, range) { - var rangeA = this.get(), rangeB = range.get(); - if (_IE) { - var arr = {}; - arr[_START_TO_START] = 'StartToStart'; - arr[_START_TO_END] = 'EndToStart'; - arr[_END_TO_END] = 'EndToEnd'; - arr[_END_TO_START] = 'StartToEnd'; - var cmp = rangeA.compareEndPoints(arr[how], rangeB); - if (cmp !== 0) { - return cmp; - } - var nodeA, nodeB, nodeC, posA, posB; - if (how === _START_TO_START || how === _END_TO_START) { - nodeA = this.startContainer; - posA = this.startOffset; - } - if (how === _START_TO_END || how === _END_TO_END) { - nodeA = this.endContainer; - posA = this.endOffset; - } - if (how === _START_TO_START || how === _START_TO_END) { - nodeB = range.startContainer; - posB = range.startOffset; - } - if (how === _END_TO_END || how === _END_TO_START) { - nodeB = range.endContainer; - posB = range.endOffset; - } - if (nodeA === nodeB) { - var diff = posA - posB; - return diff > 0 ? 1 : (diff < 0 ? -1 : 0); - } - nodeC = nodeB; - while (nodeC && nodeC.parentNode !== nodeA) { - nodeC = nodeC.parentNode; - } - if (nodeC) { - return K(nodeC).index() >= posA ? -1 : 1; - } - nodeC = nodeA; - while (nodeC && nodeC.parentNode !== nodeB) { - nodeC = nodeC.parentNode; - } - if (nodeC) { - return K(nodeC).index() >= posB ? 1 : -1; - } - nodeC = K(nodeB).next(); - if (nodeC && nodeC.contains(nodeA)) { - return 1; - } - nodeC = K(nodeA).next(); - if (nodeC && nodeC.contains(nodeB)) { - return -1; - } - } else { - return rangeA.compareBoundaryPoints(how, rangeB); - } - }, - cloneRange : function() { - return new KRange(this.doc).setStart(this.startContainer, this.startOffset).setEnd(this.endContainer, this.endOffset); - }, - toString : function() { - var rng = this.get(), str = _IE ? rng.text : rng.toString(); - return str.replace(/\r\n|\n|\r/g, ''); - }, - cloneContents : function() { - return _copyAndDelete(this, true, false); - }, - deleteContents : function() { - return _copyAndDelete(this, false, true); - }, - extractContents : function() { - return _copyAndDelete(this, true, true); - }, - insertNode : function(node) { - var self = this, - sc = self.startContainer, so = self.startOffset, - ec = self.endContainer, eo = self.endOffset, - firstChild, lastChild, c, nodeCount = 1; - if (node.nodeName.toLowerCase() === '#document-fragment') { - firstChild = node.firstChild; - lastChild = node.lastChild; - nodeCount = node.childNodes.length; - } - if (sc.nodeType == 1) { - c = sc.childNodes[so]; - if (c) { - sc.insertBefore(node, c); - if (sc === ec) { - eo += nodeCount; - } - } else { - sc.appendChild(node); - } - } else if (sc.nodeType == 3) { - if (so === 0) { - sc.parentNode.insertBefore(node, sc); - if (sc.parentNode === ec) { - eo += nodeCount; - } - } else if (so >= sc.nodeValue.length) { - if (sc.nextSibling) { - sc.parentNode.insertBefore(node, sc.nextSibling); - } else { - sc.parentNode.appendChild(node); - } - } else { - if (so > 0) { - c = sc.splitText(so); - } else { - c = sc; - } - sc.parentNode.insertBefore(node, c); - if (sc === ec) { - ec = c; - eo -= so; - } - } - } - if (firstChild) { - self.setStartBefore(firstChild).setEndAfter(lastChild); - } else { - self.selectNode(node); - } - if (self.compareBoundaryPoints(_END_TO_END, self.cloneRange().setEnd(ec, eo)) >= 1) { - return self; - } - return self.setEnd(ec, eo); - }, - surroundContents : function(node) { - node.appendChild(this.extractContents()); - return this.insertNode(node).selectNode(node); - }, - isControl : function() { - var self = this, - sc = self.startContainer, so = self.startOffset, - ec = self.endContainer, eo = self.endOffset, rng; - return sc.nodeType == 1 && sc === ec && so + 1 === eo && K(sc.childNodes[so]).isControl(); - }, - get : function(hasControlRange) { - var self = this, doc = self.doc, node, rng; - if (!_IE) { - rng = doc.createRange(); - try { - rng.setStart(self.startContainer, self.startOffset); - rng.setEnd(self.endContainer, self.endOffset); - } catch (e) {} - return rng; - } - if (hasControlRange && self.isControl()) { - rng = doc.body.createControlRange(); - rng.addElement(self.startContainer.childNodes[self.startOffset]); - return rng; - } - var range = self.cloneRange().down(); - rng = doc.body.createTextRange(); - rng.setEndPoint('StartToStart', _getEndRange(range.startContainer, range.startOffset)); - rng.setEndPoint('EndToStart', _getEndRange(range.endContainer, range.endOffset)); - return rng; - }, - html : function() { - return K(this.cloneContents()).outer(); - }, - down : function() { - var self = this; - function downPos(node, pos, isStart) { - if (node.nodeType != 1) { - return; - } - var children = K(node).children(); - if (children.length === 0) { - return; - } - var left, right, child, offset; - if (pos > 0) { - left = children.eq(pos - 1); - } - if (pos < children.length) { - right = children.eq(pos); - } - if (left && left.type == 3) { - child = left[0]; - offset = child.nodeValue.length; - } - if (right && right.type == 3) { - child = right[0]; - offset = 0; - } - if (!child) { - return; - } - if (isStart) { - self.setStart(child, offset); - } else { - self.setEnd(child, offset); - } - } - downPos(self.startContainer, self.startOffset, true); - downPos(self.endContainer, self.endOffset, false); - return self; - }, - up : function() { - var self = this; - function upPos(node, pos, isStart) { - if (node.nodeType != 3) { - return; - } - if (pos === 0) { - if (isStart) { - self.setStartBefore(node); - } else { - self.setEndBefore(node); - } - } else if (pos == node.nodeValue.length) { - if (isStart) { - self.setStartAfter(node); - } else { - self.setEndAfter(node); - } - } - } - upPos(self.startContainer, self.startOffset, true); - upPos(self.endContainer, self.endOffset, false); - return self; - }, - enlarge : function(toBlock) { - var self = this; - self.up(); - function enlargePos(node, pos, isStart) { - var knode = K(node), parent; - if (knode.type == 3 || _NOSPLIT_TAG_MAP[knode.name] || !toBlock && knode.isBlock()) { - return; - } - if (pos === 0) { - while (!knode.prev()) { - parent = knode.parent(); - if (!parent || _NOSPLIT_TAG_MAP[parent.name] || !toBlock && parent.isBlock()) { - break; - } - knode = parent; - } - if (isStart) { - self.setStartBefore(knode[0]); - } else { - self.setEndBefore(knode[0]); - } - } else if (pos == knode.children().length) { - while (!knode.next()) { - parent = knode.parent(); - if (!parent || _NOSPLIT_TAG_MAP[parent.name] || !toBlock && parent.isBlock()) { - break; - } - knode = parent; - } - if (isStart) { - self.setStartAfter(knode[0]); - } else { - self.setEndAfter(knode[0]); - } - } - } - enlargePos(self.startContainer, self.startOffset, true); - enlargePos(self.endContainer, self.endOffset, false); - return self; - }, - shrink : function() { - var self = this, child, collapsed = self.collapsed; - while (self.startContainer.nodeType == 1 && (child = self.startContainer.childNodes[self.startOffset]) && child.nodeType == 1 && !K(child).isSingle()) { - self.setStart(child, 0); - } - if (collapsed) { - return self.collapse(collapsed); - } - while (self.endContainer.nodeType == 1 && self.endOffset > 0 && (child = self.endContainer.childNodes[self.endOffset - 1]) && child.nodeType == 1 && !K(child).isSingle()) { - self.setEnd(child, child.childNodes.length); - } - return self; - }, - createBookmark : function(serialize) { - var self = this, doc = self.doc, endNode, - startNode = K('', doc)[0]; - startNode.id = '__kindeditor_bookmark_start_' + (_BOOKMARK_ID++) + '__'; - if (!self.collapsed) { - endNode = startNode.cloneNode(true); - endNode.id = '__kindeditor_bookmark_end_' + (_BOOKMARK_ID++) + '__'; - } - if (endNode) { - self.cloneRange().collapse(false).insertNode(endNode).setEndBefore(endNode); - } - self.insertNode(startNode).setStartAfter(startNode); - return { - start : serialize ? '#' + startNode.id : startNode, - end : endNode ? (serialize ? '#' + endNode.id : endNode) : null - }; - }, - moveToBookmark : function(bookmark) { - var self = this, doc = self.doc, - start = K(bookmark.start, doc), end = bookmark.end ? K(bookmark.end, doc) : null; - if (!start || start.length < 1) { - return self; - } - self.setStartBefore(start[0]); - start.remove(); - if (end && end.length > 0) { - self.setEndBefore(end[0]); - end.remove(); - } else { - self.collapse(true); - } - return self; - }, - dump : function() { - console.log('--------------------'); - console.log(this.startContainer.nodeType == 3 ? this.startContainer.nodeValue : this.startContainer, this.startOffset); - console.log(this.endContainer.nodeType == 3 ? this.endContainer.nodeValue : this.endContainer, this.endOffset); - } -}); -function _range(mixed) { - if (!mixed.nodeName) { - return mixed.constructor === KRange ? mixed : _toRange(mixed); - } - return new KRange(mixed); -} -K.RangeClass = KRange; -K.range = _range; -K.START_TO_START = _START_TO_START; -K.START_TO_END = _START_TO_END; -K.END_TO_END = _END_TO_END; -K.END_TO_START = _END_TO_START; -function _nativeCommand(doc, key, val) { - try { - doc.execCommand(key, false, val); - } catch(e) {} -} -function _nativeCommandValue(doc, key) { - var val = ''; - try { - val = doc.queryCommandValue(key); - } catch (e) {} - if (typeof val !== 'string') { - val = ''; - } - return val; -} -function _getSel(doc) { - var win = _getWin(doc); - return doc.selection || win.getSelection(); -} -function _getRng(doc) { - var sel = _getSel(doc), rng; - try { - if (sel.rangeCount > 0) { - rng = sel.getRangeAt(0); - } else { - rng = sel.createRange(); - } - } catch(e) {} - if (_IE && (!rng || (!rng.item && rng.parentElement().ownerDocument !== doc))) { - return null; - } - return rng; -} -function _singleKeyMap(map) { - var newMap = {}, arr, v; - _each(map, function(key, val) { - arr = key.split(','); - for (var i = 0, len = arr.length; i < len; i++) { - v = arr[i]; - newMap[v] = val; - } - }); - return newMap; -} -function _hasAttrOrCss(knode, map) { - return _hasAttrOrCssByKey(knode, map, '*') || _hasAttrOrCssByKey(knode, map); -} -function _hasAttrOrCssByKey(knode, map, mapKey) { - mapKey = mapKey || knode.name; - if (knode.type !== 1) { - return false; - } - var newMap = _singleKeyMap(map); - if (!newMap[mapKey]) { - return false; - } - var arr = newMap[mapKey].split(','); - for (var i = 0, len = arr.length; i < len; i++) { - var key = arr[i]; - if (key === '*') { - return true; - } - var match = /^(\.?)([^=]+)(?:=([^=]*))?$/.exec(key); - var method = match[1] ? 'css' : 'attr'; - key = match[2]; - var val = match[3] || ''; - if (val === '' && knode[method](key) !== '') { - return true; - } - if (val !== '' && knode[method](key) === val) { - return true; - } - } - return false; -} -function _removeAttrOrCss(knode, map) { - if (knode.type != 1) { - return; - } - _removeAttrOrCssByKey(knode, map, '*'); - _removeAttrOrCssByKey(knode, map); -} -function _removeAttrOrCssByKey(knode, map, mapKey) { - mapKey = mapKey || knode.name; - if (knode.type !== 1) { - return; - } - var newMap = _singleKeyMap(map); - if (!newMap[mapKey]) { - return; - } - var arr = newMap[mapKey].split(','), allFlag = false; - for (var i = 0, len = arr.length; i < len; i++) { - var key = arr[i]; - if (key === '*') { - allFlag = true; - break; - } - var match = /^(\.?)([^=]+)(?:=([^=]*))?$/.exec(key); - key = match[2]; - if (match[1]) { - key = _toCamel(key); - if (knode[0].style[key]) { - knode[0].style[key] = ''; - } - } else { - knode.removeAttr(key); - } - } - if (allFlag) { - knode.remove(true); - } -} -function _getInnerNode(knode) { - var inner = knode; - while (inner.first()) { - inner = inner.first(); - } - return inner; -} -function _isEmptyNode(knode) { - return knode.type == 1 && knode.html().replace(/<[^>]+>/g, '') === ''; -} -function _mergeWrapper(a, b) { - a = a.clone(true); - var lastA = _getInnerNode(a), childA = a, merged = false; - while (b) { - while (childA) { - if (childA.name === b.name) { - _mergeAttrs(childA, b.attr(), b.css()); - merged = true; - } - childA = childA.first(); - } - if (!merged) { - lastA.append(b.clone(false)); - } - merged = false; - b = b.first(); - } - return a; -} -function _wrapNode(knode, wrapper) { - wrapper = wrapper.clone(true); - if (knode.type == 3) { - _getInnerNode(wrapper).append(knode.clone(false)); - knode.replaceWith(wrapper); - return wrapper; - } - var nodeWrapper = knode, child; - while ((child = knode.first()) && child.children().length == 1) { - knode = child; - } - child = knode.first(); - var frag = knode.doc.createDocumentFragment(); - while (child) { - frag.appendChild(child[0]); - child = child.next(); - } - wrapper = _mergeWrapper(nodeWrapper, wrapper); - if (frag.firstChild) { - _getInnerNode(wrapper).append(frag); - } - nodeWrapper.replaceWith(wrapper); - return wrapper; -} -function _mergeAttrs(knode, attrs, styles) { - _each(attrs, function(key, val) { - if (key !== 'style') { - knode.attr(key, val); - } - }); - _each(styles, function(key, val) { - knode.css(key, val); - }); -} -function _inPreElement(knode) { - while (knode && knode.name != 'body') { - if (_PRE_TAG_MAP[knode.name] || knode.name == 'div' && knode.hasClass('ke-script')) { - return true; - } - knode = knode.parent(); - } - return false; -} -function KCmd(range) { - this.init(range); -} -_extend(KCmd, { - init : function(range) { - var self = this, doc = range.doc; - self.doc = doc; - self.win = _getWin(doc); - self.sel = _getSel(doc); - self.range = range; - }, - selection : function(forceReset) { - var self = this, doc = self.doc, rng = _getRng(doc); - self.sel = _getSel(doc); - if (rng) { - self.range = _range(rng); - if (K(self.range.startContainer).name == 'html') { - self.range.selectNodeContents(doc.body).collapse(false); - } - return self; - } - if (forceReset) { - self.range.selectNodeContents(doc.body).collapse(false); - } - return self; - }, - select : function(hasDummy) { - hasDummy = _undef(hasDummy, true); - var self = this, sel = self.sel, range = self.range.cloneRange().shrink(), - sc = range.startContainer, so = range.startOffset, - ec = range.endContainer, eo = range.endOffset, - doc = _getDoc(sc), win = self.win, rng, hasU200b = false; - if (hasDummy && sc.nodeType == 1 && range.collapsed) { - if (_IE) { - var dummy = K(' ', doc); - range.insertNode(dummy[0]); - rng = doc.body.createTextRange(); - try { - rng.moveToElementText(dummy[0]); - } catch(ex) {} - rng.collapse(false); - rng.select(); - dummy.remove(); - win.focus(); - return self; - } - if (_WEBKIT) { - var children = sc.childNodes; - if (K(sc).isInline() || so > 0 && K(children[so - 1]).isInline() || children[so] && K(children[so]).isInline()) { - range.insertNode(doc.createTextNode('\u200B')); - hasU200b = true; - } - } - } - if (_IE) { - try { - rng = range.get(true); - rng.select(); - } catch(e) {} - } else { - if (hasU200b) { - range.collapse(false); - } - rng = range.get(true); - //sel.removeAllRanges(); - //sel.addRange(rng); - } - win.focus(); - return self; - }, - wrap : function(val) { - var self = this, doc = self.doc, range = self.range, wrapper; - wrapper = K(val, doc); - if (range.collapsed) { - range.shrink(); - range.insertNode(wrapper[0]).selectNodeContents(wrapper[0]); - return self; - } - if (wrapper.isBlock()) { - var copyWrapper = wrapper.clone(true), child = copyWrapper; - while (child.first()) { - child = child.first(); - } - child.append(range.extractContents()); - range.insertNode(copyWrapper[0]).selectNode(copyWrapper[0]); - return self; - } - range.enlarge(); - var bookmark = range.createBookmark(), ancestor = range.commonAncestor(), isStart = false; - K(ancestor).scan(function(node) { - if (!isStart && node == bookmark.start) { - isStart = true; - return; - } - if (isStart) { - if (node == bookmark.end) { - return false; - } - var knode = K(node); - if (_inPreElement(knode)) { - return; - } - if (knode.type == 3 && _trim(node.nodeValue).length > 0) { - var parent; - while ((parent = knode.parent()) && parent.isStyle() && parent.children().length == 1) { - knode = parent; - } - _wrapNode(knode, wrapper); - } - } - }); - range.moveToBookmark(bookmark); - return self; - }, - split : function(isStart, map) { - var range = this.range, doc = range.doc; - var tempRange = range.cloneRange().collapse(isStart); - var node = tempRange.startContainer, pos = tempRange.startOffset, - parent = node.nodeType == 3 ? node.parentNode : node, - needSplit = false, knode; - while (parent && parent.parentNode) { - knode = K(parent); - if (map) { - if (!knode.isStyle()) { - break; - } - if (!_hasAttrOrCss(knode, map)) { - break; - } - } else { - if (_NOSPLIT_TAG_MAP[knode.name]) { - break; - } - } - needSplit = true; - parent = parent.parentNode; - } - if (needSplit) { - var dummy = doc.createElement('span'); - range.cloneRange().collapse(!isStart).insertNode(dummy); - if (isStart) { - tempRange.setStartBefore(parent.firstChild).setEnd(node, pos); - } else { - tempRange.setStart(node, pos).setEndAfter(parent.lastChild); - } - var frag = tempRange.extractContents(), - first = frag.firstChild, last = frag.lastChild; - if (isStart) { - tempRange.insertNode(frag); - range.setStartAfter(last).setEndBefore(dummy); - } else { - parent.appendChild(frag); - range.setStartBefore(dummy).setEndBefore(first); - } - var dummyParent = dummy.parentNode; - if (dummyParent == range.endContainer) { - var prev = K(dummy).prev(), next = K(dummy).next(); - if (prev && next && prev.type == 3 && next.type == 3) { - range.setEnd(prev[0], prev[0].nodeValue.length); - } else if (!isStart) { - range.setEnd(range.endContainer, range.endOffset - 1); - } - } - dummyParent.removeChild(dummy); - } - return this; - }, - remove : function(map) { - var self = this, doc = self.doc, range = self.range; - range.enlarge(); - if (range.startOffset === 0) { - var ksc = K(range.startContainer), parent; - while ((parent = ksc.parent()) && parent.isStyle() && parent.children().length == 1) { - ksc = parent; - } - range.setStart(ksc[0], 0); - ksc = K(range.startContainer); - if (ksc.isBlock()) { - _removeAttrOrCss(ksc, map); - } - var kscp = ksc.parent(); - if (kscp && kscp.isBlock()) { - _removeAttrOrCss(kscp, map); - } - } - var sc, so; - if (range.collapsed) { - self.split(true, map); - sc = range.startContainer; - so = range.startOffset; - if (so > 0) { - var sb = K(sc.childNodes[so - 1]); - if (sb && _isEmptyNode(sb)) { - sb.remove(); - range.setStart(sc, so - 1); - } - } - var sa = K(sc.childNodes[so]); - if (sa && _isEmptyNode(sa)) { - sa.remove(); - } - if (_isEmptyNode(sc)) { - range.startBefore(sc); - sc.remove(); - } - range.collapse(true); - return self; - } - self.split(true, map); - self.split(false, map); - var startDummy = doc.createElement('span'), endDummy = doc.createElement('span'); - range.cloneRange().collapse(false).insertNode(endDummy); - range.cloneRange().collapse(true).insertNode(startDummy); - var nodeList = [], cmpStart = false; - K(range.commonAncestor()).scan(function(node) { - if (!cmpStart && node == startDummy) { - cmpStart = true; - return; - } - if (node == endDummy) { - return false; - } - if (cmpStart) { - nodeList.push(node); - } - }); - K(startDummy).remove(); - K(endDummy).remove(); - sc = range.startContainer; - so = range.startOffset; - var ec = range.endContainer, eo = range.endOffset; - if (so > 0) { - var startBefore = K(sc.childNodes[so - 1]); - if (startBefore && _isEmptyNode(startBefore)) { - startBefore.remove(); - range.setStart(sc, so - 1); - if (sc == ec) { - range.setEnd(ec, eo - 1); - } - } - var startAfter = K(sc.childNodes[so]); - if (startAfter && _isEmptyNode(startAfter)) { - startAfter.remove(); - if (sc == ec) { - range.setEnd(ec, eo - 1); - } - } - } - var endAfter = K(ec.childNodes[range.endOffset]); - if (endAfter && _isEmptyNode(endAfter)) { - endAfter.remove(); - } - var bookmark = range.createBookmark(true); - _each(nodeList, function(i, node) { - _removeAttrOrCss(K(node), map); - }); - range.moveToBookmark(bookmark); - return self; - }, - commonNode : function(map) { - var range = this.range; - var ec = range.endContainer, eo = range.endOffset, - node = (ec.nodeType == 3 || eo === 0) ? ec : ec.childNodes[eo - 1]; - function find(node) { - var child = node, parent = node; - while (parent) { - if (_hasAttrOrCss(K(parent), map)) { - return K(parent); - } - parent = parent.parentNode; - } - while (child && (child = child.lastChild)) { - if (_hasAttrOrCss(K(child), map)) { - return K(child); - } - } - return null; - } - var cNode = find(node); - if (cNode) { - return cNode; - } - if (node.nodeType == 1 || (ec.nodeType == 3 && eo === 0)) { - var prev = K(node).prev(); - if (prev) { - return find(prev); - } - } - return null; - }, - commonAncestor : function(tagName) { - var range = this.range, - sc = range.startContainer, so = range.startOffset, - ec = range.endContainer, eo = range.endOffset, - startNode = (sc.nodeType == 3 || so === 0) ? sc : sc.childNodes[so - 1], - endNode = (ec.nodeType == 3 || eo === 0) ? ec : ec.childNodes[eo - 1]; - 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 K(start); - } - return null; - }, - state : function(key) { - var self = this, doc = self.doc, bool = false; - try { - bool = doc.queryCommandState(key); - } catch (e) {} - return bool; - }, - val : function(key) { - var self = this, doc = self.doc, range = self.range; - function lc(val) { - return val.toLowerCase(); - } - key = lc(key); - var val = '', knode; - if (key === 'fontfamily' || key === 'fontname') { - val = _nativeCommandValue(doc, 'fontname'); - val = val.replace(/['"]/g, ''); - return lc(val); - } - if (key === 'formatblock') { - val = _nativeCommandValue(doc, key); - if (val === '') { - knode = self.commonNode({'h1,h2,h3,h4,h5,h6,p,div,pre,address' : '*'}); - if (knode) { - val = knode.name; - } - } - if (val === 'Normal') { - val = 'p'; - } - return lc(val); - } - if (key === 'fontsize') { - knode = self.commonNode({'*' : '.font-size'}); - if (knode) { - val = knode.css('font-size'); - } - return lc(val); - } - if (key === 'forecolor') { - knode = self.commonNode({'*' : '.color'}); - if (knode) { - val = knode.css('color'); - } - val = _toHex(val); - if (val === '') { - val = 'default'; - } - return lc(val); - } - if (key === 'hilitecolor') { - knode = self.commonNode({'*' : '.background-color'}); - if (knode) { - val = knode.css('background-color'); - } - val = _toHex(val); - if (val === '') { - val = 'default'; - } - return lc(val); - } - return val; - }, - toggle : function(wrapper, map) { - var self = this; - if (self.commonNode(map)) { - self.remove(map); - } else { - self.wrap(wrapper); - } - return self.select(); - }, - bold : function() { - return this.toggle('', { - span : '.font-weight=bold', - strong : '*', - b : '*' - }); - }, - italic : function() { - return this.toggle('', { - span : '.font-style=italic', - em : '*', - i : '*' - }); - }, - underline : function() { - return this.toggle('', { - span : '.text-decoration=underline', - u : '*' - }); - }, - strikethrough : function() { - return this.toggle('', { - span : '.text-decoration=line-through', - s : '*' - }); - }, - forecolor : function(val) { - return this.toggle('', { - span : '.color=' + val, - font : 'color' - }); - }, - hilitecolor : function(val) { - return this.toggle('', { - span : '.background-color=' + val - }); - }, - fontsize : function(val) { - return this.toggle('', { - span : '.font-size=' + val, - font : 'size' - }); - }, - fontname : function(val) { - return this.fontfamily(val); - }, - fontfamily : function(val) { - return this.toggle('', { - span : '.font-family=' + val, - font : 'face' - }); - }, - removeformat : function() { - var map = { - '*' : '.font-weight,.font-style,.text-decoration,.color,.background-color,.font-size,.font-family,.text-indent' - }, - tags = _STYLE_TAG_MAP; - _each(tags, function(key, val) { - map[key] = '*'; - }); - this.remove(map); - return this.select(); - }, - inserthtml : function(val, quickMode) { - var self = this, range = self.range; - if (val === '') { - return self; - } - function pasteHtml(range, val) { - val = '' + val; - var rng = range.get(); - if (rng.item) { - rng.item(0).outerHTML = val; - } else { - rng.pasteHTML(val); - } - var temp = range.doc.getElementById('__kindeditor_temp_tag__'); - temp.parentNode.removeChild(temp); - var newRange = _toRange(rng); - range.setEnd(newRange.endContainer, newRange.endOffset); - range.collapse(false); - self.select(false); - } - function insertHtml(range, val) { - var doc = range.doc, - frag = doc.createDocumentFragment(); - K('@' + val, doc).each(function() { - frag.appendChild(this); - }); - range.deleteContents(); - range.insertNode(frag); - range.collapse(false); - self.select(false); - } - if (_IE && quickMode) { - try { - pasteHtml(range, val); - } catch(e) { - insertHtml(range, val); - } - return self; - } - insertHtml(range, val); - return self; - }, - hr : function() { - return this.inserthtml('
'); - }, - print : function() { - this.win.print(); - return this; - }, - insertimage : function(url, title, width, height, border, align) { - title = _undef(title, ''); - border = _undef(border, 0); - var html = ''; - return self.inserthtml(html); - } - if (range.isControl()) { - var node = K(range.startContainer.childNodes[range.startOffset]); - html += '>'; - node.after(K(html, doc)); - node.next().append(node); - range.selectNode(node[0]); - return self.select(); - } - _nativeCommand(doc, 'createlink', '__kindeditor_temp_url__'); - K('a[href="__kindeditor_temp_url__"]', doc).each(function() { - K(this).attr('href', url).attr('data-ke-src', url); - if (type) { - K(this).attr('target', type); - } else { - K(this).removeAttr('target'); - } - }); - return self; - }, - unlink : function() { - var self = this, doc = self.doc, range = self.range; - self.select(); - if (range.collapsed) { - var a = self.commonNode({ a : '*' }); - if (a) { - range.selectNode(a.get()); - self.select(); - } - _nativeCommand(doc, 'unlink', null); - if (_WEBKIT && K(range.startContainer).name === 'img') { - var parent = K(range.startContainer).parent(); - if (parent.name === 'a') { - parent.remove(true); - } - } - } else { - _nativeCommand(doc, 'unlink', null); - } - return self; - } -}); -_each(('formatblock,selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,' + - 'insertunorderedlist,indent,outdent,subscript,superscript').split(','), function(i, name) { - KCmd.prototype[name] = function(val) { - var self = this; - self.select(); - _nativeCommand(self.doc, name, val); - if (!_IE || _inArray(name, 'formatblock,selectall,insertorderedlist,insertunorderedlist'.split(',')) >= 0) { - self.selection(); - } - return self; - }; -}); -_each('cut,copy,paste'.split(','), function(i, name) { - KCmd.prototype[name] = function() { - var self = this; - if (!self.doc.queryCommandSupported(name)) { - throw 'not supported'; - } - self.select(); - _nativeCommand(self.doc, name, null); - return self; - }; -}); -function _cmd(mixed) { - if (mixed.nodeName) { - var doc = _getDoc(mixed); - mixed = _range(doc).selectNodeContents(doc.body).collapse(false); - } - return new KCmd(mixed); -} -K.CmdClass = KCmd; -K.cmd = _cmd; -function _drag(options) { - var moveEl = options.moveEl, - moveFn = options.moveFn, - clickEl = options.clickEl || moveEl, - beforeDrag = options.beforeDrag, - iframeFix = options.iframeFix === undefined ? true : options.iframeFix; - var docs = [document]; - if (iframeFix) { - K('iframe').each(function() { - var src = _formatUrl(this.src || '', 'absolute'); - if (/^https?:\/\//.test(src)) { - return; - } - var doc; - try { - doc = _iframeDoc(this); - } catch(e) {} - if (doc) { - var pos = K(this).pos(); - K(doc).data('pos-x', pos.x); - K(doc).data('pos-y', pos.y); - docs.push(doc); - } - }); - } - clickEl.mousedown(function(e) { - e.stopPropagation(); - var self = clickEl.get(), - x = _removeUnit(moveEl.css('left')), - y = _removeUnit(moveEl.css('top')), - width = moveEl.width(), - height = moveEl.height(), - pageX = e.pageX, - pageY = e.pageY; - if (beforeDrag) { - beforeDrag(); - } - function moveListener(e) { - e.preventDefault(); - var kdoc = K(_getDoc(e.target)); - var diffX = _round((kdoc.data('pos-x') || 0) + e.pageX - pageX); - var diffY = _round((kdoc.data('pos-y') || 0) + e.pageY - pageY); - moveFn.call(clickEl, x, y, width, height, diffX, diffY); - } - function selectListener(e) { - e.preventDefault(); - } - function upListener(e) { - e.preventDefault(); - K(docs).unbind('mousemove', moveListener) - .unbind('mouseup', upListener) - .unbind('selectstart', selectListener); - if (self.releaseCapture) { - self.releaseCapture(); - } - } - K(docs).mousemove(moveListener) - .mouseup(upListener) - .bind('selectstart', selectListener); - if (self.setCapture) { - self.setCapture(); - } - }); -} -function KWidget(options) { - this.init(options); -} -_extend(KWidget, { - init : function(options) { - var self = this; - self.name = options.name || ''; - self.doc = options.doc || document; - self.win = _getWin(self.doc); - self.x = _addUnit(options.x); - self.y = _addUnit(options.y); - self.z = options.z; - self.width = _addUnit(options.width); - self.height = _addUnit(options.height); - self.div = K('
'); - self.options = options; - self._alignEl = options.alignEl; - if (self.width) { - self.div.css('width', self.width); - } - if (self.height) { - self.div.css('height', self.height); - } - if (self.z) { - self.div.css({ - position : 'absolute', - left : self.x, - top : self.y, - 'z-index' : self.z - }); - } - if (self.z && (self.x === undefined || self.y === undefined)) { - self.autoPos(self.width, self.height); - } - if (options.cls) { - self.div.addClass(options.cls); - } - if (options.shadowMode) { - self.div.addClass('ke-shadow'); - } - if (options.css) { - self.div.css(options.css); - } - if (options.src) { - K(options.src).replaceWith(self.div); - } else { - K(self.doc.body).append(self.div); - } - if (options.html) { - self.div.html(options.html); - } - if (options.autoScroll) { - if (_IE && _V < 7 || _QUIRKS) { - var scrollPos = _getScrollPos(); - K(self.win).bind('scroll', function(e) { - var pos = _getScrollPos(), - diffX = pos.x - scrollPos.x, - diffY = pos.y - scrollPos.y; - self.pos(_removeUnit(self.x) + diffX, _removeUnit(self.y) + diffY, false); - }); - } else { - self.div.css('position', 'fixed'); - } - } - }, - pos : function(x, y, updateProp) { - var self = this; - updateProp = _undef(updateProp, true); - if (x !== null) { - x = x < 0 ? 0 : _addUnit(x); - self.div.css('left', x); - if (updateProp) { - self.x = x; - } - } - if (y !== null) { - y = y < 0 ? 0 : _addUnit(y); - self.div.css('top', y); - if (updateProp) { - self.y = y; - } - } - return self; - }, - autoPos : function(width, height) { - var self = this, - w = _removeUnit(width) || 0, - h = _removeUnit(height) || 0, - scrollPos = _getScrollPos(); - if (self._alignEl) { - var knode = K(self._alignEl), - pos = knode.pos(), - diffX = _round(knode[0].clientWidth / 2 - w / 2), - diffY = _round(knode[0].clientHeight / 2 - h / 2); - x = diffX < 0 ? pos.x : pos.x + diffX; - y = diffY < 0 ? pos.y : pos.y + diffY; - } else { - var docEl = _docElement(self.doc); - x = _round(scrollPos.x + (docEl.clientWidth - w) / 2); - y = _round(scrollPos.y + (docEl.clientHeight - h) / 2); - } - if (!(_IE && _V < 7 || _QUIRKS)) { - x -= scrollPos.x; - y -= scrollPos.y; - } - return self.pos(x, y); - }, - remove : function() { - var self = this; - if (_IE && _V < 7 || _QUIRKS) { - K(self.win).unbind('scroll'); - } - self.div.remove(); - _each(self, function(i) { - self[i] = null; - }); - return this; - }, - show : function() { - this.div.show(); - return this; - }, - hide : function() { - this.div.hide(); - return this; - }, - draggable : function(options) { - var self = this; - options = options || {}; - options.moveEl = self.div; - options.moveFn = function(x, y, width, height, diffX, diffY) { - if ((x = x + diffX) < 0) { - x = 0; - } - if ((y = y + diffY) < 0) { - y = 0; - } - self.pos(x, y); - }; - _drag(options); - return self; - } -}); -function _widget(options) { - return new KWidget(options); -} -K.WidgetClass = KWidget; -K.widget = _widget; -function _iframeDoc(iframe) { - iframe = _get(iframe); - return iframe.contentDocument || iframe.contentWindow.document; -} -var html, _direction = ''; -if ((html = document.getElementsByTagName('html'))) { - _direction = html[0].dir; -} -function _getInitHtml(themesPath, bodyClass, cssPath, cssData) { - var arr = [ - (_direction === '' ? '' : ''), - '', - '' - ]; - if (!_isArray(cssPath)) { - cssPath = [cssPath]; - } - _each(cssPath, function(i, path) { - if (path) { - arr.push(''); - } - }); - if (cssData) { - arr.push(''); - } - arr.push(''); - return arr.join('\n'); -} -function _elementVal(knode, val) { - if (knode.hasVal()) { - if (val === undefined) { - var html = knode.val(); - html = html.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/ig, ''); - return html; - } - return knode.val(val); - } - return knode.html(val); -} -function KEdit(options) { - this.init(options); -} -_extend(KEdit, KWidget, { - init : function(options) { - var self = this; - KEdit.parent.init.call(self, options); - self.srcElement = K(options.srcElement); - self.div.addClass('ke-edit'); - self.designMode = _undef(options.designMode, true); - self.beforeGetHtml = options.beforeGetHtml; - self.beforeSetHtml = options.beforeSetHtml; - self.afterSetHtml = options.afterSetHtml; - var themesPath = _undef(options.themesPath, ''), - bodyClass = options.bodyClass, - cssPath = options.cssPath, - cssData = options.cssData, - isDocumentDomain = location.host.replace(/:\d+/, '') !== document.domain, - srcScript = ('document.open();' + - (isDocumentDomain ? 'document.domain="' + document.domain + '";' : '') + - 'document.close();'), - iframeSrc = _IE ? ' src="javascript:void(function(){' + encodeURIComponent(srcScript) + '}())"' : ''; - self.iframe = K('').css('width', '100%'); - self.textarea = K('').css('width', '100%'); - if (self.width) { - self.setWidth(self.width); - } - if (self.height) { - self.setHeight(self.height); - } - if (self.designMode) { - self.textarea.hide(); - } else { - self.iframe.hide(); - } - function ready() { - var doc = _iframeDoc(self.iframe); - doc.open(); - if (isDocumentDomain) { - doc.domain = document.domain; - } - doc.write(_getInitHtml(themesPath, bodyClass, cssPath, cssData)); - doc.close(); - self.win = self.iframe[0].contentWindow; - self.doc = doc; - var cmd = _cmd(doc); - self.afterChange(function(e) { - cmd.selection(); - }); - if (_WEBKIT) { - K(doc).click(function(e) { - if (K(e.target).name === 'img') { - cmd.selection(true); - cmd.range.selectNode(e.target); - cmd.select(); - } - }); - } - if (_IE) { - K(doc).keydown(function(e) { - if (e.which == 8) { - cmd.selection(); - var rng = cmd.range; - if (rng.isControl()) { - rng.collapse(true); - K(rng.startContainer.childNodes[rng.startOffset]).remove(); - e.preventDefault(); - } - } - }); - } - self.cmd = cmd; - self.html(_elementVal(self.srcElement)); - if (_IE) { - doc.body.disabled = true; - doc.body.contentEditable = true; - doc.body.removeAttribute('disabled'); - } else { - doc.designMode = 'on'; - } - if (options.afterCreate) { - options.afterCreate.call(self); - } - } - if (isDocumentDomain) { - self.iframe.bind('load', function(e) { - self.iframe.unbind('load'); - if (_IE) { - ready(); - } else { - setTimeout(ready, 0); - } - }); - } - self.div.append(self.iframe); - self.div.append(self.textarea); - self.srcElement.hide(); - !isDocumentDomain && ready(); - }, - setWidth : function(val) { - this.div.css('width', _addUnit(val)); - return this; - }, - setHeight : function(val) { - var self = this; - val = _addUnit(val); - self.div.css('height', val); - self.iframe.css('height', val); - if ((_IE && _V < 8) || _QUIRKS) { - val = _addUnit(_removeUnit(val) - 2); - } - self.textarea.css('height', val); - return self; - }, - remove : function() { - var self = this, doc = self.doc; - K(doc.body).unbind(); - K(doc).unbind(); - K(self.win).unbind(); - _elementVal(self.srcElement, self.html()); - self.srcElement.show(); - doc.write(''); - self.iframe.unbind(); - self.textarea.unbind(); - KEdit.parent.remove.call(self); - }, - html : function(val, isFull) { - var self = this, doc = self.doc; - if (self.designMode) { - var body = doc.body; - if (val === undefined) { - if (isFull) { - val = '' + body.parentNode.innerHTML + ''; - } else { - val = body.innerHTML; - } - if (self.beforeGetHtml) { - val = self.beforeGetHtml(val); - } - if (_GECKO && val == '
') { - val = ''; - } - return val; - } - if (self.beforeSetHtml) { - val = self.beforeSetHtml(val); - } - K(body).html(val); - if (self.afterSetHtml) { - self.afterSetHtml(); - } - return self; - } - if (val === undefined) { - return self.textarea.val(); - } - self.textarea.val(val); - return self; - }, - design : function(bool) { - var self = this, val; - if (bool === undefined ? !self.designMode : bool) { - if (!self.designMode) { - val = self.html(); - self.designMode = true; - self.html(val); - self.textarea.hide(); - self.iframe.show(); - } - } else { - if (self.designMode) { - val = self.html(); - self.designMode = false; - self.html(val); - self.iframe.hide(); - self.textarea.show(); - } - } - return self.focus(); - }, - focus : function() { - var self = this; - self.designMode ? self.win.focus() : self.textarea[0].focus(); - return self; - }, - blur : function() { - var self = this; - if (_IE) { - var input = K('', self.div); - self.div.append(input); - input[0].focus(); - input.remove(); - } else { - self.designMode ? self.win.blur() : self.textarea[0].blur(); - } - return self; - }, - afterChange : function(fn) { - var self = this, doc = self.doc, body = doc.body; - K(doc).keyup(function(e) { - if (!e.ctrlKey && !e.altKey && _CHANGE_KEY_MAP[e.which]) { - fn(e); - } - }); - K(doc).mouseup(fn).contextmenu(fn); - K(self.win).blur(fn); - function timeoutHandler(e) { - setTimeout(function() { - fn(e); - }, 1); - } - K(body).bind('paste', timeoutHandler); - K(body).bind('cut', timeoutHandler); - return self; - } -}); -function _edit(options) { - return new KEdit(options); -} -K.EditClass = KEdit; -K.edit = _edit; -K.iframeDoc = _iframeDoc; -function _selectToolbar(name, fn) { - var self = this, - knode = self.get(name); - if (knode) { - if (knode.hasClass('ke-disabled')) { - return; - } - fn(knode); - } -} -function KToolbar(options) { - this.init(options); -} -_extend(KToolbar, KWidget, { - init : function(options) { - var self = this; - KToolbar.parent.init.call(self, options); - self.disableMode = _undef(options.disableMode, false); - self.noDisableItemMap = _toMap(_undef(options.noDisableItems, [])); - self._itemMap = {}; - self.div.addClass('ke-toolbar').bind('contextmenu,mousedown,mousemove', function(e) { - e.preventDefault(); - }).attr('unselectable', 'on'); - function find(target) { - var knode = K(target); - if (knode.hasClass('ke-outline')) { - return knode; - } - if (knode.hasClass('ke-toolbar-icon')) { - return knode.parent(); - } - } - function hover(e, method) { - var knode = find(e.target); - if (knode) { - if (knode.hasClass('ke-disabled')) { - return; - } - if (knode.hasClass('ke-selected')) { - return; - } - knode[method]('ke-on'); - } - } - self.div.mouseover(function(e) { - hover(e, 'addClass'); - }) - .mouseout(function(e) { - hover(e, 'removeClass'); - }) - .click(function(e) { - var knode = find(e.target); - if (knode) { - if (knode.hasClass('ke-disabled')) { - return; - } - self.options.click.call(this, e, knode.attr('data-name')); - } - }); - }, - get : function(name) { - if (this._itemMap[name]) { - return this._itemMap[name]; - } - return (this._itemMap[name] = K('span.ke-icon-' + name, this.div).parent()); - }, - select : function(name) { - _selectToolbar.call(this, name, function(knode) { - knode.addClass('ke-selected'); - }); - return self; - }, - unselect : function(name) { - _selectToolbar.call(this, name, function(knode) { - knode.removeClass('ke-selected').removeClass('ke-on'); - }); - return self; - }, - enable : function(name) { - var self = this, - knode = name.get ? name : self.get(name); - if (knode) { - knode.removeClass('ke-disabled'); - knode.opacity(1); - } - return self; - }, - disable : function(name) { - var self = this, - knode = name.get ? name : self.get(name); - if (knode) { - knode.removeClass('ke-selected').addClass('ke-disabled'); - knode.opacity(0.5); - } - return self; - }, - disableAll : function(bool, noDisableItems) { - var self = this, map = self.noDisableItemMap, item; - if (noDisableItems) { - map = _toMap(noDisableItems); - } - if (bool === undefined ? !self.disableMode : bool) { - K('span.ke-outline', self.div).each(function() { - var knode = K(this), - name = knode[0].getAttribute('data-name', 2); - if (!map[name]) { - self.disable(knode); - } - }); - self.disableMode = true; - } else { - K('span.ke-outline', self.div).each(function() { - var knode = K(this), - name = knode[0].getAttribute('data-name', 2); - if (!map[name]) { - self.enable(knode); - } - }); - self.disableMode = false; - } - return self; - } -}); -function _toolbar(options) { - return new KToolbar(options); -} -K.ToolbarClass = KToolbar; -K.toolbar = _toolbar; -function KMenu(options) { - this.init(options); -} -_extend(KMenu, KWidget, { - init : function(options) { - var self = this; - options.z = options.z || 811213; - KMenu.parent.init.call(self, options); - self.centerLineMode = _undef(options.centerLineMode, true); - self.div.addClass('ke-menu').bind('click,mousedown', function(e){ - e.stopPropagation(); - }).attr('unselectable', 'on'); - }, - addItem : function(item) { - var self = this; - if (item.title === '-') { - self.div.append(K('
')); - return; - } - var itemDiv = K('
'), - leftDiv = K('
'), - rightDiv = K('
'), - height = _addUnit(item.height), - iconClass = _undef(item.iconClass, ''); - self.div.append(itemDiv); - if (height) { - itemDiv.css('height', height); - rightDiv.css('line-height', height); - } - var centerDiv; - if (self.centerLineMode) { - centerDiv = K('
'); - if (height) { - centerDiv.css('height', height); - } - } - itemDiv.mouseover(function(e) { - K(this).addClass('ke-menu-item-on'); - if (centerDiv) { - centerDiv.addClass('ke-menu-item-center-on'); - } - }) - .mouseout(function(e) { - K(this).removeClass('ke-menu-item-on'); - if (centerDiv) { - centerDiv.removeClass('ke-menu-item-center-on'); - } - }) - .click(function(e) { - item.click.call(K(this)); - e.stopPropagation(); - }) - .append(leftDiv); - if (centerDiv) { - itemDiv.append(centerDiv); - } - itemDiv.append(rightDiv); - if (item.checked) { - iconClass = 'ke-icon-checked'; - } - if (iconClass !== '') { - leftDiv.html(''); - } - rightDiv.html(item.title); - return self; - }, - remove : function() { - var self = this; - if (self.options.beforeRemove) { - self.options.beforeRemove.call(self); - } - K('.ke-menu-item', self.div[0]).unbind(); - KMenu.parent.remove.call(self); - return self; - } -}); -function _menu(options) { - return new KMenu(options); -} -K.MenuClass = KMenu; -K.menu = _menu; -function KColorPicker(options) { - this.init(options); -} -_extend(KColorPicker, KWidget, { - init : function(options) { - var self = this; - options.z = options.z || 811213; - KColorPicker.parent.init.call(self, options); - var colors = options.colors || [ - ['#E53333', '#E56600', '#FF9900', '#64451D', '#DFC5A4', '#FFE500'], - ['#009900', '#006600', '#99BB00', '#B8D100', '#60D978', '#00D5FF'], - ['#337FE5', '#003399', '#4C33E5', '#9933E5', '#CC33E5', '#EE33EE'], - ['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000'] - ]; - self.selectedColor = (options.selectedColor || '').toLowerCase(); - self._cells = []; - self.div.addClass('ke-colorpicker').bind('click,mousedown', function(e){ - e.stopPropagation(); - }).attr('unselectable', 'on'); - var table = self.doc.createElement('table'); - self.div.append(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; - self._addAttr(cell, '', 'ke-colorpicker-cell-top'); - for (var i = 0; i < colors.length; i++) { - row = table.insertRow(i + 1); - for (var j = 0; j < colors[i].length; j++) { - cell = row.insertCell(j); - self._addAttr(cell, colors[i][j], 'ke-colorpicker-cell'); - } - } - }, - _addAttr : function(cell, color, cls) { - var self = this; - cell = K(cell).addClass(cls); - if (self.selectedColor === color.toLowerCase()) { - cell.addClass('ke-colorpicker-cell-selected'); - } - cell.attr('title', color || self.options.noColor); - cell.mouseover(function(e) { - K(this).addClass('ke-colorpicker-cell-on'); - }); - cell.mouseout(function(e) { - K(this).removeClass('ke-colorpicker-cell-on'); - }); - cell.click(function(e) { - e.stop(); - self.options.click.call(K(this), color); - }); - if (color) { - cell.append(K('
').css('background-color', color)); - } else { - cell.html(self.options.noColor); - } - K(cell).attr('unselectable', 'on'); - self._cells.push(cell); - }, - remove : function() { - var self = this; - _each(self._cells, function() { - this.unbind(); - }); - KColorPicker.parent.remove.call(self); - return self; - } -}); -function _colorpicker(options) { - return new KColorPicker(options); -} -K.ColorPickerClass = KColorPicker; -K.colorpicker = _colorpicker; -function KUploadButton(options) { - this.init(options); -} -_extend(KUploadButton, { - init : function(options) { - var self = this, - button = K(options.button), - fieldName = options.fieldName || 'file', - url = options.url || '', - title = button.val(), - extraParams = options.extraParams || {}, - cls = button[0].className || '', - target = options.target || 'kindeditor_upload_iframe_' + new Date().getTime(); - options.afterError = options.afterError || function(str) { - alert(str); - }; - var hiddenElements = []; - for(var k in extraParams){ - hiddenElements.push(''); - } - var html = [ - '
', - (options.target ? '' : ''), - (options.form ? '
' : '
'), - '', - hiddenElements.join(''), - '', - '', - '', - (options.form ? '
' : ''), - '
'].join(''); - var div = K(html, button.doc); - button.hide(); - button.before(div); - self.div = div; - self.button = button; - self.iframe = options.target ? K('iframe[name="' + target + '"]') : K('iframe', div); - self.form = options.form ? K(options.form) : K('form', div); - var width = options.width || K('.ke-button-common', div).width(); - self.fileBox = K('.ke-upload-file', div).width(width); - self.options = options; - }, - submit : function() { - var self = this, - iframe = self.iframe; - iframe.bind('load', function() { - iframe.unbind(); - var tempForm = document.createElement('form'); - self.fileBox.before(tempForm); - K(tempForm).append(self.fileBox); - tempForm.reset(); - K(tempForm).remove(true); - var doc = K.iframeDoc(iframe), - pre = doc.getElementsByTagName('pre')[0], - str = '', data; - if (pre) { - str = pre.innerHTML; - } else { - str = doc.body.innerHTML; - } - iframe[0].src = 'javascript:false'; - try { - data = K.json(str); - } catch (e) { - self.options.afterError.call(self, '' + doc.body.parentNode.innerHTML + ''); - } - if (data) { - self.options.afterUpload.call(self, data); - } - }); - self.form[0].submit(); - return self; - }, - remove : function() { - var self = this; - if (self.fileBox) { - self.fileBox.unbind(); - } - self.iframe.remove(); - self.div.remove(); - self.button.show(); - return self; - } -}); -function _uploadbutton(options) { - return new KUploadButton(options); -} -K.UploadButtonClass = KUploadButton; -K.uploadbutton = _uploadbutton; -function _createButton(arg) { - arg = arg || {}; - var name = arg.name || '', - span = K(''), - btn = K(''); - if (arg.click) { - btn.click(arg.click); - } - span.append(btn); - return span; -} -function KDialog(options) { - this.init(options); -} -_extend(KDialog, KWidget, { - init : function(options) { - var self = this; - var shadowMode = _undef(options.shadowMode, true); - options.z = options.z || 811213; - options.shadowMode = false; - options.autoScroll = _undef(options.autoScroll, true); - KDialog.parent.init.call(self, options); - var title = options.title, - body = K(options.body, self.doc), - previewBtn = options.previewBtn, - yesBtn = options.yesBtn, - noBtn = options.noBtn, - closeBtn = options.closeBtn, - showMask = _undef(options.showMask, true); - self.div.addClass('ke-dialog').bind('click,mousedown', function(e){ - e.stopPropagation(); - }); - var contentDiv = K('
').appendTo(self.div); - if (_IE && _V < 7) { - self.iframeMask = K('').appendTo(self.div); - } else if (shadowMode) { - K('
').appendTo(self.div); - } - var headerDiv = K('
'); - contentDiv.append(headerDiv); - headerDiv.html(title); - self.closeIcon = K('').click(closeBtn.click); - headerDiv.append(self.closeIcon); - self.draggable({ - clickEl : headerDiv, - beforeDrag : options.beforeDrag - }); - var bodyDiv = K('
'); - contentDiv.append(bodyDiv); - bodyDiv.append(body); - var footerDiv = K(''); - if (previewBtn || yesBtn || noBtn) { - contentDiv.append(footerDiv); - } - _each([ - { btn : previewBtn, name : 'preview' }, - { btn : yesBtn, name : 'yes' }, - { btn : noBtn, name : 'no' } - ], function() { - if (this.btn) { - var button = _createButton(this.btn); - button.addClass('ke-dialog-' + this.name); - footerDiv.append(button); - } - }); - if (self.height) { - bodyDiv.height(_removeUnit(self.height) - headerDiv.height() - footerDiv.height()); - } - self.div.width(self.div.width()); - self.div.height(self.div.height()); - self.mask = null; - if (showMask) { - var docEl = _docElement(self.doc), - docWidth = Math.max(docEl.scrollWidth, docEl.clientWidth), - docHeight = Math.max(docEl.scrollHeight, docEl.clientHeight); - self.mask = _widget({ - x : 0, - y : 0, - z : self.z - 1, - cls : 'ke-dialog-mask', - width : docWidth, - height : docHeight - }); - } - self.autoPos(self.div.width(), self.div.height()); - self.footerDiv = footerDiv; - self.bodyDiv = bodyDiv; - self.headerDiv = headerDiv; - self.isLoading = false; - }, - setMaskIndex : function(z) { - var self = this; - self.mask.div.css('z-index', z); - }, - showLoading : function(msg) { - msg = _undef(msg, ''); - var self = this, body = self.bodyDiv; - self.loading = K('
' + msg + '
') - .width(body.width()).height(body.height()) - .css('top', self.headerDiv.height() + 'px'); - body.css('visibility', 'hidden').after(self.loading); - self.isLoading = true; - return self; - }, - hideLoading : function() { - this.loading && this.loading.remove(); - this.bodyDiv.css('visibility', 'visible'); - this.isLoading = false; - return this; - }, - remove : function() { - var self = this; - if (self.options.beforeRemove) { - self.options.beforeRemove.call(self); - } - self.mask && self.mask.remove(); - self.iframeMask && self.iframeMask.remove(); - self.closeIcon.unbind(); - K('input', self.div).unbind(); - K('button', self.div).unbind(); - self.footerDiv.unbind(); - self.bodyDiv.unbind(); - self.headerDiv.unbind(); - K('iframe', self.div).each(function() { - K(this).remove(); - }); - KDialog.parent.remove.call(self); - return self; - } -}); -function _dialog(options) { - return new KDialog(options); -} -K.DialogClass = KDialog; -K.dialog = _dialog; -function _tabs(options) { - var self = _widget(options), - remove = self.remove, - afterSelect = options.afterSelect, - div = self.div, - liList = []; - div.addClass('ke-tabs') - .bind('contextmenu,mousedown,mousemove', function(e) { - e.preventDefault(); - }); - var ul = K('
    '); - div.append(ul); - self.add = function(tab) { - var li = K('
  • ' + tab.title + '
  • '); - li.data('tab', tab); - liList.push(li); - ul.append(li); - }; - self.selectedIndex = 0; - self.select = function(index) { - self.selectedIndex = index; - _each(liList, function(i, li) { - li.unbind(); - if (i === index) { - li.addClass('ke-tabs-li-selected'); - K(li.data('tab').panel).show(''); - } else { - li.removeClass('ke-tabs-li-selected').removeClass('ke-tabs-li-on') - .mouseover(function() { - K(this).addClass('ke-tabs-li-on'); - }) - .mouseout(function() { - K(this).removeClass('ke-tabs-li-on'); - }) - .click(function() { - self.select(i); - }); - K(li.data('tab').panel).hide(); - } - }); - if (afterSelect) { - afterSelect.call(self, index); - } - }; - self.remove = function() { - _each(liList, function() { - this.remove(); - }); - ul.remove(); - remove.call(self); - }; - return self; -} -K.tabs = _tabs; -function _loadScript(url, fn) { - var head = document.getElementsByTagName('head')[0] || (_QUIRKS ? document.body : document.documentElement), - script = document.createElement('script'); - head.appendChild(script); - script.src = url; - script.charset = 'utf-8'; - script.onload = script.onreadystatechange = function() { - if (!this.readyState || this.readyState === 'loaded') { - if (fn) { - fn(); - } - script.onload = script.onreadystatechange = null; - head.removeChild(script); - } - }; -} -function _chopQuery(url) { - var index = url.indexOf('?'); - return index > 0 ? url.substr(0, index) : url; -} -function _loadStyle(url) { - var head = document.getElementsByTagName('head')[0] || (_QUIRKS ? document.body : document.documentElement), - link = document.createElement('link'), - absoluteUrl = _chopQuery(_formatUrl(url, 'absolute')); - var links = K('link[rel="stylesheet"]', head); - for (var i = 0, len = links.length; i < len; i++) { - if (_chopQuery(_formatUrl(links[i].href, 'absolute')) === absoluteUrl) { - return; - } - } - head.appendChild(link); - link.href = url; - link.rel = 'stylesheet'; -} -function _ajax(url, fn, method, param, dataType) { - method = method || 'GET'; - dataType = dataType || 'json'; - var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); - xhr.open(method, url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4 && xhr.status == 200) { - if (fn) { - var data = _trim(xhr.responseText); - if (dataType == 'json') { - data = _json(data); - } - fn(data); - } - } - }; - if (method == 'POST') { - var params = []; - _each(param, function(key, val) { - params.push(encodeURIComponent(key) + '=' + encodeURIComponent(val)); - }); - try { - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - } catch (e) {} - xhr.send(params.join('&')); - } else { - xhr.send(null); - } -} -K.loadScript = _loadScript; -K.loadStyle = _loadStyle; -K.ajax = _ajax; -var _plugins = {}; -function _plugin(name, fn) { - if (name === undefined) { - return _plugins; - } - if (!fn) { - return _plugins[name]; - } - _plugins[name] = fn; -} -var _language = {}; -function _parseLangKey(key) { - var match, ns = 'core'; - if ((match = /^(\w+)\.(\w+)$/.exec(key))) { - ns = match[1]; - key = match[2]; - } - return { ns : ns, key : key }; -} -function _lang(mixed, langType) { - langType = langType === undefined ? K.options.langType : langType; - if (typeof mixed === 'string') { - if (!_language[langType]) { - return 'no language'; - } - var pos = mixed.length - 1; - if (mixed.substr(pos) === '.') { - return _language[langType][mixed.substr(0, pos)]; - } - var obj = _parseLangKey(mixed); - return _language[langType][obj.ns][obj.key]; - } - _each(mixed, function(key, val) { - var obj = _parseLangKey(key); - if (!_language[langType]) { - _language[langType] = {}; - } - if (!_language[langType][obj.ns]) { - _language[langType][obj.ns] = {}; - } - _language[langType][obj.ns][obj.key] = val; - }); -} -function _getImageFromRange(range, fn) { - if (range.collapsed) { - return; - } - range = range.cloneRange().up(); - var sc = range.startContainer, so = range.startOffset; - if (!_WEBKIT && !range.isControl()) { - return; - } - var img = K(sc.childNodes[so]); - if (!img || img.name != 'img') { - return; - } - if (fn(img)) { - return img; - } -} -function _bindContextmenuEvent() { - var self = this, doc = self.edit.doc; - K(doc).contextmenu(function(e) { - if (self.menu) { - self.hideMenu(); - } - if (!self.useContextmenu) { - e.preventDefault(); - return; - } - if (self._contextmenus.length === 0) { - return; - } - var maxWidth = 0, items = []; - _each(self._contextmenus, function() { - if (this.title == '-') { - items.push(this); - return; - } - if (this.cond && this.cond()) { - items.push(this); - if (this.width && this.width > maxWidth) { - maxWidth = this.width; - } - } - }); - while (items.length > 0 && items[0].title == '-') { - items.shift(); - } - while (items.length > 0 && items[items.length - 1].title == '-') { - items.pop(); - } - var prevItem = null; - _each(items, function(i) { - if (this.title == '-' && prevItem.title == '-') { - delete items[i]; - } - prevItem = this; - }); - if (items.length > 0) { - e.preventDefault(); - var pos = K(self.edit.iframe).pos(), - menu = _menu({ - x : pos.x + e.clientX, - y : pos.y + e.clientY, - width : maxWidth, - css : { visibility: 'hidden' }, - shadowMode : self.shadowMode - }); - _each(items, function() { - if (this.title) { - menu.addItem(this); - } - }); - var docEl = _docElement(menu.doc), - menuHeight = menu.div.height(); - if (e.clientY + menuHeight >= docEl.clientHeight - 100) { - menu.pos(menu.x, _removeUnit(menu.y) - menuHeight); - } - menu.div.css('visibility', 'visible'); - self.menu = menu; - } - }); -} -function _bindNewlineEvent() { - var self = this, doc = self.edit.doc, newlineTag = self.newlineTag; - if (_IE && newlineTag !== 'br') { - return; - } - if (_GECKO && _V < 3 && newlineTag !== 'p') { - return; - } - if (_OPERA && _V < 9) { - return; - } - var brSkipTagMap = _toMap('h1,h2,h3,h4,h5,h6,pre,li'), - pSkipTagMap = _toMap('p,h1,h2,h3,h4,h5,h6,pre,li,blockquote'); - function getAncestorTagName(range) { - var ancestor = K(range.commonAncestor()); - while (ancestor) { - if (ancestor.type == 1 && !ancestor.isStyle()) { - break; - } - ancestor = ancestor.parent(); - } - return ancestor.name; - } - K(doc).keydown(function(e) { - if (e.which != 13 || e.shiftKey || e.ctrlKey || e.altKey) { - return; - } - self.cmd.selection(); - var tagName = getAncestorTagName(self.cmd.range); - if (tagName == 'marquee' || tagName == 'select') { - return; - } - if (newlineTag === 'br' && !brSkipTagMap[tagName]) { - e.preventDefault(); - self.insertHtml('
    ' + (_IE && _V < 9 ? '' : '\u200B')); - return; - } - if (!pSkipTagMap[tagName]) { - _nativeCommand(doc, 'formatblock', '

    '); - } - }); - K(doc).keyup(function(e) { - if (e.which != 13 || e.shiftKey || e.ctrlKey || e.altKey) { - return; - } - if (newlineTag == 'br') { - return; - } - if (_GECKO) { - var root = self.cmd.commonAncestor('p'); - var a = self.cmd.commonAncestor('a'); - if (a.text() == '') { - a.remove(true); - self.cmd.range.selectNodeContents(root[0]).collapse(true); - self.cmd.select(); - } - return; - } - self.cmd.selection(); - var tagName = getAncestorTagName(self.cmd.range); - if (tagName == 'marquee' || tagName == 'select') { - return; - } - if (!pSkipTagMap[tagName]) { - _nativeCommand(doc, 'formatblock', '

    '); - } - var div = self.cmd.commonAncestor('div'); - if (div) { - var p = K('

    '), - child = div[0].firstChild; - while (child) { - var next = child.nextSibling; - p.append(child); - child = next; - } - div.before(p); - div.remove(); - self.cmd.range.selectNodeContents(p[0]); - self.cmd.select(); - } - }); -} -function _bindTabEvent() { - var self = this, doc = self.edit.doc; - K(doc).keydown(function(e) { - if (e.which == 9) { - e.preventDefault(); - if (self.afterTab) { - self.afterTab.call(self, e); - return; - } - var cmd = self.cmd, range = cmd.range; - range.shrink(); - if (range.collapsed && range.startContainer.nodeType == 1) { - range.insertNode(K('@ ', doc)[0]); - cmd.select(); - } - self.insertHtml('    '); - } - }); -} -function _bindFocusEvent() { - var self = this; - K(self.edit.textarea[0], self.edit.win).focus(function(e) { - if (self.afterFocus) { - self.afterFocus.call(self, e); - } - }).blur(function(e) { - if (self.afterBlur) { - self.afterBlur.call(self, e); - } - }); -} -function _removeBookmarkTag(html) { - return _trim(html.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/ig, '')); -} -function _removeTempTag(html) { - return html.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/ig, ''); -} -function _addBookmarkToStack(stack, bookmark) { - if (stack.length === 0) { - stack.push(bookmark); - return; - } - var prev = stack[stack.length - 1]; - if (_removeBookmarkTag(bookmark.html) !== _removeBookmarkTag(prev.html)) { - stack.push(bookmark); - } -} -function _undoToRedo(fromStack, toStack) { - var self = this, edit = self.edit, - body = edit.doc.body, - range, bookmark; - if (fromStack.length === 0) { - return self; - } - if (edit.designMode) { - range = self.cmd.range; - bookmark = range.createBookmark(true); - bookmark.html = body.innerHTML; - } else { - bookmark = { - html : body.innerHTML - }; - } - _addBookmarkToStack(toStack, bookmark); - var prev = fromStack.pop(); - if (_removeBookmarkTag(bookmark.html) === _removeBookmarkTag(prev.html) && fromStack.length > 0) { - prev = fromStack.pop(); - } - if (edit.designMode) { - edit.html(prev.html); - if (prev.start) { - range.moveToBookmark(prev); - self.select(); - } - } else { - K(body).html(_removeBookmarkTag(prev.html)); - } - return self; -} -function KEditor(options) { - var self = this; - self.options = {}; - function setOption(key, val) { - if (KEditor.prototype[key] === undefined) { - self[key] = val; - } - self.options[key] = val; - } - _each(options, function(key, val) { - setOption(key, options[key]); - }); - _each(K.options, function(key, val) { - if (self[key] === undefined) { - setOption(key, val); - } - }); - var se = K(self.srcElement || '').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
    "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
    '));var n=K('
    '),i=K('
    '),a=K('
    '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
    '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
    ',e.target?"":'',e.form?'
    ':'
    ','',d.join(""),'',"",'',e.form?"
    ":"","
    "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
    ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
    ').appendTo(t.div);var u=K('
    ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
    ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
    '+e+"
    ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
    '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
    '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
    KindEditor '+_VERSION+'
    Copyright © kindsoft.net All rights reserved.
    ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable; +t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
    ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
    )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

    ").replace(/$/,"

    ").replace(/\n/g,"

    ")):n=n.replace(/\n/g,"
    $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

    ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
    ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
    '+escape(n)+"
    "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
    '+escape(n)+"
    "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"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"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
    ','
    ','",'',"
    ","
    "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
    ','
    ','
    ',i.address+' ','','',"","
    ",'
    ',' ","
    ",'
    ',"
    ",'
    ',"
    "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
    ','
    ','","
    ",'',"
    "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
    \n'+e.escape(l)+"
    ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l
    ').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
    '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
    ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
    '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
    ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
    ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
    '+s.filename+"
    ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
    ','
    ','
    ',' ',''+l.moveup+"","
    ",'
    ',l.viewType+' ",l.orderType+' ","
    ",'
    ',"
    ",'
    ',"
    "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",' ',"
    ",'
    ','",' ',"
    ","
    "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
    ','
    ','",'","
    "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",'
    ',"
    ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g);if(i){var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"), +extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
    ','
    ',i.address+' ','','',"","
    ",'
    ',"
    "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
    ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",'',"
    ",'
    ','",'',"
    ",'
    ','",' ',"
    ","
    "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
    ','
    ','
    ','',"
    ",'
    '+t.uploadDesc+"
    ",'','',"","
    ",'
    ',"
    "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
    ');n.bodyDiv.append(i);var a=e('
    ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
    ').appendTo(a);e(['
    ','
    ','
    0%
    '].join("")).hide().appendTo(r),e('
    '+n.options.pendingMessage+"
    ").appendTo(r),i.append('
    '+t.name+"
    "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
    ','
    ',"
    ","
    "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"},SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null; +"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
    ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
    '+i.comment+'
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

    ").replace(/$/,"

    ").replace(/\n/g,"

    "):i.replace(/\n/g,"
    $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

    '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

    ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
    "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
    ")+"");r.push("
    "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
    '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
    ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
    ").append(o).html();return e.IE||(p+="
    "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
    ','
    ','
    ','
    ',"",'
    ','
    ','
    ',"
    ",'
    ',"",'
    ','
    ',"
    ",'
    ',"",'
    ','{borderColor}','',"
    ","
    ","
    ",'
    ','',r.join(""),l.join(""),"
    ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
    ','
    ','",p.width+'   ','   ",p.height+'   ','","
    ",'
    ','",p.textAlign+' ",p.verticalAlign+' ","
    ",'
    ','",p.borderColor+' ',"
    ",'
    ','",'',"
    ","
    "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
    ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
    "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
    ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
    "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
    '),n=$('
    '+p.xRxC.format(0,0)+"
    ");t.append(n);var i=$('
    ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
    ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
    ','
    ','
    ',a.selectTemplate+"
    ",'
    ',' ","
    ",'
    ',"
    ",'',"
    "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
    '+i.comment+'
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
    "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file diff --git a/www/js/kindeditor/themes/default/background.png b/www/js/kindeditor/themes/default/background.png deleted file mode 100755 index d7a93db6b298724a91a118ff4fd4312c466bc496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!w{S26Ny&!~?*ges0X`wFA3uKl@ZrPz_wV1m zd-wM3+c$6Cyng-q)vH%8U%q_t;>Gjl&!0Ve_Vnq~Cr_Sy`SRt@pFel+-o13`()sh} z|NsAg>(;G*|NdRPc=0a~{Q2|y*RP*HfBydc`^We1zkdDt_Vw$R&!2z(`0*KN$NTr+ zzkPcTwBYsYuV22rdHM3y^XH#GeR}ci+4Cn)K7IJ`^wFbFA3r{M_z-CK^T&@L-@kwE z+&Q3AKD>M9Vzd7^(6u5ZL4LtNOVI&?zyEVVp!arqx;TbZFuuLjI`MXZMC--hTlU{f zeD=@!w8M-uUYvEzr=M#-JR_>TYs!_Vs>=cgclE4tot7F2L7Q|=15wjcgDI&8cTGvK zOpg@PiP%tQm$hAP&C??3$%TJDZs6@V?|xD9|JnW9pYQ5y-*-9mj&aU%(=%;fSh5Yn z+I;hBr=HH8tg>^(;gXrr_w}aVHuBuG_D{5{ZTM|_@u{WVRp%mK*H2x@&wXvisY0Qz zGHvZ4%XD8wUMmT<^jSPF^=Y?AY=rX9kGE0C<2t_1d|7aKWJ bm+F_UF>wf - * @website http://www.kindsoft.net/ - * @licence http://www.kindsoft.net/license.php - * @version 4.1.9 (2013-10-08) - *******************************************************************************/.ke-inline-block{display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1;*display:inline}.ke-clearfix{zoom:1}.ke-clearfix:after{display:block;height:0;clear:both;font-size:0;line-height:0;visibility:hidden;content:"."}.ke-shadow{box-shadow:0 6px 12px rgba(0,0,0,.175)}[class*=" ke-icon-"],[class^=ke-icon-]{width:16px;height:16px}.ke-icon-source{background-position:0 0}.ke-icon-preview{background-position:0 -16px}.ke-icon-print{background-position:0 -32px}.ke-icon-undo{background-position:0 -48px}.ke-icon-redo{background-position:0 -64px}.ke-icon-cut{background-position:0 -80px}.ke-icon-copy{background-position:0 -96px}.ke-icon-paste{background-position:0 -112px}.ke-icon-selectall{background-position:0 -128px}.ke-icon-justifyleft{background-position:0 -144px}.ke-icon-justifycenter{background-position:0 -160px}.ke-icon-justifyright{background-position:0 -176px}.ke-icon-justifyfull{background-position:0 -192px}.ke-icon-insertorderedlist{background-position:0 -208px}.ke-icon-insertunorderedlist{background-position:0 -224px}.ke-icon-indent{background-position:0 -240px}.ke-icon-outdent{background-position:0 -256px}.ke-icon-subscript{background-position:0 -272px}.ke-icon-superscript{background-position:0 -288px}.ke-icon-date{width:25px;background-position:0 -304px}.ke-icon-time{width:25px;background-position:0 -320px}.ke-icon-formatblock{width:25px;background-position:0 -336px}.ke-icon-fontname{width:21px;background-position:0 -352px}.ke-icon-fontsize{width:23px;background-position:0 -368px}.ke-icon-forecolor{width:20px;background-position:0 -384px}.ke-icon-hilitecolor{width:23px;background-position:0 -400px}.ke-icon-bold{background-position:0 -416px}.ke-icon-italic{background-position:0 -432px}.ke-icon-underline{background-position:0 -448px}.ke-icon-strikethrough{background-position:0 -464px}.ke-icon-removeformat{background-position:0 -480px}.ke-icon-image{background-position:0 -496px}.ke-icon-flash{background-position:0 -512px}.ke-icon-media{background-position:0 -528px}.ke-icon-div{background-position:0 -544px}.ke-icon-formula{background-position:0 -576px}.ke-icon-hr{background-position:0 -592px}.ke-icon-emoticons{background-position:0 -608px}.ke-icon-link{background-position:0 -624px}.ke-icon-unlink{background-position:0 -640px}.ke-icon-fullscreen{background-position:0 -656px}.ke-icon-about{background-position:0 -672px}.ke-icon-plainpaste{background-position:0 -704px}.ke-icon-wordpaste{background-position:0 -720px}.ke-icon-table{background-position:0 -784px}.ke-icon-tablemenu{background-position:0 -768px}.ke-icon-tableinsert{background-position:0 -784px}.ke-icon-tabledelete{background-position:0 -800px}.ke-icon-tablecolinsertleft{background-position:0 -816px}.ke-icon-tablecolinsertright{background-position:0 -832px}.ke-icon-tablerowinsertabove{background-position:0 -848px}.ke-icon-tablerowinsertbelow{background-position:0 -864px}.ke-icon-tablecoldelete{background-position:0 -880px}.ke-icon-tablerowdelete{background-position:0 -896px}.ke-icon-tablecellprop{background-position:0 -912px}.ke-icon-tableprop{background-position:0 -928px}.ke-icon-checked{background-position:0 -944px}.ke-icon-code{background-position:0 -960px}.ke-icon-map{background-position:0 -976px}.ke-icon-baidumap{background-position:0 -976px}.ke-icon-lineheight{background-position:0 -992px}.ke-icon-clearhtml{background-position:0 -1008px}.ke-icon-pagebreak{background-position:0 -1024px}.ke-icon-insertfile{background-position:0 -1040px}.ke-icon-quickformat{background-position:0 -1056px}.ke-icon-template{background-position:0 -1072px}.ke-icon-tablecellsplit{background-position:0 -1088px}.ke-icon-tablerowmerge{background-position:0 -1104px}.ke-icon-tablerowsplit{background-position:0 -1120px}.ke-icon-tablecolmerge{background-position:0 -1136px}.ke-icon-tablecolsplit{background-position:0 -1152px}.ke-icon-anchor{background-position:0 -1168px}.ke-icon-search{background-position:0 -1184px}.ke-icon-new{background-position:0 -1200px}.ke-icon-specialchar{background-position:0 -1216px}.ke-icon-multiimage{background-position:0 -1232px}.ke-container{position:relative;display:block;padding:0;margin:0;overflow:hidden;background-color:#fff;border:1px solid #ccc;border-radius:0;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.ke-container.focus{border-color:#4d90fe;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(77,144,254,.6)}.ke-toolbar{padding:2px 5px;overflow:hidden;text-align:left;zoom:1;background-color:#fff;border-bottom:1px solid #ccc}.ke-toolbar-icon{display:block;overflow:hidden;font-size:0;line-height:0;background-repeat:no-repeat}.ke-toolbar-icon-url{background-image:url(default.png)}.ke-toolbar .ke-outline{display:block;float:left;padding:1px 2px;margin:1px;overflow:hidden;font-size:0;line-height:0;cursor:pointer;filter:alpha(opacity=80);border:1px solid #fff;border-radius:0;opacity:.8;-webkit-transition:all .5s cubic-bezier(.175,.885,.32,1);transition:all .5s cubic-bezier(.175,.885,.32,1)}.ke-toolbar .ke-on,.ke-toolbar .ke-selected{filter:alpha(opacity=100);border-color:#ddd;opacity:1}.ke-toolbar .ke-selected{background-color:#f1f1f1}.ke-toolbar .ke-disabled{cursor:default}.ke-toolbar .ke-separator{display:block;float:left;width:0;height:16px;margin:2px 3px;overflow:hidden;font-size:0;line-height:0;border-top:0;border-bottom:0;border-left:1px dotted #ddd}.ke-toolbar .ke-hr{height:1px;overflow:hidden;clear:both}.ke-edit{padding:0}.ke-edit-iframe,.ke-edit-textarea{padding:0;margin:0;overflow:auto;border:0}.ke-edit-textarea{overflow:auto;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#141414;resize:none;background-color:#fff}.ke-edit-textarea:focus{outline:0}.ke-statusbar{position:absolute;bottom:0;width:100%;overflow:hidden;font-size:0;line-height:0;text-align:center;cursor:s-resize;background-color:#fff;filter:alpha(opacity=0);border-top:1px solid #ccc;opacity:0;-webkit-transition:all .5s cubic-bezier(.175,.885,.32,1);transition:all .5s cubic-bezier(.175,.885,.32,1);*height:12px}.ke-statusbar .ke-statusbar-center-icon,.ke-statusbar .ke-statusbar-right-icon{height:11px;background-image:url(default.png)}.ke-statusbar .ke-statusbar-center-icon{width:15px;background-position:0 -754px}.ke-statusbar .ke-statusbar-right-icon{position:absolute;right:0;bottom:0;width:11px;cursor:se-resize;background-position:-5px -741px}.ke-statusbar:hover{filter:alpha(opacity=100);opacity:1}.ke-menu{padding:5px 0;overflow:hidden;font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,sans-serif;font-size:12px;text-align:left;background-color:#fff;border:1px solid #cbcbcb;border:1px solid rgba(0,0,0,.15);border-radius:0}.ke-menu-item{height:24px;overflow:hidden;cursor:pointer}.ke-menu-item-on{color:#141414;text-decoration:none;background-color:#ddd;outline:0}.ke-menu-item-left{width:27px;overflow:hidden;text-align:center}.ke-menu-item-center{width:0;height:24px;border-top:0;border-right:1px solid #fff;border-bottom:0;border-left:1px solid #e3e3e3}.ke-menu-item-center-on{border-right:1px solid #e9eff6;border-left:1px solid #e9eff6}.ke-menu-item-right{padding:0 0 0 5px;overflow:hidden;line-height:24px;text-align:left;border:0}.ke-menu-separator{height:0;margin:2px 0;overflow:hidden;border-top:1px solid #ccc;border-right:0;border-bottom:1px solid #fff;border-left:0}.ke-colorpicker{background-color:#fff;border:1px solid #cbcbcb;border:1px solid rgba(0,0,0,.15);border-radius:0}.ke-colorpicker-table{padding:0;margin:0;border-collapse:separate;border:0}.ke-colorpicker-cell{padding:0;font-size:0;line-height:0;cursor:pointer;border:none}.ke-colorpicker-cell-color{width:25px;height:25px;padding:0;border:0;-webkit-transition:all .5s cubic-bezier(.175,.885,.32,1);transition:all .5s cubic-bezier(.175,.885,.32,1)}.ke-colorpicker-cell-top{padding:0;margin:0;font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,sans-serif;font-size:12px;line-height:25px;text-align:center;cursor:pointer}.ke-colorpicker-cell-on{color:#141414;background-color:#ddd}.ke-colorpicker-cell-on .ke-colorpicker-cell-color{border:2px solid #141414}.ke-colorpicker-cell-selected .ke-colorpicker-cell-color{border:2px solid #141414}.ke-dialog{position:absolute;padding:0;margin:0}.ke-dialog .ke-header{width:100%;margin-bottom:10px}.ke-dialog .ke-header .ke-left{float:left}.ke-dialog .ke-header .ke-right{float:right}.ke-dialog .ke-header label{display:inline;margin-right:0;font-weight:400;vertical-align:top;cursor:pointer}.ke-dialog-content{width:100%;height:100%;overflow:hidden;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:0}.ke-dialog-shadow{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;background-color:#f0f0ee;box-shadow:0 3px 9px rgba(0,0,0,.5)}.ke-dialog-header{min-height:16.43px;padding:7.5px 15px;margin:0;font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,sans-serif;font-size:14px;font-weight:700;text-align:left;cursor:move;background:#f1f1f1;border:0;border-bottom:1px solid #e5e5e5}.ke-dialog-icon-close{position:absolute;top:10px;right:8px;display:block;width:16px;height:16px;cursor:pointer;background:url(default.png) no-repeat scroll 0 -688px;filter:alpha(opacity=60);opacity:.6}.ke-dialog-icon-close:hover{filter:alpha(opacity=100);opacity:1}.ke-dialog-body{width:100%;overflow:hidden;font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,sans-serif;font-size:12px;text-align:left}.ke-dialog-body textarea{display:block;padding:0;overflow:auto;resize:none}.ke-dialog-body input:focus,.ke-dialog-body select:focus,.ke-dialog-body textarea:focus{outline:0}.ke-dialog-body label{display:-moz-inline-stack;display:inline-block;margin-right:10px;vertical-align:middle;cursor:pointer;zoom:1;*display:inline}.ke-dialog-body img{display:-moz-inline-stack;display:inline-block;vertical-align:middle;zoom:1;*display:inline}.ke-dialog-body select{display:-moz-inline-stack;display:inline-block;width:auto;vertical-align:middle;zoom:1;*display:inline}.ke-dialog-body .ke-textarea{display:block;width:408px;height:260px;background-color:#fff;border:1px solid #ccc;border-radius:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.ke-dialog-body .ke-form{padding:0;margin:0}.ke-dialog-loading{position:absolute;top:0;left:1px;z-index:1;text-align:center}.ke-dialog-loading-content{height:31px;padding-left:36px;font-size:14px;font-weight:700;line-height:31px;color:#666;background:url(../common/loading.gif) no-repeat}.ke-dialog-row{margin-bottom:10px}.ke-dialog-footer{width:100%;padding:5px;text-align:right;border-top:1px solid #e5e5e5}.ke-dialog-preview,.ke-dialog-yes{margin:5px}.ke-dialog-no{margin:5px 10px 5px 5px}.ke-dialog-mask{background-color:#000;filter:alpha(opacity=50);opacity:.5}.ke-button-common{display:inline-block;height:23px;overflow:visible;line-height:21px;vertical-align:middle;cursor:pointer}.ke-button-outer{position:relative;display:-moz-inline-stack;display:inline-block;padding:0;vertical-align:middle;zoom:1;*display:inline}.ke-button{left:2px;padding:0 12px;margin:0;font-size:12px;color:#141414;text-decoration:none;background-color:#f0f0f0;border:1px solid #bdbdbd;border-color:#bdbdbd;border-radius:0}.ke-button.active,.ke-button:active,.ke-button:focus,.ke-button:hover,.open .dropdown-toggle.ke-button{color:#141414;background-color:#dbdbdb;border-color:#9e9e9e;box-shadow:0 2px 1px rgba(0,0,0,.1)}.ke-button.active,.ke-button:active,.open .dropdown-toggle.ke-button{background-color:#c9c9c9;background-image:none;border-color:#a3a3a3;box-shadow:inset 0 4px 6px rgba(0,0,0,.15)}.ke-button.disabled,.ke-button.disabled.active,.ke-button.disabled:active,.ke-button.disabled:focus,.ke-button.disabled:hover,.ke-button[disabled],.ke-button[disabled].active,.ke-button[disabled]:active,.ke-button[disabled]:focus,.ke-button[disabled]:hover,fieldset[disabled] .ke-button,fieldset[disabled] .ke-button.active,fieldset[disabled] .ke-button:active,fieldset[disabled] .ke-button:focus,fieldset[disabled] .ke-button:hover{background-color:#f0f0f0;border-color:#bdbdbd}.ke-input-text{display:-moz-inline-stack;display:inline-block;height:20px;padding:0 4px;font-family:"sans serif",tahoma,verdana,helvetica;font-size:12px;line-height:20px;vertical-align:middle;zoom:1;background-color:#fff;border:1px solid #ccc;border-radius:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;*display:inline}.ke-input-text:focus{border-color:#4d90fe;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(77,144,254,.6)}.ke-input-number{width:50px}.ke-input-color,ke-dialog-content select{display:-moz-inline-stack;display:inline-block;width:60px;height:20px;padding-left:5px;overflow:hidden;font-size:12px;line-height:20px;vertical-align:middle;cursor:pointer;zoom:1;background-color:#fff;border:1px solid #ccc;*display:inline}.ke-upload-button{position:relative}.ke-upload-area{position:relative;padding:0;margin:0;overflow:hidden}.ke-upload-area .ke-upload-file{position:absolute;top:0;right:0;z-index:811212;padding:0;margin:0;font-size:60px;filter:alpha(opacity=0);border:0 none;opacity:0}.ke-tabs{padding-left:5px;margin-bottom:20px;font:12px/1 "sans serif",tahoma,verdana,helvetica;border-bottom:1px solid #a0a0a0}.ke-tabs-ul{padding:0;margin:0;list-style-position:outside;list-style-type:none;list-style-image:none}.ke-tabs-li{position:relative;float:left;padding:0 20px;margin:0 2px -1px 0;line-height:25px;color:#555;text-align:center;cursor:pointer;background-color:#f0f0ee;border:1px solid #a0a0a0}.ke-tabs-li-selected{color:#000;cursor:default;background-color:#fff;border-bottom:1px solid #fff}.ke-tabs-li-on{color:#000;background-color:#fff}.ke-progressbar{position:relative;padding:0;margin:0}.ke-progressbar-bar{width:80px;height:5px;padding:0;margin:10px 10px 0 10px;border:1px solid #6fa5db}.ke-progressbar-bar-inner{width:0;height:5px;padding:0;margin:0;overflow:hidden;background-color:#6fa5db}.ke-progressbar-percent{position:absolute;top:0;left:40%;display:none}.ke-swfupload-top{position:relative;margin-bottom:10px;_width:608px}.ke-swfupload-button{height:23px;line-height:23px}.ke-swfupload-desc{height:23px;padding:0 10px;line-height:23px}.ke-swfupload-startupload{position:absolute;top:0;right:0}.ke-swfupload-body{width:auto;height:370px;padding:5px;overflow:scroll;background-color:#fff;border:1px solid #ccc}.ke-swfupload-body .ke-item{width:100px;margin:5px}.ke-swfupload-body .ke-photo{position:relative;padding:10px;background-color:#fff;border:1px solid #ddd}.ke-swfupload-body .ke-delete{position:absolute;top:0;right:0;display:block;width:16px;height:16px;cursor:pointer;background:url(default.png) no-repeat scroll 0 -688px}.ke-swfupload-body .ke-status{position:absolute;bottom:5px;left:0;width:100px;height:17px}.ke-swfupload-body .ke-message{width:100px;height:17px;overflow:hidden;text-align:center}.ke-swfupload-body .ke-error{color:red}.ke-swfupload-body .ke-name{width:100px;height:16px;overflow:hidden;text-align:center}.ke-swfupload-body .ke-on{background-color:#e9eff6;border:1px solid #5690d2}.ke-plugin-emoticons{position:relative}.ke-plugin-emoticons .ke-preview{position:absolute;top:0;display:none;padding:10px;margin:2px;text-align:center;background-color:#fff;border:1px solid #a0a0a0}.ke-plugin-emoticons .ke-preview-img{padding:0;margin:0;border:0}.ke-plugin-emoticons .ke-table{padding:0;margin:0;border-collapse:separate;border:0}.ke-plugin-emoticons .ke-cell{padding:1px;margin:0;cursor:pointer;border:1px solid #f0f0ee}.ke-plugin-emoticons .ke-on{background-color:#e9eff6;border:1px solid #5690d2}.ke-plugin-emoticons .ke-img{display:block;width:24px;height:24px;padding:0;margin:2px;margin:0;overflow:hidden;background-repeat:no-repeat;border:0}.ke-plugin-emoticons .ke-page{padding:0;margin:5px;font:12px/1 "sans serif",tahoma,verdana,helvetica;color:#333;text-align:right;text-decoration:none;border:0}.ke-plugin-plainpaste-textarea,.ke-plugin-wordpaste-iframe{display:block;width:408px;height:260px;font-family:"sans serif",tahoma,verdana,helvetica;font-size:12px;border:1px solid #ccc}.ke-plugin-filemanager-header{width:100%;margin-bottom:10px}.ke-plugin-filemanager-header .ke-left{float:left}.ke-plugin-filemanager-header .ke-right{float:right}.ke-plugin-filemanager-body{width:auto;height:370px;padding:5px;overflow:scroll;background-color:#fff;border:1px solid #ccc}.ke-plugin-filemanager-body .ke-item{width:100px;margin:5px}.ke-plugin-filemanager-body .ke-photo{padding:10px;background-color:#fff;border:1px solid #ddd}.ke-plugin-filemanager-body .ke-name{width:100px;height:16px;overflow:hidden;text-align:center}.ke-plugin-filemanager-body .ke-on{background-color:#e9eff6;border:1px solid #5690d2}.ke-plugin-filemanager-body .ke-table{width:95%;padding:0;margin:0;border-collapse:separate;border:0}.ke-plugin-filemanager-body .ke-table .ke-cell{padding:0;margin:0;border:0}.ke-plugin-filemanager-body .ke-table .ke-name{width:55%;text-align:left}.ke-plugin-filemanager-body .ke-table .ke-size{width:15%;text-align:left}.ke-plugin-filemanager-body .ke-table .ke-datetime{width:30%;text-align:center} diff --git a/www/js/kindeditor/themes/qq/editor.gif b/www/js/kindeditor/themes/qq/editor.gif deleted file mode 100755 index b256841f3088117a98b969499784042bab41aeca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1449 zcmV;a1y=e;Nk%w1VL$>90M$PLQia8GoX|62nLBW?f~M5g+~Q1v!`Ir}#@Fmee!?zP zh+U1zmb2M1O>e8g;1W5WgsIkUn$Ip`%2$fVXMn^#bhsNcP%c~9LU_GjdBU~IL&`rMETD?m}ueX??hjiOzpp!m?j@drmO88u=IIcuapktQofL6Om9 zlnpU3=)x$aWkr|!ZjLRGtHu(6ln;RftGGxJA%N`& zB3!hPVK$<~K3mqbjTQ**Wh4;j?t!p}uD+aU3*p3)vL@2CO@zgW@33^N#Dz#wk2xug@*QIr;sbl%D3g@yevA{5qO(~K1eoM}ioR&X#O0XO)7 zC>}k1iN$(*CgI+kSUe&`4IOx}g9rC5+2j>lWz-reRe*J%2q`SIzyw-Cq+p#->}Q4# zF}^iMr9Y_9g9^Z^K!X7^1nVmeT%t%#6@roYClqeYl;aaH$uuS}8eNzxIp6R)VWWYR zQ|WoS0bydH7?X}U^)0D=w|T#%%iqME>NYuB9`8x$>wa8RoXF$6%Ydp?LATGHbA zgs*#?s|T{yMQ10C)X~ZW1B4l-Fd9ganG+En>$q9DlM2PI5qYfe0|!A?Q2+)+((phA z2T(9Cy%~)vg?|DJ!LvY8oU&@a2f`vNN+Cy~1s7}h0+)0hWBbIj%qqK#)e#@;#5mlE zV@}s153=!Ol48N~9_(Qu015=H@PGmZ+|16LV>f|q(o0P6!UCwYus~S`I3RezUZ%57 z7JpRs+u;ZkwF~2oSUjubjZ6FlG<~8G$s}!DL~*S;P0PgR6Wdy`=}{=4z+)>k5W)dT zLf%Bn=%v%f#0a?OuKNhJL+FG<6UZREE3X7DdlGu0SN9MABrrh2wOCf3(R2Ag z1jrcz4&fr|GN2ohS30~+PHIoc9OaS_0{~d-2c)yx0d;aK4zBMF69nDZ&}Anikgy3S zNTCW>s6s&~@EkAPN9PRl!5Yc|V;EEe>TJlv9@5YvNOQ@_kmti98u5rnh#?ZO69fP| DK<${p diff --git a/www/js/kindeditor/themes/qq/qq.css b/www/js/kindeditor/themes/qq/qq.css deleted file mode 100755 index f008c612a1..0000000000 --- a/www/js/kindeditor/themes/qq/qq.css +++ /dev/null @@ -1,143 +0,0 @@ -/* container */ -.ke-container-qq { - display: block; - border: 1px solid #c3c3c3; - background-color: #FFF; - overflow: hidden; - margin: 0; - padding: 0; -} -/* toolbar */ -.ke-container-qq .ke-toolbar { - border-bottom: 1px solid #c3c3c3; - background-color: #FFFFFF; - padding: 2px 5px; - text-align: left; - overflow: hidden; - zoom: 1; -} -.ke-toolbar-icon-url { - background-image: url(editor.gif); - width:18px; - *xwidth:20px; - height:18px; - *xheight:20px; -} -.ke-icon-checked{ - background-image: url(../default/default.png); - width:16px; - height:16px; -} -.ke-container-qq .ke-icon-bold{ - background-position: 4px 1px; -} -.ke-container-qq .ke-icon-italic{ - background-position: -27px 1px; -} -.ke-container-qq .ke-icon-italic{ - background-position: -28px 1px; -} -.ke-container-qq .ke-icon-underline{ - background-position: -60px 1px; -} -.ke-container-qq .ke-icon-fontname{ - background-position: -95px 1px; -} -.ke-container-qq .ke-icon-fontsize{ - background-position: -128px 1px; -} -.ke-container-qq .ke-icon-forecolor{ - background-position: -159px 1px; -} -.ke-container-qq .ke-icon-hilitecolor{ - background-position: -190px 1px; -} -.ke-container-qq .ke-icon-plug-align{ - background-position: -223px 1px; -} -.plug-align-justifyleft{ - background-position: -350px 1px; -} -.plug-align-justifycenter{ - background-position: -382px 1px; -} -.plug-align-justifyright{ - background-position: -414px 1px; -} -.plug-order-insertorderedlist{ - background-position: -446px 1px; -} -.plug-order-insertunorderedlist{ - background-position: -477px 1px; -} -.plug-indent-indent{ - background-position: -513px 1px; -} -.plug-indent-outdent{ - background-position: -545px 1px; -} -.ke-container-qq .ke-icon-plug-order{ - background-position: -255px 1px; -} -.ke-container-qq .ke-icon-plug-indent{ - background-position: -287px 1px; -} -.ke-container-qq .ke-icon-link{ - background-position: -319px 1px; -} - -.ke-container-qq .ke-toolbar .ke-outline { - cursor: default; - padding:0px; - border:1px solid #fff; -} -.ke-container-qq .ke-toolbar .ke-on { - border-left:1px solid white; - border-top:1px solid white; - border-right:1px solid gray; - border-bottom:1px solid gray; - background-color: #FFFFFF; -} -.ke-container-qq .ke-toolbar .ke-selected { - border-left:1px solid gray; - border-top:1px solid gray; - border-right:1px solid white; - border-bottom:1px solid white; - background-color: #FFFFFF; -} -.ke-container-qq .ke-toolbar .ke-disabled { - cursor: default; -} - -.ke-colorpicker-qq{ - background:#fff; -} -/* statusbar */ -.ke-container-qq .ke-statusbar { - display:none; -} -/* menu */ -.ke-menu-qq { - border:1px solid #a6a6a6; - position:absolute; - background:#fff; - -moz-box-shadow:2px 2px 4px #DDDDDD; - z-index:999; - left:-400px; - top:-386px; - right:218px; - width:130px; -} -.ke-menu-qq .ke-menu-item { - padding:0px; - background:#fff; -} -.ke-menu-qq .ke-menu-item-on { - border:1px solid #000080;background:#FFEEC2;color:#036; -} -.ke-menu-qq .ke-toolbar .ke-selected { - border:1px solid #9a9afb; -} -.ke-menu-qq .ke-menu-item-left{ - width:auto; -} diff --git a/www/js/kindeditor/themes/simple/simple.css b/www/js/kindeditor/themes/simple/simple.css deleted file mode 100755 index 07d43827cc..0000000000 --- a/www/js/kindeditor/themes/simple/simple.css +++ /dev/null @@ -1,100 +0,0 @@ -/* container */ -.ke-container-simple { - display: block; - border: 1px solid #CCC; - background-color: #FFF; - overflow: hidden; -} -/* toolbar */ -.ke-container-simple .ke-toolbar { - border-bottom: 1px solid #CCC; - background-color: #FFF; - padding: 2px 5px; - overflow: hidden; -} -.ke-container-simple .ke-toolbar .ke-outline { - border: 1px solid #FFF; - background-color: transparent; - margin: 1px; - padding: 1px 2px; - font-size: 0; - line-height: 0; - overflow: hidden; - cursor: pointer; -} -.ke-container-simple .ke-toolbar .ke-on { - border: 1px solid #5690D2; -} -.ke-container-simple .ke-toolbar .ke-selected { - border: 1px solid #5690D2; - background-color: #E9EFF6; -} -.ke-container-simple .ke-toolbar .ke-disabled { - cursor: default; -} -/* statusbar */ -.ke-container-simple .ke-statusbar { - position: relative; - background-color: #FFF; - border-top: 1px solid #CCCCCC; - font-size: 0; - line-height: 0; - *height: 12px; - overflow: hidden; - text-align: center; - cursor: s-resize; -} -/* menu */ -.ke-menu-simple { - border: 1px solid #A0A0A0; - background-color: #FFF; - color: #222222; - padding: 2px; - font-family: "sans serif",tahoma,verdana,helvetica; - font-size: 12px; - text-align: left; - overflow: hidden; -} -.ke-menu-simple .ke-menu-item { - border: 1px solid #FFF; - background-color: #FFF; - color: #222222; - height: 24px; - overflow: hidden; - cursor: pointer; -} -.ke-menu-simple .ke-menu-item-on { - border: 1px solid #5690D2; - background-color: #FFF; -} -/* colorpicker */ -.ke-colorpicker-simple { - border: 1px solid #A0A0A0; - background-color: #FEFEFE; - color: #222222; - padding: 2px; -} -.ke-colorpicker-simple .ke-colorpicker-cell { - font-size: 0; - line-height: 0; - border: 1px solid #FEFEFE; - cursor: pointer; - margin:3px; - padding:0; -} -.ke-colorpicker-simple .ke-colorpicker-cell-top { - font-family: "sans serif",tahoma,verdana,helvetica; - font-size: 12px; - line-height: 24px; - border: 1px solid #FEFEFE; - cursor: pointer; - margin:0; - padding:0; - text-align: center; -} -.ke-colorpicker-simple .ke-colorpicker-cell-on { - border: 1px solid #5690D2; -} -.ke-colorpicker-simple .ke-colorpicker-cell-selected { - border: 1px solid #2446AB; -}