diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-02-28 16:36:46 +0200 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-02-28 16:36:46 +0200 |
commit | 48cd551a698dd86a969007a277ce6cb384e3b5ce (patch) | |
tree | d225723e129743061bb3423363595e8a14c46bed /client/components/lists | |
parent | 284fac043b419de1a02edb6a7ec4cd9d49d7cce9 (diff) | |
parent | 8d2839f0c3429a21b33bf8333cb2f20a275bc596 (diff) | |
download | wekan-48cd551a698dd86a969007a277ce6cb384e3b5ce.tar.gz wekan-48cd551a698dd86a969007a277ce6cb384e3b5ce.tar.bz2 wekan-48cd551a698dd86a969007a277ce6cb384e3b5ce.zip |
Merge remote-tracking branch 'upstream/devel' into devel
Diffstat (limited to 'client/components/lists')
-rw-r--r-- | client/components/lists/list.js | 81 |
1 files changed, 77 insertions, 4 deletions
diff --git a/client/components/lists/list.js b/client/components/lists/list.js index e922a3fd..51a9a0de 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -19,6 +19,83 @@ BlazeComponent.extendComponent({ // comment below provides further details. onRendered() { const boardComponent = this.parentComponent().parentComponent(); + const $listsDom = boardComponent.$('.js-lists'); + + if (!Session.get('currentCard')) { + boardComponent.scrollLeft(); + } + + // We want to animate the card details window closing. We rely on CSS + // transition for the actual animation. + $listsDom._uihooks = { + removeElement(node) { + const removeNode = _.once(() => { + node.parentNode.removeChild(node); + }); + if ($(node).hasClass('js-card-details')) { + $(node).css({ + flexBasis: 0, + padding: 0, + }); + $listsDom.one(CSSEvents.transitionend, removeNode); + } else { + removeNode(); + } + }, + }; + + $listsDom.sortable({ + tolerance: 'pointer', + helper: 'clone', + handle: '.js-list-header', + items: '.js-list:not(.js-list-composer)', + placeholder: 'list placeholder', + distance: 7, + start(evt, ui) { + ui.placeholder.height(ui.helper.height()); + EscapeActions.executeUpTo('popup-close'); + boardComponent.setIsDragging(true); + }, + stop(evt, ui) { + // To attribute the new index number, we need to get the DOM element + // of the previous and the following card -- if any. + const prevListDom = ui.item.prev('.js-list').get(0); + const nextListDom = ui.item.next('.js-list').get(0); + const sortIndex = calculateIndex(prevListDom, nextListDom, 1); + + $listsDom.sortable('cancel'); + const listDomElement = ui.item.get(0); + const list = Blaze.getData(listDomElement); + + Lists.update(list._id, { + $set: { + sort: sortIndex.base, + }, + }); + }, + }); + + function userIsMember() { + return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); + } + + // Disable drag-dropping while in multi-selection mode, or if the current user + // is not a board member + boardComponent.autorun(() => { + const $listDom = $listsDom; + if ($listDom.data('sortable')) { + $listsDom.sortable('option', 'disabled', + MultiSelection.isActive() || !userIsMember()); + } + }); + + // If there is no data in the board (ie, no lists) we autofocus the list + // creation form by clicking on the corresponding element. + const currentBoard = Boards.findOne(Session.get('currentBoard')); + if (userIsMember() && currentBoard.lists().count() === 0) { + boardComponent.openNewListForm(); + } + const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)'; const $cards = this.$('.js-minicards'); $cards.sortable({ @@ -79,10 +156,6 @@ BlazeComponent.extendComponent({ }, }); - function userIsMember() { - return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); - } - // Disable drag-dropping if the current user is not a board member or is comment only this.autorun(() => { $cards.sortable('option', 'disabled', !userIsMember()); |