diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcontentgrid.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcontentgrid.directive.js index 4ab935276b..0d8ddc2170 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcontentgrid.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcontentgrid.directive.js @@ -11,9 +11,9 @@ } }; - scope.selectItem = function(item, $event) { + scope.selectItem = function(item, $event, $index) { if(scope.onSelect) { - scope.onSelect(item); + scope.onSelect(item, $event, $index); $event.stopPropagation(); } }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbfoldergrid.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbfoldergrid.directive.js index ff46ed7f81..06475e9c45 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbfoldergrid.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbfoldergrid.directive.js @@ -11,9 +11,9 @@ } }; - scope.selectFolder = function(folder, $event) { + scope.selectFolder = function(folder, $event, $index) { if(scope.onSelect) { - scope.onSelect(folder); + scope.onSelect(folder, $event, $index); } $event.stopPropagation(); }; diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbmediagrid.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbmediagrid.directive.js index cbd45b098e..fa639b6225 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbmediagrid.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbmediagrid.directive.js @@ -5,8 +5,6 @@ function link(scope, el, attr, ctrl) { - scope.mediaItems = []; - var itemDefaultHeight = 200; var itemDefaultWidth = 200; var itemMaxWidth = 300; @@ -14,22 +12,14 @@ function activate() { - scope.mediaItems = []; - for (var i = 0; scope.items.length > i; i++) { - var item = scope.items[i]; - setItemData(item); - setOriginalSize(item, itemMaxHeight); - - seperateFolderAndMediaItems(item); - } - if(scope.mediaItems.length > 0) { - setFlexValues(scope.mediaItems); + if(scope.items.length > 0) { + setFlexValues(scope.items); } } @@ -37,6 +27,7 @@ function setItemData(item) { item.isFolder = !mediaHelper.hasFilePropertyType(item); + item.hidden = item.isFolder; if(!item.isFolder){ item.thumbnail = mediaHelper.resolveFile(item, true); @@ -84,14 +75,6 @@ } - function seperateFolderAndMediaItems(item) { - - if(!item.isFolder){ - scope.mediaItems.push(item); - } - - } - function setFlexValues(mediaItems) { var flexSortArray = mediaItems; @@ -129,9 +112,9 @@ } - scope.selectItem = function(item, $event) { + scope.selectItem = function(item, $event, $index) { if(scope.onSelect) { - scope.onSelect(item); + scope.onSelect(item, $event, $index); $event.stopPropagation(); } }; diff --git a/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js new file mode 100644 index 0000000000..41d1d62b69 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/services/listviewhelper.service.js @@ -0,0 +1,112 @@ +(function() { + 'use strict'; + + function listViewHelper() { + + var firstSelectedIndex = 0; + + function selectHandler(selectedItem, selectedIndex, items, selection, $event) { + + var start = 0; + var end = 0; + var item = null; + + if ($event.shiftKey === true) { + + if(selectedIndex > firstSelectedIndex) { + + start = firstSelectedIndex; + end = selectedIndex; + + for (; end >= start; start++) { + item = items[start]; + selectItem(item, selection); + } + + } else { + + start = firstSelectedIndex; + end = selectedIndex; + + for (; end <= start; start--) { + item = items[start]; + selectItem(item, selection); + } + + } + + } else { + + if(selectedItem.selected) { + deselectItem(selectedItem, selection); + } else { + selectItem(selectedItem, selection); + } + + firstSelectedIndex = selectedIndex; + + } + + } + + function selectItem(item, selection) { + var isSelected = false; + for (var i = 0; selection.length > i; i++) { + var selectedItem = selection[i]; + if (item.id === selectedItem.id) { + isSelected = true; + } + } + if(!isSelected && !item.hidden) { + selection.push({id: item.id}); + item.selected = true; + } + } + + function deselectItem(item, selection) { + for (var i = 0; selection.length > i; i++) { + var selectedItem = selection[i]; + if (item.id === selectedItem.id) { + selection.splice(i, 1); + item.selected = false; + } + } + } + + function clearSelection(items, folders, selection) { + + var i = 0; + + selection.length = 0; + + if(angular.isArray(items)) { + for(i = 0; items.length > i; i++) { + var item = items[i]; + item.selected = false; + } + } + + if(angular.isArray(items)) { + for(i = 0; folders.length > i; i++) { + var folder = folders[i]; + folder.selected = false; + } + } + } + + var service = { + selectHandler: selectHandler, + selectItem: selectItem, + deselectItem: deselectItem, + clearSelection: clearSelection + }; + + return service; + + } + + + angular.module('umbraco.services').factory('listViewHelper', listViewHelper); + + +})(); diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-content-grid.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-content-grid.less index 593c4a6c7a..a4e18abb20 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-content-grid.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-content-grid.less @@ -12,6 +12,7 @@ position: relative; margin: 10px; border: 1px solid #ffffff; + user-select: none; } .umb-content-grid__item:hover { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-folder-grid.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-folder-grid.less index 6b51cab35d..b82a18e3bb 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-folder-grid.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-folder-grid.less @@ -3,7 +3,7 @@ flex-direction: row; flex-wrap: wrap; width: 100%; - margin-bottom: 20px; + margin-bottom: 30px; } .umb-folder-grid__folder { @@ -19,6 +19,7 @@ position: relative; justify-content: space-between; cursor: pointer; + user-select: none; } .umb-folder-grid__folder:focus, diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-content-grid.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-content-grid.html index 200bfbee29..fc22a2926c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/umb-content-grid.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-content-grid.html @@ -6,7 +6,7 @@ ng-class="{'-selected': item.selected}" ng-click="clickItem(item)"> - +