source: trunk/admin/inc/ckeditor/filemanager/js/browser/folders.js@ 239

Last change on this file since 239 was 239, checked in by luc, 9 years ago

Admin: correzione visulaizzazione immissione dati spoglio per Chrome e Safari - Aggiornamento dell'editor da FCKeditor a CKeditor , accessibili anche a Chrome e Safari.

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