Ver código fonte

HUE-5560 [home] Click and drag to select should start from outside the document list too

Enrico Berti 9 anos atrás
pai
commit
6e52e52
1 arquivos alterados com 36 adições e 32 exclusões
  1. 36 32
      desktop/core/src/desktop/templates/document_browser.mako

+ 36 - 32
desktop/core/src/desktop/templates/document_browser.mako

@@ -581,7 +581,7 @@ from desktop.views import _ko
       <!-- /ko -->
     </div>
 
-    <div class="doc-browser-container">
+    <div class="doc-browser-container" data-bind="docSelect: activeEntry.entries, docDroppable: { entries: activeEntry.entries }">
       <div class="doc-browser-action-bar">
         <h4 class="doc-browser-main-header">
           <div data-bind="with: activeEntry">
@@ -811,12 +811,12 @@ from desktop.views import _ko
           var dragToSelect = false;
           var alreadySelected = false;
           huePubSub.subscribe('doc.drag.to.select', function (value) {
-            alreadySelected = boundEntry.selected();
+            alreadySelected = boundEntry && boundEntry.selected ? boundEntry.selected() : false;
             dragToSelect = value;
           });
           $element.droppable({
             drop: function (ev, ui) {
-              if (! dragToSelect && boundEntry.isDirectory()) {
+              if (! dragToSelect && boundEntry.isDirectory && boundEntry.isDirectory()) {
                 var entriesToMove = $.grep(allEntries(), function (entry) {
                   return entry.selected() && ! entry.isSharedWithMe();
                 });
@@ -828,7 +828,7 @@ from desktop.views import _ko
               $element.removeClass('doc-browser-drop-hover');
             },
             over: function () {
-              if (! dragToSelect && boundEntry.isDirectory()) {
+              if (! dragToSelect && boundEntry.isDirectory && boundEntry.isDirectory()) {
                 var movableCount = allEntries().filter(function (entry) {
                   return entry.selected() && ! entry.isSharedWithMe();
                 }).length;
@@ -838,7 +838,7 @@ from desktop.views import _ko
               }
             },
             out: function (event, ui) {
-              if (! dragToSelect && boundEntry.isDirectory()) {
+              if (! dragToSelect && boundEntry.isDirectory && boundEntry.isDirectory()) {
                 $element.removeClass('doc-browser-drop-hover');
               }
             }
@@ -861,15 +861,15 @@ from desktop.views import _ko
               allRows = $('.doc-browser-row');
               var $container = $('.doc-browser-drag-container');
 
-              var selectedEntries = $.grep(allEntries(), function (entry) {
+              var selectedEntries = allEntries ? $.grep(allEntries(), function (entry) {
                 return entry.selected();
-              });
+              }) : [];
 
-              dragToSelect = ! boundEntry.selected();
+              dragToSelect = boundEntry && boundEntry.selected ? ! boundEntry.selected() : true;
 
               huePubSub.publish('doc.browser.dragging', {
                 selectedEntries: selectedEntries,
-                originEntry: boundEntry.parent,
+                originEntry: boundEntry ? boundEntry.parent : null,
                 dragToSelect: dragToSelect
               });
 
@@ -887,8 +887,10 @@ from desktop.views import _ko
                 selectedEntries = [];
               }
 
-              boundEntry.selected(true);
-              if (dragToSelect) {
+              if (boundEntry && boundEntry.selected) {
+                boundEntry.selected(true);
+              }
+              if (dragToSelect && allEntries) {
                 allEntries().forEach(function (entry) {
                   entry.alreadySelected = entry.selected();
                 })
@@ -948,7 +950,7 @@ from desktop.views import _ko
               }
             },
             helper: function (event) {
-              if (boundEntry.selected()) {
+              if (typeof boundEntry !== 'undefined' && boundEntry.selected && boundEntry.selected()) {
                 return $('<div>').addClass('doc-browser-drag-container');
               }
               return $('<div>');
@@ -961,29 +963,31 @@ from desktop.views import _ko
           });
 
           var clickHandler = function (clickedEntry, event) {
-            var clickedIndex = $.inArray(clickedEntry, allEntries());
-
-            if (event.metaKey || event.ctrlKey) {
-              clickedEntry.selected(!clickedEntry.selected());
-            } else if (event.shiftKey) {
-              var lastClickedIndex = ko.utils.domData.get(document, 'last-clicked-entry-index') || 0;
-              var lower = Math.min(lastClickedIndex, clickedIndex);
-              var upper = Math.max(lastClickedIndex, clickedIndex);
-              for (var i = lower; i <= upper; i++) {
-                allEntries()[i].selected(true);
-              }
-            } else {
-              $.each(allEntries(), function (idx, entry) {
-                if (entry !== clickedEntry) {
-                  entry.selected(false);
+            if (allEntries) {
+              var clickedIndex = $.inArray(clickedEntry, allEntries());
+
+              if (event.metaKey || event.ctrlKey) {
+                clickedEntry.selected(!clickedEntry.selected());
+              } else if (event.shiftKey) {
+                var lastClickedIndex = ko.utils.domData.get(document, 'last-clicked-entry-index') || 0;
+                var lower = Math.min(lastClickedIndex, clickedIndex);
+                var upper = Math.max(lastClickedIndex, clickedIndex);
+                for (var i = lower; i <= upper; i++) {
+                  allEntries()[i].selected(true);
                 }
+              } else {
+                $.each(allEntries(), function (idx, entry) {
+                  if (entry !== clickedEntry) {
+                    entry.selected(false);
+                  }
+                });
+                clickedEntry.selected(true);
+              }
+              var selectedEntries = $.grep(allEntries(), function (entry) {
+                return entry.selected();
               });
-              clickedEntry.selected(true);
+              ko.utils.domData.set(document, 'last-clicked-entry-index', selectedEntries.length > 0 ? clickedIndex : 0);
             }
-            var selectedEntries = $.grep(allEntries(), function (entry) {
-              return entry.selected();
-            });
-            ko.utils.domData.set(document, 'last-clicked-entry-index', selectedEntries.length > 0 ? clickedIndex : 0);
           };
 
           ko.bindingHandlers.multiClick.init(element, function () {