diff options
Diffstat (limited to 'apps/files/js/fileactions.js')
-rw-r--r-- | apps/files/js/fileactions.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js new file mode 100644 index 00000000000..80e918a455c --- /dev/null +++ b/apps/files/js/fileactions.js @@ -0,0 +1,154 @@ +FileActions={ + actions:{}, + defaults:{}, + icons:{}, + currentFile:null, + register:function(mime,name,icon,action){ + if(!FileActions.actions[mime]){ + FileActions.actions[mime]={}; + } + FileActions.actions[mime][name]=action; + FileActions.icons[name]=icon; + }, + setDefault:function(mime,name){ + FileActions.defaults[mime]=name; + }, + 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; + if(mime && FileActions.defaults[mime]){ + name=FileActions.defaults[mime]; + }else if(mime && FileActions.defaults[mimePart]){ + name=FileActions.defaults[mimePart]; + }else if(type && FileActions.defaults[type]){ + name=FileActions.defaults[type]; + }else{ + name=FileActions.defaults.all; + } + var actions=this.get(mime,type); + return actions[name]; + }, + display:function(parent){ + FileActions.currentFile=parent; + $('#fileList span.fileactions, #fileList td.date a.action').remove(); + var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType()); + var file=FileActions.getCurrentFile(); + if($('tr').filterAttr('data-file',file).data('renaming')){ + return; + } + parent.children('a.name').append('<span class="fileactions" />'); + var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType()); + for(name in actions){ + if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){ + var img=FileActions.icons[name]; + if(img.call){ + img=img(file); + } + var html='<a href="#" class="action" style="display:none">'; + if(img) { html+='<img src="'+img+'"/> '; } + html += 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); + }); + element.hide(); + parent.find('a.name>span.fileactions').append(element); + } + } + if(actions['Delete']){ + var img=FileActions.icons['Delete']; + if(img.call){ + img=img(file); + } + var html='<a href="#" original-title="Delete" class="action delete" style="display:none" />'; + var element=$(html); + if(img){ + element.append($('<img src="'+img+'"/>')); + } + element.data('action','Delete'); + element.click(function(event){ + event.stopPropagation(); + event.preventDefault(); + var action=actions[$(this).data('action')]; + var currentFile=FileActions.getCurrentFile(); + FileActions.hide(); + action(currentFile); + }); + element.hide(); + parent.parent().children().last().append(element); + } + $('#fileList .action').css('-o-transition-property','none');//temporarly disable + $('#fileList .action').fadeIn(200,function(){ + $('#fileList .action').css('-o-transition-property','opacity'); + }); + return false; + }, + hide:function(){ + $('#fileList span.fileactions, #fileList td.date a.action').fadeOut(200,function(){ + $(this).remove(); + }); + }, + getCurrentFile:function(){ + return FileActions.currentFile.parent().attr('data-file'); + }, + getCurrentMimeType:function(){ + return FileActions.currentFile.parent().attr('data-mime'); + }, + getCurrentType:function(){ + return FileActions.currentFile.parent().attr('data-type'); + } +} + +$(document).ready(function(){ + if($('#allowZipDownload').val() == 1){ + var downloadScope = 'all'; + } else { + var downloadScope = 'file'; + } + FileActions.register(downloadScope,'Download',function(){return OC.imagePath('core','actions/download')},function(filename){ + window.location='ajax/download.php?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val()); + }); +}); + +FileActions.register('all','Delete',function(){return OC.imagePath('core','actions/delete')},function(filename){ + FileList.do_delete(filename); +}); + +FileActions.register('all','Rename',function(){return OC.imagePath('core','actions/rename')},function(filename){ + FileList.rename(filename); +}); + +FileActions.register('dir','Open','',function(filename){ + window.location='index.php?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename); +}); + +FileActions.setDefault('dir','Open'); |