diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee
index 8c6e0a66..83d2472a 100644
--- a/app/coffee/modules/userstories/detail.coffee
+++ b/app/coffee/modules/userstories/detail.coffee
@@ -504,107 +504,119 @@ module.directive("tgUsStatusButton", ["$rootScope", "$tgRepo", "$tgConfirm", "$t
#############################################################################
UsTeamRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading) ->
- template = _.template("""
+ template = """
- """)
+ """
link = ($scope, $el, $attrs, $model) ->
- render = _.once (us) ->
- $el.html(template())
- if $scope.project.my_permissions.indexOf("modify_us") == -1
- $el.find('label').css("cursor", "auto")
-
- refresh = (us) ->
- if us?.team_requirement
- $el.find('.team-requirement').addClass('active')
- else
- $el.find('.team-requirement').removeClass('active')
+ canEdit = ->
+ return $scope.project.my_permissions.indexOf("modify_us") != -1
$scope.$watch $attrs.ngModel, (us) ->
return if not us
- render(us)
- refresh(us)
+
+ if canEdit()
+ $el.find('label').css("cursor", "pointer")
+
+ if us.team_requirement
+ $el.find('.team-requirement').addClass('active')
+ else
+ $el.find('.team-requirement').removeClass('active')
$scope.$on "$destroy", ->
$el.off()
$el.on "click", ".team-requirement", (event) ->
- if $scope.project.my_permissions.indexOf("modify_us") != -1
- us = $model.$modelValue.clone()
- us.team_requirement = not us.team_requirement
+ return if not canEdit()
+
+ us = $model.$modelValue.clone()
+ us.team_requirement = not us.team_requirement
+ $model.$setViewValue(us)
+
+ $loading.start($el.find("label"))
+ promise = $tgrepo.save($model.$modelValue)
+ promise.then =>
+ $loading.finish($el.find("label"))
+ $rootscope.$broadcast("history:reload")
+ if us.team_requirement
+ $el.find('.team-requirement').addClass('active')
+ else
+ $el.find('.team-requirement').removeClass('active')
+ promise.then null, ->
+ $loading.finish($el.find("label"))
+ $confirm.notify("error")
+ us.revert()
$model.$setViewValue(us)
- $loading.start($el.find('label'))
- promise = $tgrepo.save($model.$modelValue)
- promise.then ->
- $loading.finish($el.find('label'))
- $rootscope.$broadcast("history:reload")
- promise.then null, ->
- $loading.finish($el.find('label'))
- $confirm.notify("error")
- us.revert()
- $model.$setViewValue(us)
+
+ $el.find('label').css("cursor", "auto")
return {
link: link
restrict: "EA"
require: "ngModel"
+ template: template
}
module.directive("tgUsTeamRequirementButton", ["$rootScope", "$tgRepo", "$tgConfirm", "$tgLoading", UsTeamRequirementButtonDirective])
-
#############################################################################
## User story client requirements button directive
#############################################################################
UsClientRequirementButtonDirective = ($rootscope, $tgrepo, $confirm, $loading) ->
- template = _.template("""
+ template = """
- """)
+ """
link = ($scope, $el, $attrs, $model) ->
- render = _.once (us) ->
- $el.html(template())
- if $scope.project.my_permissions.indexOf("modify_us") == -1
- $el.find('label').css("cursor", "auto")
+ canEdit = ->
+ return $scope.project.my_permissions.indexOf("modify_us") != -1
+
+ $scope.$watch $attrs.ngModel, (us) ->
+ return if not us
+
+ if canEdit()
+ $el.find('label').css("cursor", "pointer")
- refresh = (us) ->
if us?.client_requirement
$el.find('.client-requirement').addClass('active')
else
$el.find('.client-requirement').removeClass('active')
- $scope.$watch $attrs.ngModel, (us) ->
- return if not us
- render(us)
- refresh(us)
-
$scope.$on "$destroy", ->
$el.off()
$el.on "click", ".client-requirement", (event) ->
- if $scope.project.my_permissions.indexOf("modify_us") != -1
- us = $model.$modelValue.clone()
- us.client_requirement = not us.client_requirement
+ return if not canEdit()
+
+ us = $model.$modelValue.clone()
+ us.client_requirement = not us.client_requirement
+ $model.$setViewValue(us)
+
+ $loading.start($el.find("label"))
+ promise = $tgrepo.save($model.$modelValue)
+ promise.then =>
+ $loading.finish($el.find("label"))
+ $rootscope.$broadcast("history:reload")
+ if us.client_requirement
+ $el.find('.client-requirement').addClass('active')
+ else
+ $el.find('.client-requirement').removeClass('active')
+ promise.then null, ->
+ $loading.finish($el.find("label"))
+ $confirm.notify("error")
+ us.revert()
$model.$setViewValue(us)
- $loading.start($el.find("label"))
- promise = $tgrepo.save($model.$modelValue)
- promise.then ->
- $loading.finish($el.find("label"))
- $rootscope.$broadcast("history:reload")
- refresh(us)
- promise.then null, ->
- $loading.finish($el.find("label"))
- $confirm.notify("error")
- us.revert()
- $model.$setViewValue(us)
- refresh(us)
+
+ $el.find('label').css("cursor", "auto")
return {
link: link
restrict: "EA"
require: "ngModel"
+ template: template
}
+
module.directive("tgUsClientRequirementButton", ["$rootScope", "$tgRepo", "$tgConfirm", "$tgLoading", UsClientRequirementButtonDirective])
diff --git a/app/partials/us-detail.jade b/app/partials/us-detail.jade
index d31bd0bf..90e7b600 100644
--- a/app/partials/us-detail.jade
+++ b/app/partials/us-detail.jade
@@ -58,8 +58,8 @@ block content
section.watchers(tg-watchers, ng-model="us")
section.us-detail-settings
- fieldset(tg-us-team-requirement-button, ng-model="us")
- fieldset(tg-us-client-requirement-button, ng-model="us")
+ tg-us-team-requirement-button(ng-model="us")
+ tg-us-client-requirement-button(ng-model="us")
div(tg-check-permission="modify_us", tg-block-button, ng-model="us")
div(tg-check-permission="delete_us", tg-delete-button,
on-delete-go-to-url="project-backlog",