| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 
							- import { ReactiveCache } from '/imports/reactiveCache';
 
- function getCardsBetween(idA, idB) {
 
-   function pluckId(doc) {
 
-     return doc._id;
 
-   }
 
-   function getListsStrictlyBetween(id1, id2) {
 
-     return ReactiveCache.getLists({
 
-       $and: [
 
-         { sort: { $gt: ReactiveCache.getList(id1).sort } },
 
-         { sort: { $lt: ReactiveCache.getList(id2).sort } },
 
-       ],
 
-       archived: false,
 
-     }).map(pluckId);
 
-   }
 
-   const cards = _.sortBy([ReactiveCache.getCard(idA), ReactiveCache.getCard(idB)], c => {
 
-     return c.sort;
 
-   });
 
-   let selector;
 
-   if (cards[0].listId === cards[1].listId) {
 
-     selector = {
 
-       listId: cards[0].listId,
 
-       sort: {
 
-         $gte: cards[0].sort,
 
-         $lte: cards[1].sort,
 
-       },
 
-       archived: false,
 
-     };
 
-   } else {
 
-     selector = {
 
-       $or: [
 
-         {
 
-           listId: cards[0].listId,
 
-           sort: { $lte: cards[0].sort },
 
-         },
 
-         {
 
-           listId: {
 
-             $in: getListsStrictlyBetween(cards[0].listId, cards[1].listId),
 
-           },
 
-         },
 
-         {
 
-           listId: cards[1].listId,
 
-           sort: { $gte: cards[1].sort },
 
-         },
 
-       ],
 
-       archived: false,
 
-     };
 
-   }
 
-   return ReactiveCache.getCards(Filter.mongoSelector(selector)).map(pluckId);
 
- }
 
- MultiSelection = {
 
-   sidebarView: 'multiselection',
 
-   _selectedCards: new ReactiveVar([]),
 
-   _isActive: new ReactiveVar(false),
 
-   startRangeCardId: null,
 
-   _sidebarWasOpen: false,
 
-   reset() {
 
-     this._selectedCards.set([]);
 
-   },
 
-   getMongoSelector() {
 
-     return Filter.mongoSelector({
 
-       _id: { $in: this._selectedCards.get() },
 
-     });
 
-   },
 
-   isActive() {
 
-     return this._isActive.get();
 
-   },
 
-   count() {
 
-     return ReactiveCache.getCards(this.getMongoSelector()).length;
 
-   },
 
-   isEmpty() {
 
-     return this.count() === 0;
 
-   },
 
-   getSelectedCardIds(){
 
-     return this._selectedCards.curValue;
 
-   },
 
-   activate() {
 
-     if (!this.isActive()) {
 
-       this._sidebarWasOpen = Sidebar.isOpen();
 
-       EscapeActions.executeUpTo('detailsPane');
 
-       this._isActive.set(true);
 
-       Tracker.flush();
 
-     }
 
-     Sidebar.setView(this.sidebarView);
 
-     if(Utils.isMiniScreen()) {
 
-       Sidebar.hide();
 
-     }
 
-   },
 
-   disable() {
 
-     if (this.isActive()) {
 
-       this._isActive.set(false);
 
-       if (Sidebar && Sidebar.getView() === this.sidebarView) {
 
-         Sidebar.setView();
 
-         if(!this._sidebarWasOpen) {
 
-           Sidebar.hide();
 
-         }
 
-       }
 
-       this.reset();
 
-     }
 
-   },
 
-   add(cardIds) {
 
-     return this.toggle(cardIds, { add: true, remove: false });
 
-   },
 
-   remove(cardIds) {
 
-     return this.toggle(cardIds, { add: false, remove: true });
 
-   },
 
-   toggleRange(cardId) {
 
-     const selectedCards = this._selectedCards.get();
 
-     this.reset();
 
-     if (!this.isActive() || selectedCards.length === 0) {
 
-       this.toggle(cardId);
 
-     } else {
 
-       const startRange = selectedCards[selectedCards.length - 1];
 
-       this.toggle(getCardsBetween(startRange, cardId));
 
-     }
 
-   },
 
-   toggle(cardIds, options = {}) {
 
-     cardIds = _.isString(cardIds) ? [cardIds] : cardIds;
 
-     options = {
 
-       add: true,
 
-       remove: true,
 
-       ...options,
 
-     };
 
-     if (!this.isActive()) {
 
-       this.reset();
 
-       this.activate();
 
-     }
 
-     const selectedCards = this._selectedCards.get();
 
-     cardIds.forEach(cardId => {
 
-       const indexOfCard = selectedCards.indexOf(cardId);
 
-       if (options.remove && indexOfCard > -1)
 
-         selectedCards.splice(indexOfCard, 1);
 
-       else if (options.add) selectedCards.push(cardId);
 
-     });
 
-     this._selectedCards.set(selectedCards);
 
-   },
 
-   isSelected(cardId) {
 
-     return this._selectedCards.get().indexOf(cardId) > -1;
 
-   },
 
- };
 
- Blaze.registerHelper('MultiSelection', MultiSelection);
 
- EscapeActions.register(
 
-   'multiselection',
 
-   () => {
 
-     MultiSelection.disable();
 
-   },
 
-   () => {
 
-     return MultiSelection.isActive();
 
-   },
 
-   {
 
-     noClickEscapeOn: '.js-minicard,.js-board-sidebar-content',
 
-   },
 
- );
 
 
  |