| /******************************************************************************* | 
| * KindEditor - WYSIWYG HTML Editor for Internet | 
| * Copyright (C) 2006-2011 kindsoft.net | 
| * | 
| * @author Roddy <luolonghao@gmail.com> | 
| * @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('<input  type="hidden" name="' + k + '" value="' + extraParams[k] + '" />'); | 
|         } | 
|         var html = [ | 
|             '<div style="padding:20px;">', | 
|             //tabs | 
|             '<div class="tabs"></div>', | 
|             //remote image - start | 
|             '<div class="tab1" style="display:none;">', | 
|             //url | 
|             '<div class="ke-dialog-row">', | 
|             '<label for="remoteUrl" style="width:60px;">' + lang.remoteUrl + '</label>', | 
|             '<input  type="text" id="remoteUrl" class="ke-input-text" name="url" value="" style="width:200px;" />  ', | 
|             '<span class="ke-button-common ke-button-outer">', | 
|             '<input  type="button" class="ke-button-common ke-button" name="viewServer" value="' + lang.viewServer + '" />', | 
|             '</span>', | 
|             '</div>', | 
|             //size | 
|             '<div class="ke-dialog-row">', | 
|             '<label for="remoteWidth" style="width:60px;">' + lang.size + '</label>', | 
|             lang.width + ' <input  type="text" id="remoteWidth" class="ke-input-text ke-input-number" name="width" value="" maxlength="4" /> ', | 
|             lang.height + ' <input  type="text" class="ke-input-text ke-input-number" name="height" value="" maxlength="4" /> ', | 
|             '<img class="ke-refresh-btn" src="' + imgPath + 'refresh.png" width="16" height="16" alt="" style="cursor:pointer;" title="' + lang.resetSize + '" />', | 
|             '</div>', | 
|             //align | 
|             '<div class="ke-dialog-row">', | 
|             '<label style="width:60px;">' + lang.align + '</label>', | 
|             '<input  type="radio" name="align" class="ke-inline-block" value="" checked="checked" /> <img name="defaultImg" src="' + imgPath + 'align_top.gif" width="23" height="25" alt="" />', | 
|             ' <input  type="radio" name="align" class="ke-inline-block" value="left" /> <img name="leftImg" src="' + imgPath + 'align_left.gif" width="23" height="25" alt="" />', | 
|             ' <input  type="radio" name="align" class="ke-inline-block" value="right" /> <img name="rightImg" src="' + imgPath + 'align_right.gif" width="23" height="25" alt="" />', | 
|             '</div>', | 
|             //title | 
|             '<div class="ke-dialog-row">', | 
|             '<label for="remoteTitle" style="width:60px;">' + lang.imgTitle + '</label>', | 
|             '<input  type="text" id="remoteTitle" class="ke-input-text" name="title" value="" style="width:200px;" />', | 
|             '</div>', | 
|             '</div>', | 
|             //remote image - end | 
|             //local upload - start | 
|             '<div class="tab2" style="display:none;">', | 
|             '<iframe name="' + target + '" style="display:none;"></iframe>', | 
|             '<form class="ke-upload-area ke-form" method="post" enctype="multipart/form-data" target="' + target + '" action="' + K.addParam(uploadJson, 'dir=image') + '">', | 
|             //file | 
|             '<div class="ke-dialog-row">', | 
|             hiddenElements.join(''), | 
|             '<label style="width:60px;">' + lang.localUrl + '</label>', | 
|             '<input  type="text" name="localUrl" class="ke-input-text" tabindex="-1" style="width:200px;" readonly="true" />  ', | 
|             '<input  type="button" class="ke-upload-button" value="' + lang.upload + '" />', | 
|             '</div>', | 
|             '</form>', | 
|             '</div>', | 
|             //local upload - end | 
|             '</div>' | 
|         ].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: 60, | 
|             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('<img src="' + urlBox.val() + '" />', 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); | 
| }); |