From 91d03424ba8f5c8374dc77dfe0786c6eeb9e0e50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 27 Jun 2014 13:15:38 +0200 Subject: [PATCH] Add directive to show US points --- app/coffee/modules/taskboard.coffee | 99 ++++++++++++++++++- .../views/modules/taskboard-table.jade | 12 +-- 2 files changed, 98 insertions(+), 13 deletions(-) diff --git a/app/coffee/modules/taskboard.coffee b/app/coffee/modules/taskboard.coffee index 02235475..16184b99 100644 --- a/app/coffee/modules/taskboard.coffee +++ b/app/coffee/modules/taskboard.coffee @@ -22,6 +22,7 @@ taiga = @.taiga mixOf = @.taiga.mixOf groupBy = @.taiga.groupBy +bindOnce = @.taiga.bindOnce module = angular.module("taigaTaskboard", []) @@ -76,10 +77,17 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) loadProject: -> return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project - @scope.points = _.sortBy(project.points, "order") + + @scope.pointsList = _.sortBy(project.points, "order") + @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id) + + @scope.roleList = _.sortBy(project.roles, "order") + @scope.roleById = groupBy(@scope.roleList, (e) -> e.id) + @scope.taskStatusList = _.sortBy(project.task_statuses, "order") + @scope.usStatusList = _.sortBy(project.us_statuses, "order") - @scope.usStatusById = groupBy(project.us_statuses, (e) -> e.id) + @scope.usStatusById = groupBy(@scope.usStatusList, (e) -> e.id) return project @@ -131,7 +139,7 @@ TaskboardDirective = -> TaskboardRowSizeFixer = -> link = ($scope, $el, $attrs) -> - taiga.bindOnce $scope, "taskStatusList", (statuses) -> + bindOnce $scope, "taskStatusList", (statuses) -> itemSize = 300 + (10 * statuses.length) size = (1 + statuses.length) * itemSize $el.css("width", size + "px") @@ -139,5 +147,90 @@ TaskboardRowSizeFixer = -> return {link: link} +TaskboardUsPointsDirective = ($repo, $confirm) -> + pointsTemplate = _.template(""" + <% _.each(usRolePoints, function(rolePoint) { %> +
  • + <%- rolePoint.role.name %> <%- rolePoint.point.name %> + +
  • + <% }); %> + """) + renderUserStoryPoints = ($el, $scope, us) -> + points = $scope.pointsList + usRolePoints = [] + + for role_id, point_id of us.points + role = $scope.roleById[role_id] + point = $scope.pointsById[point_id] + if role and point + usRolePoints.push({role: role, point: point}) + + bindOnce $scope, "project", (project) -> + html = pointsTemplate({ + points: points + usRolePoints: usRolePoints + }) + $el.html(html) + + link = ($scope, $el, $attrs) -> + $ctrl = $el.controller() + us = $scope.$eval($attrs.tgTaskboardUsPoints) + renderUserStoryPoints($el, $scope, us) + + $el.on "click", ".us-role-points", (event) -> + event.stopPropagation() + + target = angular.element(event.currentTarget) + popover = target.parent().find(".pop-points") + popover.show() + + body = angular.element("body") + body.one "click", (event) -> + popover.hide() + + $el.on "click", ".point", (event) -> + event.preventDefault() + event.stopPropagation() + + target = angular.element(event.currentTarget) + roleId = target.data("role-id") + pointId = target.data("point-id") + newPoints = _.clone(us.points, false) + newPoints[roleId] = pointId + us.points = newPoints + + $el.find(".pop-points").hide() + + $scope.$apply -> + onSuccess = -> + $repo.refresh(us) -> + # TODO: Remove me when backlog will be fixed + $ctrl.loadSprintStats() + + onError = -> + $confirm.notify("error", "There is an error. Try it later.") + us.revert() + renderUserStoryPoints($el, $scope, us) + + renderUserStoryPoints($el, $scope, us) + $repo.save(us).then(onSuccess, onError) + + $scope.$on "$destroy", -> + $el.off() + + return {link: link} + + module.directive("tgTaskboard", TaskboardDirective) module.directive("tgTaskboardRowSizeFixer", TaskboardRowSizeFixer) +module.directive("tgTaskboardUsPoints", ["$tgRepo", "$tgConfirm", TaskboardUsPointsDirective]) diff --git a/app/partials/views/modules/taskboard-table.jade b/app/partials/views/modules/taskboard-table.jade index 8d887ec4..30414909 100644 --- a/app/partials/views/modules/taskboard-table.jade +++ b/app/partials/views/modules/taskboard-table.jade @@ -12,17 +12,9 @@ div.taskboard-table h3.us-title span.us-ref(tg-bo-ref="us.ref") span(ng-bind="us.subject") - div.status(tg-us-status="us" on-update="ctrl.loadSprintState()") + div.status(tg-us-status="us", on-update="ctrl.loadSprintState()") a.us-status(href="", title="Status Name") - ul.points-list - li UX - span 4.5 - li DiseƱo - span 4.5 - li Front - span 4.5 - li Back - span 4.5 + ul.points-list(tg-taskboard-us-points="us") include ../components/addnewtask div.taskboard_task-playground.task-column(ng-repeat="s in taskStatusList track by s.id")