diff options
Diffstat (limited to 'files/js')
-rw-r--r-- | files/js/fileactions.js | 100 | ||||
-rw-r--r-- | files/js/files.js | 44 |
2 files changed, 116 insertions, 28 deletions
diff --git a/files/js/fileactions.js b/files/js/fileactions.js new file mode 100644 index 00000000000..bb02b639c57 --- /dev/null +++ b/files/js/fileactions.js @@ -0,0 +1,100 @@ +FileActions={ + actions:{}, + defaults:{}, + register:function(mime,name,action){ + if(!FileActions.actions[mime]){ + FileActions.actions[mime]={}; + } + FileActions.actions[mime][name]=action; + }, + setDefault:function(mime,name){ + FileActions.defaults[mime]=FileActions.actions[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('/')); + } + if(mime && FileActions.defaults[mime]){ + return FileActions.defaults[mime]; + }else if(mime && FileActions.defaults[mimePart]){ + return FileActions.defaults[mimePart]; + }else if(type && FileActions.defaults[type]){ + return FileActions.defaults[type]; + }else{ + return FileActions.defaults.all; + } + }, + display:function(parent){ + $('#file_menu>ul').empty(); + parent.append($('#file_menu')); + var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType()); + for(name in actions){ + var html='<li><a href="" alt="'+name+'">'+name+'</a></li>'; + var element=$(html); + element.data('action',name); + element.click(function(){ + event.preventDefault(); + actions[$(this).data('action')](FileActions.getCurrentFile()); + }); + $('#file_menu>ul').append(element); + } + $('#file_menu').slideToggle(250); + return false; + }, + getCurrentFile:function(){ + return $('#file_menu').parents('tr:first').attr('data-file'); + }, + getCurrentMimeType:function(){ + return $('#file_menu').parents('tr:first').attr('data-mime'); + }, + getCurrentType:function(){ + return $('#file_menu').parents('tr:first').attr('data-type'); + } +} + +FileActions.register('all','Download',function(filename){ + window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val(); + $('#file_menu').slideToggle(250); +}); + +FileActions.register('all','Delete',function(filename){ + $.ajax({ + url: 'ajax/delete.php', + data: "dir="+$('#dir').val()+"&file="+filename, + complete: function(data){ + boolOperationFinished(data, function(){ + FileList.remove(filename); + }); + } + }); +}); + +FileActions.setDefault('all','Download'); + +FileActions.register('dir','Open',function(filename){ + window.location='index.php?dir='+$('#dir').val()+'/'+filename; + $('#file_menu').slideToggle(250); +}); + +FileActions.setDefault('dir','Open');
\ No newline at end of file diff --git a/files/js/files.js b/files/js/files.js index 2c595ee4457..c758432a4f6 100644 --- a/files/js/files.js +++ b/files/js/files.js @@ -15,11 +15,22 @@ $(document).ready(function() { // Sets the file-action buttons behaviour : $('td.fileaction a').live('click',function() { - $(this).parent().append($('#file_menu')); - $('#file_menu').slideToggle(250); - return false; + event.preventDefault(); + FileActions.display($(this).parent()); }); - + + // Sets the file link behaviour : + $('td.filename a').live('click',function() { + event.preventDefault(); + var filename=$(this).text(); + var mime=$(this).parent().parent().attr('data-mime'); + var type=$(this).parent().parent().attr('data-type'); + var action=FileActions.getDefault(mime,type); + if(action){ + action(filename); + } + }); + // Sets the select_all checkbox behaviour : $('#select_all').click(function() { if($(this).attr('checked')) @@ -40,33 +51,10 @@ $(document).ready(function() { } }); - // Download current file - $('#download_single_file').click(function() { - filename = $('#file_menu').parents('tr:first').find('.filename:first').children('a:first').text(); - window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val(); - $('#file_menu').slideToggle(250); - return false; - }); - - // Delete current file - $('#delete_single_file').click(function() { - filename = $('#file_menu').parents('tr:first').attr('data-file'); - $.ajax({ - url: 'ajax/delete.php', - data: "dir="+$('#dir').val()+"&file="+filename, - complete: function(data){ - boolOperationFinished(data, function(){ - FileList.remove(filename); - }); - } - }); - return false; - }); - $('#file_newfolder_submit').click(function() { $.ajax({ url: 'ajax/newfolder.php', - data: "dir="+$('#dir').val()+"&foldername="+$('#file_newfolder_name').val(), + data: "dir="+$('#dir').val()+"&foldername="+$('#file_newfolder_name').val(), complete: function(data){boolOperationFinished(data, function(){ var date=formatDate(new Date()); FileList.addDir($('#file_newfolder_name').val(),'0 B',date) |