From 692f3564f7d6abb505cc3cd27e43a5fd298c088c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 24 Jun 2014 16:10:21 +0200 Subject: [PATCH] Initial iteration on taskboard. --- app/coffee/app.coffee | 3 + app/coffee/modules/resources.coffee | 1 + app/coffee/modules/resources/tasks.coffee | 38 ++++++ app/coffee/modules/taskboard.coffee | 113 ++++++++++++++++++ app/partials/taskboard.jade | 12 +- .../views/components/sprint-summary.jade | 11 +- .../views/components/taskboard-task.jade | 2 +- .../views/modules/taskboard-table.jade | 49 ++++---- 8 files changed, 191 insertions(+), 38 deletions(-) create mode 100644 app/coffee/modules/resources/tasks.coffee create mode 100644 app/coffee/modules/taskboard.coffee diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index c8e3e2bc..865304d0 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -23,6 +23,8 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $compileProvider, $gmUrlsProvider) -> $routeProvider.when("/project/:pslug/backlog", {templateUrl: "/partials/backlog.html"}) + $routeProvider.when("/project/:pslug/taskboard/:id", {templateUrl: "/partials/taskboard.html"}) + $routeProvider.when("/login", {templateUrl: "/partials/login.html"}) $routeProvider.otherwise({redirectTo: '/login'}) @@ -71,6 +73,7 @@ modules = [ # Specific Modules "taigaBacklog", + "taigaTaskboard", # Vendor modules "ngRoute", diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index f809f697..200a7d7f 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -107,5 +107,6 @@ module.run([ "$tgSprintsResourcesProvider", "$tgUserstoriesResourcesProvider", "$tgMdRenderResourcesProvider", + "$tgTasksResourcesProvider", initResources ]) diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee new file mode 100644 index 00000000..77198cdf --- /dev/null +++ b/app/coffee/modules/resources/tasks.coffee @@ -0,0 +1,38 @@ +### +# 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/resources/tasks.coffee +### + + +taiga = @.taiga + +resourceProvider = ($repo) -> + service = {} + + service.list = (projectId, sprintId=null) -> + params = {project: projectId} + params.milestone = sprintId if sprintId + return $repo.queryMany("tasks", params) + + return (instance) -> + instance.tasks = service + + +module = angular.module("taigaResources") +module.factory("$tgTasksResourcesProvider", ["$tgRepo", resourceProvider]) diff --git a/app/coffee/modules/taskboard.coffee b/app/coffee/modules/taskboard.coffee new file mode 100644 index 00000000..d2616865 --- /dev/null +++ b/app/coffee/modules/taskboard.coffee @@ -0,0 +1,113 @@ +### +# 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/taskboard.coffee +### + +taiga = @.taiga +mixOf = @.taiga.mixOf + +class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) + @.$inject = [ + "$scope", + "$rootScope", + "$tgRepo", + "$tgConfirm", + "$tgResources", + "$routeParams", + "$q" + ] + + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q) -> + @scope.sprintId = @params.id + + promise = @.loadInitialData() + promise.then null, -> + console.log "FAIL" + + loadSprintStats: -> + return @rs.sprints.stats(@scope.projectId, @scope.sprintId).then (stats) => + console.log "loadSprintStats", + @scope.stats = stats + return stats + + loadSprint: -> + return @rs.sprints.get(@scope.projectId, @scope.sprintId).then (sprint) => + console.log "loadSprint", sprint + @scope.sprint = sprint + @scope.userstories = sprint.user_stories + return sprint + + loadTasks: -> + return @rs.tasks.list(@scope.projectId, @scope.sprintId).then (tasks) => + @scope.tasks = tasks + @scope.tasksByStatus = _.groupBy(tasks, "status") + console.log "loadTasks", @scope.tasksByStatus + return tasks + + loadProject: -> + return @rs.projects.get(@scope.projectId).then (project) => + @scope.project = project + @scope.points = _.sortBy(project.points, "order") + @scope.statusList = _.sortBy(project.task_statuses, "id") + console.log "loadProject", @scope.statusList + return project + + loadTaskboard: -> + return @q.all([ + @.loadSprintStats(), + @.loadSprint() + # @.loadTasks(), + ]).then(=> @.loadTasks()) + + loadInitialData: -> + console.log @params + promise = @repo.resolve({pslug: @params.pslug}).then (data) => + @scope.projectId = data.project + return data + + return promise.then(=> @.loadProject()) + .then(=> @.loadUsersAndRoles()) + .then(=> @.loadTaskboard()) +############################################################################# +## TaskboardDirective +############################################################################# + +TaskboardDirective = -> + + ######################### + ## Drag & Drop Link + ######################### + + linkSortable = ($scope, $el, $attrs, $ctrl) -> + console.log "TaskboardDirective:linkSortable" + + link = ($scope, $el, $attrs) -> + $ctrl = $el.controller() + linkSortable($scope, $el, $attrs, $ctrl) + # linkCommon($scope, $el, $attrs, $ctrl) + + $scope.$on "$destroy", -> + $el.off() + + return {link: link} + + +module = angular.module("taigaTaskboard", []) +module.controller("TaskboardController", TaskboardController) +module.directive("tgTaskboard", TaskboardDirective) diff --git a/app/partials/taskboard.jade b/app/partials/taskboard.jade index 4579eae4..568f302e 100644 --- a/app/partials/taskboard.jade +++ b/app/partials/taskboard.jade @@ -1,15 +1,15 @@ -extends layout +extends dummy-layout block head title Taiga Project management web application with scrum in mind! block content - div.wrapper + div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl") section.main.taskboard h1 - span ProjectName - span.green Sprint Name - span.date 02/10/2014-15/10/2014 - include views/components/large-summary + span(tg-bo-html="project.name") + span.green(tg-bo-html="sprint-name") + span.date(tg-date-range="sprint.estimated_start,sprint.estimated_finish") + include views/components/sprint-summary include views/modules/burndown include views/modules/taskboard-table diff --git a/app/partials/views/components/sprint-summary.jade b/app/partials/views/components/sprint-summary.jade index 2f670a48..0c145d16 100644 --- a/app/partials/views/components/sprint-summary.jade +++ b/app/partials/views/components/sprint-summary.jade @@ -1,9 +1,10 @@ div.summary.large-summary - div.summary-progress-bar - div.current-progress - div.data - span.number 30% - span.description completed + div(tg-sprint-progressbar="sprint") + div.summary-progress-bar + div.current-progress + div.data + span.number 30% + span.description completed ul li span.number 12 diff --git a/app/partials/views/components/taskboard-task.jade b/app/partials/views/components/taskboard-task.jade index 0451cd19..61f16126 100644 --- a/app/partials/views/components/taskboard-task.jade +++ b/app/partials/views/components/taskboard-task.jade @@ -1,4 +1,4 @@ -div.taskboard-task +div.taskboard-task(ng-repeat="t in tasksByStatus[s.id] track by t.id") div.taskboard-tagline - for(var y = 0; y < 3; y++) a.taskboard-tag(href="", title="tasboard-tag") diff --git a/app/partials/views/modules/taskboard-table.jade b/app/partials/views/modules/taskboard-table.jade index efcabd6f..344a0ed2 100644 --- a/app/partials/views/modules/taskboard-table.jade +++ b/app/partials/views/modules/taskboard-table.jade @@ -1,32 +1,29 @@ div.taskboard-table div.taskboard-table-header div.taskboard-table-inner - - for(var z = 0; z < 11; z++) - h2.task-colum_name user stories + h2.task-colum_name "User story" + h2.task-colum_name(ng-repeat="s in statusList track by s.id", tg-bo-html="s.name") div.taskboard-table-body div.taskboard-table-inner div.taskboard_task-list.task-column - - for(var x = 0; x < 3; x++) - div.task-row - div.tag-list - - for(var y = 0; y < 5; y++) - include ../components/tag - h3.task-title - span.task-num 125 - span Invitacion de los usuarios a la plataforma - ul.task-list - li.task-status Open - li UX - span 4.5 - li Diseño - span 4.5 - li Front - span 4.5 - li Back - span 4.5 - include ../components/addnewus - - for(var z = 0; z < 10; z++) - div.taskboard_task-playground.task-column - - for(var x = 0; x < 3; x++) - div.task-row - include ../components/taskboard-task + div.task-row(ng-repeat="us in userstories track by us.id") + div.tag-list + - for(var y = 0; y < 5; y++) + include ../components/tag + h3.task-title + span.task-num 125 + span Invitacion de los usuarios a la plataforma + ul.task-list + li.task-status Open + li UX + span 4.5 + li Diseño + span 4.5 + li Front + span 4.5 + li Back + span 4.5 + include ../components/addnewus + div.taskboard_task-playground.task-column(ng-repeat="s in statusList track by s.id") + div.task-row(ng-repeat="us in userstories track by us.id") + include ../components/taskboard-task