diff --git a/app/coffee/modules/common/tags.coffee b/app/coffee/modules/common/tags.coffee index 63357422..aa3e73bd 100644 --- a/app/coffee/modules/common/tags.coffee +++ b/app/coffee/modules/common/tags.coffee @@ -43,6 +43,9 @@ TagsDirective = -> $ctrl.$formatters.push(formatter) $ctrl.$parsers.push(parser) + $scope.$on "$destroy", -> + $el.off() + return { require: "ngModel" link: link @@ -83,6 +86,9 @@ ColorizeTagsDirective = -> $scope.$watch $attrs.tgColorizeTags, (tags) -> render(tags) if tags? + $scope.$on "$destroy", -> + $el.off() + return {link: link} module.directive("tgColorizeTags", ColorizeTagsDirective) @@ -99,7 +105,7 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> Add tag - + """ @@ -114,23 +120,24 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> <% }); %>""") - renderTags = ($el, tags, editable, tagsColors) -> - ctx = { - tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]}) - editable: editable - } - html = templateTags(ctx) - $el.find("div.tags-container").html(html) - - normalizeTags = (tags) -> - tags = _.map(tags, trim) - tags = _.map(tags, (x) -> x.toLowerCase()) - return _.uniq(tags) - link = ($scope, $el, $attrs, $model) -> editable = false $el.addClass("tags-block") + $el.find("input").hide() + + renderTags = ($el, tags, editable, tagsColors) -> + ctx = { + tags: _.map(tags, (t) -> {name: t, color: tagsColors[t]}) + editable: editable + } + html = templateTags(ctx) + $el.find("div.tags-container").html(html) + + normalizeTags = (tags) -> + tags = _.map(tags, trim) + tags = _.map(tags, (x) -> x.toLowerCase()) + return _.uniq(tags) addValue = (value) -> value = trim(value) @@ -158,20 +165,9 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> input.autocomplete("close") $el.find('.save').hide() - $scope.$watch $attrs.ngModel, (val) -> - tags_colors = if $scope.project?.tags_colors? then $scope.project.tags_colors else [] - renderTags($el, val, editable, tags_colors) - - if val? and val.length > 0 - $el.find("span.add-tag-text").hide() - else - $el.find("span.add-tag-text").show() - - bindOnce $scope, "project", (project) -> # If not editable, no tags preloading is needed. - editable = if $attrs.editable == "true" then true else false - editable = editable and project.my_permissions.indexOf($attrs.requiredPerm) != -1 + editable = $attrs.editable == "true" and project.my_permissions.indexOf($attrs.requiredPerm) != -1 if not editable $el.find("input").remove() @@ -196,7 +192,7 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> }) $el.on "keypress", "input", (event) -> - return if event.keyCode != 13 + return if event.keyCode not in [13, 27] event.preventDefault() $el.on "keyup", "input", (event) -> @@ -204,6 +200,11 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> if event.keyCode == 13 saveInputTag() + else if event.keyCode == 27 + $el.find('.save').hide() + $el.find("input").hide() + $el.find("input").val('') + $el.find('.add-tag').show() else if target.val().length $el.find('.save').show() else @@ -215,7 +216,7 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> event.preventDefault() target = angular.element(event.currentTarget) target.hide() - target.siblings('input').removeClass('hidden') + target.siblings('input').show() $el.on "click", ".icon-delete", (event) -> event.preventDefault() @@ -238,6 +239,18 @@ TagLineDirective = ($rootscope, $log, $rs, $tgrepo, $confirm) -> promise.then null, -> $confirm.notify("error") + $scope.$watch $attrs.ngModel, (val) -> + tags_colors = if $scope.project?.tags_colors? then $scope.project.tags_colors else [] + renderTags($el, val, editable, tags_colors) + + if val? and val.length > 0 + $el.find("span.add-tag-text").hide() + else + $el.find("span.add-tag-text").show() + + $scope.$on "$destroy", -> + $el.off() + return { link:link, require:"ngModel"