Fix ordering issues
This commit is contained in:
@@ -22,232 +22,240 @@
|
|||||||
|
|
||||||
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) {
|
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.id = $stateParams.boardId;
|
||||||
$scope.status={},
|
$scope.status = {},
|
||||||
$scope.newLabel={};
|
$scope.newLabel = {};
|
||||||
$scope.status.boardtab = $stateParams.detailTab;
|
$scope.status.boardtab = $stateParams.detailTab;
|
||||||
|
|
||||||
$scope.stackservice = StackService;
|
$scope.stackservice = StackService;
|
||||||
$scope.boardservice = BoardService;
|
$scope.boardservice = BoardService;
|
||||||
$scope.cardservice = CardService;
|
$scope.cardservice = CardService;
|
||||||
$scope.statusservice = StatusService.getInstance();
|
$scope.statusservice = StatusService.getInstance();
|
||||||
$scope.labelservice = LabelService;
|
$scope.labelservice = LabelService;
|
||||||
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
|
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
|
||||||
|
|
||||||
$scope.search = function (searchText) {
|
$scope.search = function (searchText) {
|
||||||
$scope.searchText = searchText;
|
$scope.searchText = searchText;
|
||||||
$scope.refreshData();
|
$scope.refreshData();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.board = BoardService.getCurrent();
|
$scope.board = BoardService.getCurrent();
|
||||||
StackService.clear(); //FIXME: Is this still needed?
|
StackService.clear(); //FIXME: Is this still needed?
|
||||||
$scope.statusservice.retainWaiting();
|
$scope.statusservice.retainWaiting();
|
||||||
$scope.statusservice.retainWaiting();
|
$scope.statusservice.retainWaiting();
|
||||||
|
|
||||||
// FIXME: ugly solution for archive
|
// FIXME: ugly solution for archive
|
||||||
$scope.$state = $stateParams;
|
$scope.$state = $stateParams;
|
||||||
$scope.filter = $stateParams.filter;
|
$scope.filter = $stateParams.filter;
|
||||||
$scope.$watch('$state.filter', function (name) {
|
$scope.$watch('$state.filter', function (name) {
|
||||||
console.log("statewatch" + name);
|
console.log("statewatch" + name);
|
||||||
$scope.filter = name;
|
$scope.filter = name;
|
||||||
});
|
});
|
||||||
$scope.switchFilter = function(filter) {
|
$scope.switchFilter = function (filter) {
|
||||||
console.log("switch filter click " + name);
|
console.log("switch filter click " + name);
|
||||||
$state.go('.', {filter: filter}, {notify: false});
|
$state.go('.', {filter: filter}, {notify: false});
|
||||||
$scope.filter = filter;
|
$scope.filter = filter;
|
||||||
};
|
};
|
||||||
$scope.$watch('filter', function(name) {
|
$scope.$watch('filter', function (name) {
|
||||||
if(name==="archive") {
|
if (name === "archive") {
|
||||||
$scope.loadArchived();
|
$scope.loadArchived();
|
||||||
} else {
|
} else {
|
||||||
$scope.loadDefault();
|
$scope.loadDefault();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$scope.stacksData = StackService;
|
$scope.stacksData = StackService;
|
||||||
$scope.stacks = {};
|
$scope.stacks = {};
|
||||||
$scope.$watch('stacksData', function(value) {
|
$scope.$watch('stacksData', function (value) {
|
||||||
$scope.refreshData();
|
$scope.refreshData();
|
||||||
}, true);
|
}, true);
|
||||||
$scope.refreshData = function () {
|
$scope.refreshData = function () {
|
||||||
if($scope.filter === "archive") {
|
if ($scope.filter === "archive") {
|
||||||
$scope.filterData('-lastModified', $scope.searchText);
|
$scope.filterData('-lastModified', $scope.searchText);
|
||||||
} else {
|
} else {
|
||||||
$scope.filterData('order', $scope.searchText);
|
$scope.filterData('order', $scope.searchText);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$scope.checkCanEdit = function() {
|
$scope.checkCanEdit = function () {
|
||||||
if($scope.archived) {
|
if ($scope.archived) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter cards here, as ng-sortable will not work nicely with html-inline filters
|
// filter cards here, as ng-sortable will not work nicely with html-inline filters
|
||||||
$scope.filterData = function (order, text) {
|
$scope.filterData = function (order, text) {
|
||||||
if ($scope.stacks === undefined)
|
console.log("filter data");
|
||||||
return;
|
if ($scope.stacks === undefined)
|
||||||
angular.copy($scope.stackservice.data, $scope.stacks);
|
return;
|
||||||
angular.forEach($scope.stacks, function (value, key) {
|
angular.copy(StackService.getAll(), $scope.stacks);
|
||||||
var cards = [];
|
angular.forEach($scope.stacks, function (value, key) {
|
||||||
cards = $filter('cardSearchFilter')(value.cards, text);
|
var cards = [];
|
||||||
cards = $filter('orderBy')(cards, order);
|
cards = $filter('cardSearchFilter')(value.cards, text);
|
||||||
$scope.stacks[key].cards = cards;
|
cards = $filter('orderBy')(cards, order);
|
||||||
});
|
$scope.stacks[key].cards = cards;
|
||||||
};
|
});
|
||||||
|
};
|
||||||
|
|
||||||
$scope.loadDefault = function() {
|
$scope.loadDefault = function () {
|
||||||
console.log("Load default");
|
console.log("Load default");
|
||||||
StackService.fetchAll($scope.id).then(function(data) {
|
StackService.fetchAll($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.loadArchived = function() {
|
$scope.loadArchived = function () {
|
||||||
console.log("Load archived!");
|
console.log("Load archived!");
|
||||||
StackService.fetchArchived($scope.id).then(function(data) {
|
StackService.fetchArchived($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Handle initial Loading
|
// Handle initial Loading
|
||||||
BoardService.fetchOne($scope.id).then(function(data) {
|
BoardService.fetchOne($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', 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) {
|
$scope.newStack = {'boardId': $scope.id};
|
||||||
if(search=="") {
|
$scope.newCard = {};
|
||||||
search = "%25";
|
|
||||||
}
|
|
||||||
BoardService.searchUsers(search);
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.newStack = { 'boardId': $scope.id};
|
// Create a new Stack
|
||||||
$scope.newCard = {};
|
$scope.createStack = function () {
|
||||||
|
StackService.create($scope.newStack).then(function (data) {
|
||||||
|
$scope.newStack.title = "";
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// Create a new Stack
|
$scope.createCard = function (stack, title) {
|
||||||
$scope.createStack = function () {
|
var newCard = {
|
||||||
StackService.create($scope.newStack).then(function (data) {
|
'title': title,
|
||||||
$scope.newStack.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) {
|
$scope.cardDelete = function (card) {
|
||||||
var newCard = {
|
CardService.delete(card.id);
|
||||||
'title': title,
|
StackService.deleteCard(card);
|
||||||
'stackId': stack,
|
}
|
||||||
'type': 'plain',
|
$scope.cardArchive = function (card) {
|
||||||
};
|
CardService.archive(card);
|
||||||
CardService.create(newCard).then(function (data) {
|
StackService.deleteCard(card);
|
||||||
$scope.stackservice.addCard(data);
|
};
|
||||||
$scope.newCard.title = "";
|
$scope.cardUnarchive = function (card) {
|
||||||
});
|
CardService.unarchive(card);
|
||||||
}
|
StackService.deleteCard(card);
|
||||||
|
}
|
||||||
|
|
||||||
$scope.cardDelete = function(card) {
|
$scope.labelDelete = function (label) {
|
||||||
CardService.delete(card.id);
|
LabelService.delete(label.id);
|
||||||
StackService.deleteCard(card);
|
// remove from board data
|
||||||
}
|
var i = BoardService.getCurrent().labels.indexOf(label);
|
||||||
$scope.cardArchive = function(card) {
|
BoardService.getCurrent().labels.splice(i, 1);
|
||||||
CardService.archive(card);
|
// TODO: remove from cards
|
||||||
StackService.deleteCard(card);
|
}
|
||||||
};
|
$scope.labelCreate = function (label) {
|
||||||
$scope.cardUnarchive = function(card){
|
label.boardId = $scope.id;
|
||||||
CardService.unarchive(card);
|
LabelService.create(label);
|
||||||
StackService.deleteCard(card);
|
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) {
|
$scope.aclAdd = function (sharee) {
|
||||||
LabelService.delete(label.id);
|
sharee.boardId = $scope.id;
|
||||||
// remove from board data
|
BoardService.addAcl(sharee);
|
||||||
var i = BoardService.getCurrent().labels.indexOf(label);
|
$scope.status.addSharee = null;
|
||||||
BoardService.getCurrent().labels.splice(i, 1);
|
}
|
||||||
// TODO: remove from cards
|
$scope.aclDelete = function (acl) {
|
||||||
}
|
BoardService.deleteAcl(acl);
|
||||||
$scope.labelCreate = function(label) {
|
}
|
||||||
label.boardId = $scope.id;
|
$scope.aclUpdate = function (acl) {
|
||||||
LabelService.create(label);
|
BoardService.updateAcl(acl);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
// settings for card sorting
|
||||||
// settings for card sorting
|
$scope.sortOptions = {
|
||||||
$scope.sortOptions = {
|
itemMoved: function (event) {
|
||||||
itemMoved: function (event) {
|
console.log('itemMoved');
|
||||||
// TODO: Implement reodering here (set new order of all cards in stack)
|
// TODO: Implement reodering here (set new order of all cards in stack)
|
||||||
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
|
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
|
||||||
var order = event.dest.index;
|
var order = event.dest.index;
|
||||||
var card = event.source.itemScope.c;
|
var card = event.source.itemScope.c;
|
||||||
var newStack = event.dest.sortableScope.$parent.s.id;
|
var newStack = event.dest.sortableScope.$parent.s.id;
|
||||||
card.stackId = newStack;
|
var oldStack = card.stackId;
|
||||||
CardService.update(card);
|
card.stackId = newStack;
|
||||||
CardService.reorder(card, order).then(function(data) {
|
CardService.update(card);
|
||||||
StackService.data[newStack].addCard(card);
|
CardService.reorder(card, order).then(function (data) {
|
||||||
});
|
StackService.addCard(card);
|
||||||
},
|
StackService.reorder(card, order);
|
||||||
orderChanged: function (event) {
|
StackService.deleteCard({
|
||||||
// TODO: Implement reordering here (set new order of all cards in stack)
|
id: card.id,
|
||||||
// then maybe also call $scope.filterData('order')?
|
stackId: oldStack
|
||||||
var order = event.dest.index;
|
});
|
||||||
var card = event.source.itemScope.c;
|
});
|
||||||
var stack = event.dest.sortableScope.$parent.s.id;
|
},
|
||||||
CardService.reorder(card, order);
|
orderChanged: function (event) {
|
||||||
},
|
var order = event.dest.index;
|
||||||
scrollableContainer: '#board',
|
var card = event.source.itemScope.c;
|
||||||
containerPositioning: 'relative',
|
var stack = event.dest.sortableScope.$parent.s.id;
|
||||||
containment: '#board',
|
CardService.reorder(card, order).then(function (data) {
|
||||||
// auto scroll on drag
|
StackService.reorder(card, order);
|
||||||
dragMove: function (itemPosition, containment, eventObj) {
|
$scope.refreshData();
|
||||||
if (eventObj) {
|
});
|
||||||
var container = $("#board");
|
},
|
||||||
var offset = container.offset();
|
scrollableContainer: '#board',
|
||||||
targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
containerPositioning: 'relative',
|
||||||
targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
containment: '#board',
|
||||||
if (targetX < offset.left) {
|
// auto scroll on drag
|
||||||
container.scrollLeft(container.scrollLeft() - 50);
|
dragMove: function (itemPosition, containment, eventObj) {
|
||||||
} else if (targetX > container.width()) {
|
if (eventObj) {
|
||||||
container.scrollLeft(container.scrollLeft() + 50);
|
var container = $("#board");
|
||||||
}
|
var offset = container.offset();
|
||||||
if (targetY < offset.top) {
|
targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
||||||
container.scrollTop(container.scrollTop() - 50);
|
targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
||||||
} else if (targetY > container.height()) {
|
if (targetX < offset.left) {
|
||||||
container.scrollTop(container.scrollTop() + 50);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
455
js/public/app.js
455
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) {
|
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.id = $stateParams.boardId;
|
||||||
$scope.status={},
|
$scope.status = {},
|
||||||
$scope.newLabel={};
|
$scope.newLabel = {};
|
||||||
$scope.status.boardtab = $stateParams.detailTab;
|
$scope.status.boardtab = $stateParams.detailTab;
|
||||||
|
|
||||||
$scope.stackservice = StackService;
|
$scope.stackservice = StackService;
|
||||||
$scope.boardservice = BoardService;
|
$scope.boardservice = BoardService;
|
||||||
$scope.cardservice = CardService;
|
$scope.cardservice = CardService;
|
||||||
$scope.statusservice = StatusService.getInstance();
|
$scope.statusservice = StatusService.getInstance();
|
||||||
$scope.labelservice = LabelService;
|
$scope.labelservice = LabelService;
|
||||||
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
|
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
|
||||||
|
|
||||||
$scope.search = function (searchText) {
|
$scope.search = function (searchText) {
|
||||||
$scope.searchText = searchText;
|
$scope.searchText = searchText;
|
||||||
$scope.refreshData();
|
$scope.refreshData();
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.board = BoardService.getCurrent();
|
$scope.board = BoardService.getCurrent();
|
||||||
StackService.clear(); //FIXME: Is this still needed?
|
StackService.clear(); //FIXME: Is this still needed?
|
||||||
$scope.statusservice.retainWaiting();
|
$scope.statusservice.retainWaiting();
|
||||||
$scope.statusservice.retainWaiting();
|
$scope.statusservice.retainWaiting();
|
||||||
|
|
||||||
// FIXME: ugly solution for archive
|
// FIXME: ugly solution for archive
|
||||||
$scope.$state = $stateParams;
|
$scope.$state = $stateParams;
|
||||||
$scope.filter = $stateParams.filter;
|
$scope.filter = $stateParams.filter;
|
||||||
$scope.$watch('$state.filter', function (name) {
|
$scope.$watch('$state.filter', function (name) {
|
||||||
console.log("statewatch" + name);
|
console.log("statewatch" + name);
|
||||||
$scope.filter = name;
|
$scope.filter = name;
|
||||||
});
|
});
|
||||||
$scope.switchFilter = function(filter) {
|
$scope.switchFilter = function (filter) {
|
||||||
console.log("switch filter click " + name);
|
console.log("switch filter click " + name);
|
||||||
$state.go('.', {filter: filter}, {notify: false});
|
$state.go('.', {filter: filter}, {notify: false});
|
||||||
$scope.filter = filter;
|
$scope.filter = filter;
|
||||||
};
|
};
|
||||||
$scope.$watch('filter', function(name) {
|
$scope.$watch('filter', function (name) {
|
||||||
if(name==="archive") {
|
if (name === "archive") {
|
||||||
$scope.loadArchived();
|
$scope.loadArchived();
|
||||||
} else {
|
} else {
|
||||||
$scope.loadDefault();
|
$scope.loadDefault();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$scope.stacksData = StackService;
|
$scope.stacksData = StackService;
|
||||||
$scope.stacks = {};
|
$scope.stacks = {};
|
||||||
$scope.$watch('stacksData', function(value) {
|
$scope.$watch('stacksData', function (value) {
|
||||||
$scope.refreshData();
|
$scope.refreshData();
|
||||||
}, true);
|
}, true);
|
||||||
$scope.refreshData = function () {
|
$scope.refreshData = function () {
|
||||||
if($scope.filter === "archive") {
|
if ($scope.filter === "archive") {
|
||||||
$scope.filterData('-lastModified', $scope.searchText);
|
$scope.filterData('-lastModified', $scope.searchText);
|
||||||
} else {
|
} else {
|
||||||
$scope.filterData('order', $scope.searchText);
|
$scope.filterData('order', $scope.searchText);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$scope.checkCanEdit = function() {
|
$scope.checkCanEdit = function () {
|
||||||
if($scope.archived) {
|
if ($scope.archived) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter cards here, as ng-sortable will not work nicely with html-inline filters
|
// filter cards here, as ng-sortable will not work nicely with html-inline filters
|
||||||
$scope.filterData = function (order, text) {
|
$scope.filterData = function (order, text) {
|
||||||
if ($scope.stacks === undefined)
|
console.log("filter data");
|
||||||
return;
|
if ($scope.stacks === undefined)
|
||||||
angular.copy($scope.stackservice.data, $scope.stacks);
|
return;
|
||||||
angular.forEach($scope.stacks, function (value, key) {
|
angular.copy(StackService.getAll(), $scope.stacks);
|
||||||
var cards = [];
|
angular.forEach($scope.stacks, function (value, key) {
|
||||||
cards = $filter('cardSearchFilter')(value.cards, text);
|
var cards = [];
|
||||||
cards = $filter('orderBy')(cards, order);
|
cards = $filter('cardSearchFilter')(value.cards, text);
|
||||||
$scope.stacks[key].cards = cards;
|
cards = $filter('orderBy')(cards, order);
|
||||||
});
|
$scope.stacks[key].cards = cards;
|
||||||
};
|
});
|
||||||
|
};
|
||||||
|
|
||||||
$scope.loadDefault = function() {
|
$scope.loadDefault = function () {
|
||||||
console.log("Load default");
|
console.log("Load default");
|
||||||
StackService.fetchAll($scope.id).then(function(data) {
|
StackService.fetchAll($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.loadArchived = function() {
|
$scope.loadArchived = function () {
|
||||||
console.log("Load archived!");
|
console.log("Load archived!");
|
||||||
StackService.fetchArchived($scope.id).then(function(data) {
|
StackService.fetchArchived($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Handle initial Loading
|
// Handle initial Loading
|
||||||
BoardService.fetchOne($scope.id).then(function(data) {
|
BoardService.fetchOne($scope.id).then(function (data) {
|
||||||
$scope.statusservice.releaseWaiting();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function (error) {
|
||||||
$scope.statusservice.setError('Error occured', 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) {
|
$scope.newStack = {'boardId': $scope.id};
|
||||||
if(search=="") {
|
$scope.newCard = {};
|
||||||
search = "%25";
|
|
||||||
}
|
|
||||||
BoardService.searchUsers(search);
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.newStack = { 'boardId': $scope.id};
|
// Create a new Stack
|
||||||
$scope.newCard = {};
|
$scope.createStack = function () {
|
||||||
|
StackService.create($scope.newStack).then(function (data) {
|
||||||
|
$scope.newStack.title = "";
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// Create a new Stack
|
$scope.createCard = function (stack, title) {
|
||||||
$scope.createStack = function () {
|
var newCard = {
|
||||||
StackService.create($scope.newStack).then(function (data) {
|
'title': title,
|
||||||
$scope.newStack.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) {
|
$scope.cardDelete = function (card) {
|
||||||
var newCard = {
|
CardService.delete(card.id);
|
||||||
'title': title,
|
StackService.deleteCard(card);
|
||||||
'stackId': stack,
|
}
|
||||||
'type': 'plain',
|
$scope.cardArchive = function (card) {
|
||||||
};
|
CardService.archive(card);
|
||||||
CardService.create(newCard).then(function (data) {
|
StackService.deleteCard(card);
|
||||||
$scope.stackservice.addCard(data);
|
};
|
||||||
$scope.newCard.title = "";
|
$scope.cardUnarchive = function (card) {
|
||||||
});
|
CardService.unarchive(card);
|
||||||
}
|
StackService.deleteCard(card);
|
||||||
|
}
|
||||||
|
|
||||||
$scope.cardDelete = function(card) {
|
$scope.labelDelete = function (label) {
|
||||||
CardService.delete(card.id);
|
LabelService.delete(label.id);
|
||||||
StackService.deleteCard(card);
|
// remove from board data
|
||||||
}
|
var i = BoardService.getCurrent().labels.indexOf(label);
|
||||||
$scope.cardArchive = function(card) {
|
BoardService.getCurrent().labels.splice(i, 1);
|
||||||
CardService.archive(card);
|
// TODO: remove from cards
|
||||||
StackService.deleteCard(card);
|
}
|
||||||
};
|
$scope.labelCreate = function (label) {
|
||||||
$scope.cardUnarchive = function(card){
|
label.boardId = $scope.id;
|
||||||
CardService.unarchive(card);
|
LabelService.create(label);
|
||||||
StackService.deleteCard(card);
|
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) {
|
$scope.aclAdd = function (sharee) {
|
||||||
LabelService.delete(label.id);
|
sharee.boardId = $scope.id;
|
||||||
// remove from board data
|
BoardService.addAcl(sharee);
|
||||||
var i = BoardService.getCurrent().labels.indexOf(label);
|
$scope.status.addSharee = null;
|
||||||
BoardService.getCurrent().labels.splice(i, 1);
|
}
|
||||||
// TODO: remove from cards
|
$scope.aclDelete = function (acl) {
|
||||||
}
|
BoardService.deleteAcl(acl);
|
||||||
$scope.labelCreate = function(label) {
|
}
|
||||||
label.boardId = $scope.id;
|
$scope.aclUpdate = function (acl) {
|
||||||
LabelService.create(label);
|
BoardService.updateAcl(acl);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
// settings for card sorting
|
||||||
// settings for card sorting
|
$scope.sortOptions = {
|
||||||
$scope.sortOptions = {
|
itemMoved: function (event) {
|
||||||
itemMoved: function (event) {
|
console.log('itemMoved');
|
||||||
// TODO: Implement reodering here (set new order of all cards in stack)
|
// TODO: Implement reodering here (set new order of all cards in stack)
|
||||||
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
|
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
|
||||||
var order = event.dest.index;
|
var order = event.dest.index;
|
||||||
var card = event.source.itemScope.c;
|
var card = event.source.itemScope.c;
|
||||||
var newStack = event.dest.sortableScope.$parent.s.id;
|
var newStack = event.dest.sortableScope.$parent.s.id;
|
||||||
card.stackId = newStack;
|
var oldStack = card.stackId;
|
||||||
CardService.update(card);
|
card.stackId = newStack;
|
||||||
CardService.reorder(card, order).then(function(data) {
|
CardService.update(card);
|
||||||
StackService.data[newStack].addCard(card);
|
CardService.reorder(card, order).then(function (data) {
|
||||||
});
|
StackService.addCard(card);
|
||||||
},
|
StackService.reorder(card, order);
|
||||||
orderChanged: function (event) {
|
StackService.deleteCard({
|
||||||
// TODO: Implement reordering here (set new order of all cards in stack)
|
id: card.id,
|
||||||
// then maybe also call $scope.filterData('order')?
|
stackId: oldStack
|
||||||
var order = event.dest.index;
|
});
|
||||||
var card = event.source.itemScope.c;
|
});
|
||||||
var stack = event.dest.sortableScope.$parent.s.id;
|
},
|
||||||
CardService.reorder(card, order);
|
orderChanged: function (event) {
|
||||||
},
|
var order = event.dest.index;
|
||||||
scrollableContainer: '#board',
|
var card = event.source.itemScope.c;
|
||||||
containerPositioning: 'relative',
|
var stack = event.dest.sortableScope.$parent.s.id;
|
||||||
containment: '#board',
|
CardService.reorder(card, order).then(function (data) {
|
||||||
// auto scroll on drag
|
StackService.reorder(card, order);
|
||||||
dragMove: function (itemPosition, containment, eventObj) {
|
$scope.refreshData();
|
||||||
if (eventObj) {
|
});
|
||||||
var container = $("#board");
|
},
|
||||||
var offset = container.offset();
|
scrollableContainer: '#board',
|
||||||
targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
containerPositioning: 'relative',
|
||||||
targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
containment: '#board',
|
||||||
if (targetX < offset.left) {
|
// auto scroll on drag
|
||||||
container.scrollLeft(container.scrollLeft() - 50);
|
dragMove: function (itemPosition, containment, eventObj) {
|
||||||
} else if (targetX > container.width()) {
|
if (eventObj) {
|
||||||
container.scrollLeft(container.scrollLeft() + 50);
|
var container = $("#board");
|
||||||
}
|
var offset = container.offset();
|
||||||
if (targetY < offset.top) {
|
targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
||||||
container.scrollTop(container.scrollTop() - 50);
|
targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
||||||
} else if (targetY > container.height()) {
|
if (targetX < offset.left) {
|
||||||
container.scrollTop(container.scrollTop() + 50);
|
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) {
|
$scope.cardUpdate = function(card) {
|
||||||
CardService.update(CardService.getCurrent());
|
CardService.update(CardService.getCurrent()).then(function(data) {
|
||||||
$scope.status.cardEditDescription = false;
|
$scope.status.cardEditDescription = false;
|
||||||
|
$('#card-description .save-indicator').fadeIn(500).fadeOut(1000);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.labelAssign = function(element, model) {
|
$scope.labelAssign = function(element, model) {
|
||||||
@@ -1024,7 +1034,6 @@ app.factory('CardService', ["ApiService", "$http", "$q", function(ApiService, $h
|
|||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
var self = this;
|
var self = this;
|
||||||
$http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) {
|
$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);
|
deferred.resolve(response.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while update ' + self.endpoint);
|
deferred.reject('Error while update ' + self.endpoint);
|
||||||
@@ -1135,8 +1144,38 @@ app.factory('StackService', ["ApiService", "$http", "$q", function(ApiService, $
|
|||||||
};
|
};
|
||||||
|
|
||||||
StackService.prototype.addCard = function(entity) {
|
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);
|
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<this.data[entity.stackId].cards.length;i++) {
|
||||||
|
if(this.data[entity.stackId].cards[i].id === entity.id) {
|
||||||
|
console.log(this.data[entity.stackId].cards[i].title + " " + order);
|
||||||
|
this.data[entity.stackId].cards[i].order = order;
|
||||||
|
}
|
||||||
|
if(j === order) {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
if(this.data[entity.stackId].cards[i].id !== entity.id) {
|
||||||
|
this.data[entity.stackId].cards[i].order = j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// sort array by order
|
||||||
|
this.data[entity.stackId].cards.sort(function(a,b) {
|
||||||
|
if (a.order < b.order)
|
||||||
|
return -1;
|
||||||
|
if (a.order > b.order)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
StackService.prototype.updateCard = function(entity) {
|
StackService.prototype.updateCard = function(entity) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var cards = this.data[entity.stackId].cards;
|
var cards = this.data[entity.stackId].cards;
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ app.factory('CardService', function(ApiService, $http, $q){
|
|||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
var self = this;
|
var self = this;
|
||||||
$http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) {
|
$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);
|
deferred.resolve(response.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while update ' + self.endpoint);
|
deferred.reject('Error while update ' + self.endpoint);
|
||||||
|
|||||||
@@ -53,8 +53,38 @@ app.factory('StackService', function(ApiService, $http, $q){
|
|||||||
};
|
};
|
||||||
|
|
||||||
StackService.prototype.addCard = function(entity) {
|
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);
|
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<this.data[entity.stackId].cards.length;i++) {
|
||||||
|
if(this.data[entity.stackId].cards[i].id === entity.id) {
|
||||||
|
console.log(this.data[entity.stackId].cards[i].title + " " + order);
|
||||||
|
this.data[entity.stackId].cards[i].order = order;
|
||||||
|
}
|
||||||
|
if(j === order) {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
if(this.data[entity.stackId].cards[i].id !== entity.id) {
|
||||||
|
this.data[entity.stackId].cards[i].order = j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// sort array by order
|
||||||
|
this.data[entity.stackId].cards.sort(function(a,b) {
|
||||||
|
if (a.order < b.order)
|
||||||
|
return -1;
|
||||||
|
if (a.order > b.order)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
StackService.prototype.updateCard = function(entity) {
|
StackService.prototype.updateCard = function(entity) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var cards = this.data[entity.stackId].cards;
|
var cards = this.data[entity.stackId].cards;
|
||||||
|
|||||||
Reference in New Issue
Block a user