Create new custom attributes
parent
408c6f95cc
commit
c8ad480846
|
@ -369,7 +369,6 @@ class ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.Pa
|
||||||
@scope.$emit('project:loaded', project)
|
@scope.$emit('project:loaded', project)
|
||||||
return project
|
return project
|
||||||
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# Custom Attribute
|
# Custom Attribute
|
||||||
#########################
|
#########################
|
||||||
|
@ -380,6 +379,14 @@ class ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.Pa
|
||||||
@scope.maxOrder = _.max(customAttributes, "order").order
|
@scope.maxOrder = _.max(customAttributes, "order").order
|
||||||
return customAttributes
|
return customAttributes
|
||||||
|
|
||||||
|
createCustomAttribute: (attrValues) =>
|
||||||
|
return @repo.create("custom-attributes/#{@scope.type}", attrValues)
|
||||||
|
|
||||||
|
saveCustomAttribute: (attrModel) =>
|
||||||
|
return @repo.save(attrModel)
|
||||||
|
|
||||||
|
deleteCustomAttribute: (attrModel) =>
|
||||||
|
return @repo.remove(attrModel)
|
||||||
|
|
||||||
moveCustomAttributes: (attrModel, newIndex) =>
|
moveCustomAttributes: (attrModel, newIndex) =>
|
||||||
customAttributes = @scope.customAttributes
|
customAttributes = @scope.customAttributes
|
||||||
|
@ -392,11 +399,6 @@ class ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.Pa
|
||||||
|
|
||||||
@repo.saveAll(customAttributes)
|
@repo.saveAll(customAttributes)
|
||||||
|
|
||||||
deleteCustomAttribute: (attrModel) =>
|
|
||||||
return @repo.remove(attrModel)
|
|
||||||
|
|
||||||
saveCustomAttribute: (attrModel) =>
|
|
||||||
return @repo.save(attrModel)
|
|
||||||
|
|
||||||
module.controller("ProjectCustomAttributesController", ProjectCustomAttributesController)
|
module.controller("ProjectCustomAttributesController", ProjectCustomAttributesController)
|
||||||
|
|
||||||
|
@ -434,6 +436,88 @@ ProjectCustomAttributesDirective = ($log, $confirm, animationFrame) ->
|
||||||
# New custom attribute
|
# New custom attribute
|
||||||
##################################
|
##################################
|
||||||
|
|
||||||
|
showCreateForm = ->
|
||||||
|
$el.find(".js-new-custom-field").removeClass("hidden")
|
||||||
|
|
||||||
|
hideCreateForm = ->
|
||||||
|
$el.find(".js-new-custom-field").addClass("hidden")
|
||||||
|
|
||||||
|
showAddButton = ->
|
||||||
|
$el.find(".js-add-custom-field-button").removeClass("hidden")
|
||||||
|
|
||||||
|
hideAddButton = ->
|
||||||
|
$el.find(".js-add-custom-field-button").addClass("hidden")
|
||||||
|
|
||||||
|
showCancelButton = ->
|
||||||
|
$el.find(".js-cancel-new-custom-field-button").removeClass("hidden")
|
||||||
|
|
||||||
|
hideCancelButton = ->
|
||||||
|
$el.find(".js-cancel-new-custom-field-button").addClass("hidden")
|
||||||
|
|
||||||
|
resetNewAttr = ->
|
||||||
|
$scope.newAttr = {}
|
||||||
|
|
||||||
|
create = (formEl) ->
|
||||||
|
form = formEl.checksley()
|
||||||
|
return if not form.validate()
|
||||||
|
|
||||||
|
onSucces = =>
|
||||||
|
$ctrl.loadCustomAttributes()
|
||||||
|
hideCreateForm()
|
||||||
|
resetNewAttr()
|
||||||
|
$confirm.notify("success")
|
||||||
|
|
||||||
|
onError = (data) =>
|
||||||
|
form.setErrors(data)
|
||||||
|
$confirm.notify("error")
|
||||||
|
|
||||||
|
attr = $scope.newAttr
|
||||||
|
attr.project = $scope.projectId
|
||||||
|
attr.order = if $scope.maxOrder then $scope.maxOrder + 1 else 1
|
||||||
|
|
||||||
|
$ctrl.createCustomAttribute(attr).then(onSucces, onError)
|
||||||
|
|
||||||
|
cancelCreate = ->
|
||||||
|
hideCreateForm()
|
||||||
|
resetNewAttr()
|
||||||
|
|
||||||
|
$scope.$watch "customAttributes", (customAttributes) ->
|
||||||
|
return if not customAttributes
|
||||||
|
|
||||||
|
if customAttributes.length == 0
|
||||||
|
hideCancelButton()
|
||||||
|
hideAddButton()
|
||||||
|
showCreateForm()
|
||||||
|
else
|
||||||
|
hideCreateForm()
|
||||||
|
showAddButton()
|
||||||
|
showCancelButton()
|
||||||
|
|
||||||
|
$el.on "click", ".js-add-custom-field-button", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
showCreateForm()
|
||||||
|
|
||||||
|
$el.on "click", ".js-create-custom-field-button", debounce 2000, (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
formEl = target.closest("form")
|
||||||
|
|
||||||
|
create(formEl)
|
||||||
|
|
||||||
|
$el.on "click", ".js-cancel-new-custom-field-button", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
cancelCreate()
|
||||||
|
|
||||||
|
$el.on "keyup", ".js-new-custom-field input", (event) ->
|
||||||
|
if event.keyCode == 13 # Enter
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
formEl = target.closest("form")
|
||||||
|
create(formEl)
|
||||||
|
else if event.keyCode == 27 # Esc
|
||||||
|
cancelCreate()
|
||||||
|
|
||||||
##################################
|
##################################
|
||||||
# Edit custom attribute
|
# Edit custom attribute
|
||||||
##################################
|
##################################
|
||||||
|
@ -451,17 +535,25 @@ ProjectCustomAttributesDirective = ($log, $confirm, animationFrame) ->
|
||||||
formEl.scope().attr.revert()
|
formEl.scope().attr.revert()
|
||||||
|
|
||||||
update = (formEl) ->
|
update = (formEl) ->
|
||||||
onSucces = ->
|
form = formEl.checksley()
|
||||||
|
return if not form.validate()
|
||||||
|
|
||||||
|
onSucces = =>
|
||||||
$ctrl.loadCustomAttributes()
|
$ctrl.loadCustomAttributes()
|
||||||
hideEditForm(formEl)
|
hideEditForm(formEl)
|
||||||
$confirm.notify("success")
|
$confirm.notify("success")
|
||||||
|
|
||||||
onError = ->
|
onError = (data) =>
|
||||||
|
form.setErrors(data)
|
||||||
$confirm.notify("error")
|
$confirm.notify("error")
|
||||||
|
|
||||||
attr = formEl.scope().attr
|
attr = formEl.scope().attr
|
||||||
$ctrl.saveCustomAttribute(attr).then(onSucces, onError)
|
$ctrl.saveCustomAttribute(attr).then(onSucces, onError)
|
||||||
|
|
||||||
|
cancelUpdate = (formEl) ->
|
||||||
|
hideEditForm(formEl)
|
||||||
|
revertChangesInCustomAttribute(formEl)
|
||||||
|
|
||||||
$el.on "click", ".js-edit-custom-field-button", (event) ->
|
$el.on "click", ".js-edit-custom-field-button", (event) ->
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
target = angular.element(event.currentTarget)
|
target = angular.element(event.currentTarget)
|
||||||
|
@ -469,21 +561,30 @@ ProjectCustomAttributesDirective = ($log, $confirm, animationFrame) ->
|
||||||
|
|
||||||
showEditForm(formEl)
|
showEditForm(formEl)
|
||||||
|
|
||||||
$el.on "click", ".js-cancel-edit-custom-field-button", (event) ->
|
$el.on "click", ".js-update-custom-field-button", debounce 2000, (event) ->
|
||||||
event.preventDefault()
|
|
||||||
target = angular.element(event.currentTarget)
|
|
||||||
formEl = target.closest("form")
|
|
||||||
|
|
||||||
hideEditForm(formEl)
|
|
||||||
revertChangesInCustomAttribute(formEl)
|
|
||||||
|
|
||||||
$el.on "click", ".js-update-custom-field-button", (event) ->
|
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
target = angular.element(event.currentTarget)
|
target = angular.element(event.currentTarget)
|
||||||
formEl = target.closest("form")
|
formEl = target.closest("form")
|
||||||
|
|
||||||
update(formEl)
|
update(formEl)
|
||||||
|
|
||||||
|
$el.on "click", ".js-cancel-edit-custom-field-button", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
formEl = target.closest("form")
|
||||||
|
|
||||||
|
cancelUpdate(formEl)
|
||||||
|
|
||||||
|
$el.on "keyup", ".js-edit-custom-field input", (event) ->
|
||||||
|
if event.keyCode == 13 # Enter
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
formEl = target.closest("form")
|
||||||
|
update(formEl)
|
||||||
|
else if event.keyCode == 27 # Esc
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
formEl = target.closest("form")
|
||||||
|
cancelUpdate(formEl)
|
||||||
|
|
||||||
##################################
|
##################################
|
||||||
# Delete custom attribute
|
# Delete custom attribute
|
||||||
##################################
|
##################################
|
||||||
|
@ -504,7 +605,7 @@ ProjectCustomAttributesDirective = ($log, $confirm, animationFrame) ->
|
||||||
|
|
||||||
$ctrl.deleteCustomAttribute(attr).then(onSucces, onError)
|
$ctrl.deleteCustomAttribute(attr).then(onSucces, onError)
|
||||||
|
|
||||||
$el.on "click", ".js-delete-custom-field-button", (event) ->
|
$el.on "click", ".js-delete-custom-field-button", debounce 2000, (event) ->
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
target = angular.element(event.currentTarget)
|
target = angular.element(event.currentTarget)
|
||||||
formEl = target.closest("form")
|
formEl = target.closest("form")
|
||||||
|
|
|
@ -11,6 +11,7 @@ div.wrapper(tg-project-custom-attributes, ng-controller="ProjectCustomAttributes
|
||||||
p.admin-subtitle Specify here issue custom fields. The new field will appear on your issue detail.
|
p.admin-subtitle Specify here issue custom fields. The new field will appear on your issue detail.
|
||||||
|
|
||||||
div.custom-field-options
|
div.custom-field-options
|
||||||
a.button.button-green.js-add-custom-field(href="",title="Add a custom field in issues") Add custom field
|
a.button.button-green.js-add-custom-field-button(href="",title="Add a custom field in issues")
|
||||||
|
| Add custom field
|
||||||
|
|
||||||
include ../includes/modules/admin/admin-custom-attributes
|
include ../includes/modules/admin/admin-custom-attributes
|
||||||
|
|
|
@ -11,6 +11,7 @@ div.wrapper(tg-project-custom-attributes, ng-controller="ProjectCustomAttributes
|
||||||
p.admin-subtitle Specify here task custom fields. The new field will appear on your task detail.
|
p.admin-subtitle Specify here task custom fields. The new field will appear on your task detail.
|
||||||
|
|
||||||
div.custom-field-options
|
div.custom-field-options
|
||||||
a.button.button-green.js-add-custom-field(href="",title="Add a custom field in tasks") Add custom field
|
a.button.button-green.js-add-custom-field-button(href="",title="Add a custom field in tasks")
|
||||||
|
| Add custom field
|
||||||
|
|
||||||
include ../includes/modules/admin/admin-custom-attributes
|
include ../includes/modules/admin/admin-custom-attributes
|
||||||
|
|
|
@ -11,6 +11,7 @@ div.wrapper(tg-project-custom-attributes, ng-controller="ProjectCustomAttributes
|
||||||
p.admin-subtitle Specify here user story custom fields. The new field will appear on your user story detail.
|
p.admin-subtitle Specify here user story custom fields. The new field will appear on your user story detail.
|
||||||
|
|
||||||
div.custom-field-options
|
div.custom-field-options
|
||||||
a.button.button-green.js-add-custom-field(href="",title="Add a custom field in user stories") Add custom field
|
a.button.button-green.js-add-custom-field-button(href="",title="Add a custom field in user stories")
|
||||||
|
| Add custom field
|
||||||
|
|
||||||
include ../includes/modules/admin/admin-custom-attributes
|
include ../includes/modules/admin/admin-custom-attributes
|
||||||
|
|
|
@ -23,24 +23,26 @@ section.custom-fields-table.basic-table
|
||||||
|
|
||||||
div.row.single-custom-field.js-edit-custom-field.hidden
|
div.row.single-custom-field.js-edit-custom-field.hidden
|
||||||
fieldset.custom-name
|
fieldset.custom-name
|
||||||
input(type="text", placeholder="Set your custom field name", ng-model="attr.name",
|
input(type="text", name="name", placeholder="Set your custom field name",
|
||||||
data-required="true" data-maxlength="64")
|
ng-model="attr.name", data-required="true" data-maxlength="64")
|
||||||
fieldset.custom-description
|
fieldset.custom-description
|
||||||
input(type="text", placeholder="Set your custom field description", ng-model="attr.description")
|
input(type="text", name="description", placeholder="Set your custom field description",
|
||||||
|
ng-model="attr.description")
|
||||||
|
|
||||||
fieldset.custom-options
|
fieldset.custom-options
|
||||||
div.custom-options-wrapper
|
div.custom-options-wrapper
|
||||||
a.js-update-custom-field-button.icon.icon-floppy(href="", title="Update Custom Field")
|
a.js-update-custom-field-button.icon.icon-floppy(href="", title="Update Custom Field")
|
||||||
a.js-cancel-edit-custom-field-button.icon.icon-delete(href="", title="Cancel edition")
|
a.js-cancel-edit-custom-field-button.icon.icon-delete(href="", title="Cancel edition")
|
||||||
|
|
||||||
form.row.single-custom-field.js-new-custom-field.hidden(tg-new-custom-attribute)
|
form.row.single-custom-field.js-new-custom-field.hidden
|
||||||
fieldset.custom-name
|
fieldset.custom-name
|
||||||
input(type="text", placeholder="Set your custom field name", ng-model="newAttr.name",
|
input(type="text", name="name", placeholder="Set your custom field name",
|
||||||
data-required="true", data-maxlength="64")
|
ng-model="newAttr.name", data-required="true", data-maxlength="64")
|
||||||
fieldset.custom-description
|
fieldset.custom-description
|
||||||
input(type="text", placeholder="Set your custom field description", ng-model="newAttr.description")
|
input(type="text", name="description", placeholder="Set your custom field description",
|
||||||
|
ng-model="newAttr.description")
|
||||||
|
|
||||||
fieldset.custom-options
|
fieldset.custom-options
|
||||||
div.custom-options-wrapper
|
div.custom-options-wrapper
|
||||||
a.js-save-custom-field-button.icon.icon-floppy(href="", title="Save Custom Field")
|
a.js-create-custom-field-button.icon.icon-floppy(href="", title="Save Custom Field")
|
||||||
a.js-cancel-new-custom-field-button.icon.icon-delete(href="", title="Cancel creation")
|
a.js-cancel-new-custom-field-button.icon.icon-delete(href="", title="Cancel creation")
|
||||||
|
|
Loading…
Reference in New Issue