/** This file is part of KCFinder project * * @desc Folder related functionality * @package KCFinder * @version 2.51 * @author Pavel Tzonkov * @copyright 2010, 2011 KCFinder Project * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 * @link http://kcfinder.sunhater.com */ browser.initFolders = function() { $('#folders').scroll(function() { browser.hideDialog(); }); $('div.folder > a').unbind(); $('div.folder > a').bind('click', function() { browser.hideDialog(); return false; }); $('div.folder > a > span.brace').unbind(); $('div.folder > a > span.brace').click(function() { if ($(this).hasClass('opened') || $(this).hasClass('closed')) browser.expandDir($(this).parent()); }); $('div.folder > a > span.folder').unbind(); $('div.folder > a > span.folder').click(function() { browser.changeDir($(this).parent()); }); $('div.folder > a > span.folder').rightClick(function(e) { _.unselect(); browser.menuDir($(this).parent(), e); }); if ($.browser.msie && $.browser.version && (parseInt($.browser.version.substr(0, 1)) < 8) ) { var fls = $('div.folder').get(); var body = $('body').get(0); var div; $.each(fls, function(i, folder) { div = document.createElement('div'); div.style.display = 'inline'; div.style.margin = div.style.border = div.style.padding = '0'; div.innerHTML='
' + $(folder).html() + "
"; body.appendChild(div); $(folder).css('width', $(div).innerWidth() + 'px'); body.removeChild(div); }); } }; browser.setTreeData = function(data, path) { if (!path) path = ''; else if (path.length && (path.substr(path.length - 1, 1) != '/')) path += '/'; path += data.name; var selector = '#folders a[href="kcdir:/' + _.escapeDirs(path) + '"]'; $(selector).data({ name: data.name, path: path, readable: data.readable, writable: data.writable, removable: data.removable, hasDirs: data.hasDirs }); $(selector + ' span.folder').addClass(data.current ? 'current' : 'regular'); if (data.dirs && data.dirs.length) { $(selector + ' span.brace').addClass('opened'); $.each(data.dirs, function(i, cdir) { browser.setTreeData(cdir, path + '/'); }); } else if (data.hasDirs) $(selector + ' span.brace').addClass('closed'); }; browser.buildTree = function(root, path) { if (!path) path = ""; path += root.name; var html = '
 ' + _.htmlData(root.name) + ''; if (root.dirs) { html += '
'; for (var i = 0; i < root.dirs.length; i++) { cdir = root.dirs[i]; html += browser.buildTree(cdir, path + '/'); } html += '
'; } html += '
'; return html; }; browser.expandDir = function(dir) { var path = dir.data('path'); if (dir.children('.brace').hasClass('opened')) { dir.parent().children('.folders').hide(500, function() { if (path == browser.dir.substr(0, path.length)) browser.changeDir(dir); }); dir.children('.brace').removeClass('opened'); dir.children('.brace').addClass('closed'); } else { if (dir.parent().children('.folders').get(0)) { dir.parent().children('.folders').show(500); dir.children('.brace').removeClass('closed'); dir.children('.brace').addClass('opened'); } else if (!$('#loadingDirs').get(0)) { dir.parent().append('
' + this.label("Loading folders...") + '
'); $('#loadingDirs').css('display', 'none'); $('#loadingDirs').show(200, function() { $.ajax({ type: 'POST', dataType: 'json', url: browser.baseGetData('expand'), data: {dir:path}, async: false, success: function(data) { $('#loadingDirs').hide(200, function() { $('#loadingDirs').detach(); }); if (browser.check4errors(data)) return; var html = ''; $.each(data.dirs, function(i, cdir) { html += '
 ' + _.htmlData(cdir.name) + '
'; }); if (html.length) { dir.parent().append('
' + html + '
'); var folders = $(dir.parent().children('.folders').first()); folders.css('display', 'none'); $(folders).show(500); $.each(data.dirs, function(i, cdir) { browser.setTreeData(cdir, path); }); } if (data.dirs.length) { dir.children('.brace').removeClass('closed'); dir.children('.brace').addClass('opened'); } else { dir.children('.brace').removeClass('opened'); dir.children('.brace').removeClass('closed'); } browser.initFolders(); browser.initDropUpload(); }, error: function() { $('#loadingDirs').detach(); browser.alert(browser.label("Unknown error.")); } }); }); } } }; browser.changeDir = function(dir) { if (dir.children('span.folder').hasClass('regular')) { $('div.folder > a > span.folder').removeClass('current'); $('div.folder > a > span.folder').removeClass('regular'); $('div.folder > a > span.folder').addClass('regular'); dir.children('span.folder').removeClass('regular'); dir.children('span.folder').addClass('current'); $('#files').html(browser.label("Loading files...")); $.ajax({ type: 'POST', dataType: 'json', url: browser.baseGetData('chDir'), data: {dir:dir.data('path')}, async: false, success: function(data) { if (browser.check4errors(data)) return; browser.files = data.files; browser.orderFiles(); browser.dir = dir.data('path'); browser.dirWritable = data.dirWritable; var title = "KCFinder: /" + browser.dir; document.title = title; if (browser.opener.TinyMCE) tinyMCEPopup.editor.windowManager.setTitle(window, title); browser.statusDir(); }, error: function() { $('#files').html(browser.label("Unknown error.")); } }); } }; browser.statusDir = function() { for (var i = 0, size = 0; i < this.files.length; i++) size += parseInt(this.files[i].size); size = this.humanSize(size); $('#fileinfo').html(this.files.length + ' ' + this.label("files") + ' (' + size + ')'); }; browser.menuDir = function(dir, e) { var data = dir.data(); var html = ''; $('#dialog').html(html); this.showMenu(e); $('div.folder > a > span.folder').removeClass('context'); if (dir.children('span.folder').hasClass('regular')) dir.children('span.folder').addClass('context'); if (this.clipboard && this.clipboard.length && data.writable) { $('.menu a[href="kcact:cpcbd"]').click(function() { browser.hideDialog(); browser.copyClipboard(data.path); return false; }); $('.menu a[href="kcact:mvcbd"]').click(function() { browser.hideDialog(); browser.moveClipboard(data.path); return false; }); } $('.menu a[href="kcact:refresh"]').click(function() { browser.hideDialog(); browser.refreshDir(dir); return false; }); $('.menu a[href="kcact:download"]').click(function() { browser.hideDialog(); browser.post(browser.baseGetData('downloadDir'), {dir:data.path}); return false; }); $('.menu a[href="kcact:mkdir"]').click(function(e) { if (!data.writable) return false; browser.hideDialog(); browser.fileNameDialog( e, {dir: data.path}, 'newDir', '', browser.baseGetData('newDir'), { title: "New folder name:", errEmpty: "Please enter new folder name.", errSlash: "Unallowable characters in folder name.", errDot: "Folder name shouldn't begins with '.'" }, function() { browser.refreshDir(dir); browser.initDropUpload(); if (!data.hasDirs) { dir.data('hasDirs', true); dir.children('span.brace').addClass('closed'); } } ); return false; }); $('.menu a[href="kcact:mvdir"]').click(function(e) { if (!data.removable) return false; browser.hideDialog(); browser.fileNameDialog( e, {dir: data.path}, 'newName', data.name, browser.baseGetData('renameDir'), { title: "New folder name:", errEmpty: "Please enter new folder name.", errSlash: "Unallowable characters in folder name.", errDot: "Folder name shouldn't begins with '.'" }, function(dt) { if (!dt.name) { browser.alert(browser.label("Unknown error.")); return; } var currentDir = (data.path == browser.dir); dir.children('span.folder').html(_.htmlData(dt.name)); dir.data('name', dt.name); dir.data('path', _.dirname(data.path) + '/' + dt.name); if (currentDir) browser.dir = dir.data('path'); browser.initDropUpload(); }, true ); return false; }); $('.menu a[href="kcact:rmdir"]').click(function() { if (!data.removable) return false; browser.hideDialog(); browser.confirm( "Are you sure you want to delete this folder and all its content?", function(callBack) { $.ajax({ type: 'POST', dataType: 'json', url: browser.baseGetData('deleteDir'), data: {dir: data.path}, async: false, success: function(data) { if (callBack) callBack(); if (browser.check4errors(data)) return; dir.parent().hide(500, function() { var folders = dir.parent().parent(); var pDir = folders.parent().children('a').first(); dir.parent().detach(); if (!folders.children('div.folder').get(0)) { pDir.children('span.brace').first().removeClass('opened'); pDir.children('span.brace').first().removeClass('closed'); pDir.parent().children('.folders').detach(); pDir.data('hasDirs', false); } if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length)) browser.changeDir(pDir); browser.initDropUpload(); }); }, error: function() { if (callBack) callBack(); browser.alert(browser.label("Unknown error.")); } }); } ); return false; }); }; browser.refreshDir = function(dir) { var path = dir.data('path'); if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) { dir.children('.brace').removeClass('opened'); dir.children('.brace').addClass('closed'); } dir.parent().children('.folders').first().detach(); if (path == browser.dir.substr(0, path.length)) browser.changeDir(dir); browser.expandDir(dir); return true; };