From 077cb8ab3cfc53b5531e3cf7bbdf63228640f4a9 Mon Sep 17 00:00:00 2001 From: Julius Haertl Date: Fri, 28 Oct 2016 10:42:21 +0200 Subject: [PATCH] Fix ordering issues --- js/controller/BoardController.js | 418 ++++++++++++++-------------- js/public/app.js | 455 +++++++++++++++++-------------- js/service/CardService.js | 1 - js/service/StackService.js | 30 ++ 4 files changed, 490 insertions(+), 414 deletions(-) diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js index f5f71b219..50a4ab0bf 100644 --- a/js/controller/BoardController.js +++ b/js/controller/BoardController.js @@ -22,232 +22,240 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) { - $scope.sidebar = $rootScope.sidebar; + $scope.sidebar = $rootScope.sidebar; - $scope.id = $stateParams.boardId; - $scope.status={}, - $scope.newLabel={}; - $scope.status.boardtab = $stateParams.detailTab; + $scope.id = $stateParams.boardId; + $scope.status = {}, + $scope.newLabel = {}; + $scope.status.boardtab = $stateParams.detailTab; - $scope.stackservice = StackService; - $scope.boardservice = BoardService; - $scope.cardservice = CardService; - $scope.statusservice = StatusService.getInstance(); - $scope.labelservice = LabelService; - $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; + $scope.stackservice = StackService; + $scope.boardservice = BoardService; + $scope.cardservice = CardService; + $scope.statusservice = StatusService.getInstance(); + $scope.labelservice = LabelService; + $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; - $scope.search = function (searchText) { - $scope.searchText = searchText; - $scope.refreshData(); - }; + $scope.search = function (searchText) { + $scope.searchText = searchText; + $scope.refreshData(); + }; - $scope.board = BoardService.getCurrent(); - StackService.clear(); //FIXME: Is this still needed? - $scope.statusservice.retainWaiting(); - $scope.statusservice.retainWaiting(); + $scope.board = BoardService.getCurrent(); + StackService.clear(); //FIXME: Is this still needed? + $scope.statusservice.retainWaiting(); + $scope.statusservice.retainWaiting(); - // FIXME: ugly solution for archive - $scope.$state = $stateParams; - $scope.filter = $stateParams.filter; - $scope.$watch('$state.filter', function (name) { - console.log("statewatch" + name); - $scope.filter = name; - }); - $scope.switchFilter = function(filter) { - console.log("switch filter click " + name); - $state.go('.', {filter: filter}, {notify: false}); - $scope.filter = filter; - }; - $scope.$watch('filter', function(name) { - if(name==="archive") { - $scope.loadArchived(); - } else { - $scope.loadDefault(); - } - }); + // FIXME: ugly solution for archive + $scope.$state = $stateParams; + $scope.filter = $stateParams.filter; + $scope.$watch('$state.filter', function (name) { + console.log("statewatch" + name); + $scope.filter = name; + }); + $scope.switchFilter = function (filter) { + console.log("switch filter click " + name); + $state.go('.', {filter: filter}, {notify: false}); + $scope.filter = filter; + }; + $scope.$watch('filter', function (name) { + if (name === "archive") { + $scope.loadArchived(); + } else { + $scope.loadDefault(); + } + }); - $scope.stacksData = StackService; - $scope.stacks = {}; - $scope.$watch('stacksData', function(value) { - $scope.refreshData(); - }, true); - $scope.refreshData = function () { - if($scope.filter === "archive") { - $scope.filterData('-lastModified', $scope.searchText); - } else { - $scope.filterData('order', $scope.searchText); - } - }; - $scope.checkCanEdit = function() { - if($scope.archived) { - return false; - } - return true; - } + $scope.stacksData = StackService; + $scope.stacks = {}; + $scope.$watch('stacksData', function (value) { + $scope.refreshData(); + }, true); + $scope.refreshData = function () { + if ($scope.filter === "archive") { + $scope.filterData('-lastModified', $scope.searchText); + } else { + $scope.filterData('order', $scope.searchText); + } + }; + $scope.checkCanEdit = function () { + if ($scope.archived) { + return false; + } + return true; + } - // filter cards here, as ng-sortable will not work nicely with html-inline filters - $scope.filterData = function (order, text) { - if ($scope.stacks === undefined) - return; - angular.copy($scope.stackservice.data, $scope.stacks); - angular.forEach($scope.stacks, function (value, key) { - var cards = []; - cards = $filter('cardSearchFilter')(value.cards, text); - cards = $filter('orderBy')(cards, order); - $scope.stacks[key].cards = cards; - }); - }; + // filter cards here, as ng-sortable will not work nicely with html-inline filters + $scope.filterData = function (order, text) { + console.log("filter data"); + if ($scope.stacks === undefined) + return; + angular.copy(StackService.getAll(), $scope.stacks); + angular.forEach($scope.stacks, function (value, key) { + var cards = []; + cards = $filter('cardSearchFilter')(value.cards, text); + cards = $filter('orderBy')(cards, order); + $scope.stacks[key].cards = cards; + }); + }; - $scope.loadDefault = function() { - console.log("Load default"); - StackService.fetchAll($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); - }; + $scope.loadDefault = function () { + console.log("Load default"); + StackService.fetchAll($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + }; - $scope.loadArchived = function() { - console.log("Load archived!"); - StackService.fetchArchived($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); - }; + $scope.loadArchived = function () { + console.log("Load archived!"); + StackService.fetchArchived($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + }; - // Handle initial Loading - BoardService.fetchOne($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); + // Handle initial Loading + BoardService.fetchOne($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + BoardService.searchUsers('%25'); - BoardService.searchUsers('%25'); + $scope.searchForUser = function (search) { + if (search == "") { + search = "%25"; + } + BoardService.searchUsers(search); + } - $scope.searchForUser = function(search) { - if(search=="") { - search = "%25"; - } - BoardService.searchUsers(search); - } + $scope.newStack = {'boardId': $scope.id}; + $scope.newCard = {}; - $scope.newStack = { 'boardId': $scope.id}; - $scope.newCard = {}; + // Create a new Stack + $scope.createStack = function () { + StackService.create($scope.newStack).then(function (data) { + $scope.newStack.title = ""; + }); + }; - // Create a new Stack - $scope.createStack = function () { - StackService.create($scope.newStack).then(function (data) { - $scope.newStack.title=""; - }); - }; + $scope.createCard = function (stack, title) { + var newCard = { + 'title': title, + 'stackId': stack, + 'type': 'plain', + }; + CardService.create(newCard).then(function (data) { + // FIXME: called here reorders + $scope.stackservice.addCard(data); + $scope.newCard.title = ""; + }); + } - $scope.createCard = function(stack, title) { - var newCard = { - 'title': title, - 'stackId': stack, - 'type': 'plain', - }; - CardService.create(newCard).then(function (data) { - $scope.stackservice.addCard(data); - $scope.newCard.title = ""; - }); - } + $scope.cardDelete = function (card) { + CardService.delete(card.id); + StackService.deleteCard(card); + } + $scope.cardArchive = function (card) { + CardService.archive(card); + StackService.deleteCard(card); + }; + $scope.cardUnarchive = function (card) { + CardService.unarchive(card); + StackService.deleteCard(card); + } - $scope.cardDelete = function(card) { - CardService.delete(card.id); - StackService.deleteCard(card); - } - $scope.cardArchive = function(card) { - CardService.archive(card); - StackService.deleteCard(card); - }; - $scope.cardUnarchive = function(card){ - CardService.unarchive(card); - StackService.deleteCard(card); - } + $scope.labelDelete = function (label) { + LabelService.delete(label.id); + // remove from board data + var i = BoardService.getCurrent().labels.indexOf(label); + BoardService.getCurrent().labels.splice(i, 1); + // TODO: remove from cards + } + $scope.labelCreate = function (label) { + label.boardId = $scope.id; + LabelService.create(label); + BoardService.getCurrent().labels.push(label); + $scope.status.createLabel = false; + $scope.newLabel = {}; + } + $scope.labelUpdate = function (label) { + label.edit = false; + LabelService.update(label); + console.log(label); + } - $scope.labelDelete = function(label) { - LabelService.delete(label.id); - // remove from board data - var i = BoardService.getCurrent().labels.indexOf(label); - BoardService.getCurrent().labels.splice(i, 1); - // TODO: remove from cards - } - $scope.labelCreate = function(label) { - label.boardId = $scope.id; - LabelService.create(label); - BoardService.getCurrent().labels.push(label); - $scope.status.createLabel = false; - $scope.newLabel = {}; - } - $scope.labelUpdate = function(label) { - label.edit = false; - LabelService.update(label); - console.log(label); - } - - $scope.aclAdd = function(sharee) { - sharee.boardId = $scope.id; - BoardService.addAcl(sharee); - $scope.status.addSharee = null; - } - $scope.aclDelete = function(acl) { - BoardService.deleteAcl(acl); - } - $scope.aclUpdate = function(acl) { - BoardService.updateAcl(acl); - } + $scope.aclAdd = function (sharee) { + sharee.boardId = $scope.id; + BoardService.addAcl(sharee); + $scope.status.addSharee = null; + } + $scope.aclDelete = function (acl) { + BoardService.deleteAcl(acl); + } + $scope.aclUpdate = function (acl) { + BoardService.updateAcl(acl); + } - - // settings for card sorting - $scope.sortOptions = { - itemMoved: function (event) { - // TODO: Implement reodering here (set new order of all cards in stack) - event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; - var order = event.dest.index; - var card = event.source.itemScope.c; - var newStack = event.dest.sortableScope.$parent.s.id; - card.stackId = newStack; - CardService.update(card); - CardService.reorder(card, order).then(function(data) { - StackService.data[newStack].addCard(card); - }); - }, - orderChanged: function (event) { - // TODO: Implement reordering here (set new order of all cards in stack) - // then maybe also call $scope.filterData('order')? - var order = event.dest.index; - var card = event.source.itemScope.c; - var stack = event.dest.sortableScope.$parent.s.id; - CardService.reorder(card, order); - }, - scrollableContainer: '#board', - containerPositioning: 'relative', - containment: '#board', - // auto scroll on drag - dragMove: function (itemPosition, containment, eventObj) { - if (eventObj) { - var container = $("#board"); - var offset = container.offset(); - targetX = eventObj.pageX - (offset.left || container.scrollLeft()); - targetY = eventObj.pageY - (offset.top || container.scrollTop()); - if (targetX < offset.left) { - container.scrollLeft(container.scrollLeft() - 50); - } else if (targetX > container.width()) { - container.scrollLeft(container.scrollLeft() + 50); - } - if (targetY < offset.top) { - container.scrollTop(container.scrollTop() - 50); - } else if (targetY > container.height()) { - container.scrollTop(container.scrollTop() + 50); - } - } - } - }; + // settings for card sorting + $scope.sortOptions = { + itemMoved: function (event) { + console.log('itemMoved'); + // TODO: Implement reodering here (set new order of all cards in stack) + event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; + var order = event.dest.index; + var card = event.source.itemScope.c; + var newStack = event.dest.sortableScope.$parent.s.id; + var oldStack = card.stackId; + card.stackId = newStack; + CardService.update(card); + CardService.reorder(card, order).then(function (data) { + StackService.addCard(card); + StackService.reorder(card, order); + StackService.deleteCard({ + id: card.id, + stackId: oldStack + }); + }); + }, + orderChanged: function (event) { + var order = event.dest.index; + var card = event.source.itemScope.c; + var stack = event.dest.sortableScope.$parent.s.id; + CardService.reorder(card, order).then(function (data) { + StackService.reorder(card, order); + $scope.refreshData(); + }); + }, + scrollableContainer: '#board', + containerPositioning: 'relative', + containment: '#board', + // auto scroll on drag + dragMove: function (itemPosition, containment, eventObj) { + if (eventObj) { + var container = $("#board"); + var offset = container.offset(); + targetX = eventObj.pageX - (offset.left || container.scrollLeft()); + targetY = eventObj.pageY - (offset.top || container.scrollTop()); + if (targetX < offset.left) { + container.scrollLeft(container.scrollLeft() - 50); + } else if (targetX > container.width()) { + container.scrollLeft(container.scrollLeft() + 50); + } + if (targetY < offset.top) { + container.scrollTop(container.scrollTop() - 50); + } else if (targetY > container.height()) { + container.scrollTop(container.scrollTop() + 50); + } + } + } + }; }); diff --git a/js/public/app.js b/js/public/app.js index 3544abf91..8bcd1e90a 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -116,233 +116,241 @@ app.controller('AppController', ["$scope", "$location", "$http", "$route", "$log }]); app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "StatusService", "BoardService", "StackService", "CardService", "LabelService", "$state", "$transitions", "$filter", function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) { - $scope.sidebar = $rootScope.sidebar; + $scope.sidebar = $rootScope.sidebar; - $scope.id = $stateParams.boardId; - $scope.status={}, - $scope.newLabel={}; - $scope.status.boardtab = $stateParams.detailTab; + $scope.id = $stateParams.boardId; + $scope.status = {}, + $scope.newLabel = {}; + $scope.status.boardtab = $stateParams.detailTab; - $scope.stackservice = StackService; - $scope.boardservice = BoardService; - $scope.cardservice = CardService; - $scope.statusservice = StatusService.getInstance(); - $scope.labelservice = LabelService; - $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; + $scope.stackservice = StackService; + $scope.boardservice = BoardService; + $scope.cardservice = CardService; + $scope.statusservice = StatusService.getInstance(); + $scope.labelservice = LabelService; + $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; - $scope.search = function (searchText) { - $scope.searchText = searchText; - $scope.refreshData(); - }; + $scope.search = function (searchText) { + $scope.searchText = searchText; + $scope.refreshData(); + }; - $scope.board = BoardService.getCurrent(); - StackService.clear(); //FIXME: Is this still needed? - $scope.statusservice.retainWaiting(); - $scope.statusservice.retainWaiting(); + $scope.board = BoardService.getCurrent(); + StackService.clear(); //FIXME: Is this still needed? + $scope.statusservice.retainWaiting(); + $scope.statusservice.retainWaiting(); - // FIXME: ugly solution for archive - $scope.$state = $stateParams; - $scope.filter = $stateParams.filter; - $scope.$watch('$state.filter', function (name) { - console.log("statewatch" + name); - $scope.filter = name; - }); - $scope.switchFilter = function(filter) { - console.log("switch filter click " + name); - $state.go('.', {filter: filter}, {notify: false}); - $scope.filter = filter; - }; - $scope.$watch('filter', function(name) { - if(name==="archive") { - $scope.loadArchived(); - } else { - $scope.loadDefault(); - } - }); + // FIXME: ugly solution for archive + $scope.$state = $stateParams; + $scope.filter = $stateParams.filter; + $scope.$watch('$state.filter', function (name) { + console.log("statewatch" + name); + $scope.filter = name; + }); + $scope.switchFilter = function (filter) { + console.log("switch filter click " + name); + $state.go('.', {filter: filter}, {notify: false}); + $scope.filter = filter; + }; + $scope.$watch('filter', function (name) { + if (name === "archive") { + $scope.loadArchived(); + } else { + $scope.loadDefault(); + } + }); - $scope.stacksData = StackService; - $scope.stacks = {}; - $scope.$watch('stacksData', function(value) { - $scope.refreshData(); - }, true); - $scope.refreshData = function () { - if($scope.filter === "archive") { - $scope.filterData('-lastModified', $scope.searchText); - } else { - $scope.filterData('order', $scope.searchText); - } - }; - $scope.checkCanEdit = function() { - if($scope.archived) { - return false; - } - return true; - } + $scope.stacksData = StackService; + $scope.stacks = {}; + $scope.$watch('stacksData', function (value) { + $scope.refreshData(); + }, true); + $scope.refreshData = function () { + if ($scope.filter === "archive") { + $scope.filterData('-lastModified', $scope.searchText); + } else { + $scope.filterData('order', $scope.searchText); + } + }; + $scope.checkCanEdit = function () { + if ($scope.archived) { + return false; + } + return true; + } - // filter cards here, as ng-sortable will not work nicely with html-inline filters - $scope.filterData = function (order, text) { - if ($scope.stacks === undefined) - return; - angular.copy($scope.stackservice.data, $scope.stacks); - angular.forEach($scope.stacks, function (value, key) { - var cards = []; - cards = $filter('cardSearchFilter')(value.cards, text); - cards = $filter('orderBy')(cards, order); - $scope.stacks[key].cards = cards; - }); - }; + // filter cards here, as ng-sortable will not work nicely with html-inline filters + $scope.filterData = function (order, text) { + console.log("filter data"); + if ($scope.stacks === undefined) + return; + angular.copy(StackService.getAll(), $scope.stacks); + angular.forEach($scope.stacks, function (value, key) { + var cards = []; + cards = $filter('cardSearchFilter')(value.cards, text); + cards = $filter('orderBy')(cards, order); + $scope.stacks[key].cards = cards; + }); + }; - $scope.loadDefault = function() { - console.log("Load default"); - StackService.fetchAll($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); - }; + $scope.loadDefault = function () { + console.log("Load default"); + StackService.fetchAll($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + }; - $scope.loadArchived = function() { - console.log("Load archived!"); - StackService.fetchArchived($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); - }; + $scope.loadArchived = function () { + console.log("Load archived!"); + StackService.fetchArchived($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + }; - // Handle initial Loading - BoardService.fetchOne($scope.id).then(function(data) { - $scope.statusservice.releaseWaiting(); - }, function(error) { - $scope.statusservice.setError('Error occured', error); - }); + // Handle initial Loading + BoardService.fetchOne($scope.id).then(function (data) { + $scope.statusservice.releaseWaiting(); + }, function (error) { + $scope.statusservice.setError('Error occured', error); + }); + BoardService.searchUsers('%25'); - BoardService.searchUsers('%25'); + $scope.searchForUser = function (search) { + if (search == "") { + search = "%25"; + } + BoardService.searchUsers(search); + } - $scope.searchForUser = function(search) { - if(search=="") { - search = "%25"; - } - BoardService.searchUsers(search); - } + $scope.newStack = {'boardId': $scope.id}; + $scope.newCard = {}; - $scope.newStack = { 'boardId': $scope.id}; - $scope.newCard = {}; + // Create a new Stack + $scope.createStack = function () { + StackService.create($scope.newStack).then(function (data) { + $scope.newStack.title = ""; + }); + }; - // Create a new Stack - $scope.createStack = function () { - StackService.create($scope.newStack).then(function (data) { - $scope.newStack.title=""; - }); - }; + $scope.createCard = function (stack, title) { + var newCard = { + 'title': title, + 'stackId': stack, + 'type': 'plain', + }; + CardService.create(newCard).then(function (data) { + // FIXME: called here reorders + $scope.stackservice.addCard(data); + $scope.newCard.title = ""; + }); + } - $scope.createCard = function(stack, title) { - var newCard = { - 'title': title, - 'stackId': stack, - 'type': 'plain', - }; - CardService.create(newCard).then(function (data) { - $scope.stackservice.addCard(data); - $scope.newCard.title = ""; - }); - } + $scope.cardDelete = function (card) { + CardService.delete(card.id); + StackService.deleteCard(card); + } + $scope.cardArchive = function (card) { + CardService.archive(card); + StackService.deleteCard(card); + }; + $scope.cardUnarchive = function (card) { + CardService.unarchive(card); + StackService.deleteCard(card); + } - $scope.cardDelete = function(card) { - CardService.delete(card.id); - StackService.deleteCard(card); - } - $scope.cardArchive = function(card) { - CardService.archive(card); - StackService.deleteCard(card); - }; - $scope.cardUnarchive = function(card){ - CardService.unarchive(card); - StackService.deleteCard(card); - } + $scope.labelDelete = function (label) { + LabelService.delete(label.id); + // remove from board data + var i = BoardService.getCurrent().labels.indexOf(label); + BoardService.getCurrent().labels.splice(i, 1); + // TODO: remove from cards + } + $scope.labelCreate = function (label) { + label.boardId = $scope.id; + LabelService.create(label); + BoardService.getCurrent().labels.push(label); + $scope.status.createLabel = false; + $scope.newLabel = {}; + } + $scope.labelUpdate = function (label) { + label.edit = false; + LabelService.update(label); + console.log(label); + } - $scope.labelDelete = function(label) { - LabelService.delete(label.id); - // remove from board data - var i = BoardService.getCurrent().labels.indexOf(label); - BoardService.getCurrent().labels.splice(i, 1); - // TODO: remove from cards - } - $scope.labelCreate = function(label) { - label.boardId = $scope.id; - LabelService.create(label); - BoardService.getCurrent().labels.push(label); - $scope.status.createLabel = false; - $scope.newLabel = {}; - } - $scope.labelUpdate = function(label) { - label.edit = false; - LabelService.update(label); - console.log(label); - } - - $scope.aclAdd = function(sharee) { - sharee.boardId = $scope.id; - BoardService.addAcl(sharee); - $scope.status.addSharee = null; - } - $scope.aclDelete = function(acl) { - BoardService.deleteAcl(acl); - } - $scope.aclUpdate = function(acl) { - BoardService.updateAcl(acl); - } + $scope.aclAdd = function (sharee) { + sharee.boardId = $scope.id; + BoardService.addAcl(sharee); + $scope.status.addSharee = null; + } + $scope.aclDelete = function (acl) { + BoardService.deleteAcl(acl); + } + $scope.aclUpdate = function (acl) { + BoardService.updateAcl(acl); + } - - // settings for card sorting - $scope.sortOptions = { - itemMoved: function (event) { - // TODO: Implement reodering here (set new order of all cards in stack) - event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; - var order = event.dest.index; - var card = event.source.itemScope.c; - var newStack = event.dest.sortableScope.$parent.s.id; - card.stackId = newStack; - CardService.update(card); - CardService.reorder(card, order).then(function(data) { - StackService.data[newStack].addCard(card); - }); - }, - orderChanged: function (event) { - // TODO: Implement reordering here (set new order of all cards in stack) - // then maybe also call $scope.filterData('order')? - var order = event.dest.index; - var card = event.source.itemScope.c; - var stack = event.dest.sortableScope.$parent.s.id; - CardService.reorder(card, order); - }, - scrollableContainer: '#board', - containerPositioning: 'relative', - containment: '#board', - // auto scroll on drag - dragMove: function (itemPosition, containment, eventObj) { - if (eventObj) { - var container = $("#board"); - var offset = container.offset(); - targetX = eventObj.pageX - (offset.left || container.scrollLeft()); - targetY = eventObj.pageY - (offset.top || container.scrollTop()); - if (targetX < offset.left) { - container.scrollLeft(container.scrollLeft() - 50); - } else if (targetX > container.width()) { - container.scrollLeft(container.scrollLeft() + 50); - } - if (targetY < offset.top) { - container.scrollTop(container.scrollTop() - 50); - } else if (targetY > container.height()) { - container.scrollTop(container.scrollTop() + 50); - } - } - } - }; + // settings for card sorting + $scope.sortOptions = { + itemMoved: function (event) { + console.log('itemMoved'); + // TODO: Implement reodering here (set new order of all cards in stack) + event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; + var order = event.dest.index; + var card = event.source.itemScope.c; + var newStack = event.dest.sortableScope.$parent.s.id; + var oldStack = card.stackId; + card.stackId = newStack; + CardService.update(card); + CardService.reorder(card, order).then(function (data) { + StackService.addCard(card); + StackService.reorder(card, order); + StackService.deleteCard({ + id: card.id, + stackId: oldStack + }); + }); + }, + orderChanged: function (event) { + var order = event.dest.index; + var card = event.source.itemScope.c; + var stack = event.dest.sortableScope.$parent.s.id; + CardService.reorder(card, order).then(function (data) { + StackService.reorder(card, order); + $scope.refreshData(); + }); + }, + scrollableContainer: '#board', + containerPositioning: 'relative', + containment: '#board', + // auto scroll on drag + dragMove: function (itemPosition, containment, eventObj) { + if (eventObj) { + var container = $("#board"); + var offset = container.offset(); + targetX = eventObj.pageX - (offset.left || container.scrollLeft()); + targetY = eventObj.pageY - (offset.top || container.scrollTop()); + if (targetX < offset.left) { + container.scrollLeft(container.scrollLeft() - 50); + } else if (targetX > container.width()) { + container.scrollLeft(container.scrollLeft() + 50); + } + if (targetY < offset.top) { + container.scrollTop(container.scrollTop() - 50); + } else if (targetY > container.height()) { + container.scrollTop(container.scrollTop() + 50); + } + } + } + }; }]); @@ -387,8 +395,10 @@ app.controller('CardController', ["$scope", "$rootScope", "$routeParams", "$loca }); }; $scope.cardUpdate = function(card) { - CardService.update(CardService.getCurrent()); - $scope.status.cardEditDescription = false; + CardService.update(CardService.getCurrent()).then(function(data) { + $scope.status.cardEditDescription = false; + $('#card-description .save-indicator').fadeIn(500).fadeOut(1000); + }); } $scope.labelAssign = function(element, model) { @@ -1024,7 +1034,6 @@ app.factory('CardService', ["ApiService", "$http", "$q", function(ApiService, $h var deferred = $q.defer(); var self = this; $http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) { - card.order = order; deferred.resolve(response.data); }, function (error) { deferred.reject('Error while update ' + self.endpoint); @@ -1135,8 +1144,38 @@ app.factory('StackService', ["ApiService", "$http", "$q", function(ApiService, $ }; StackService.prototype.addCard = function(entity) { + console.log(this.data); + if(!this.data[entity.stackId].cards) { + this.data[entity.stackId].cards = []; + } this.data[entity.stackId].cards.push(entity); + console.log(this.data); }; + + StackService.prototype.reorder = function(entity, order) { + // assign new order + for(var i=0, j=0;i b.order) + return 1; + return 0; + }); + }; + StackService.prototype.updateCard = function(entity) { var self = this; var cards = this.data[entity.stackId].cards; diff --git a/js/service/CardService.js b/js/service/CardService.js index c07c1deca..58558c8e0 100644 --- a/js/service/CardService.js +++ b/js/service/CardService.js @@ -30,7 +30,6 @@ app.factory('CardService', function(ApiService, $http, $q){ var deferred = $q.defer(); var self = this; $http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) { - card.order = order; deferred.resolve(response.data); }, function (error) { deferred.reject('Error while update ' + self.endpoint); diff --git a/js/service/StackService.js b/js/service/StackService.js index 5338683d6..45bbb8fe1 100644 --- a/js/service/StackService.js +++ b/js/service/StackService.js @@ -53,8 +53,38 @@ app.factory('StackService', function(ApiService, $http, $q){ }; StackService.prototype.addCard = function(entity) { + console.log(this.data); + if(!this.data[entity.stackId].cards) { + this.data[entity.stackId].cards = []; + } this.data[entity.stackId].cards.push(entity); + console.log(this.data); }; + + StackService.prototype.reorder = function(entity, order) { + // assign new order + for(var i=0, j=0;i b.order) + return 1; + return 0; + }); + }; + StackService.prototype.updateCard = function(entity) { var self = this; var cards = this.data[entity.stackId].cards;