diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index 9ae3f10c..b28f8681 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -57,8 +57,11 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) loadProject: -> return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project - @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) + @scope.statusList = project.issue_statuses + @scope.statusById = groupBy(project.issue_statuses, (x) -> x.id) + @scope.severityList = project.severities @scope.severityById = groupBy(project.severities, (x) -> x.id) + @scope.priorityList = project.priorities @scope.priorityById = groupBy(project.priorities, (x) -> x.id) @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project @@ -280,7 +283,7 @@ AssignedToDirective = ($rootscope, $confirm) -> <% } %> - <% if (editable) { %> + <% if (editable && assignedTo!==null) { %> <% } %> @@ -314,3 +317,141 @@ AssignedToDirective = ($rootscope, $confirm) -> return {link:link, require:"ngModel"} module.directive("tgAssignedTo", ["$rootScope", "$tgConfirm", AssignedToDirective]) + + + + + +############################################################################# +## Issue status directive +############################################################################# + +IssueStatusDirective = () -> + #TODO: i18n + template = _.template(""" +

+ + <% if (status.is_closed) { %> + Closed + <% } else { %> + Open + <% } %> + <%= status.name %> +

+
+
+ + <%= severity.name %> + severity +
+
+ + <%= priority.name %> + priority +
+
+ + <%= status.name %> + status +
+
+ """) + selectionSeverityTemplate = _.template(""" + + """) + selectionPriorityTemplate = _.template(""" + + """) + selectionStatusTemplate = _.template(""" + + """) + + link = ($scope, $el, $attrs, $model) -> + editable = $attrs.editable? + + renderIssuestatus = (issue) -> + status = $scope.statusById[issue.status] + severity = $scope.severityById[issue.severity] + priority = $scope.priorityById[issue.priority] + html = template({ + editable: editable + status: status + severity: severity + priority: priority + }) + $el.html(html) + $el.find(".severity-data").append(selectionSeverityTemplate({severities:$scope.severityList})) + $el.find(".priority-data").append(selectionPriorityTemplate({priorities:$scope.priorityList})) + $el.find(".status-data").append(selectionStatusTemplate({statuses:$scope.statusList})) + + $scope.$watch $attrs.ngModel, (issue) -> + if issue? + renderIssuestatus(issue) + + if editable + $el.on "click", ".severity-data", (event) -> + event.preventDefault() + event.stopPropagation() + $el.find(".pop-severity").show() + body = angular.element("body") + body.one "click", (event) -> + $el.find(".popover").hide() + + $el.on "click", ".severity", (event) -> + event.preventDefault() + event.stopPropagation() + target = angular.element(event.currentTarget) + $model.$modelValue.severity = target.data("severity-id") + renderIssuestatus($model.$modelValue) + $el.find(".popover").hide() + + $el.on "click", ".priority-data", (event) -> + event.preventDefault() + event.stopPropagation() + $el.find(".pop-priority").show() + body = angular.element("body") + body.one "click", (event) -> + $el.find(".popover").hide() + + $el.on "click", ".priority", (event) -> + event.preventDefault() + event.stopPropagation() + target = angular.element(event.currentTarget) + $model.$modelValue.priority = target.data("priority-id") + renderIssuestatus($model.$modelValue) + $el.find(".popover").hide() + + $el.on "click", ".status-data", (event) -> + event.preventDefault() + event.stopPropagation() + $el.find(".pop-status").show() + body = angular.element("body") + body.one "click", (event) -> + $el.find(".popover").hide() + + $el.on "click", ".status", (event) -> + event.preventDefault() + event.stopPropagation() + target = angular.element(event.currentTarget) + $model.$modelValue.status = target.data("status-id") + renderIssuestatus($model.$modelValue) + $el.find(".popover").hide() + + return {link:link, require:"ngModel"} + +module.directive("tgIssueStatus", IssueStatusDirective) diff --git a/app/coffee/modules/issues/lightboxes.coffee b/app/coffee/modules/issues/lightboxes.coffee index fdb705f3..35086a66 100644 --- a/app/coffee/modules/issues/lightboxes.coffee +++ b/app/coffee/modules/issues/lightboxes.coffee @@ -76,7 +76,6 @@ module.directive("tgLbAddWatcher", AddWatcherDirective) AddAssignedToDirective = () -> link = ($scope, $el, $attrs) -> $scope.watcherSearch = {} - console.log "ASDASDASD" $scope.$on "assigned-to:add", -> $el.removeClass("hidden") $scope.$apply -> diff --git a/app/partials/issues-detail-edit.jade b/app/partials/issues-detail-edit.jade index 6b6b7c52..e5590921 100644 --- a/app/partials/issues-detail-edit.jade +++ b/app/partials/issues-detail-edit.jade @@ -42,24 +42,7 @@ block content include views/modules/comments // include views/modules/activity sidebar.menu-secondary.sidebar - h1 - span Open - span.us-detail-status In progress - - div.issue-data - div.severity-data - span.level - span.severity-status Important - span.level-name severity - div.priority-data - span.level - span.priority-status low - span.level-name priority - div.status-data - span.level - span.status-status new - span.level-name status - + section.us-status(tg-issue-status, ng-model="issue", editable="true") section.us-assigned-to(tg-assigned-to, ng-model="issue.assigned_to", editable="true") section.watchers(tg-watchers, ng-model="issue.watchers", editable="true") diff --git a/app/partials/issues-detail.jade b/app/partials/issues-detail.jade index 0249d8e8..f98075d4 100644 --- a/app/partials/issues-detail.jade +++ b/app/partials/issues-detail.jade @@ -45,24 +45,7 @@ block content include views/modules/comments // include views/modules/activity sidebar.menu-secondary.sidebar - h1 - span Open - span.us-detail-status In progress - - div.issue-data - div.severity-data - span.level - span.severity-status Important - span.level-name severity - div.priority-data - span.level - span.priority-status low - span.level-name priority - div.status-data - span.level - span.status-status new - span.level-name status - + section.us-status(tg-issue-status, ng-model="issue") section.us-assigned-to(tg-assigned-to, ng-model="issue.assigned_to") section.watchers(tg-watchers, ng-model="issue.watchers") diff --git a/app/styles/dependencies/elements.scss b/app/styles/dependencies/elements.scss index dfe75f9b..03bb53fe 100644 --- a/app/styles/dependencies/elements.scss +++ b/app/styles/dependencies/elements.scss @@ -45,3 +45,11 @@ ol { list-style: decimal; } .icon { vertical-align: middle; } + +.clickable { + cursor:pointer; +} + +.draggable { + cursor:move; +} diff --git a/app/styles/layout/us-detail.scss b/app/styles/layout/us-detail.scss index c213c3b5..79e1d003 100644 --- a/app/styles/layout/us-detail.scss +++ b/app/styles/layout/us-detail.scss @@ -301,3 +301,24 @@ } } } + +.us-status { + .severity-data{ + position: relative; + .pop-severity { + @include popover(150px, '', 30px, '', ''); + } + } + .priority-data{ + position: relative; + .pop-priority { + @include popover(150px, '', 30px, '', ''); + } + } + .status-data{ + position: relative; + .pop-status { + @include popover(150px, '', 30px, '', ''); + } + } +}