Sfoglia il codice sorgente

Add drop zone for favorites quick access in navigation

Signed-off-by: fnuesse <felix.nuesse@t-online.de>
fnuesse 6 anni fa
parent
commit
f13b3ab4ae
3 ha cambiato i file con 48 aggiunte e 0 eliminazioni
  1. 3 0
      apps/files/css/files.scss
  2. 4 0
      apps/files/js/filelist.js
  3. 41 0
      apps/files/js/navigation.js

+ 3 - 0
apps/files/css/files.scss

@@ -120,6 +120,9 @@
 .nav-icon-deletedshares {
 	@include icon-color('unshare', 'files', $color-black);
 }
+.nav-icon-favorites-starred {
+	@include icon-color('star-dark', 'actions', $color-yellow, 2, true);
+}
 
 #app-navigation .nav-files a.nav-icon-files {
 	width: auto;

+ 4 - 0
apps/files/js/filelist.js

@@ -360,6 +360,10 @@
 
 			this.$fileList.on('click','td.filename>a.name, td.filesize, td.date', _.bind(this._onClickFile, this));
 
+			this.$fileList.on("droppedOnFavorites", function (event, file) {
+				self.fileActions.triggerAction('Favorite', self.getModelForFile(file), self);
+			});
+
 			this.$fileList.on('droppedOnTrash', function (event, filename, directory) {
 				self.do_delete(filename, directory);
 			});

+ 41 - 0
apps/files/js/navigation.js

@@ -224,6 +224,47 @@
 				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'));
+					}
+				}
+			});
 		},
 
 		/**