فهرست منبع

[home2] Enable drag to select of documents and not just directories

This also fixes an issue with drag to move of multiple entries.
Johan Ahlen 10 سال پیش
والد
کامیت
4ba8a87
1فایلهای تغییر یافته به همراه31 افزوده شده و 32 حذف شده
  1. 31 32
      desktop/core/src/desktop/templates/file_browser.mako

+ 31 - 32
desktop/core/src/desktop/templates/file_browser.mako

@@ -434,7 +434,7 @@ from desktop.views import _ko
               <!-- /ko -->
 
               <!-- ko foreach: breadcrumbs -->
-              <li><div class="fb-drop-target" data-bind="folderDroppable: { entries: $parent.entries, disableSelect: true }"><a href="javascript:void(0);" data-bind="text: isRoot() ? '${ _('My documents') }' : (isTrash() ? '${ _('Trash') }' : definition().name), click: open"></a></div></li>
+              <li><div class="fb-drop-target" data-bind="fileDroppable: { entries: $parent.entries, disableSelect: true }"><a href="javascript:void(0);" data-bind="text: isRoot() ? '${ _('My documents') }' : (isTrash() ? '${ _('Trash') }' : definition().name), click: open"></a></div></li>
               <li class="divider">&gt;</li>
               <!-- /ko -->
               <!-- ko ifNot: isRoot -->
@@ -521,7 +521,7 @@ from desktop.views import _ko
 
       <div class="fb-list" data-bind="with: activeEntry">
         <ul data-bind="foreachVisible: { data: entries, minHeight: 39, container: '.fb-list' }">
-          <li data-bind="fileSelect: $parent.entries, folderDroppable: { entries: $parent.entries }, css: { 'fb-selected': selected }">
+          <li data-bind="fileSelect: $parent.entries, fileDroppable: { entries: $parent.entries }, css: { 'fb-selected': selected }">
             <div style="width: 100%; height: 100%" data-bind="contextMenu: { menuSelector: '.hue-context-menu', beforeOpen: beforeContextOpen }">
               <ul class="hue-context-menu">
                 <!-- ko if: isTrashed -->
@@ -565,7 +565,7 @@ from desktop.views import _ko
       }
     }(function (ko) {
 
-      ko.bindingHandlers.folderDroppable = {
+      ko.bindingHandlers.fileDroppable = {
         init: function(element, valueAccessor, allBindings, boundEntry, bindingContext) {
           var options = valueAccessor();
           var allEntries = options.entries;
@@ -577,36 +577,35 @@ from desktop.views import _ko
             alreadySelected = boundEntry.selected();
             dragToSelect = value;
           });
-          if (boundEntry.isDirectory()) {
-            $element.droppable({
-              drop: function (ev, ui) {
-                if (! dragToSelect) {
-                  boundEntry.moveHere($.grep(allEntries(), function (entry) {
-                    return entry.selected();
-                  }));
-                }
-              },
-              over: function () {
-                if (dragToSelect && ! disableSelect) {
-                  boundEntry.selected(true);
-                } else if (! dragToSelect) {
-                  $element.addClass('fb-drop-hover');
-                }
-              },
-              out: function (event, ui) {
-                if (!(alreadySelected && (event.metaKey || event.ctrlKey)) && dragToSelect && ! disableSelect) {
-                  var originTop = ui.draggable[0].getBoundingClientRect().top;
-                  var elementMiddle = element.getBoundingClientRect().top + (element.getBoundingClientRect().height / 2)
-                  if ((originTop > elementMiddle && ui.position.top > elementMiddle) ||
-                      (originTop < elementMiddle && ui.position.top < elementMiddle)) {
-                    boundEntry.selected(false);
-                  }
-                } else if (! dragToSelect) {
-                  $element.removeClass('fb-drop-hover');
+          $element.droppable({
+            drop: function (ev, ui) {
+              if (! dragToSelect && boundEntry.isDirectory()) {
+                boundEntry.moveHere($.grep(allEntries(), function (entry) {
+                  return entry.selected();
+                }));
+              }
+              $element.removeClass('fb-drop-hover');
+            },
+            over: function () {
+              if (dragToSelect && ! disableSelect) {
+                boundEntry.selected(true);
+              } else if (! dragToSelect && boundEntry.isDirectory()) {
+                $element.addClass('fb-drop-hover');
+              }
+            },
+            out: function (event, ui) {
+              if (!(alreadySelected && (event.metaKey || event.ctrlKey)) && dragToSelect && ! disableSelect) {
+                var originTop = ui.draggable[0].getBoundingClientRect().top;
+                var elementMiddle = element.getBoundingClientRect().top + (element.getBoundingClientRect().height / 2)
+                if ((originTop > elementMiddle && ui.position.top > elementMiddle) ||
+                    (originTop < elementMiddle && ui.position.top < elementMiddle)) {
+                  boundEntry.selected(false);
                 }
+              } else if (! dragToSelect && boundEntry.isDirectory()) {
+                $element.removeClass('fb-drop-hover');
               }
-            })
-          }
+            }
+          })
         }
       };
 
@@ -640,7 +639,7 @@ from desktop.views import _ko
 
               huePubSub.publish('fb.drag.to.select', dragToSelect);
 
-              if (selectedEntries.length > 0 && ! (event.metaKey || event.ctrlKey)){
+              if (dragToSelect && selectedEntries.length > 0 && ! (event.metaKey || event.ctrlKey)){
                 $.each(selectedEntries, function (idx, selectedEntry) {
                   if (selectedEntry !== boundEntry) {
                    selectedEntry.selected(false);