From 9056b944c8dea521788e4c5f4e418fbd8e701c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 24 Jul 2014 00:20:07 +0200 Subject: [PATCH] Do the first version of 'add memberships' feature --- app/coffee/modules/admin/lightboxes.coffee | 118 ++++++++++++++++++ app/coffee/modules/admin/memberships.coffee | 15 ++- app/partials/admin-memberships.jade | 4 +- .../views/modules/lightbox_add-member.jade | 15 --- app/styles/modules/common/lightbox.scss | 1 - 5 files changed, 132 insertions(+), 21 deletions(-) create mode 100644 app/coffee/modules/admin/lightboxes.coffee diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee new file mode 100644 index 00000000..58e94767 --- /dev/null +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -0,0 +1,118 @@ +### +# Copyright (C) 2014 Andrey Antukh +# Copyright (C) 2014 Jesús Espino Garcia +# Copyright (C) 2014 David Barragán Merino +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/admin/lightboxes.coffee +### + +taiga = @.taiga + +module = angular.module("taigaKanban") + + +############################################################################# +## Create Members Lightbox Directive +############################################################################# + +CreateMembersDirective = ($repo, $rootScope, $q, $confirm) -> + template = _.template(""" +
+ + + +
+ """) # i18n + + createFieldSet = ($ctrl) -> + ctx = {roleList: $ctrl.scope.project.roles} + return template(ctx) + + link = ($scope, $el, $attrs) -> + $ctrl = $el.controller() + + title = $el.find("h2") + fieldSet = createFieldSet($ctrl) + title.after(fieldSet) + + $scope.$on "membersform:new", -> + $el.removeClass("hidden") + + $scope.$on "$destroy", -> + $el.off() + + # Dom Event Handlers + $el.on "click", ".close", (event) -> + event.preventDefault() + $el.addClass("hidden") + + $el.on "click", ".icon-delete", (event) -> + event.preventDefault() + target = angular.element(event.currentTarget) + fieldSet = target.parent() + + fieldSet.remove() + + $el.on "click", ".icon-plus", (event) -> + event.preventDefault() + target = angular.element(event.currentTarget) + fieldSet = target.parent() + + target.removeClass("icon-plus").addClass("icon-delete") + newFieldSet = createFieldSet($ctrl) + fieldSet.after(newFieldSet) + + $el.on "click", ".button-green", (event) -> + event.preventDefault() + + onSuccess = (data) -> + $el.addClass("hidden") + $confirm.notify("success") + $rootScope.$broadcast("membersform:new:success") + + onError = (data) -> + $el.addClass("hidden") + $confirm.notify("error") + $rootScope.$broadcast("membersform:new:error") + + form = $el.find("form").checksley() + if not form.validate() + return + + form = angular.element($el.find("form")) + fieldSets = form.children("fieldset") + + invitations = _.map fieldSets, (fs) -> + fieldset = angular.element(fs) + return { + email: fieldset.children("input").val() + role: fieldset.children("select").val() + project: $ctrl.scope.project.id + } + + promises = _.map invitations, (inv) -> + return $repo.create("memberships", inv) + + $q.all(promises).then(onSuccess, onError) + + return {link: link} + +module.directive("tgLbCreateMembers", ["$tgRepo", "$rootScope", "$q", "$tgConfirm", + CreateMembersDirective]) diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index 5dd0da59..df1018d8 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# File: modules/admin/project-profile.coffee TODO +# File: modules/admin/memberships.coffee ### taiga = @.taiga @@ -42,7 +42,7 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai "$location" ] - constructor: (@scope, @rootScope, @repo, @confirm, @rs, @params, @q, @location) -> + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location) -> @scope.sectionName = "Memberships" #i18n @scope.project = {} @scope.filters = {} @@ -51,6 +51,8 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai promise.then null, -> console.log "FAIL" #TODO + @scope.$on("membersform:new:success", @.onNewMembers) + loadProject: -> return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project @@ -78,6 +80,13 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai filters.page = 1 if not filters.page return filters + addNewMembers: -> + @rootscope.$broadcast("membersform:new") + + onNewMembers: -> + @.loadMembers() + + module.controller("MembershipsController", MembershipsController) @@ -367,7 +376,7 @@ MembershipsMemberRoleSelectorDirective = ($log, $repo, $confirm) -> template = _.template("""