nextcloud/files/js/fileactions.js

139 lines
3.9 KiB
JavaScript
Raw Normal View History

2011-06-04 22:16:44 +04:00
FileActions={
actions:{},
defaults:{},
icons:{},
currentFile:null,
register:function(mime,name,icon,action){
2011-06-04 22:16:44 +04:00
if(!FileActions.actions[mime]){
FileActions.actions[mime]={};
}
FileActions.actions[mime][name]=action;
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
},
get:function(mime,type){
var actions={};
if(FileActions.actions.all){
actions=$.extend( actions, FileActions.actions.all )
}
if(mime){
if(FileActions.actions[mime]){
actions=$.extend( actions, FileActions.actions[mime] )
}
var mimePart=mime.substr(0,mime.indexOf('/'));
if(FileActions.actions[mimePart]){
actions=$.extend( actions, FileActions.actions[mimePart] )
}
}
if(type){//type is 'dir' or 'file'
if(FileActions.actions[type]){
actions=$.extend( actions, FileActions.actions[type] )
}
}
return actions;
},
getDefault:function(mime,type){
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
}
var actions=this.get(mime,type);
return actions[name];
2011-06-04 22:16:44 +04:00
},
display:function(parent){
FileActions.currentFile=parent;
2011-06-04 22:16:44 +04:00
var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
2011-06-04 22:16:44 +04:00
for(name in actions){
if(actions[name]!=defaultAction && name!='Delete'){
var img=FileActions.icons[name];
var html='<a href="#" title="'+name+'" class="file_action"/>';
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
}
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);
});
parent.children('a.name').append(element);
}
2011-06-04 22:16:44 +04:00
}
if(actions['Delete']){
var img=FileActions.icons['Delete'];
var html='<a href="#" title="Delete" class="file_action"/>';
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
});
parent.parent().children().last().append(element);
2011-06-04 22:16:44 +04:00
}
return false;
},
2011-07-22 02:18:41 +04:00
hide:function(){
$('.file_action').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');
2011-06-04 22:16:44 +04:00
}
}
FileActions.register('all','Download',OC.imagePath('core','actions/download'),function(filename){
2011-06-04 22:16:44 +04:00
window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val();
});
FileActions.register('all','Delete',OC.imagePath('core','actions/delete'),function(filename){
2011-06-04 22:16:44 +04:00
$.ajax({
url: 'ajax/delete.php',
data: "dir="+encodeURIComponent($('#dir').val())+"&file="+encodeURIComponent(filename),
2011-06-04 22:16:44 +04:00
complete: function(data){
boolOperationFinished(data, function(){
FileList.remove(filename);
});
}
});
});
FileActions.register('all','Rename',OC.imagePath('core','actions/rename'),function(filename){
FileList.rename(filename);
});
2011-06-04 22:16:44 +04:00
FileActions.setDefault('all','Download');
FileActions.register('dir','Open','',function(filename){
2011-06-04 22:16:44 +04:00
window.location='index.php?dir='+$('#dir').val()+'/'+filename;
});
2011-07-28 05:22:55 +04:00
FileActions.setDefault('dir','Open');