aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files/js')
-rw-r--r--apps/files/js/filelist.js2
-rw-r--r--apps/files/js/files.js31
-rw-r--r--apps/files/js/keyboardshortcuts.js165
3 files changed, 175 insertions, 23 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 5674206632b..9f0bafafbdf 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -89,7 +89,6 @@ var FileList={
$('tr').filterAttr('data-file',name).remove();
if($('tr[data-file]').length==0){
$('#emptyfolder').show();
- $('.file_upload_filename').addClass('highlight');
}
},
insertElement:function(name,type,element){
@@ -118,7 +117,6 @@ var FileList={
$('#fileList').append(element);
}
$('#emptyfolder').hide();
- $('.file_upload_filename').removeClass('highlight');
},
loadingDone:function(name, id){
var mime, tr=$('tr').filterAttr('data-file',name);
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index dbd9a647151..ece0b29ae16 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -40,15 +40,12 @@ Files={
}
};
$(document).ready(function() {
+ Files.bindKeyboardShortcuts(document, jQuery);
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
});
- if($('tr[data-file]').length==0){
- $('.file_upload_filename').addClass('highlight');
- }
-
$('#file_action_panel').attr('activeAction', false);
//drag/drop of files
@@ -69,8 +66,8 @@ $(document).ready(function() {
}
// Triggers invisible file input
- $('.file_upload_button_wrapper').live('click', function() {
- $(this).parent().children('.file_upload_start').trigger('click');
+ $('#upload a').live('click', function() {
+ $(this).parent().children('#file_upload_start').trigger('click');
return false;
});
@@ -171,12 +168,6 @@ $(document).ready(function() {
procesSelection();
});
- $('#file_newfolder_name').click(function(){
- if($('#file_newfolder_name').val() == 'New Folder'){
- $('#file_newfolder_name').val('');
- }
- });
-
$('.download').click('click',function(event) {
var files=getSelectedFiles('name').join(';');
var dir=$('#dir').val()||'/';
@@ -204,9 +195,9 @@ $(document).ready(function() {
e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone
});
- if ( document.getElementById("data-upload-form") ) {
+ if ( document.getElementById('data-upload-form') ) {
$(function() {
- $('.file_upload_start').fileupload({
+ $('#file_upload_start').fileupload({
dropZone: $('#content'), // restrict dropZone to content div
add: function(e, data) {
var files = data.files;
@@ -221,7 +212,7 @@ $(document).ready(function() {
totalSize+=files[i].size;
if(FileList.deleteFiles && FileList.deleteFiles.indexOf(files[i].name)!=-1){//finish delete if we are uploading a deleted file
FileList.finishDelete(function(){
- $('.file_upload_start').change();
+ $('#file_upload_start').change();
});
return;
}
@@ -295,7 +286,7 @@ $(document).ready(function() {
var dropTarget = $(e.originalEvent.target).closest('tr');
if(dropTarget && dropTarget.attr('data-type') === 'dir') { // drag&drop upload to folder
var dirName = dropTarget.attr('data-file')
- var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i],
+ var jqXHR = $('#file_upload_start').fileupload('send', {files: files[i],
formData: function(form) {
var formArray = form.serializeArray();
// array index 0 contains the max files size
@@ -356,7 +347,7 @@ $(document).ready(function() {
}
uploadingFiles[dirName][fileName] = jqXHR;
} else {
- var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i]})
+ var jqXHR = $('#file_upload_start').fileupload('send', {files: files[i]})
.success(function(result, textStatus, jqXHR) {
var response;
response=jQuery.parseJSON(result);
@@ -453,7 +444,7 @@ $(document).ready(function() {
//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
if(navigator.userAgent.search(/konqueror/i)==-1){
- $('.file_upload_start').attr('multiple','multiple')
+ $('#file_upload_start').attr('multiple','multiple')
}
//if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
@@ -481,7 +472,6 @@ $(document).ready(function() {
$(window).click(function(){
$('#new>ul').hide();
$('#new').removeClass('active');
- $('button.file_upload_filename').removeClass('active');
$('#new li').each(function(i,element){
if($(element).children('p').length==0){
$(element).children('input').remove();
@@ -495,7 +485,6 @@ $(document).ready(function() {
$('#new>a').click(function(){
$('#new>ul').toggle();
$('#new').toggleClass('active');
- $('button.file_upload_filename').toggleClass('active');
});
$('#new li').click(function(){
if($(this).children('p').length==0){
@@ -730,7 +719,7 @@ function updateBreadcrumb(breadcrumbHtml) {
//options for file drag/dropp
var dragOptions={
- distance: 20, revert: 'invalid', opacity: 0.7,
+ distance: 20, revert: 'invalid', opacity: 0.7, helper: 'clone',
stop: function(event, ui) {
$('#fileList tr td.filename').addClass('ui-draggable');
}
diff --git a/apps/files/js/keyboardshortcuts.js b/apps/files/js/keyboardshortcuts.js
new file mode 100644
index 00000000000..562755f55b7
--- /dev/null
+++ b/apps/files/js/keyboardshortcuts.js
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2012 Erik Sargent <esthepiking at gmail dot com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ */
+/*****************************
+ * Keyboard shortcuts for Files app
+ * ctrl/cmd+n: new folder
+ * ctrl/cmd+shift+n: new file
+ * esc (while new file context menu is open): close menu
+ * up/down: select file/folder
+ * enter: open file/folder
+ * delete/backspace: delete file/folder
+ *****************************/
+var Files = Files || {};
+(function(Files) {
+ var keys = [];
+ var keyCodes = {
+ shift: 16,
+ n: 78,
+ cmdFirefox: 224,
+ cmdOpera: 17,
+ leftCmdWebKit: 91,
+ rightCmdWebKit: 93,
+ ctrl: 17,
+ esc: 27,
+ downArrow: 40,
+ upArrow: 38,
+ enter: 13,
+ del: 46
+ };
+
+ function removeA(arr) {
+ var what, a = arguments,
+ L = a.length,
+ ax;
+ while (L > 1 && arr.length) {
+ what = a[--L];
+ while ((ax = arr.indexOf(what)) !== -1) {
+ arr.splice(ax, 1);
+ }
+ }
+ return arr;
+ }
+
+ function newFile() {
+ $("#new").addClass("active");
+ $(".popup.popupTop").toggle(true);
+ $('#new li[data-type="file"]').trigger('click');
+ removeA(keys, keyCodes.n);
+ }
+
+ function newFolder() {
+ $("#new").addClass("active");
+ $(".popup.popupTop").toggle(true);
+ $('#new li[data-type="folder"]').trigger('click');
+ removeA(keys, keyCodes.n);
+ }
+
+ function esc() {
+ $("#controls").trigger('click');
+ }
+
+ function down() {
+ var select = -1;
+ $("#fileList tr").each(function(index) {
+ if ($(this).hasClass("mouseOver")) {
+ select = index + 1;
+ $(this).removeClass("mouseOver");
+ }
+ });
+ if (select === -1) {
+ $("#fileList tr:first").addClass("mouseOver");
+ } else {
+ $("#fileList tr").each(function(index) {
+ if (index === select) {
+ $(this).addClass("mouseOver");
+ }
+ });
+ }
+ }
+
+ function up() {
+ var select = -1;
+ $("#fileList tr").each(function(index) {
+ if ($(this).hasClass("mouseOver")) {
+ select = index - 1;
+ $(this).removeClass("mouseOver");
+ }
+ });
+ if (select === -1) {
+ $("#fileList tr:last").addClass("mouseOver");
+ } else {
+ $("#fileList tr").each(function(index) {
+ if (index === select) {
+ $(this).addClass("mouseOver");
+ }
+ });
+ }
+ }
+
+ function enter() {
+ $("#fileList tr").each(function(index) {
+ if ($(this).hasClass("mouseOver")) {
+ $(this).removeClass("mouseOver");
+ $(this).find("span.nametext").trigger('click');
+ }
+ });
+ }
+
+ function del() {
+ $("#fileList tr").each(function(index) {
+ if ($(this).hasClass("mouseOver")) {
+ $(this).removeClass("mouseOver");
+ $(this).find("a.action.delete").trigger('click');
+ }
+ });
+ }
+
+ function rename() {
+ $("#fileList tr").each(function(index) {
+ if ($(this).hasClass("mouseOver")) {
+ $(this).removeClass("mouseOver");
+ $(this).find("a[data-action='Rename']").trigger('click');
+ }
+ });
+ }
+ Files.bindKeyboardShortcuts = function(document, $) {
+ $(document).keydown(function(event) { //check for modifier keys
+ var preventDefault = false;
+ if ($.inArray(event.keyCode, keys) === -1) keys.push(event.keyCode);
+ if (
+ $.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1 || event.ctrlKey)) {
+ preventDefault = true; //new file/folder prevent browser from responding
+ }
+ if (preventDefault) {
+ event.preventDefault(); //Prevent web browser from responding
+ event.stopPropagation();
+ return false;
+ }
+ });
+ $(document).keyup(function(event) {
+ // do your event.keyCode checks in here
+ if (
+ $.inArray(keyCodes.n, keys) !== -1 && ($.inArray(keyCodes.cmdFirefox, keys) !== -1 || $.inArray(keyCodes.cmdOpera, keys) !== -1 || $.inArray(keyCodes.leftCmdWebKit, keys) !== -1 || $.inArray(keyCodes.rightCmdWebKit, keys) !== -1 || $.inArray(keyCodes.ctrl, keys) !== -1 || event.ctrlKey)) {
+ if ($.inArray(keyCodes.shift, keys) !== -1) { //16=shift, New File
+ newFile();
+ } else { //New Folder
+ newFolder();
+ }
+ } else if ($("#new").hasClass("active") && $.inArray(keyCodes.esc, keys) !== -1) { //close new window
+ esc();
+ } else if ($.inArray(keyCodes.downArrow, keys) !== -1) { //select file
+ down();
+ } else if ($.inArray(keyCodes.upArrow, keys) !== -1) { //select file
+ up();
+ } else if (!$("#new").hasClass("active") && $.inArray(keyCodes.enter, keys) !== -1) { //open file
+ enter();
+ } else if (!$("#new").hasClass("active") && $.inArray(keyCodes.del, keys) !== -1) { //delete file
+ del();
+ }
+ removeA(keys, event.keyCode);
+ });
+ };
+})(Files); \ No newline at end of file