From 61fa7b756e2bbb96206effeb78f85de0de3d663b Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 26 Jul 2016 10:46:44 +0100 Subject: [PATCH] Removes boards correctly --- .../boards/components/board.js.coffee | 4 +++- .../boards/components/board_delete.js.coffee | 6 ++++++ .../boards/components/board_list.js.coffee | 2 ++ .../boards/stores/boards_store.js.coffee | 3 +++ app/assets/stylesheets/pages/boards.scss | 1 + .../boards/components/_board.html.haml | 4 ++-- vendor/assets/javascripts/clipboard.js | 20 +++++++++---------- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/boards/components/board.js.coffee b/app/assets/javascripts/boards/components/board.js.coffee index fde62ba569b..c6bd177b2a8 100644 --- a/app/assets/javascripts/boards/components/board.js.coffee +++ b/app/assets/javascripts/boards/components/board.js.coffee @@ -10,7 +10,7 @@ Board = Vue.extend isPreset: -> typeof this.board.id != 'number' ready: -> - Sortable.create this.$el.parentNode, + this.sortable = Sortable.create this.$el.parentNode, group: 'boards' animation: 150 draggable: '.is-draggable' @@ -19,5 +19,7 @@ Board = Vue.extend ghostClass: 'is-ghost' onUpdate: (e) -> BoardsStore.moveBoard(e.oldIndex + 1, e.newIndex + 1) + beforeDestroy: -> + this.sortable.destroy() Vue.component('board', Board) diff --git a/app/assets/javascripts/boards/components/board_delete.js.coffee b/app/assets/javascripts/boards/components/board_delete.js.coffee index d08831ddafa..47fa22b0ab0 100644 --- a/app/assets/javascripts/boards/components/board_delete.js.coffee +++ b/app/assets/javascripts/boards/components/board_delete.js.coffee @@ -1,5 +1,11 @@ BoardDelete = Vue.extend props: boardId: Number + methods: + deleteBoard: -> + $(this.$el).tooltip('destroy') + + if confirm('Are you sure you want to delete this list?') + BoardsStore.removeBoard(this.boardId) Vue.component 'board-delete', BoardDelete diff --git a/app/assets/javascripts/boards/components/board_list.js.coffee b/app/assets/javascripts/boards/components/board_list.js.coffee index b063cf4f2ee..494f61f6047 100644 --- a/app/assets/javascripts/boards/components/board_list.js.coffee +++ b/app/assets/javascripts/boards/components/board_list.js.coffee @@ -56,5 +56,7 @@ BoardList = Vue.extend this.$els.list.onscroll = => if (this.scrollTop() > this.scrollHeight() - this.scrollOffset) and !this.loadMore this.loadFromLastId() + beforeDestroy: -> + this.sortable.destroy() Vue.component('board-list', BoardList) diff --git a/app/assets/javascripts/boards/stores/boards_store.js.coffee b/app/assets/javascripts/boards/stores/boards_store.js.coffee index 8d28c24a2b1..d008cdd7d03 100644 --- a/app/assets/javascripts/boards/stores/boards_store.js.coffee +++ b/app/assets/javascripts/boards/stores/boards_store.js.coffee @@ -6,6 +6,9 @@ author: {} assignee: {} milestone: {} + removeBoard: (id) -> + BoardsStore.state.boards = _.reject BoardsStore.state.boards, (board) -> + board.id is id moveBoard: (oldIndex, newIndex) -> boardFrom = _.find BoardsStore.state.boards, (board) -> board.index is oldIndex diff --git a/app/assets/stylesheets/pages/boards.scss b/app/assets/stylesheets/pages/boards.scss index 65c29bea905..4151d34094b 100644 --- a/app/assets/stylesheets/pages/boards.scss +++ b/app/assets/stylesheets/pages/boards.scss @@ -110,6 +110,7 @@ color: $gray-darkest; background-color: transparent; border: 0; + outline: 0; &:hover { color: $gl-link-color; diff --git a/app/views/projects/boards/components/_board.html.haml b/app/views/projects/boards/components/_board.html.haml index 15eae09ea90..f49a1970082 100644 --- a/app/views/projects/boards/components/_board.html.haml +++ b/app/views/projects/boards/components/_board.html.haml @@ -6,8 +6,8 @@ {{ board.title }} %span.pull-right {{ board.issues.length }} - %board-delete{ "inline-template" => true, "v-if" => "!isPreset" } - %button.board-delete.has-tooltip.pull-right{ type: "button", title: "Delete board", data: { placement: "bottom" } } + %board-delete{ "inline-template" => true, "v-if" => "!isPreset", ":board-id" => "board.id" } + %button.board-delete.has-tooltip.pull-right{ type: "button", title: "Delete board", data: { placement: "bottom" }, "@click" => "deleteBoard" } %span.sr-only Delete board = icon("trash") diff --git a/vendor/assets/javascripts/clipboard.js b/vendor/assets/javascripts/clipboard.js index 1b1f4f0bd63..39d7d2306f8 100644 --- a/vendor/assets/javascripts/clipboard.js +++ b/vendor/assets/javascripts/clipboard.js @@ -154,12 +154,12 @@ function E () { E.prototype = { on: function (name, callback, ctx) { var e = this.e || (this.e = {}); - + (e[name] || (e[name] = [])).push({ fn: callback, ctx: ctx }); - + return this; }, @@ -169,7 +169,7 @@ E.prototype = { self.off(name, fn); callback.apply(ctx, arguments); }; - + return this.on(name, fn, ctx); }, @@ -178,11 +178,11 @@ E.prototype = { var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); var i = 0; var len = evtArr.length; - + for (i; i < len; i++) { evtArr[i].fn.apply(evtArr[i].ctx, data); } - + return this; }, @@ -190,21 +190,21 @@ E.prototype = { var e = this.e || (this.e = {}); var evts = e[name]; var liveEvents = []; - + if (evts && callback) { for (var i = 0, len = evts.length; i < len; i++) { if (evts[i].fn !== callback) liveEvents.push(evts[i]); } } - + // Remove event from queue to prevent memory leak // Suggested by https://github.com/lazd // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 - (liveEvents.length) + (liveEvents.length) ? e[name] = liveEvents : delete e[name]; - + return this; } }; @@ -618,4 +618,4 @@ exports['default'] = Clipboard; module.exports = exports['default']; },{"./clipboard-action":6,"delegate-events":1,"tiny-emitter":5}]},{},[7])(7) -}); \ No newline at end of file +});