From b900118affcb1506316b556d0cf1d01064a5ada3 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 4 Nov 2014 12:19:07 +0100 Subject: [PATCH] fix #1505 - The user only can drop if the backlog filters are closed --- app/coffee/modules/backlog/main.coffee | 30 +++++++++++-------- app/coffee/modules/backlog/sortable.coffee | 16 +++++++++- app/js/jquery-ui.drag-multiple-custom.js | 3 +- app/partials/views/modules/backlog-table.jade | 2 +- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 85c59b1a..a80df6e4 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -57,6 +57,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @scope.sectionName = "Backlog" @showTags = false + @activeFilters = false @.initializeEventHandlers() @@ -122,6 +123,9 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @showTags = !@showTags @rs.userstories.storeShowTags(@scope.projectId, @showTags) + toggleActiveFilters: -> + @activeFilters = !@activeFilters + loadProjectStats: -> return @rs.projects.stats(@scope.projectId).then (stats) => @scope.stats = stats @@ -150,21 +154,20 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F return sprints resetFilters: -> - @scope.$apply => - selectedTags = _.filter(@scope.filters.tags, "selected") - selectedStatuses = _.filter(@scope.filters.statuses, "selected") + selectedTags = _.filter(@scope.filters.tags, "selected") + selectedStatuses = _.filter(@scope.filters.statuses, "selected") - @scope.filtersQ = "" + @scope.filtersQ = "" - _.each [selectedTags, selectedStatuses], (filterGrp) => - _.each filterGrp, (item) => - filters = @scope.filters[item.type] - filter = _.find(filters, {id: taiga.toString(item.id)}) - filter.selected = false + _.each [selectedTags, selectedStatuses], (filterGrp) => + _.each filterGrp, (item) => + filters = @scope.filters[item.type] + filter = _.find(filters, {id: taiga.toString(item.id)}) + filter.selected = false - @.unselectFilter(item.type, item.id) + @.unselectFilter(item.type, item.id) - @.loadUserstories() + @.loadUserstories() loadUserstories: -> @scope.httpParams = @.getUrlFilters() @@ -623,13 +626,16 @@ BacklogDirective = ($repo, $rootscope) -> if !sidebar.hasClass("active") $ctrl.resetFilters() + $ctrl.toggleActiveFilters() + ## Filters Link linkFilters = ($scope, $el, $attrs, $ctrl) -> $scope.filtersSearch = {} $el.on "click", "#show-filters-button", (event) -> event.preventDefault() - showHideFilter($scope, $el, $ctrl) + $scope.$apply -> + showHideFilter($scope, $el, $ctrl) link = ($scope, $el, $attrs, $rootscope) -> $ctrl = $el.controller() diff --git a/app/coffee/modules/backlog/sortable.coffee b/app/coffee/modules/backlog/sortable.coffee index e568f742..cbb485c6 100644 --- a/app/coffee/modules/backlog/sortable.coffee +++ b/app/coffee/modules/backlog/sortable.coffee @@ -39,7 +39,7 @@ deleteElement = (el) -> el.off() el.remove() -BacklogSortableDirective = ($repo, $rs, $rootscope) -> +BacklogSortableDirective = ($repo, $rs, $rootscope, $tgConfirm) -> # Notes about jquery bug: # http://stackoverflow.com/questions/5791886/jquery-draggable-shows- # helper-in-wrong-place-when-scrolled-down-page @@ -50,6 +50,9 @@ BacklogSortableDirective = ($repo, $rs, $rootscope) -> if not (project.my_permissions.indexOf("modify_us") > -1) return + filterError = -> + $tgConfirm.notify("error", "You can't drop on backlog when filters are open") #TODO: i18n + $el.sortable({ connectWith: ".sprint-table" containment: ".wrapper" @@ -67,9 +70,19 @@ BacklogSortableDirective = ($repo, $rs, $rootscope) -> # position for revert). revert: false cursorAt: {right: 15} + stop: () -> + if $el.hasClass("active-filters") + $el.sortable("cancel") + filterError() }) $el.on "multiplesortreceive", (event, ui) -> + if $el.hasClass("active-filters") + ui.source.sortable("cancel") + filterError() + + return + itemUs = ui.item.scope().us itemIndex = ui.item.index() @@ -179,6 +192,7 @@ module.directive("tgBacklogSortable", [ "$tgRepo", "$tgResources", "$rootScope", + "$tgConfirm", BacklogSortableDirective ]) diff --git a/app/js/jquery-ui.drag-multiple-custom.js b/app/js/jquery-ui.drag-multiple-custom.js index c8d0c0fa..15f449ff 100644 --- a/app/js/jquery-ui.drag-multiple-custom.js +++ b/app/js/jquery-ui.drag-multiple-custom.js @@ -94,7 +94,8 @@ $(this.currentContainer.element).trigger('multiplesortreceive', { 'item': current, - 'items': elms + 'items': elms, + 'source': this.element }); } else if (current.hasClass(multipleSortableClass)) { // sort in the same list diff --git a/app/partials/views/modules/backlog-table.jade b/app/partials/views/modules/backlog-table.jade index 49763521..95375e3c 100644 --- a/app/partials/views/modules/backlog-table.jade +++ b/app/partials/views/modules/backlog-table.jade @@ -6,5 +6,5 @@ div.backlog-table-header span.header-points Points span.icon.icon-arrow-bottom -div.backlog-table-body(tg-backlog-sortable, ng-class="{'show-tags': ctrl.showTags}" ) +div.backlog-table-body(tg-backlog-sortable, ng-class="{'show-tags': ctrl.showTags, 'active-filters': ctrl.activeFilters}" ) include ../components/backlog-row