520 lines
19 KiB
JavaScript
520 lines
19 KiB
JavaScript
<?php
|
|
|
|
/** This file is part of KCFinder project
|
|
*
|
|
* @desc File related functionality
|
|
* @package KCFinder
|
|
* @version 2.21
|
|
* @author Pavel Tzonkov <pavelc@users.sourceforge.net>
|
|
* @copyright 2010 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.initFiles = function() {
|
|
$(document).unbind('keypress');
|
|
$(document).keypress(function(e) {
|
|
if ((e.which == 65) || (e.which == 97))
|
|
browser.selectAll();
|
|
});
|
|
$('#files').unbind();
|
|
$('#files').scroll(function() {
|
|
browser.hideDialog();
|
|
});
|
|
$('.file').unbind();
|
|
$('.file').click(function(e) {
|
|
_.unselect();
|
|
browser.selectFile($(this), e);
|
|
});
|
|
$('.file').rightClick(function(e) {
|
|
_.unselect();
|
|
browser.menuFile($(this), e);
|
|
});
|
|
$('.file').dblclick(function() {
|
|
_.unselect();
|
|
browser.returnFile($(this));
|
|
});
|
|
$('.file').mouseup(function() {
|
|
_.unselect();
|
|
});
|
|
$('.file').mouseout(function() {
|
|
_.unselect();
|
|
});
|
|
$.each(this.shows, function(i, val) {
|
|
var display = (_.kuki.get('show' + val) == 'off')
|
|
? 'none' : 'block';
|
|
$('#files .file div.' + val).css('display', display);
|
|
});
|
|
this.statusDir();
|
|
};
|
|
|
|
browser.loadFiles = function(files) {
|
|
this.files = [];
|
|
$.each(files, function(i, file) {
|
|
browser.files[i] = {
|
|
name: browser.xmlData(file.getElementsByTagName('name')[0].childNodes),
|
|
size: file.getAttribute('size'),
|
|
mtime: file.getAttribute('mtime'),
|
|
date: file.getAttribute('date'),
|
|
readable: file.getAttribute('readable') == 'yes',
|
|
writable: file.getAttribute('writable') == 'yes',
|
|
bigIcon: file.getAttribute('bigIcon') == 'yes',
|
|
smallIcon: file.getAttribute('smallIcon') == 'yes',
|
|
thumb: file.getAttribute('thumb') == 'yes',
|
|
smallThumb: file.getAttribute('smallThumb') == 'yes'
|
|
};
|
|
});
|
|
};
|
|
|
|
browser.showFiles = function(callBack, selected) {
|
|
this.fadeFiles();
|
|
setTimeout(function() {
|
|
var html = '';
|
|
$.each(browser.files, function(i, file) {
|
|
if (_.kuki.get('view') == 'list') {
|
|
if (!i) html += '<table summary="list">';
|
|
var icon = _.getFileExtension(file.name);
|
|
if (file.thumb)
|
|
icon = ".image";
|
|
else if (!icon.length || !file.smallIcon)
|
|
icon = ".";
|
|
icon = 'themes/' + browser.theme + '/img/files/small/' + icon + '.png';
|
|
html += '<tr class="file">' +
|
|
'<td class="name" style="background-image:url(' + icon + ')">' + _.htmlData(file.name) + '</td>' +
|
|
'<td class="time">' + file.date + '</td>' +
|
|
'<td class="size">' + browser.humanSize(file.size) + '</td>' +
|
|
'</tr>';
|
|
if (i == browser.files.length - 1) html += '</table>';
|
|
} else {
|
|
if (file.thumb)
|
|
var icon = browser.baseGetData('thumb') + '&file=' + encodeURIComponent(file.name);
|
|
else if (file.smallThumb) {
|
|
var icon = browser.uploadURL + '/' + browser.dir + '/' + file.name;
|
|
icon = _.escapeDirs(icon).replace(/\'/g, "%27");
|
|
} else {
|
|
var icon = file.bigIcon ? _.getFileExtension(file.name) : ".";
|
|
if (!icon.length) icon = ".";
|
|
icon = 'themes/' + browser.theme + '/img/files/big/' + icon + '.png';
|
|
}
|
|
html += '<div class="file">' +
|
|
'<div class="thumb" style="background-image:url(\'' + icon + '\')" ></div>' +
|
|
'<div class="name">' + _.htmlData(file.name) + '</div>' +
|
|
'<div class="time">' + file.date + '</div>' +
|
|
'<div class="size">' + browser.humanSize(file.size) + '</div>' +
|
|
'</div>';
|
|
}
|
|
});
|
|
$('#files').html('<div>' + html + '<div>');
|
|
$.each(browser.files, function(i, file) {
|
|
var item = $('#files .file').get(i);
|
|
$(item).data(file);
|
|
if (file.name == selected)
|
|
$(item).addClass('selected');
|
|
});
|
|
$('#files > div').css({opacity:'', filter:''});
|
|
if (callBack) callBack();
|
|
browser.initFiles();
|
|
}, 200);
|
|
};
|
|
|
|
browser.selectFile = function(file, e) {
|
|
if (e.ctrlKey) {
|
|
if (file.hasClass('selected'))
|
|
file.removeClass('selected');
|
|
else
|
|
file.addClass('selected');
|
|
var files = $('.file.selected').get();
|
|
var size = 0;
|
|
if (!files.length)
|
|
this.statusDir();
|
|
else {
|
|
$.each(files, function(i, cfile) {
|
|
size += parseInt($(cfile).data('size'));
|
|
});
|
|
size = this.humanSize(size);
|
|
if (files.length > 1)
|
|
$('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')');
|
|
else {
|
|
var data = $(files[0]).data();
|
|
$('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
|
|
}
|
|
}
|
|
} else {
|
|
var data = file.data();
|
|
$('.file').removeClass('selected');
|
|
file.addClass('selected');
|
|
$('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
|
|
}
|
|
};
|
|
|
|
browser.selectAll = function() {
|
|
var files = $('.file').get();
|
|
if (files.length) {
|
|
var size = 0;
|
|
$.each(files, function(i, file) {
|
|
if (!$(file).hasClass('selected'))
|
|
$(file).addClass('selected');
|
|
size += parseInt($(file).data('size'));
|
|
});
|
|
size = this.humanSize(size);
|
|
$('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')');
|
|
}
|
|
};
|
|
|
|
browser.returnFile = function(file) {
|
|
|
|
var fileURL = file.substr
|
|
? file : browser.uploadURL + '/' + browser.dir + '/' + file.data('name');
|
|
fileURL = _.escapeDirs(fileURL);
|
|
|
|
if (this.opener.CKEditor) {
|
|
this.opener.CKEditor.object.tools.callFunction(this.opener.CKEditor.funcNum, fileURL, '');
|
|
window.close();
|
|
|
|
} else if (this.opener.FCKeditor) {
|
|
window.opener.SetUrl(fileURL) ;
|
|
window.close() ;
|
|
|
|
} else if (this.opener.TinyMCE) {
|
|
var win = tinyMCEPopup.getWindowArg('window');
|
|
win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = fileURL;
|
|
if (win.getImageData) win.getImageData();
|
|
if (typeof(win.ImageDialog) != "undefined") {
|
|
if (win.ImageDialog.getImageData)
|
|
win.ImageDialog.getImageData();
|
|
if (win.ImageDialog.showPreviewImage)
|
|
win.ImageDialog.showPreviewImage(fileURL);
|
|
}
|
|
tinyMCEPopup.close();
|
|
|
|
} else if (this.opener.callBack) {
|
|
|
|
if (window.opener && window.opener.KCFinder) {
|
|
this.opener.callBack(fileURL);
|
|
window.close();
|
|
}
|
|
|
|
if (window.parent && window.parent.KCFinder) {
|
|
var button = $('#toolbar a[href="kcact:maximize"]');
|
|
if (button.hasClass('selected'))
|
|
this.maximize(button);
|
|
this.opener.callBack(fileURL);
|
|
}
|
|
|
|
} else if (this.opener.callBackMultiple) {
|
|
if (window.opener && window.opener.KCFinder) {
|
|
this.opener.callBackMultiple([fileURL]);
|
|
window.close();
|
|
}
|
|
|
|
if (window.parent && window.parent.KCFinder) {
|
|
var button = $('#toolbar a[href="kcact:maximize"]');
|
|
if (button.hasClass('selected'))
|
|
this.maximize(button);
|
|
this.opener.callBackMultiple([fileURL]);
|
|
}
|
|
|
|
} else { // This condition added to handle image select in Email Templates of Email Campaign - sudheer
|
|
var imageURL = fileURL.replace(/\s/g,"%20");
|
|
window.opener.CKEDITOR.tools.callFunction(0, imageURL,'');
|
|
window.close();
|
|
}
|
|
};
|
|
|
|
browser.returnFiles = function(files) {
|
|
if (this.opener.callBackMultiple && files.length) {
|
|
var rfiles = [];
|
|
$.each(files, function(i, file) {
|
|
rfiles[i] = browser.uploadURL + '/' + browser.dir + '/' + $(file).data('name');
|
|
rfiles[i] = _.escapeDirs(rfiles[i]);
|
|
});
|
|
this.opener.callBackMultiple(rfiles);
|
|
if (window.opener) window.close()
|
|
}
|
|
};
|
|
|
|
browser.returnThumbnails = function(files) {
|
|
if (this.opener.callBackMultiple) {
|
|
var rfiles = [];
|
|
var j = 0;
|
|
$.each(files, function(i, file) {
|
|
if ($(file).data('thumb')) {
|
|
rfiles[j] = browser.thumbsURL + '/' + browser.dir + '/' + $(file).data('name');
|
|
rfiles[j] = _.escapeDirs(rfiles[j++]);
|
|
}
|
|
});
|
|
this.opener.callBackMultiple(rfiles);
|
|
if (window.opener) window.close()
|
|
}
|
|
};
|
|
|
|
browser.menuFile = function(file, e) {
|
|
var data = file.data();
|
|
var path = this.dir + '/' + data.name;
|
|
var files = $('.file.selected').get();
|
|
var html = '';
|
|
|
|
if (file.hasClass('selected') && files.length && (files.length > 1)) {
|
|
var thumb = false;
|
|
var notWritable = 0;
|
|
var cdata;
|
|
$.each(files, function(i, cfile) {
|
|
cdata = $(cfile).data();
|
|
if (cdata.thumb) thumb = true;
|
|
if (!data.writable) notWritable++;
|
|
});
|
|
if (this.opener.callBackMultiple) {
|
|
html += '<a href="kcact:pick">' + this.label("Select") + '</a>';
|
|
if (thumb) html +=
|
|
'<a href="kcact:pick_thumb">' + this.label("Select Thumbnails") + '</a>';
|
|
html += '<div class="delimiter"></div>';
|
|
}
|
|
if (this.support.zip) html+=
|
|
'<a href="kcact:download">' + this.label("Download") + '</a>';
|
|
|
|
if (!this.readonly) html +=
|
|
'<div class="delimiter"></div>' +
|
|
'<a href="kcact:clpbrdadd">' + this.label("Add to Clipboard") + '</a>' +
|
|
'<div class="delimiter"></div>' +
|
|
'<a href="kcact:rm"' + ((notWritable == files.length) ? ' class="denied"' : '') + '>' + this.label("Delete") + '</a>';
|
|
|
|
if (html.length) {
|
|
html = '<div class="menu">' + html + '</div>';
|
|
$('#dialog').html(html);
|
|
this.showMenu(e);
|
|
} else
|
|
return;
|
|
|
|
$('.menu a[href="kcact:pick"]').click(function() {
|
|
browser.returnFiles(files);
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:pick_thumb"]').click(function() {
|
|
browser.returnThumbnails(files);
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:download"]').click(function() {
|
|
browser.hideDialog();
|
|
var pfiles = [];
|
|
$.each(files, function(i, cfile) {
|
|
pfiles[i] = $(cfile).data('name');
|
|
});
|
|
browser.post(browser.baseGetData('downloadSelected'), {dir:browser.dir, files:pfiles});
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:clpbrdadd"]').click(function() {
|
|
browser.hideDialog();
|
|
var msg = '';
|
|
$.each(files, function(i, cfile) {
|
|
var cdata = $(cfile).data();
|
|
var failed = false;
|
|
for (i = 0; i < browser.clipboard.length; i++)
|
|
if ((browser.clipboard[i].name == cdata.name) &&
|
|
(browser.clipboard[i].dir == browser.dir)
|
|
) {
|
|
failed = true
|
|
msg += cdata.name + ": " + browser.label("This file is already added to the Clipboard.") + "\n";
|
|
break;
|
|
}
|
|
|
|
if (!failed) {
|
|
cdata.dir = browser.dir;
|
|
browser.clipboard[browser.clipboard.length] = cdata;
|
|
}
|
|
});
|
|
browser.initClipboard();
|
|
if (msg.length) alert(msg.substr(0, msg.length - 1));
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:rm"]').click(function() {
|
|
if ($(this).hasClass('denied')) return false;
|
|
browser.hideDialog();
|
|
var failed = 0;
|
|
var dfiles = [];
|
|
$.each(files, function(i, cfile) {
|
|
var cdata = $(cfile).data();
|
|
if (!cdata.writable)
|
|
failed++;
|
|
else
|
|
dfiles[dfiles.length] = browser.dir + "/" + cdata.name;
|
|
});
|
|
if (failed == files.length) {
|
|
alert(browser.label("The selected files are not removable."))
|
|
return false;
|
|
}
|
|
if (failed) {
|
|
if (!confirm(browser.label("{count} selected files are not removable. Do you want to delete the rest?", {count:failed})))
|
|
return false;
|
|
} else if (!confirm(browser.label("Are you sure you want to delete all selected files?")))
|
|
return false;
|
|
|
|
browser.fadeFiles();
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: browser.baseGetData('rm_cbd'),
|
|
data: {files:dfiles},
|
|
async: false,
|
|
success: function(xml) {
|
|
browser.errors(xml);
|
|
browser.refresh();
|
|
},
|
|
error: function(request, error) {
|
|
$('#files > div').css('opacity', '');
|
|
$('#files > div').css('filter', '');
|
|
alert(browser.label("Unknown error."));
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
} else {
|
|
html += '<div class="menu">';
|
|
$('.file').removeClass('selected');
|
|
file.addClass('selected');
|
|
$('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')');
|
|
if (this.opener.callBack || this.opener.callBackMultiple) {
|
|
html += '<a href="kcact:pick">' + this.label("Select") + '</a>';
|
|
if (data.thumb) html +=
|
|
'<a href="kcact:pick_thumb">' + this.label("Select Thumbnail") + '</a>';
|
|
html += '<div class="delimiter"></div>';
|
|
}
|
|
|
|
if (data.thumb)
|
|
html +='<a href="kcact:view">' + this.label("View") + '</a>';
|
|
|
|
html +=
|
|
'<a href="kcact:download">' + this.label("Download") + '</a>';
|
|
|
|
if (!this.readonly) html +=
|
|
'<div class="delimiter"></div>' +
|
|
'<a href="kcact:clpbrdadd">' + this.label("Add to Clipboard") + '</a>' +
|
|
'<div class="delimiter"></div>' +
|
|
'<a href="kcact:mv"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Rename...") + '</a>' +
|
|
'<a href="kcact:rm"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Delete") + '</a>';
|
|
html += '</div>';
|
|
|
|
$('#dialog').html(html);
|
|
this.showMenu(e);
|
|
|
|
$('.menu a[href="kcact:pick"]').click(function() {
|
|
browser.returnFile(file);
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:pick_thumb"]').click(function() {
|
|
var path = browser.thumbsURL + "/" + browser.dir + '/' + data.name;
|
|
browser.returnFile(path);
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:view"]').click(function() {
|
|
browser.hideDialog();
|
|
$('#loading').html(browser.label("Loading image..."));
|
|
$('#loading').css('display', 'inline');
|
|
var img = new Image();
|
|
var url = _.escapeDirs(browser.uploadURL + '/' + path);
|
|
img.src = url;
|
|
img.onload = function() {
|
|
$('#loading').css('display', 'none');
|
|
$('#dialog').html('<img />');
|
|
$('#dialog img').attr('src', url);
|
|
var o_w = $('#dialog').outerWidth();
|
|
var o_h = $('#dialog').outerHeight();
|
|
var f_w = $(window).width() - 30;
|
|
var f_h = $(window).height() - 30;
|
|
if ((o_w > f_w) || (o_h > f_h)) {
|
|
if ((f_w / f_h) > (o_w / o_h))
|
|
f_w = parseInt((o_w * f_h) / o_h);
|
|
else if ((f_w / f_h) < (o_w / o_h))
|
|
f_h = parseInt((o_h * f_w) / o_w);
|
|
$('#dialog img').attr('width', f_w);
|
|
$('#dialog img').attr('height', f_h);
|
|
}
|
|
$('#dialog').click(function() {
|
|
browser.hideDialog();
|
|
});
|
|
browser.showDialog();
|
|
}
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:download"]').click(function() {
|
|
var html = '<form id="downloadForm" method="post" action="' + browser.baseGetData('download') + '">' +
|
|
'<input type="hidden" name="dir" />' +
|
|
'<input type="hidden" name="file" />' +
|
|
'</form>';
|
|
$('#dialog').html(html);
|
|
$('#downloadForm input').get(0).value = browser.dir;
|
|
$('#downloadForm input').get(1).value = data.name;
|
|
$('#downloadForm').submit();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:clpbrdadd"]').click(function() {
|
|
for (i = 0; i < browser.clipboard.length; i++)
|
|
if ((browser.clipboard[i].name == data.name) &&
|
|
(browser.clipboard[i].dir == browser.dir)
|
|
) {
|
|
browser.hideDialog();
|
|
alert(browser.label("This file is already added to the Clipboard."));
|
|
return false;
|
|
}
|
|
var cdata = data;
|
|
cdata.dir = browser.dir;
|
|
browser.clipboard[browser.clipboard.length] = cdata;
|
|
browser.initClipboard();
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:mv"]').click(function(e) {
|
|
if (!data.writable) return false;
|
|
browser.fileNameDialog(
|
|
e, {dir: browser.dir, file: data.name},
|
|
'newName', data.name, browser.baseGetData('rename'), {
|
|
title: "New file name:",
|
|
errEmpty: "Please enter new file name.",
|
|
errSlash: "Unallowable characters in file name.",
|
|
errDot: "File name shouldn't begins with '.'"
|
|
},
|
|
function() {
|
|
browser.refresh();
|
|
}
|
|
);
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:rm"]').click(function() {
|
|
if (!data.writable) return false;
|
|
browser.hideDialog();
|
|
if (confirm(browser.label(
|
|
"Are you sure you want to delete this file?"
|
|
)))
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: browser.baseGetData('delete'),
|
|
data: {dir:browser.dir, file:data.name},
|
|
async: false,
|
|
success: function(xml) {
|
|
browser.clearClipboard();
|
|
if (browser.errors(xml)) return;
|
|
browser.refresh();
|
|
},
|
|
error: function(request, error) {
|
|
alert(browser.label("Unknown error."));
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
}
|
|
};
|