admin: interface to edit teams

This commit is contained in:
nemunaire 2017-01-28 19:36:28 +01:00 committed by Pierre-Olivier Mercier
commit a1cd214449
5 changed files with 169 additions and 3 deletions

View file

@ -30,6 +30,10 @@ angular.module("FICApp", ["ngRoute", "ngResource", "ngSanitize"])
templateUrl: "views/team-list.html"
})
.when("/teams/:teamId", {
controller: "TeamController",
templateUrl: "views/team-edit.html"
})
.when("/teams/:teamId/stats", {
controller: "TeamController",
templateUrl: "views/team.html"
})
@ -80,7 +84,9 @@ angular.module("FICApp")
})
})
.factory("TeamMember", function($resource) {
return $resource("/api/teams/:teamId/members", { teamId: '@id' })
return $resource("/api/teams/:teamId/members", { teamId: '@id' }, {
'save': {method: 'PUT'},
})
})
.factory("TeamMy", function($resource) {
return $resource("/api/teams/:teamId/my.json", { teamId: '@id' })
@ -146,6 +152,16 @@ angular.module("FICApp")
return input.capitalize();
}
})
.filter("toColor", function() {
return function(input) {
num >>>= 0;
var b = num & 0xFF,
g = (num & 0xFF00) >>> 8,
r = (num & 0xFF0000) >>> 16,
a = ( (num & 0xFF000000) >>> 24 ) / 255 ;
return "#" + r.toString(16) + g.toString(16) + b.toString(16);
}
})
.filter("size", function() {
var units = [
"o",
@ -193,6 +209,31 @@ angular.module("FICApp")
}
})
.directive('color', function() {
return {
require: 'ngModel',
link: function(scope, ele, attr, ctrl){
ctrl.$formatters.unshift(function(num){
num >>>= 0;
var b = num & 0xFF,
g = (num & 0xFF00) >>> 8,
r = (num & 0xFF0000) >>> 16,
a = ( (num & 0xFF000000) >>> 24 ) / 255 ;
return "#" + r.toString(16) + g.toString(16) + b.toString(16);
});
ctrl.$parsers.unshift(function(viewValue){
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(viewValue);
return result ? (
parseInt(result[1], 16) * 256 * 256 +
parseInt(result[2], 16) * 256 +
parseInt(result[3], 16)
) : 0;
});
}
};
})
.directive('integer', function() {
return {
require: 'ngModel',
@ -472,9 +513,44 @@ angular.module("FICApp")
$location.url("/teams/" + id);
};
})
.controller("TeamController", function($scope, Team, TeamMember, $routeParams) {
.controller("TeamMembersController", function($scope, TeamMember, $routeParams) {
$scope.fields = ["firstname", "lastname", "nickname", "company"];
})
.controller("TeamController", function($scope, $location, Team, TeamMember, $routeParams) {
$scope.team = Team.get({ teamId: $routeParams.teamId });
$scope.fields = ["name", "color"];
$scope.members = TeamMember.query({ teamId: $routeParams.teamId });
$scope.saveTeam = function() {
if (this.team.id) {
this.team.$update();
} else {
this.team.$save(function() {
$location.url("/teams/" + $scope.team.id);
});
}
}
$scope.deleteTeam = function() {
this.team.$remove(function() { $location.url("/teams/");});
}
$scope.showStats = function() {
$location.url("/teams/" + $scope.team.id + "/stats");
}
$scope.newMember = function() {
$scope.members.push(new TeamMember());
}
$scope.saveTeamMembers = function() {
if (this.team.id) {
TeamMember.save({ teamId: this.team.id }, $scope.members);
}
}
$scope.removeMember = function(member) {
angular.forEach($scope.members, function(m, k) {
if (member == m)
$scope.members.splice(k, 1);
});
}
})
.controller("TeamStatsController", function($scope, TeamStats, $routeParams) {
$scope.teamstats = TeamStats.get({ teamId: $routeParams.teamId });