[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** This file is part of KCFinder project 4 * 5 * @desc Folder related functionality 6 * @package KCFinder 7 * @version 2.21 8 * @author Pavel Tzonkov <[email protected]> 9 * @copyright 2010 KCFinder Project 10 * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 11 * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 12 * @link http://kcfinder.sunhater.com 13 */?> 14 15 browser.initFolders = function() { 16 $('#folders').scroll(function() { 17 browser.hideDialog(); 18 }); 19 $('div.folder > a').unbind(); 20 $('div.folder > a').bind('click', function() { 21 browser.hideDialog(); 22 return false; 23 }); 24 $('div.folder > a > span.brace').unbind(); 25 $('div.folder > a > span.brace').click(function() { 26 if ($(this).hasClass('opened') || $(this).hasClass('closed')) 27 browser.expandDir($(this).parent()); 28 }); 29 $('div.folder > a > span.folder').unbind(); 30 $('div.folder > a > span.folder').click(function() { 31 browser.changeDir($(this).parent()); 32 }); 33 $('div.folder > a > span.folder').rightClick(function(e) { 34 browser.menuDir($(this).parent(), e); 35 }); 36 37 if ($.browser.msie && $.browser.version && 38 (parseInt($.browser.version.substr(0, 1)) < 8) 39 ) { 40 var fls = $('div.folder').get(); 41 var body = $('body').get(0); 42 var div; 43 $.each(fls, function(i, folder) { 44 div = document.createElement('div'); 45 div.style.display = 'inline'; 46 div.style.margin = div.style.border = div.style.padding = '0'; 47 div.innerHTML='<table style="border-collapse:collapse;border:0;margin:0;width:0"><tr><td nowrap="nowrap" style="white-space:nowrap;padding:0;border:0">' + $(folder).html() + "</td></tr></table>"; 48 body.appendChild(div); 49 $(folder).css('width', $(div).innerWidth() + 'px'); 50 body.removeChild(div); 51 }); 52 } 53 }; 54 55 browser.setTreeData = function(xml, path) { 56 if (!path) 57 path = ""; 58 else if (path.length && (path.substr(path.length - 1, 1) != '/')) 59 path += '/'; 60 var data = { 61 name: browser.xmlData(xml.getElementsByTagName('name')[0].childNodes), 62 readable: xml.getAttribute('readable') == 'yes', 63 writable: xml.getAttribute('writable') == 'yes', 64 removable: xml.getAttribute('removable') == 'yes', 65 hasDirs: xml.getAttribute('hasDirs') == 'yes', 66 current: xml.getAttribute('current') ? true : false 67 }; 68 path += data.name; 69 var selector = '#folders a[href="kcdir:/' + _.escapeDirs(path) + '"]'; 70 $(selector).data({ 71 name: data.name, 72 path: path, 73 readable: data.readable, 74 writable: data.writable, 75 removable: data.removable, 76 hasDirs: data.hasDirs 77 }); 78 $(selector + ' span.folder').addClass(data.current ? 'current' : 'regular'); 79 if (xml.getElementsByTagName('dirs').length) { 80 $(selector + ' span.brace').addClass('opened'); 81 var dirs = xml.getElementsByTagName('dirs')[0]; 82 $.each(dirs.childNodes, function(i, cdir) { 83 browser.setTreeData(cdir, path + '/'); 84 }); 85 } else if (data.hasDirs) 86 $(selector + ' span.brace').addClass('closed'); 87 }; 88 89 browser.buildTree = function(xml, path) { 90 if (!path) path = ""; 91 var name = this.xmlData(xml.getElementsByTagName('name')[0].childNodes); 92 var hasDirs = xml.getAttribute('hasDirs') == 'yes'; 93 path += name; 94 var html = '<div class="folder"><a href="kcdir:/' + _.escapeDirs(path) + '"><span class="brace"> </span><span class="folder">' + _.htmlData(name) + '</span></a>'; 95 if (xml.getElementsByTagName('dirs').length) { 96 var dirs = xml.getElementsByTagName('dirs')[0]; 97 html += '<div class="folders">'; 98 $.each(dirs.childNodes, function(i, cdir) { 99 html += browser.buildTree(cdir, path + '/'); 100 }); 101 html += '</div>'; 102 } 103 html += '</div>'; 104 return html; 105 }; 106 107 browser.expandDir = function(dir, callBack) { 108 var path = dir.data('path'); 109 if (dir.children('.brace').hasClass('opened')) { 110 dir.parent().children('.folders').hide(500, function() { 111 if (path == browser.dir.substr(0, path.length)) 112 browser.changeDir(dir); 113 }); 114 dir.children('.brace').removeClass('opened'); 115 dir.children('.brace').addClass('closed'); 116 if (callBack) callBack(); 117 } else { 118 if (dir.parent().children('.folders').get(0)) { 119 dir.parent().children('.folders').show(500); 120 dir.children('.brace').removeClass('closed'); 121 dir.children('.brace').addClass('opened'); 122 if (callBack) callBack(); 123 } else if (!$('#loadingDirs').get(0)) { 124 dir.parent().append('<div id="loadingDirs">' + this.label("Loading folders...") + '</div>'); 125 $('#loadingDirs').css('display', 'none'); 126 $('#loadingDirs').show(200, function() { 127 $.ajax({ 128 type: 'POST', 129 url: browser.baseGetData('expand'), 130 data: {dir:path}, 131 async: false, 132 success: function(xml) { 133 $('#loadingDirs').hide(200, function() { 134 $('#loadingDirs').detach(); 135 }); 136 if (browser.errors(xml)) return; 137 var dirs = xml.getElementsByTagName('dir'); 138 var html = ''; 139 var pth, name, hadDirs; 140 $.each(dirs, function(i, cdir) { 141 name = browser.xmlData(cdir.getElementsByTagName('name')[0].childNodes); 142 hasDirs = cdir.getAttribute('hasDirs') == 'yes'; 143 pth = path + '/' + name; 144 html += '<div class="folder"><a href="kcdir:/' + _.escapeDirs(pth) + '"><span class="brace"> </span><span class="folder">' + _.htmlData(name) + '</span></a></div>'; 145 }); 146 if (html.length) { 147 dir.parent().append('<div class="folders">' + html + '</div>'); 148 var folders = $(dir.parent().children('.folders').first()); 149 folders.css('display', 'none'); 150 $(folders).show(500); 151 $.each(dirs, function(i, cdir) { 152 browser.setTreeData(cdir, path, true); 153 }); 154 } 155 if (dirs.length) { 156 dir.children('.brace').removeClass('closed'); 157 dir.children('.brace').addClass('opened'); 158 } else { 159 dir.children('.brace').removeClass('opened'); 160 dir.children('.brace').removeClass('closed'); 161 } 162 163 browser.initFolders(); 164 if (callBack) callBack(xml); 165 }, 166 error: function(request, error) { 167 $('#loadingDirs').detach(); 168 alert(browser.label("Unknown error.")); 169 } 170 }); 171 }); 172 } 173 } 174 }; 175 176 browser.changeDir = function(dir) { 177 if (dir.children('span.folder').hasClass('regular')) { 178 $('div.folder > a > span.folder').removeClass('current'); 179 $('div.folder > a > span.folder').removeClass('regular'); 180 $('div.folder > a > span.folder').addClass('regular'); 181 dir.children('span.folder').removeClass('regular'); 182 dir.children('span.folder').addClass('current'); 183 $('#files').html(browser.label("Loading files...")); 184 $.ajax({ 185 type: 'POST', 186 url: browser.baseGetData('chDir'), 187 data: {dir:dir.data('path')}, 188 async: false, 189 success: function(xml) { 190 if (browser.errors(xml)) return; 191 var files = xml.getElementsByTagName('file'); 192 browser.loadFiles(files); 193 browser.orderFiles(); 194 browser.dir = dir.data('path'); 195 var dirWritable = 196 xml.getElementsByTagName('files')[0].getAttribute('dirWritable'); 197 browser.dirWritable = (dirWritable == 'yes'); 198 var title = "KCFinder: /" + browser.dir; 199 document.title = title; 200 if (browser.opener.TinyMCE) 201 tinyMCEPopup.editor.windowManager.setTitle(window, title); 202 browser.statusDir(); 203 }, 204 error: function(request, error) { 205 $('#files').html(browser.label("Unknown error.")); 206 } 207 }); 208 } 209 }; 210 211 browser.statusDir = function() { 212 for (var i = 0, size = 0; i < this.files.length; i++) 213 size += parseInt(this.files[i].size); 214 size = this.humanSize(size); 215 $('#fileinfo').html(this.files.length + ' ' + this.label("files") + ' (' + size + ')'); 216 }; 217 218 browser.menuDir = function(dir, e) { 219 var data = dir.data(); 220 var html = '<div class="menu">'; 221 if (!this.readonly && this.clipboard && this.clipboard.length) html += 222 '<a href="kcact:cpcbd"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Copy {count} files", {count: this.clipboard.length}) + '</a>' + 223 '<a href="kcact:mvcbd"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Move {count} files", {count: this.clipboard.length}) + '</a>' + 224 '<div class="delimiter"></div>'; 225 html += 226 '<a href="kcact:refresh">' + this.label("Refresh") + '</a>'; 227 if (this.support.zip) html+= 228 '<div class="delimiter"></div>' + 229 '<a href="kcact:download">' + this.label("Download") + '</a>'; 230 if (!this.readonly) html += 231 '<div class="delimiter"></div>' + 232 '<a href="kcact:mkdir"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("New Subfolder...") + '</a>' + 233 '<a href="kcact:mvdir"' + (!data.removable ? ' class="denied"' : '') + '>' + this.label("Rename...") + '</a>' + 234 '<a href="kcact:rmdir"' + (!data.removable ? ' class="denied"' : '') + '>' + this.label("Delete") + '</a>'; 235 html += '</div>'; 236 237 $('#dialog').html(html); 238 this.showMenu(e); 239 $('div.folder > a > span.folder').removeClass('context'); 240 if (dir.children('span.folder').hasClass('regular')) 241 dir.children('span.folder').addClass('context'); 242 243 if (this.clipboard && this.clipboard.length && data.writable) { 244 245 $('.menu a[href="kcact:cpcbd"]').click(function() { 246 browser.hideDialog(); 247 browser.copyClipboard(data.path); 248 return false; 249 }); 250 251 $('.menu a[href="kcact:mvcbd"]').click(function() { 252 browser.hideDialog(); 253 browser.moveClipboard(data.path); 254 return false; 255 }); 256 } 257 258 $('.menu a[href="kcact:refresh"]').click(function() { 259 browser.hideDialog(); 260 browser.refreshDir(dir); 261 return false; 262 }); 263 264 $('.menu a[href="kcact:download"]').click(function() { 265 browser.hideDialog(); 266 browser.post(browser.baseGetData('downloadDir'), {dir:data.path}); 267 return false; 268 }); 269 270 $('.menu a[href="kcact:mkdir"]').click(function(e) { 271 if (!data.writable) return false; 272 browser.hideDialog(); 273 browser.fileNameDialog( 274 e, {dir: data.path}, 275 'newDir', '', browser.baseGetData('newDir'), { 276 title: "New folder name:", 277 errEmpty: "Please enter new folder name.", 278 errSlash: "Unallowable characters in folder name.", 279 errDot: "Folder name shouldn't begins with '.'" 280 }, function(xml) { 281 browser.refreshDir(dir); 282 if (!data.hasDirs) { 283 dir.data('hasDirs', true); 284 dir.children('span.brace').addClass('closed'); 285 } 286 } 287 ); 288 return false; 289 }); 290 291 $('.menu a[href="kcact:mvdir"]').click(function(e) { 292 if (!data.removable) return false; 293 browser.hideDialog(); 294 browser.fileNameDialog( 295 e, {dir: data.path}, 296 'newName', data.name, browser.baseGetData('renameDir'), { 297 title: "New folder name:", 298 errEmpty: "Please enter new folder name.", 299 errSlash: "Unallowable characters in folder name.", 300 errDot: "Folder name shouldn't begins with '.'" 301 }, function(xml) { 302 if (!xml.getElementsByTagName('name').length) { 303 alert(browser.label("Unknown error.")); 304 return; 305 } 306 var name = browser.xmlData(xml.getElementsByTagName('name')[0].childNodes); 307 dir.children('span.folder').html(_.htmlData(name)); 308 dir.data('name', name); 309 dir.data('path', _.dirname(data.path) + '/' + name); 310 if (data.path == browser.dir) 311 browser.dir = dir.data('path'); 312 } 313 ); 314 return false; 315 }); 316 317 $('.menu a[href="kcact:rmdir"]').click(function() { 318 if (!data.removable) return false; 319 browser.hideDialog(); 320 if (confirm(browser.label( 321 "Are you sure you want to delete this folder and all its content?" 322 ))) { 323 $.ajax({ 324 type: 'POST', 325 url: browser.baseGetData('deleteDir'), 326 data: {dir:data.path}, 327 async: false, 328 success: function(xml) { 329 if (browser.errors(xml)) return; 330 dir.parent().hide(500, function() { 331 var folders = dir.parent().parent(); 332 var pDir = folders.parent().children('a').first(); 333 dir.parent().detach(); 334 if (!folders.children('div.folder').get(0)) { 335 pDir.children('span.brace').first().removeClass('opened'); 336 pDir.children('span.brace').first().removeClass('closed'); 337 pDir.parent().children('.folders').detach(); 338 pDir.data('hasDirs', false); 339 } 340 if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length)) 341 browser.changeDir(pDir); 342 }); 343 }, 344 error: function(request, error) { 345 alert(browser.label("Unknown error.")); 346 } 347 }); 348 } 349 return false; 350 }); 351 }; 352 353 browser.refreshDir = function(dir) { 354 var path = dir.data('path'); 355 if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) { 356 dir.children('.brace').removeClass('opened'); 357 dir.children('.brace').addClass('closed'); 358 } 359 dir.parent().children('.folders').first().detach(); 360 if (path == browser.dir.substr(0, path.length)) 361 browser.changeDir(dir); 362 browser.expandDir(dir); 363 return true; 364 };
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |