nextcloud/apps/files/js/fileactions.js

192 lines
6.2 KiB
JavaScript
Raw Normal View History

2012-09-04 23:27:04 +04:00
var FileActions={
2011-06-04 22:16:44 +04:00
actions:{},
defaults:{},
icons:{},
currentFile:null,
2012-07-26 00:33:08 +04:00
register:function(mime,name,permissions,icon,action){
2011-06-04 22:16:44 +04:00
if(!FileActions.actions[mime]){
FileActions.actions[mime]={};
}
2012-07-26 00:33:08 +04:00
if (!FileActions.actions[mime][name]) {
FileActions.actions[mime][name] = {};
}
FileActions.actions[mime][name]['action'] = action;
FileActions.actions[mime][name]['permissions'] = permissions;
FileActions.icons[name]=icon;
2011-06-04 22:16:44 +04:00
},
setDefault:function(mime,name){
FileActions.defaults[mime]=name;
2011-06-04 22:16:44 +04:00
},
2012-07-26 00:33:08 +04:00
get:function(mime,type,permissions){
2011-06-04 22:16:44 +04:00
var actions={};
if(FileActions.actions.all){
2012-09-04 23:27:04 +04:00
actions=$.extend( actions, FileActions.actions.all );
2011-06-04 22:16:44 +04:00
}
if(mime){
if(FileActions.actions[mime]){
2012-09-04 23:27:04 +04:00
actions=$.extend( actions, FileActions.actions[mime] );
2011-06-04 22:16:44 +04:00
}
var mimePart=mime.substr(0,mime.indexOf('/'));
if(FileActions.actions[mimePart]){
2012-09-04 23:27:04 +04:00
actions=$.extend( actions, FileActions.actions[mimePart] );
2011-06-04 22:16:44 +04:00
}
}
if(type){//type is 'dir' or 'file'
if(FileActions.actions[type]){
2012-09-04 23:27:04 +04:00
actions=$.extend( actions, FileActions.actions[type] );
2011-06-04 22:16:44 +04:00
}
}
2012-07-26 00:33:08 +04:00
var filteredActions = {};
$.each(actions, function(name, action) {
if (action.permissions & permissions) {
filteredActions[name] = action.action;
}
});
return filteredActions;
2011-06-04 22:16:44 +04:00
},
2012-07-26 00:33:08 +04:00
getDefault:function(mime,type,permissions){
2011-06-04 22:16:44 +04:00
if(mime){
var mimePart=mime.substr(0,mime.indexOf('/'));
}
var name=false;
2011-06-04 22:16:44 +04:00
if(mime && FileActions.defaults[mime]){
name=FileActions.defaults[mime];
2011-06-04 22:16:44 +04:00
}else if(mime && FileActions.defaults[mimePart]){
name=FileActions.defaults[mimePart];
2011-06-04 22:16:44 +04:00
}else if(type && FileActions.defaults[type]){
name=FileActions.defaults[type];
2011-06-04 22:16:44 +04:00
}else{
name=FileActions.defaults.all;
2011-06-04 22:16:44 +04:00
}
2012-07-26 00:33:08 +04:00
var actions=this.get(mime,type,permissions);
return actions[name];
2011-06-04 22:16:44 +04:00
},
2012-07-26 00:33:08 +04:00
display:function(parent){
FileActions.currentFile=parent;
$('#fileList span.fileactions, #fileList td.date a.action').remove();
2012-07-26 00:33:08 +04:00
var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
2011-07-29 04:26:20 +04:00
var file=FileActions.getCurrentFile();
if($('tr').filterAttr('data-file',file).data('renaming')){
2011-07-29 04:26:20 +04:00
return;
}
2012-04-15 15:25:31 +04:00
parent.children('a.name').append('<span class="fileactions" />');
2012-07-26 00:33:08 +04:00
var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
2011-06-04 22:16:44 +04:00
for(name in actions){
// NOTE: Temporary fix to prevent rename action in root of Shared directory
if (name == 'Rename' && $('#dir').val() == '/Shared') {
continue;
}
2011-07-29 04:02:17 +04:00
if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){
var img=FileActions.icons[name];
if(img.call){
2011-08-12 01:23:59 +04:00
img=img(file);
}
2012-04-15 15:28:11 +04:00
var html='<a href="#" class="action" style="display:none">';
if(img) { html+='<img src="'+img+'"/> '; }
html += t('files', name) +'</a>';
var element=$(html);
element.data('action',name);
element.click(function(event){
event.stopPropagation();
event.preventDefault();
var action=actions[$(this).data('action')];
var currentFile=FileActions.getCurrentFile();
FileActions.hide();
action(currentFile);
});
2012-01-15 03:11:26 +04:00
element.hide();
2012-04-15 15:25:31 +04:00
parent.find('a.name>span.fileactions').append(element);
}
2011-06-04 22:16:44 +04:00
}
2012-07-26 00:33:08 +04:00
if(actions['Delete']){
var img=FileActions.icons['Delete'];
if(img.call){
img=img(file);
}
// NOTE: Temporary fix to allow unsharing of files in root of Shared folder
if ($('#dir').val() == '/Shared') {
var html = '<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" style="display:none" />';
} else {
var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
}
2011-06-04 22:16:44 +04:00
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
}
element.data('action','Delete');
element.click(function(event){
2011-07-22 02:18:41 +04:00
event.stopPropagation();
2011-06-04 22:16:44 +04:00
event.preventDefault();
var action=actions[$(this).data('action')];
2011-07-22 02:18:41 +04:00
var currentFile=FileActions.getCurrentFile();
FileActions.hide();
action(currentFile);
2011-06-04 22:16:44 +04:00
});
2012-01-15 03:11:26 +04:00
element.hide();
parent.parent().children().last().append(element);
2011-06-04 22:16:44 +04:00
}
$('#fileList .action').css('-o-transition-property','none');//temporarly disable
2012-01-15 03:11:26 +04:00
$('#fileList .action').fadeIn(200,function(){
$('#fileList .action').css('-o-transition-property','opacity');
});
2011-06-04 22:16:44 +04:00
return false;
},
2011-07-22 02:18:41 +04:00
hide:function(){
$('#fileList span.fileactions, #fileList td.date a.action').fadeOut(200,function(){
2011-08-13 00:10:43 +04:00
$(this).remove();
});
2011-07-22 02:18:41 +04:00
},
2011-06-04 22:16:44 +04:00
getCurrentFile:function(){
return FileActions.currentFile.parent().attr('data-file');
2011-06-04 22:16:44 +04:00
},
getCurrentMimeType:function(){
return FileActions.currentFile.parent().attr('data-mime');
2011-06-04 22:16:44 +04:00
},
getCurrentType:function(){
return FileActions.currentFile.parent().attr('data-type');
2012-07-26 00:33:08 +04:00
},
getCurrentPermissions:function() {
return FileActions.currentFile.parent().data('permissions');
2011-06-04 22:16:44 +04:00
}
2012-09-06 00:17:33 +04:00
};
2011-06-04 22:16:44 +04:00
$(document).ready(function(){
if($('#allowZipDownload').val() == 1){
var downloadScope = 'all';
} else {
var downloadScope = 'file';
}
2012-09-06 00:17:33 +04:00
FileActions.register(downloadScope,'Download', OC.PERMISSION_READ, function(){return OC.imagePath('core','actions/download');},function(filename){
window.location=OC.filePath('files', 'ajax', 'download.php') + '&files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val());
});
2011-06-04 22:16:44 +04:00
});
2012-09-06 00:17:33 +04:00
FileActions.register('all','Delete', OC.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete');},function(filename){
if(Files.cancelUpload(filename)) {
if(filename.substr){
filename=[filename];
}
$.each(filename,function(index,file){
var filename = $('tr').filterAttr('data-file',file);
filename.hide();
filename.find('input[type="checkbox"]').removeAttr('checked');
filename.removeClass('selected');
});
procesSelection();
}else{
FileList.do_delete(filename);
}
$('.tipsy').remove();
2011-06-04 22:16:44 +04:00
});
2012-09-21 14:30:13 +04:00
// t('files', 'Rename')
2012-09-06 00:17:33 +04:00
FileActions.register('all','Rename', OC.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename');},function(filename){
FileList.rename(filename);
});
2011-06-04 22:16:44 +04:00
FileActions.register('dir','Open', OC.PERMISSION_READ, '', function(filename){
window.location=OC.linkTo('files', 'index.php') + '&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
2011-06-04 22:16:44 +04:00
});
FileActions.setDefault('dir','Open');