diff --git a/src/components/filetree.js b/src/components/filetree.js index 1c0491b69..f7ac0ba17 100644 --- a/src/components/filetree.js +++ b/src/components/filetree.js @@ -329,8 +329,24 @@ function FileTreeController($scope, $translate, $timeout, Client) { $scope.onMousedown = function ($event, entry) { var i = $scope.selected.indexOf(entry); var multi = ($event.ctrlKey || $event.metaKey); + var shift = $event.shiftKey; - if (multi) { + if (shift) { + if ($scope.selected.length === 0) { + $scope.selected = [ entry ]; + } else { + var pos = $scope.entries.indexOf(entry); + var selectedPositions = $scope.selected.map(function (s) { return $scope.entries.indexOf(s); }).sort(); + + if (pos < selectedPositions[0]) { + $scope.selected = $scope.entries.slice(pos, selectedPositions[0]+1); + } else if (selectedPositions[1] && pos > selectedPositions[1]) { + $scope.selected = $scope.entries.slice(selectedPositions[1], pos+1); + } else { + $scope.selected = $scope.entries.slice(selectedPositions[0], pos+1); + } + } + } else if (multi) { if (i === -1) { $scope.selected.push(entry); } else if ($event.button === 0) { // only do this on left click