diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index 659f1db6..6e13e98c 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -148,6 +148,46 @@ BlockLightboxDirective = (lightboxService) -> module.directive("tgLbBlock", ["lightboxService", BlockLightboxDirective]) + +############################################################################# +## Generic Lightbox Blocking-Message Input Directive +############################################################################# + +BlockingMessageInputDirective = ($log) -> + template = _.template(""" +
+ """) + + link = ($scope, $el, $attrs, $model) -> + if not $attrs.watch + return $log.error "No watch attribute on tg-blocking-message-input directive" + + $scope.$watch $attrs.watch, (value) -> + return if value is undefined + + if value == true + $el.find(".blocked-note").show(400) + else + $el.find(".blocked-note").hide(400) + + templateFn = ($el, $attrs) -> + return template({ngmodel: $attrs.ngModel}) + + return { + template: templateFn + link: link + require: "ngModel" + restrict: "EA" + } + +module.directive("tgBlockingMessageInput", ["$log", BlockingMessageInputDirective]) + + ############################################################################# ## Create/Edit Userstory Lightbox Directive ############################################################################# @@ -231,23 +271,6 @@ CreateEditUserstoryDirective = ($repo, $model, $rs, $rootScope, lightboxService, if data._error_message $confirm.notify("error", data._error_message) - $el.on "click", "label.blocked", (event) -> - event.preventDefault() - target = angular.element(event.currentTarget) - target.toggleClass("selected") - $scope.us.is_blocked = not $scope.us.is_blocked - $el.find(".blocked-note").toggle(400) - - $el.on "click", "label.team-requirement", (event) -> - event.preventDefault() - angular.element(event.currentTarget).toggleClass("selected") - $scope.us.team_requirement = not $scope.us.team_requirement - - $el.on "click", "label.client-requirement", (event) -> - event.preventDefault() - angular.element(event.currentTarget).toggleClass("selected") - $scope.us.client_requirement = not $scope.us.client_requirement - $scope.$on "$destroy", -> $el.off() diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 506a4351..95f8a3a1 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -135,11 +135,12 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi loadProject: -> return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project - @scope.$emit('project:loaded', project) @scope.points = _.sortBy(project.points, "order") @scope.pointsById = groupBy(project.points, (x) -> x.id) @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) @scope.usStatusList = _.sortBy(project.us_statuses, "order") + + @scope.$emit("project:loaded", project) return project loadInitialData: -> @@ -245,12 +246,12 @@ module.directive("tgKanbanRowSizeFixer", KanbanRowSizeFixer) KanbanUserstoryDirective = ($rootscope) -> link = ($scope, $el, $attrs, $model) -> $el.find(".icon-edit").on "click", (event) -> - if $el.find('.icon-edit').hasClass('noclick') + if $el.find(".icon-edit").hasClass("noclick") return $scope.$apply -> $rootscope.$broadcast("usform:edit", $model.$modelValue) if $scope.us.is_blocked - $el.addClass('blocked') + $el.addClass("blocked") $el.disableSelection() return { @@ -272,11 +273,11 @@ KanbanWipLimitDirective = -> $el.disableSelection() redrawWipLimit = -> - $el.find('.kanban-wip-limit').remove() + $el.find(".kanban-wip-limit").remove() timeout 200, -> - element = $el.find('.kanban-task')[$scope.status.wip_limit] + element = $el.find(".kanban-task")[$scope.status.wip_limit] if element - angular.element(element).before("") + angular.element(element).before("") $scope.$on "redraw:wip", redrawWipLimit $scope.$on "kanban:us:move", redrawWipLimit @@ -326,7 +327,7 @@ KanbanUserDirective = ($log) -> username_label = $el.parent().find("a.task-assigned") username_label.html(ctx.name) username_label.on "click", (event) -> - if $el.find('a').hasClass('noclick') + if $el.find("a").hasClass("noclick") return us = $model.$modelValue @@ -337,7 +338,7 @@ KanbanUserDirective = ($log) -> if project.my_permissions.indexOf("modify_us") > -1 clickable = true $el.on "click", (event) => - if $el.find('a').hasClass('noclick') + if $el.find("a").hasClass("noclick") return us = $model.$modelValue diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index be471ae1..ba9939b6 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -51,14 +51,6 @@ CreateEditTaskDirective = ($repo, $model, $rs, $rootscope, lightboxService) -> $el.find(".title").html("Edit task ") #TODO: i18n lightboxService.open($el) - # Update requirement info (team, client or blocked) - if task.is_blocked - $el.find(".blocked-note").show() - $el.find("label.blocked").addClass("selected") - - if task.is_iocaine - $el.find("label.iocaine").addClass("selected") - $el.on "click", ".button-green", (event) -> event.preventDefault() @@ -78,18 +70,6 @@ CreateEditTaskDirective = ($repo, $model, $rs, $rootscope, lightboxService) -> lightboxService.close($el) $rootscope.$broadcast(broadcastEvent, data) - $el.on "click", "label.blocked", (event) -> - event.preventDefault() - target = angular.element(event.currentTarget) - target.toggleClass("selected") - $scope.task.is_blocked = not $scope.task.is_blocked - $el.find(".blocked-note").toggle(400) - - $el.on "click", "label.iocaine", (event) -> - event.preventDefault() - angular.element(event.currentTarget).toggleClass("selected") - $scope.task.is_iocaine = not $scope.task.is_iocaine - $scope.$on "$destroy", -> $el.off() diff --git a/app/partials/backlog.jade b/app/partials/backlog.jade index 864dbf2c..f0235085 100644 --- a/app/partials/backlog.jade +++ b/app/partials/backlog.jade @@ -34,9 +34,12 @@ block content a(href="", title+"Create a new US", ng-click="ctrl.addNewUs('standard')", tg-check-permission="tg-check-permission", permission="add_us") You may want to create a new user story sidebar.menu-secondary.sidebar include views/modules/sprints - div.lightbox.lightbox_add-new-us(tg-lb-create-edit-userstory) - include views/modules/lightbox_add-new-us - div.lightbox.lightbox_add-bulk(tg-lb-create-bulk-userstories) - include views/modules/lightbox_add-bulk - div.lightbox.lightbox_add-sprint(tg-lb-create-edit-sprint) - include views/modules/lightbox_add-edit-sprint + + div.lightbox.lightbox-generic-form(tg-lb-create-edit-userstory) + include views/modules/lightbox-us-create-edit + + div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories) + include views/modules/lightbox-us-bulk + + div.lightbox.lightbox-sprint-add-edit(tg-lb-create-edit-sprint) + include views/modules/lightbox-sprint-add-edit diff --git a/app/partials/issues.jade b/app/partials/issues.jade index 6028cb88..4b3552d7 100644 --- a/app/partials/issues.jade +++ b/app/partials/issues.jade @@ -18,10 +18,10 @@ block content // Paginator is rended using js. div.paginator.issues-paginator - div.hidden.lightbox.lightbox_select_user(tg-lb-assignedto) + div.lightbox.lightbox-select-user(tg-lb-assignedto) - div.hidden.lightbox.lightbox_add-issue(tg-lb-create-issue) - include views/modules/lightbox_add-issue + div.lightbox.lightbox-create-issue(tg-lb-create-issue) + include views/modules/lightbox-create-issue - div.hidden.lightbox.lightbox_add-bulk(tg-lb-create-bulk-issues) - include views/modules/lightbox_add-bulk + div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-issues) + include views/modules/lightbox-issue-bulk diff --git a/app/partials/kanban.jade b/app/partials/kanban.jade index f1924fdc..4021c31c 100644 --- a/app/partials/kanban.jade +++ b/app/partials/kanban.jade @@ -22,10 +22,10 @@ block content //-include views/modules/list-filters-kanban include views/modules/kanban-table - div.lightbox.lightbox_add-new-us.hidden(tg-lb-create-edit-userstory) - include views/modules/lightbox_add-new-us + div.lightbox.lightbox-generic-form(tg-lb-create-edit-userstory) + include views/modules/lightbox-us-create-edit - div.lightbox.lightbox_add-bulk.hidden(tg-lb-create-bulk-userstories) - include views/modules/lightbox_add-bulk + div.lightbox.lightbox-generic-bulk(tg-lb-create-bulk-userstories) + include views/modules/lightbox-us-bulk - div.lightbox.lightbox_select_user.hidden(tg-lb-assignedto) + div.lightbox.lightbox-select-user.hidden(tg-lb-assignedto) diff --git a/app/partials/taskboard.jade b/app/partials/taskboard.jade index fb06bcd6..9cdf3e1e 100644 --- a/app/partials/taskboard.jade +++ b/app/partials/taskboard.jade @@ -19,9 +19,11 @@ block content include views/modules/taskboard-table - div.lightbox.lightbox_add-new-us.hidden(tg-lb-create-edit-task) - include views/modules/lightbox_add-edit-task - div.lightbox.lightbox_add-bulk.hidden(tg-lb-create-bulk-tasks) - include views/modules/lightbox_add-task-bulk - div.lightbox.lightbox_select_user.hidden(tg-lb-assignedto) + div.lightbox.lightbox-generic-form(tg-lb-create-edit-task) + include views/modules/lightbox-task-create-edit + + div.lightbox.lightbox-generic-bulk.lightbox-task-bulk(tg-lb-create-bulk-tasks) + include views/modules/lightbox-task-bulk + + div.lightbox.lightbox-select-user(tg-lb-assignedto) include views/modules/lightbox-assigned-to diff --git a/app/partials/views/modules/lightbox_add-issue.jade b/app/partials/views/modules/lightbox-create-issue.jade similarity index 100% rename from app/partials/views/modules/lightbox_add-issue.jade rename to app/partials/views/modules/lightbox-create-issue.jade diff --git a/app/partials/views/modules/lightbox_add-bulk.jade b/app/partials/views/modules/lightbox-issue-bulk.jade similarity index 100% rename from app/partials/views/modules/lightbox_add-bulk.jade rename to app/partials/views/modules/lightbox-issue-bulk.jade diff --git a/app/partials/views/modules/lightbox_add-edit-sprint.jade b/app/partials/views/modules/lightbox-sprint-add-edit.jade similarity index 100% rename from app/partials/views/modules/lightbox_add-edit-sprint.jade rename to app/partials/views/modules/lightbox-sprint-add-edit.jade diff --git a/app/partials/views/modules/lightbox_add-task-bulk.jade b/app/partials/views/modules/lightbox-task-bulk.jade similarity index 100% rename from app/partials/views/modules/lightbox_add-task-bulk.jade rename to app/partials/views/modules/lightbox-task-bulk.jade diff --git a/app/partials/views/modules/lightbox_add-edit-task.jade b/app/partials/views/modules/lightbox-task-create-edit.jade similarity index 73% rename from app/partials/views/modules/lightbox_add-edit-task.jade rename to app/partials/views/modules/lightbox-task-create-edit.jade index bc4957c1..093a60dc 100644 --- a/app/partials/views/modules/lightbox_add-edit-task.jade +++ b/app/partials/views/modules/lightbox-task-create-edit.jade @@ -5,28 +5,34 @@ form fieldset input(type="text", ng-model="task.subject", placeholder="A task subject", data-required="true", data-maxlength="500") + fieldset select(ng-model="task.status", ng-options="s.id as s.name for s in taskStatusList", placeholder="Task status") + fieldset select(ng-model="task.assigned_to", ng-options="s.id as s.full_name_display for s in users", placeholder="Assigned to") option(value="") Unassigned + fieldset input(type="text", placeholder="Tags", tg-tags, ng-model="task.tags") + fieldset textarea.description(placeholder="Type a short description", ng-model="task.description") - div.new-us-settings - fieldset - label.iocaine + + div.settings + fieldset.iocaine-flag + input(type="checkbox", ng-model="task.is_iocaine", name="iocaine-task", id="iocaine-task", ng-value="true") + label.iocaine(for="iocaine-task") span.icon.icon-iocaine(for="iocaine-task icon-iocaine") span Iocaine - input(type="checkbox", ng-model="task.is_iocaine", name="iocaine-task", id="iocaine-task") - fieldset - label.blocked(for="blocked-task") Blocked - input(type="checkbox", ng-model="task.is_blocked", name="blocked-task", id="blocked-task") - fieldset.blocked-note.hidden - textarea(placeholder="Why is this task blocked?", ng-model="task.blocked_note") + + fieldset.blocking-flag + input(type="checkbox", ng-model="task.is_blocked", name="blocked-task", id="blocked-task", ng-value="true") + label.blocked(for="blocked-task", tg-i18n="common.blocked") + + tg-blocking-message-input(watch="task.is_blocked", ng-model="task.blocked_note") a.button.button-green(href="", title="Save") span Create diff --git a/app/partials/views/modules/lightbox-us-bulk.jade b/app/partials/views/modules/lightbox-us-bulk.jade new file mode 100644 index 00000000..2c23256a --- /dev/null +++ b/app/partials/views/modules/lightbox-us-bulk.jade @@ -0,0 +1,8 @@ +a.close(href="", title="close") + span.icon.icon-delete +form + h2.title(tg-i18n="common.new-bulk") + fieldset + textarea(cols="200", wrap="off", tg-limit-line-length, tg-i18n="placeholder:common.one-item-line", ng-model="new.bulk", data-required="true", data-linewidth="200") + a.button.button-green(href="", tg-i18n="title:common.save") + span(tg-i18n="common.save") diff --git a/app/partials/views/modules/lightbox_add-new-us.jade b/app/partials/views/modules/lightbox-us-create-edit.jade similarity index 67% rename from app/partials/views/modules/lightbox_add-new-us.jade rename to app/partials/views/modules/lightbox-us-create-edit.jade index 983637d2..56781ba9 100644 --- a/app/partials/views/modules/lightbox_add-new-us.jade +++ b/app/partials/views/modules/lightbox-us-create-edit.jade @@ -10,24 +10,26 @@ form tg-i18n="placeholder:common.status") fieldset input(type="text", name="tags", placeholder="Tags", tg-tags, ng-model="us.tags") + fieldset textarea.description(name="description", ng-model="us.description", placeholder="Please add descriptive text to help others better understand this US") - div.new-us-settings - fieldset - label.requirement.team-requirement(for="team-requirement", tg-i18n="us.team-requirement") + div.settings + fieldset.team-requirement input(type="checkbox", name="team_requirement", ng-model="us.team_requirement", - id="team-requirement") - fieldset - label.requirement.client-requirement(for="client-requirement", tg-i18n="us.client-requirement") - input(type="checkbox", name="client_requirement", ng-model="us.client_requirement", - id="client-requirement") - fieldset - label.blocked(for="blocked-us", tg-i18n="common.blocked") - input(type="checkbox", name="is_blocked", ng-model="us.is_blocked", id="blocked-us") + id="team-requirement", ng-value="true") + label.requirement(for="team-requirement", tg-i18n="us.team-requirement") - fieldset.blocked-note.hidden - textarea(name="blocked_note", placeholder="Why is this user story blocked?", ng-model="us.blocked_note") + fieldset.client-requirement + input(type="checkbox", name="client_requirement", ng-model="us.client_requirement", + id="client-requirement", ng-value="true") + label.requirement(for="client-requirement", tg-i18n="us.client-requirement") + + fieldset.blocking-flag + input(type="checkbox", name="is_blocked", ng-model="us.is_blocked", id="blocked-us" ng-value="true") + label.blocked(for="blocked-us", tg-i18n="common.blocked") + + tg-blocking-message-input(watch="us.is_blocked", ng-model="us.blocked_note") a.button.button-green(href="", title="Save") span Create diff --git a/app/styles/modules/common/lightbox.scss b/app/styles/modules/common/lightbox.scss index 8105446c..0bcc7e5e 100644 --- a/app/styles/modules/common/lightbox.scss +++ b/app/styles/modules/common/lightbox.scss @@ -59,18 +59,21 @@ } } -.lightbox_add-new-us { +.lightbox-generic-form { form { @include table-flex-child(0, 600px, 0, 600px); } + fieldset { position: relative; } + textarea { margin-bottom: 1rem; max-height: 9rem; min-height: 7rem; } + label { @extend %button; @include transition(all .2s ease-in); @@ -89,7 +92,8 @@ vertical-align: middle; } } - .new-us-settings { + + .settings { align-content: flex-start; align-items: stretch; display: flex; @@ -97,6 +101,7 @@ flex-wrap: wrap; justify-content: flex-start; margin-bottom: 1rem; + fieldset { flex-basis: 30%; flex-grow: 1; @@ -107,6 +112,7 @@ margin: 0; } } + .requirement, .iocaine { &:hover { @@ -116,15 +122,8 @@ color: $white; } - &.selected { - @include transition(all .2s ease-in); - background: $fresh-taiga; - border: 1px solid $green-taiga; - span { - color: $white; - } - } } + .blocked { padding: 8px 30px; &:hover { @@ -133,20 +132,40 @@ border: 1px solid $red-light; color: $white; } - &.selected { - @include transition(all .2s ease-in); - background: $red; - border: 1px solid $red; - color: $white; + } + + + .client-requirement, + .team-requirement, + .iocaine-flag { + input { + &:checked { + +label { + background: $fresh-taiga; + color: $white; + } + } } } + + .blocking-flag { + input { + &:checked { + +label { + background: $red; + color: $white; + } + } + } + } + input[type="checkbox"] { display: none; } } } -.lightbox_add-bulk { +.lightbox-generic-bulk { form { @include table-flex-child(0, 600px, 0, 600px); } @@ -208,7 +227,7 @@ } } -.lightbox_add-sprint { +.lightbox-sprint-add-edit { form { @include table-flex-child(0, 600px, 0, 600px); } @@ -409,10 +428,11 @@ } } -.lightbox_add-issue { +.lightbox-create-issue { form { @include table-flex-child(0, 600px, 0, 600px); } + .fieldset-row { @include table-flex(); fieldset { @@ -423,12 +443,12 @@ } } } + textarea { margin-bottom: 1rem; max-height: 12rem; min-height: 8rem; } - } .lightbox_block { @@ -442,7 +462,7 @@ } } -.lightbox_select_user { +.lightbox-select-user { .form { @include table-flex-child(0, 600px, 0, 600px); }