diff options
Diffstat (limited to 'apps/files/js/navigation.js')
-rw-r--r-- | apps/files/js/navigation.js | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/apps/files/js/navigation.js b/apps/files/js/navigation.js index acfda3b6ce8..f8f15394ef0 100644 --- a/apps/files/js/navigation.js +++ b/apps/files/js/navigation.js @@ -62,40 +62,37 @@ * Setup UI events */ _setupEvents: function () { - this.$el.on('click', 'li a', _.bind(this._onClickItem, this)) + this.$el.on('click', 'li a', _.bind(this._onClickItem, this)); this.$el.on('click', 'li button', _.bind(this._onClickMenuButton, this)); - var trashElement=$(".nav-trashbin"); - - //this div is required to prefetch the icon, otherwise it takes a second to show up - trashElement.append("<div class='nav-icon-trashbin-starred'></div>") - trashElement.droppable({ - over: function( event, ui ) { - trashElement.addClass('dropzone-background') + var trashBinElement = $('.nav-trashbin'); + trashBinElement.droppable({ + over: function (event, ui) { + trashBinElement.addClass('dropzone-background'); }, - out: function( event, ui ) { - trashElement.removeClass('dropzone-background'); + out: function (event, ui) { + trashBinElement.removeClass('dropzone-background'); }, - activate: function( event, ui ) { - var elem=trashElement.find("a").first(); - elem.addClass('nav-icon-trashbin-starred').removeClass('nav-icon-trashbin'); + activate: function (event, ui) { + var element = trashBinElement.find('a').first(); + element.addClass('nav-icon-trashbin-starred').removeClass('nav-icon-trashbin'); }, - deactivate: function( event, ui ) { - var elem=trashElement.find("a").first(); - elem.addClass('nav-icon-trashbin').removeClass('nav-icon-trashbin-starred'); + deactivate: function (event, ui) { + var element = trashBinElement.find('a').first(); + element.addClass('nav-icon-trashbin').removeClass('nav-icon-trashbin-starred'); }, - drop: function( event, ui ) { + drop: function (event, ui) { + trashBinElement.removeClass('dropzone-background'); var $selectedFiles = $(ui.draggable); - if (ui.helper.find("tr").size()===1) { - var $tr = $selectedFiles.closest('tr'); - $selectedFiles.trigger("droppedOnTrash", $tr.attr("data-file"), $tr.attr('data-dir')); - }else{ - var item = ui.helper.find("tr"); - for(var i=0; i<item.length;i++){ - $selectedFiles.trigger("droppedOnTrash", item[i].getAttribute("data-file"), item[i].getAttribute("data-dir")); - } + // FIXME: when there are a lot of selected files the helper + // contains only a subset of them; the list of selected + // files should be gotten from the file list instead to + // ensure that all of them are removed. + var item = ui.helper.find('tr'); + for (var i = 0; i < item.length; i++) { + $selectedFiles.trigger('droppedOnTrash', item[i].getAttribute('data-file'), item[i].getAttribute('data-dir')); } } }); @@ -222,11 +219,52 @@ */ setInitialQuickaccessSettings: function () { var quickAccessKey = this.$quickAccessListKey; - var quickAccessMenu = document.getElementById(quickAccessKey) + var quickAccessMenu = document.getElementById(quickAccessKey); if (quickAccessMenu) { var list = quickAccessMenu.getElementsByTagName('li'); this.QuickSort(list, 0, list.length - 1); } + + var favoritesListElement = $(quickAccessMenu).parent(); + favoritesListElement.droppable({ + over: function (event, ui) { + favoritesListElement.addClass('dropzone-background'); + }, + out: function (event, ui) { + favoritesListElement.removeClass('dropzone-background'); + }, + activate: function (event, ui) { + var element = favoritesListElement.find('a').first(); + element.addClass('nav-icon-favorites-starred').removeClass('nav-icon-favorites'); + }, + deactivate: function (event, ui) { + var element = favoritesListElement.find('a').first(); + element.addClass('nav-icon-favorites').removeClass('nav-icon-favorites-starred'); + }, + drop: function (event, ui) { + favoritesListElement.removeClass('dropzone-background'); + + var $selectedFiles = $(ui.draggable); + + if (ui.helper.find('tr').size() === 1) { + var $tr = $selectedFiles.closest('tr'); + if ($tr.attr("data-favorite")) { + return; + } + $selectedFiles.trigger('droppedOnFavorites', $tr.attr('data-file')); + } else { + // FIXME: besides the issue described for dropping on + // the trash bin, for favoriting it is not possible to + // use the data from the helper; due to some bugs the + // tags are not always added to the selected files, and + // thus that data can not be accessed through the helper + // to prevent triggering the favorite action on an + // already favorited file (which would remove it from + // favorites). + OC.Notification.showTemporary(t('files', 'You can only favorite a single file or folder at a time')); + } + } + }); }, /** |