/******************************************************************************* 
 | 
* 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('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 = [ 
 | 
            '<div style="padding:10px 20px;">', 
 | 
            // header start 
 | 
            '<div class="ke-plugin-filemanager-header">', 
 | 
            // left start 
 | 
            '<div class="ke-left">', 
 | 
            '<img class="ke-inline-block" name="moveupImg" src="' + imgPath + 'go-up.gif" width="16" height="16" border="0" alt="" /> ', 
 | 
            '<a class="ke-inline-block" name="moveupLink" href="javascript:;">' + lang.moveup + '</a>', 
 | 
            '</div>', 
 | 
            // right start 
 | 
            '<div class="ke-right">', 
 | 
            lang.viewType + ' <select class="ke-inline-block" name="viewType">', 
 | 
            '<option value="VIEW">' + lang.viewImage + '</option>', 
 | 
            '<option value="LIST">' + lang.listImage + '</option>', 
 | 
            '</select> ', 
 | 
            lang.orderType + ' <select class="ke-inline-block" name="orderType">', 
 | 
            '<option value="NAME">' + lang.fileName + '</option>', 
 | 
            '<option value="SIZE">' + lang.fileSize + '</option>', 
 | 
            '<option value="TYPE">' + lang.fileType + '</option>', 
 | 
            '</select>', 
 | 
            '</div>', 
 | 
            '<div class="ke-clearfix"></div>', 
 | 
            '</div>', 
 | 
            // body start 
 | 
            '<div class="ke-plugin-filemanager-body"></div>', 
 | 
            '</div>' 
 | 
        ].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('<img src="' + iconUrl + '" width="16" height="16" alt="' + data.filename + '" align="absmiddle" />'), 
 | 
                    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('<div class="ke-inline-block ke-item"></div>'); 
 | 
                bodyDiv.append(div); 
 | 
                var photoDiv = K('<div class="ke-inline-block ke-photo"></div>') 
 | 
                    .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('<img src="' + iconUrl + '" width="80" height="80" alt="' + 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('<div class="ke-name" title="' + data.filename + '">' + data.filename + '</div>'); 
 | 
            } 
 | 
        } 
 | 
        viewTypeBox.val(viewType); 
 | 
        reloadPage('', orderTypeBox.val(), viewType == 'VIEW' ? createView : createList); 
 | 
        return dialog; 
 | 
    } 
 | 
  
 | 
}); 
 |