commit
8267a24a50
|
@ -260,12 +260,13 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame) ->
|
||||||
choices[option.id] = option.name
|
choices[option.id] = option.name
|
||||||
|
|
||||||
#TODO: i18n
|
#TODO: i18n
|
||||||
title = "Delete"
|
title = "Delete value"
|
||||||
subtitle = value.name
|
subtitle = value.name
|
||||||
|
replacement = "All items with this value will be changed to"
|
||||||
if _.keys(choices).length == 0
|
if _.keys(choices).length == 0
|
||||||
return $confirm.error("You can't delete all values.")
|
return $confirm.error("You can't delete all values.")
|
||||||
|
|
||||||
return $confirm.askChoice(title, subtitle, choices).then (response) ->
|
return $confirm.askChoice(title, subtitle, choices, replacement).then (response) ->
|
||||||
onSucces = ->
|
onSucces = ->
|
||||||
$ctrl.loadValues().finally ->
|
$ctrl.loadValues().finally ->
|
||||||
response.finish()
|
response.finish()
|
||||||
|
|
|
@ -89,8 +89,10 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil
|
||||||
|
|
||||||
delete: ->
|
delete: ->
|
||||||
# TODO: i18n
|
# TODO: i18n
|
||||||
title = "Delete Role"
|
title = "Delete Role" # TODO: i18n
|
||||||
subtitle = @scope.role.name
|
subtitle = @scope.role.name
|
||||||
|
replacement = "All the users with this role will be moved to" # TODO: i18n
|
||||||
|
warning = "<strong>Be careful, all role estimations will be removed</strong>" # TODO: i18n
|
||||||
|
|
||||||
choices = {}
|
choices = {}
|
||||||
for role in @scope.roles
|
for role in @scope.roles
|
||||||
|
@ -98,9 +100,9 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil
|
||||||
choices[role.id] = role.name
|
choices[role.id] = role.name
|
||||||
|
|
||||||
if _.keys(choices).length == 0
|
if _.keys(choices).length == 0
|
||||||
return @confirm.error("You can't delete all values.")
|
return @confirm.error("You can't delete all values.") # TODO: i18n
|
||||||
|
|
||||||
return @confirm.askChoice(title, subtitle, choices).then (response) =>
|
return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) =>
|
||||||
promise = @repo.remove(@scope.role, {moveTo: response.selected})
|
promise = @repo.remove(@scope.role, {moveTo: response.selected})
|
||||||
promise.then =>
|
promise.then =>
|
||||||
@.loadProject()
|
@.loadProject()
|
||||||
|
@ -123,6 +125,47 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil
|
||||||
|
|
||||||
module.controller("RolesController", RolesController)
|
module.controller("RolesController", RolesController)
|
||||||
|
|
||||||
|
EditRoleDirective = ($repo, $confirm) ->
|
||||||
|
link = ($scope, $el, $attrs) ->
|
||||||
|
toggleView = ->
|
||||||
|
$el.find('.total').toggle()
|
||||||
|
$el.find('.edit-role').toggle()
|
||||||
|
|
||||||
|
submit = () ->
|
||||||
|
$scope.role.name = $el.find("input").val()
|
||||||
|
|
||||||
|
promise = $repo.save($scope.role)
|
||||||
|
|
||||||
|
promise.then ->
|
||||||
|
$confirm.notify("success")
|
||||||
|
|
||||||
|
promise.then null, (data) ->
|
||||||
|
$confirm.notify("error")
|
||||||
|
|
||||||
|
toggleView()
|
||||||
|
|
||||||
|
$el.on "click", "a.icon-edit", ->
|
||||||
|
toggleView()
|
||||||
|
$el.find("input").focus()
|
||||||
|
|
||||||
|
$el.on "click", "a.save", submit
|
||||||
|
|
||||||
|
$el.on "keyup", "input", ->
|
||||||
|
if event.keyCode == 13 # Enter key
|
||||||
|
submit()
|
||||||
|
else if event.keyCode == 27 # ESC key
|
||||||
|
toggleView()
|
||||||
|
|
||||||
|
$scope.$on "role:changed", ->
|
||||||
|
if $el.find('.edit-role').is(":visible")
|
||||||
|
toggleView()
|
||||||
|
|
||||||
|
$scope.$on "$destroy", ->
|
||||||
|
$el.off()
|
||||||
|
|
||||||
|
return {link:link}
|
||||||
|
|
||||||
|
module.directive("tgEditRole", ["$tgRepo", "$tgConfirm", EditRoleDirective])
|
||||||
|
|
||||||
RolesDirective = ->
|
RolesDirective = ->
|
||||||
link = ($scope, $el, $attrs) ->
|
link = ($scope, $el, $attrs) ->
|
||||||
|
|
|
@ -82,13 +82,24 @@ class ConfirmService extends taiga.Service
|
||||||
askOnDelete: (title, message) ->
|
askOnDelete: (title, message) ->
|
||||||
return @.ask(title, "Are you sure you want to delete?", message) #TODO: i18n
|
return @.ask(title, "Are you sure you want to delete?", message) #TODO: i18n
|
||||||
|
|
||||||
askChoice: (title, subtitle, choices, lightboxSelector=".lightbox-ask-choice") ->
|
askChoice: (title, subtitle, choices, replacement, warning, lightboxSelector=".lightbox-ask-choice") ->
|
||||||
el = angular.element(lightboxSelector)
|
el = angular.element(lightboxSelector)
|
||||||
|
|
||||||
# Render content
|
# Render content
|
||||||
el.find("h2.title").html(title)
|
el.find(".title").html(title)
|
||||||
el.find("span.subtitle").html(subtitle)
|
el.find(".subtitle").html(subtitle)
|
||||||
choicesField = el.find("select.choices")
|
|
||||||
|
if replacement
|
||||||
|
el.find(".replacement").html(replacement)
|
||||||
|
else
|
||||||
|
el.find(".replacement").remove()
|
||||||
|
|
||||||
|
if warning
|
||||||
|
el.find(".warning").html(warning)
|
||||||
|
else
|
||||||
|
el.find(".warning").remove()
|
||||||
|
|
||||||
|
choicesField = el.find(".choices")
|
||||||
choicesField.html('')
|
choicesField.html('')
|
||||||
_.each choices, (value, key) ->
|
_.each choices, (value, key) ->
|
||||||
choicesField.append(angular.element("<option value='#{key}'>#{value}</option>"))
|
choicesField.append(angular.element("<option value='#{key}'>#{value}</option>"))
|
||||||
|
@ -168,9 +179,9 @@ class ConfirmService extends taiga.Service
|
||||||
el = angular.element(selector)
|
el = angular.element(selector)
|
||||||
|
|
||||||
if title
|
if title
|
||||||
el.find("h4").html(title)
|
el.find("h4").html(title)
|
||||||
else
|
else
|
||||||
el.find("h4").html(NOTIFICATION_MSG[type].title)
|
el.find("h4").html(NOTIFICATION_MSG[type].title)
|
||||||
|
|
||||||
if message
|
if message
|
||||||
el.find("p").html(message)
|
el.find("p").html(message)
|
||||||
|
|
|
@ -17,9 +17,15 @@ block content
|
||||||
.action-buttons
|
.action-buttons
|
||||||
a.button.button-red.delete-role(href="", title="Delete", ng-click="ctrl.delete()") Delete
|
a.button.button-red.delete-role(href="", title="Delete", ng-click="ctrl.delete()") Delete
|
||||||
|
|
||||||
p.total
|
|
||||||
| {{ role.name }}
|
div(tg-edit-role)
|
||||||
span ({{ role.members_count }} members with this role)
|
.edit-role.hidden
|
||||||
|
input(type="text", value="{{ role.name }}")
|
||||||
|
a.save.icon.icon-floppy(href="", title="Save")
|
||||||
|
|
||||||
|
p.total
|
||||||
|
span.role-name(title="{{ role.members_count }} members with this role") {{ role.name }}
|
||||||
|
a.edit-value.icon.icon-edit
|
||||||
|
|
||||||
div.any-computable-role(ng-hide="anyComputableRole") Be careful, no role in your project will be able to estimate the point value for user stories
|
div.any-computable-role(ng-hide="anyComputableRole") Be careful, no role in your project will be able to estimate the point value for user stories
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
a.close(href="", title="close")
|
a.close(href="", title="close")
|
||||||
span.icon.icon-delete
|
span.icon.icon-delete
|
||||||
form
|
form
|
||||||
h2.title Delete User Story
|
h2.title
|
||||||
p
|
p.question
|
||||||
span.question Are you sure you want to delete?
|
p.subtitle
|
||||||
span.subtitle #125 Crear el perfil de usuario senior en el admin
|
p.replacement
|
||||||
span.replacement What value do you want to use as replacement?
|
select.choices
|
||||||
select.choices
|
p.warning
|
||||||
|
|
||||||
div.options
|
div.options
|
||||||
a.button.button-green(href="", title="Accept")
|
a.button.button-green(href="", title="Accept")
|
||||||
span Accept
|
span Accept
|
||||||
|
|
|
@ -129,7 +129,17 @@ body {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
.action-buttons {
|
.action-buttons {
|
||||||
@include flex-shrink(0);
|
@include flex-shrink(0);
|
||||||
padding-left: 1rem;
|
}
|
||||||
|
.button {
|
||||||
|
color: $white;
|
||||||
|
float: right;
|
||||||
|
margin-left: 10px;
|
||||||
|
&:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
|
|
@ -1,13 +1,3 @@
|
||||||
.wiki-content {
|
.wiki-content {
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
.action-buttons {
|
|
||||||
.button {
|
|
||||||
color: $white;
|
|
||||||
float: right;
|
|
||||||
margin-left: 10px;
|
|
||||||
&:hover {
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,11 +4,44 @@
|
||||||
@extend %title;
|
@extend %title;
|
||||||
background-color: $whitish;
|
background-color: $whitish;
|
||||||
color: $grayer;
|
color: $grayer;
|
||||||
padding: .5rem 1rem;
|
padding: 1rem;
|
||||||
span {
|
&:hover {
|
||||||
@extend %medium;
|
.edit-value {
|
||||||
@extend %text;
|
@include transition(opacity .3s linear);
|
||||||
padding-left: .5rem;
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.role-name {
|
||||||
|
@extend %xlarge;
|
||||||
|
@extend %title;
|
||||||
|
color: $grayer;
|
||||||
|
}
|
||||||
|
.edit-value {
|
||||||
|
@include transition(opacity .3s linear);
|
||||||
|
@extend %medium;
|
||||||
|
color: $gray-light;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: .5rem;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.edit-role {
|
||||||
|
@include table-flex(stretch, left, center, row, wrap);
|
||||||
|
background-color: $whitish;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: .5rem;
|
||||||
|
input {
|
||||||
|
background-color: $white;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.icon-floppy {
|
||||||
|
@include transition(color.3s linear);
|
||||||
|
color: $gray-light;
|
||||||
|
margin-left: .5rem;
|
||||||
|
&:hover {
|
||||||
|
@include transition(color.3s linear);
|
||||||
|
color: $green-taiga;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.any-computable-role {
|
.any-computable-role {
|
||||||
|
|
|
@ -311,13 +311,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox-ask-choice {
|
.lightbox-ask-choice {
|
||||||
|
text-align: center;
|
||||||
form {
|
form {
|
||||||
@include table-flex-child(0, 420px, 0, 420px);
|
@include table-flex-child(0, 420px, 0);
|
||||||
}
|
}
|
||||||
.question,
|
.question,
|
||||||
.subtitle {
|
.subtitle {
|
||||||
display: block;
|
display: block;
|
||||||
line-height: 2rem;
|
line-height: 1.5rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
.subtitle {
|
.subtitle {
|
||||||
|
@ -326,7 +327,9 @@
|
||||||
}
|
}
|
||||||
.replacement {
|
.replacement {
|
||||||
display: block;
|
display: block;
|
||||||
text-align: center;
|
span {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.options {
|
.options {
|
||||||
@include table-flex();
|
@include table-flex();
|
||||||
|
|
Loading…
Reference in New Issue