--- /dev/null
+(function() {
+ "use strict";
+
+ angular.module("nero.app.dashboard")
+ .directive("usersList", usersListDirective);
+
+ function usersListDirective() {
+ return {
+ restrict: "E",
+ scope: {
+ userList : "=",
+ selectUser : "=",
+ filter : "=?"
+ },
+ templateUrl: contextPath + "/js/news/delegation/usersList.html?t="+dashboardTimestamp,
+ controller: usersListController,
+ controllerAs: "usersListCtrl",
+ bindToController:true
+ };
+ }
+
+ usersListController.$inject = [];
+
+ function usersListController() {
+ var vm = this;
+
+
+ vm.onSelectUser = onSelectUser;
+ vm.isActive = true;
+ vm.verifyFilter = verifyFilter;
+
+ if (vm.filter == undefined) {
+ vm.filter = "";
+ }
+
+ /**
+ Display only users matching the filter
+ */
+ function verifyFilter(user) {
+ var filter = vm.filter.toLowerCase();
+ if (filter == ""
+ || user.userFirstName.toLowerCase().startsWith(filter)
+ || user.userLastName.toLowerCase().startsWith(filter)) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+
+ /**
+ On select user
+ */
+ function onSelectUser(user, $index, $event) {
+ if ($event != undefined && $event.shiftKey && vm.selectUser.length > 0) {
+ onShiftKeySelect(user, $index);
+ }
+ else if ($event != undefined && ($event.ctrlKey || $event.metaKey)) {
+ onCtrlKeySelect(user, $index);
+ }
+ // Simple click
+ else {
+ cancelSelection();
+ vm.selectUser.push(user);
+ vm.userList[$index].isSelected = true;
+ }
+ }
+
+ /**
+ If shift key is pressed when select a row
+ */
+ function onShiftKeySelect(user, $index) {
+ // Last index = previous click element, $index is current click element
+ var lastIndex = vm.userList.indexOf(vm.selectUser[vm.selectUser.length -1]);
+ if ($index <= lastIndex) {
+ for (var loopIdx = $index ; loopIdx < lastIndex ; ++loopIdx) {
+ if (vm.selectUser.indexOf(vm.userList[loopIdx]) == -1) {
+ vm.selectUser.push(vm.userList[loopIdx]);
+ vm.userList[loopIdx].isSelected = true;
+ }
+ }
+ }
+ else {
+ for (var loopIdx = (lastIndex + 1) ; loopIdx <= $index ; ++loopIdx) {
+ if (vm.selectUser.indexOf(vm.userList[loopIdx]) == -1) {
+ vm.selectUser.push(vm.userList[loopIdx]);
+ vm.userList[loopIdx].isSelected = true;
+ }
+ }
+ }
+ }
+
+ /**
+ If ctrl (or cmd on MacOS) key is pressed when select a row
+ */
+ function onCtrlKeySelect(user, $index) {
+ if (vm.selectUser.indexOf(user) == -1) {
+ vm.selectUser.push(user);
+ vm.userList[$index].isSelected = true;
+ }
+ else {
+ vm.userList[$index].isSelected = false;
+ vm.selectUser.splice(user);
+ }
+ }
+
+ /**
+ Init selection
+ */
+ function cancelSelection() {
+ for (var idx = 0 ; idx < vm.selectUser.length ; ++idx) {
+ vm.selectUser[idx].isSelected = false;
+ //var userIndex = vm.userList.indexOf(vm.selectUser[idx]);
+ //vm.userList[userIndex].isSelected = false;
+ }
+ vm.selectUser = [];
+ }
+
+ }
+})();