source: trunk/admin/inc/ckeditor/filemanager/js/browser/files.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: 23.7 KB
Line 
1<?php
2
3/** This file is part of KCFinder project
4 *
5 * @desc File 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.initFiles = function() {
16 $(document).unbind('keydown');
17 $(document).keydown(function(e) {
18 return !browser.selectAll(e);
19 });
20 $('#files').unbind();
21 $('#files').scroll(function() {
22 browser.hideDialog();
23 });
24 $('.file').unbind();
25 $('.file').click(function(e) {
26 _.unselect();
27 browser.selectFile($(this), e);
28 });
29 $('.file').rightClick(function(e) {
30 _.unselect();
31 browser.menuFile($(this), e);
32 });
33 $('.file').dblclick(function() {
34 _.unselect();
35 browser.returnFile($(this));
36 });
37 $('.file').mouseup(function() {
38 _.unselect();
39 });
40 $('.file').mouseout(function() {
41 _.unselect();
42 });
43 $.each(this.shows, function(i, val) {
44 var display = (_.kuki.get('show' + val) == 'off')
45 ? 'none' : 'block';
46 $('#files .file div.' + val).css('display', display);
47 });
48 this.statusDir();
49};
50
51browser.showFiles = function(callBack, selected) {
52 this.fadeFiles();
53 setTimeout(function() {
54 var html = '';
55 $.each(browser.files, function(i, file) {
56 var stamp = [];
57 $.each(file, function(key, val) {
58 stamp[stamp.length] = key + "|" + val;
59 });
60 stamp = _.md5(stamp.join('|'));
61 if (_.kuki.get('view') == 'list') {
62 if (!i) html += '<table summary="list">';
63 var icon = _.getFileExtension(file.name);
64 if (file.thumb)
65 icon = '.image';
66 else if (!icon.length || !file.smallIcon)
67 icon = '.';
68 icon = 'themes/' + browser.theme + '/img/files/small/' + icon + '.png';
69 html += '<tr class="file">' +
70 '<td class="name" style="background-image:url(' + icon + ')">' + _.htmlData(file.name) + '</td>' +
71 '<td class="time">' + file.date + '</td>' +
72 '<td class="size">' + browser.humanSize(file.size) + '</td>' +
73 '</tr>';
74 if (i == browser.files.length - 1) html += '</table>';
75 } else {
76 if (file.thumb)
77 var icon = browser.baseGetData('thumb') + '&file=' + encodeURIComponent(file.name) + '&dir=' + encodeURIComponent(browser.dir) + '&stamp=' + stamp;
78 else if (file.smallThumb) {
79 var icon = browser.uploadURL + '/' + browser.dir + '/' + file.name;
80 icon = _.escapeDirs(icon).replace(/\'/g, "%27");
81 } else {
82 var icon = file.bigIcon ? _.getFileExtension(file.name) : '.';
83 if (!icon.length) icon = '.';
84 icon = 'themes/' + browser.theme + '/img/files/big/' + icon + '.png';
85 }
86 html += '<div class="file">' +
87 '<div class="thumb" style="background-image:url(\'' + icon + '\')" ></div>' +
88 '<div class="name">' + _.htmlData(file.name) + '</div>' +
89 '<div class="time">' + file.date + '</div>' +
90 '<div class="size">' + browser.humanSize(file.size) + '</div>' +
91 '</div>';
92 }
93 });
94 $('#files').html('<div>' + html + '<div>');
95 $.each(browser.files, function(i, file) {
96 var item = $('#files .file').get(i);
97 $(item).data(file);
98 if (_.inArray(file.name, selected) ||
99 ((typeof selected != 'undefined') && !selected.push && (file.name == selected))
100 )
101 $(item).addClass('selected');
102 });
103 $('#files > div').css({opacity:'', filter:''});
104 if (callBack) callBack();
105 browser.initFiles();
106 }, 200);
107};
108
109browser.selectFile = function(file, e) {
110 if (e.ctrlKey || e.metaKey) {
111 if (file.hasClass('selected'))
112 file.removeClass('selected');
113 else
114 file.addClass('selected');
115 var files = $('.file.selected').get();
116 var size = 0;
117 if (!files.length)
118 this.statusDir();
119 else {
120 $.each(files, function(i, cfile) {
121 size += parseInt($(cfile).data('size'));
122 });
123 size = this.humanSize(size);
124 if (files.length > 1)
125 $('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')');
126 else {
127 var data = $(files[0]).data();
128 $('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
129 }
130 }
131 } else {
132 var data = file.data();
133 $('.file').removeClass('selected');
134 file.addClass('selected');
135 $('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
136 }
137};
138
139browser.selectAll = function(e) {
140 if ((!e.ctrlKey && !e.metaKey) || ((e.keyCode != 65) && (e.keyCode != 97)))
141 return false;
142 var files = $('.file').get();
143 if (files.length) {
144 var size = 0;
145 $.each(files, function(i, file) {
146 if (!$(file).hasClass('selected'))
147 $(file).addClass('selected');
148 size += parseInt($(file).data('size'));
149 });
150 size = this.humanSize(size);
151 $('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')');
152 }
153 return true;
154};
155
156browser.returnFile = function(file) {
157
158 var fileURL = file.substr
159 ? file : browser.uploadURL + '/' + browser.dir + '/' + file.data('name');
160 fileURL = _.escapeDirs(fileURL);
161
162 if (this.opener.CKEditor) {
163 this.opener.CKEditor.object.tools.callFunction(this.opener.CKEditor.funcNum, fileURL, '');
164 window.close();
165
166 } else if (this.opener.FCKeditor) {
167 window.opener.SetUrl(fileURL) ;
168 window.close() ;
169
170 } else if (this.opener.TinyMCE) {
171 var win = tinyMCEPopup.getWindowArg('window');
172 win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = fileURL;
173 if (win.getImageData) win.getImageData();
174 if (typeof(win.ImageDialog) != "undefined") {
175 if (win.ImageDialog.getImageData)
176 win.ImageDialog.getImageData();
177 if (win.ImageDialog.showPreviewImage)
178 win.ImageDialog.showPreviewImage(fileURL);
179 }
180 tinyMCEPopup.close();
181
182 } else if (this.opener.callBack) {
183
184 if (window.opener && window.opener.KCFinder) {
185 this.opener.callBack(fileURL);
186 window.close();
187 }
188
189 if (window.parent && window.parent.KCFinder) {
190 var button = $('#toolbar a[href="kcact:maximize"]');
191 if (button.hasClass('selected'))
192 this.maximize(button);
193 this.opener.callBack(fileURL);
194 }
195
196 } else if (this.opener.callBackMultiple) {
197 if (window.opener && window.opener.KCFinder) {
198 this.opener.callBackMultiple([fileURL]);
199 window.close();
200 }
201
202 if (window.parent && window.parent.KCFinder) {
203 var button = $('#toolbar a[href="kcact:maximize"]');
204 if (button.hasClass('selected'))
205 this.maximize(button);
206 this.opener.callBackMultiple([fileURL]);
207 }
208
209 }
210};
211
212browser.returnFiles = function(files) {
213 if (this.opener.callBackMultiple && files.length) {
214 var rfiles = [];
215 $.each(files, function(i, file) {
216 rfiles[i] = browser.uploadURL + '/' + browser.dir + '/' + $(file).data('name');
217 rfiles[i] = _.escapeDirs(rfiles[i]);
218 });
219 this.opener.callBackMultiple(rfiles);
220 if (window.opener) window.close()
221 }
222};
223
224browser.returnThumbnails = function(files) {
225 if (this.opener.callBackMultiple) {
226 var rfiles = [];
227 var j = 0;
228 $.each(files, function(i, file) {
229 if ($(file).data('thumb')) {
230 rfiles[j] = browser.thumbsURL + '/' + browser.dir + '/' + $(file).data('name');
231 rfiles[j] = _.escapeDirs(rfiles[j++]);
232 }
233 });
234 this.opener.callBackMultiple(rfiles);
235 if (window.opener) window.close()
236 }
237};
238
239browser.menuFile = function(file, e) {
240 var data = file.data();
241 var path = this.dir + '/' + data.name;
242 var files = $('.file.selected').get();
243 var html = '';
244
245 if (file.hasClass('selected') && files.length && (files.length > 1)) {
246 var thumb = false;
247 var notWritable = 0;
248 var cdata;
249 $.each(files, function(i, cfile) {
250 cdata = $(cfile).data();
251 if (cdata.thumb) thumb = true;
252 if (!data.writable) notWritable++;
253 });
254 if (this.opener.callBackMultiple) {
255 html += '<a href="kcact:pick">' + this.label("Select") + '</a>';
256 if (thumb) html +=
257 '<a href="kcact:pick_thumb">' + this.label("Select Thumbnails") + '</a>';
258 }
259 if (data.thumb || data.smallThumb || this.support.zip) {
260 html += (html.length ? '<div class="delimiter"></div>' : '');
261 if (data.thumb || data.smallThumb)
262 html +='<a href="kcact:view">' + this.label("View") + '</a>';
263 if (this.support.zip) html += (html.length ? '<div class="delimiter"></div>' : '') +
264 '<a href="kcact:download">' + this.label("Download") + '</a>';
265 }
266
267 if (this.access.files.copy || this.access.files.move)
268 html += (html.length ? '<div class="delimiter"></div>' : '') +
269 '<a href="kcact:clpbrdadd">' + this.label("Add to Clipboard") + '</a>';
270 if (this.access.files['delete'])
271 html += (html.length ? '<div class="delimiter"></div>' : '') +
272 '<a href="kcact:rm"' + ((notWritable == files.length) ? ' class="denied"' : '') +
273 '>' + this.label("Delete") + '</a>';
274
275 if (html.length) {
276 html = '<div class="menu">' + html + '</div>';
277 $('#dialog').html(html);
278 this.showMenu(e);
279 } else
280 return;
281
282 $('.menu a[href="kcact:pick"]').click(function() {
283 browser.returnFiles(files);
284 browser.hideDialog();
285 return false;
286 });
287
288 $('.menu a[href="kcact:pick_thumb"]').click(function() {
289 browser.returnThumbnails(files);
290 browser.hideDialog();
291 return false;
292 });
293
294 $('.menu a[href="kcact:download"]').click(function() {
295 browser.hideDialog();
296 var pfiles = [];
297 $.each(files, function(i, cfile) {
298 pfiles[i] = $(cfile).data('name');
299 });
300 browser.post(browser.baseGetData('downloadSelected'), {dir:browser.dir, files:pfiles});
301 return false;
302 });
303
304 $('.menu a[href="kcact:clpbrdadd"]').click(function() {
305 browser.hideDialog();
306 var msg = '';
307 $.each(files, function(i, cfile) {
308 var cdata = $(cfile).data();
309 var failed = false;
310 for (i = 0; i < browser.clipboard.length; i++)
311 if ((browser.clipboard[i].name == cdata.name) &&
312 (browser.clipboard[i].dir == browser.dir)
313 ) {
314 failed = true
315 msg += cdata.name + ": " + browser.label("This file is already added to the Clipboard.") + "\n";
316 break;
317 }
318
319 if (!failed) {
320 cdata.dir = browser.dir;
321 browser.clipboard[browser.clipboard.length] = cdata;
322 }
323 });
324 browser.initClipboard();
325 if (msg.length) browser.alert(msg.substr(0, msg.length - 1));
326 return false;
327 });
328
329 $('.menu a[href="kcact:rm"]').click(function() {
330 if ($(this).hasClass('denied')) return false;
331 browser.hideDialog();
332 var failed = 0;
333 var dfiles = [];
334 $.each(files, function(i, cfile) {
335 var cdata = $(cfile).data();
336 if (!cdata.writable)
337 failed++;
338 else
339 dfiles[dfiles.length] = browser.dir + "/" + cdata.name;
340 });
341 if (failed == files.length) {
342 browser.alert(browser.label("The selected files are not removable."));
343 return false;
344 }
345
346 var go = function(callBack) {
347 browser.fadeFiles();
348 $.ajax({
349 type: 'POST',
350 dataType: 'json',
351 url: browser.baseGetData('rm_cbd'),
352 data: {files:dfiles},
353 async: false,
354 success: function(data) {
355 if (callBack) callBack();
356 browser.check4errors(data);
357 browser.refresh();
358 },
359 error: function() {
360 if (callBack) callBack();
361 $('#files > div').css({
362 opacity: '',
363 filter: ''
364 });
365 browser.alert(browser.label("Unknown error."));
366 }
367 });
368 };
369
370 if (failed)
371 browser.confirm(
372 browser.label("{count} selected files are not removable. Do you want to delete the rest?", {count:failed}),
373 go
374 )
375
376 else
377 browser.confirm(
378 browser.label("Are you sure you want to delete all selected files?"),
379 go
380 );
381
382 return false;
383 });
384
385 } else {
386 html += '<div class="menu">';
387 $('.file').removeClass('selected');
388 file.addClass('selected');
389 $('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
390 if (this.opener.callBack || this.opener.callBackMultiple) {
391 html += '<a href="kcact:pick">' + this.label("Select") + '</a>';
392 if (data.thumb) html +=
393 '<a href="kcact:pick_thumb">' + this.label("Select Thumbnail") + '</a>';
394 html += '<div class="delimiter"></div>';
395 }
396
397 if (data.thumb || data.smallThumb)
398 html +='<a href="kcact:view">' + this.label("View") + '</a>';
399
400 html +=
401 '<a href="kcact:download">' + this.label("Download") + '</a>';
402
403 if (this.access.files.copy || this.access.files.move)
404 html += '<div class="delimiter"></div>' +
405 '<a href="kcact:clpbrdadd">' + this.label("Add to Clipboard") + '</a>';
406 if (this.access.files.rename || this.access.files['delete'])
407 html += '<div class="delimiter"></div>';
408 if (this.access.files.rename)
409 html += '<a href="kcact:mv"' + (!data.writable ? ' class="denied"' : '') + '>' +
410 this.label("Rename...") + '</a>';
411 if (this.access.files['delete'])
412 html += '<a href="kcact:rm"' + (!data.writable ? ' class="denied"' : '') + '>' +
413 this.label("Delete") + '</a>';
414 html += '</div>';
415
416 $('#dialog').html(html);
417 this.showMenu(e);
418
419 $('.menu a[href="kcact:pick"]').click(function() {
420 browser.returnFile(file);
421 browser.hideDialog();
422 return false;
423 });
424
425 $('.menu a[href="kcact:pick_thumb"]').click(function() {
426 var path = browser.thumbsURL + '/' + browser.dir + '/' + data.name;
427 browser.returnFile(path);
428 browser.hideDialog();
429 return false;
430 });
431
432 $('.menu a[href="kcact:download"]').click(function() {
433 var html = '<form id="downloadForm" method="post" action="' + browser.baseGetData('download') + '">' +
434 '<input type="hidden" name="dir" />' +
435 '<input type="hidden" name="file" />' +
436 '</form>';
437 $('#dialog').html(html);
438 $('#downloadForm input').get(0).value = browser.dir;
439 $('#downloadForm input').get(1).value = data.name;
440 $('#downloadForm').submit();
441 return false;
442 });
443
444 $('.menu a[href="kcact:clpbrdadd"]').click(function() {
445 for (i = 0; i < browser.clipboard.length; i++)
446 if ((browser.clipboard[i].name == data.name) &&
447 (browser.clipboard[i].dir == browser.dir)
448 ) {
449 browser.hideDialog();
450 browser.alert(browser.label("This file is already added to the Clipboard."));
451 return false;
452 }
453 var cdata = data;
454 cdata.dir = browser.dir;
455 browser.clipboard[browser.clipboard.length] = cdata;
456 browser.initClipboard();
457 browser.hideDialog();
458 return false;
459 });
460
461 $('.menu a[href="kcact:mv"]').click(function(e) {
462 if (!data.writable) return false;
463 browser.fileNameDialog(
464 e, {dir: browser.dir, file: data.name},
465 'newName', data.name, browser.baseGetData('rename'), {
466 title: "New file name:",
467 errEmpty: "Please enter new file name.",
468 errSlash: "Unallowable characters in file name.",
469 errDot: "File name shouldn't begins with '.'"
470 },
471 function() {
472 browser.refresh();
473 }
474 );
475 return false;
476 });
477
478 $('.menu a[href="kcact:rm"]').click(function() {
479 if (!data.writable) return false;
480 browser.hideDialog();
481 browser.confirm(browser.label("Are you sure you want to delete this file?"),
482 function(callBack) {
483 $.ajax({
484 type: 'POST',
485 dataType: 'json',
486 url: browser.baseGetData('delete'),
487 data: {dir:browser.dir, file:data.name},
488 async: false,
489 success: function(data) {
490 if (callBack) callBack();
491 browser.clearClipboard();
492 if (browser.check4errors(data))
493 return;
494 browser.refresh();
495 },
496 error: function() {
497 if (callBack) callBack();
498 browser.alert(browser.label("Unknown error."));
499 }
500 });
501 }
502 );
503 return false;
504 });
505 }
506
507 $('.menu a[href="kcact:view"]').click(function() {
508 browser.hideDialog();
509 var ts = new Date().getTime();
510 var showImage = function(data) {
511 url = _.escapeDirs(browser.uploadURL + '/' + browser.dir + '/' + data.name) + '?ts=' + ts,
512 $('#loading').html(browser.label("Loading image..."));
513 $('#loading').css('display', 'inline');
514 var img = new Image();
515 img.src = url;
516 img.onerror = function() {
517 browser.lock = false;
518 $('#loading').css('display', 'none');
519 browser.alert(browser.label("Unknown error."));
520 $(document).unbind('keydown');
521 $(document).keydown(function(e) {
522 return !browser.selectAll(e);
523 });
524 browser.refresh();
525 };
526 var onImgLoad = function() {
527 browser.lock = false;
528 $('#files .file').each(function() {
529 if ($(this).data('name') == data.name)
530 browser.ssImage = this;
531 });
532 $('#loading').css('display', 'none');
533 $('#dialog').html('<div class="slideshow"><img /></div>');
534 $('#dialog img').attr({
535 src: url,
536 title: data.name
537 }).fadeIn('fast', function() {
538 var o_w = $('#dialog').outerWidth();
539 var o_h = $('#dialog').outerHeight();
540 var f_w = $(window).width() - 30;
541 var f_h = $(window).height() - 30;
542 if ((o_w > f_w) || (o_h > f_h)) {
543 if ((f_w / f_h) > (o_w / o_h))
544 f_w = parseInt((o_w * f_h) / o_h);
545 else if ((f_w / f_h) < (o_w / o_h))
546 f_h = parseInt((o_h * f_w) / o_w);
547 $('#dialog img').attr({
548 width: f_w,
549 height: f_h
550 });
551 }
552 $('#dialog').unbind('click');
553 $('#dialog').click(function(e) {
554 browser.hideDialog();
555 $(document).unbind('keydown');
556 $(document).keydown(function(e) {
557 return !browser.selectAll(e);
558 });
559 if (browser.ssImage) {
560 browser.selectFile($(browser.ssImage), e);
561 }
562 });
563 browser.showDialog();
564 var images = [];
565 $.each(browser.files, function(i, file) {
566 if (file.thumb || file.smallThumb)
567 images[images.length] = file;
568 });
569 if (images.length)
570 $.each(images, function(i, image) {
571 if (image.name == data.name) {
572 $(document).unbind('keydown');
573 $(document).keydown(function(e) {
574 if (images.length > 1) {
575 if (!browser.lock && (e.keyCode == 37)) {
576 var nimg = i
577 ? images[i - 1]
578 : images[images.length - 1];
579 browser.lock = true;
580 showImage(nimg);
581 }
582 if (!browser.lock && (e.keyCode == 39)) {
583 var nimg = (i >= images.length - 1)
584 ? images[0]
585 : images[i + 1];
586 browser.lock = true;
587 showImage(nimg);
588 }
589 }
590 if (e.keyCode == 27) {
591 browser.hideDialog();
592 $(document).unbind('keydown');
593 $(document).keydown(function(e) {
594 return !browser.selectAll(e);
595 });
596 }
597 });
598 }
599 });
600 });
601 };
602 if (img.complete)
603 onImgLoad();
604 else
605 img.onload = onImgLoad;
606 };
607 showImage(data);
608 return false;
609 });
610};
Note: See TracBrowser for help on using the repository browser.