| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | BlazeComponent.extendComponent({  canSeeAddCard() {    const list = Template.currentData();    return !list.getWipLimit('enabled') || list.getWipLimit('soft') || !this.reachedWipLimit();  },  editTitle(evt) {    evt.preventDefault();    const newTitle = this.childComponents('inlinedForm')[0].getValue().trim();    const list = this.currentData();    if (newTitle) {      list.rename(newTitle.trim());    }  },  isWatching() {    const list = this.currentData();    return list.findWatcher(Meteor.userId());  },  limitToShowCardsCount() {    return Meteor.user().getLimitToShowCardsCount();  },  reachedWipLimit() {    const list = Template.currentData();    return list.getWipLimit('enabled') && list.getWipLimit('value') <= list.cards().count();  },  showCardsCountForList(count) {    return count > this.limitToShowCardsCount();  },  events() {    return [{      'click .js-open-list-menu': Popup.open('listAction'),      'click .js-add-card' () {        const listDom = document.getElementById(`js-list-${this.currentData()._id}`);        const listComponent = BlazeComponent.getComponentForElement(listDom);        listComponent.openForm({          position: 'top',        });      },      'click .js-unselect-list'() {        Session.set('currentList', null);      },      submit: this.editTitle,    }];  },}).register('listHeader');Template.listActionPopup.helpers({  isWipLimitEnabled() {    return Template.currentData().getWipLimit('enabled');  },  isWatching() {    return this.findWatcher(Meteor.userId());  },});Template.listActionPopup.events({  'click .js-list-subscribe' () {},  'click .js-select-cards' () {    const cardIds = this.allCards().map((card) => card._id);    MultiSelection.add(cardIds);    Popup.close();  },  'click .js-toggle-watch-list' () {    const currentList = this;    const level = currentList.findWatcher(Meteor.userId()) ? null : 'watching';    Meteor.call('watch', 'list', currentList._id, level, (err, ret) => {      if (!err && ret) Popup.close();    });  },  'click .js-close-list' (evt) {    evt.preventDefault();    this.archive();    Popup.close();  },  'click .js-set-wip-limit': Popup.open('setWipLimit'),  'click .js-more': Popup.open('listMore'),});BlazeComponent.extendComponent({  applyWipLimit() {    const list = Template.currentData();    const limit = parseInt(Template.instance().$('.wip-limit-value').val(), 10);    if(limit < list.cards().count() && !list.getWipLimit('soft')){      Template.instance().$('.wip-limit-error').click();    } else {      Meteor.call('applyWipLimit', list._id, limit);      Popup.back();    }  },  enableSoftLimit() {    const list = Template.currentData();    if(list.getWipLimit('soft') && list.getWipLimit('value') < list.cards().count()){      list.setWipLimit(list.cards().count());    }    Meteor.call('enableSoftLimit', Template.currentData()._id);  },  enableWipLimit() {    const list = Template.currentData();    // Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list    if(!list.getWipLimit('enabled') && list.getWipLimit('value') < list.cards().count()){      list.setWipLimit(list.cards().count());    }    Meteor.call('enableWipLimit', list._id);  },  isWipLimitSoft() {    return Template.currentData().getWipLimit('soft');  },  isWipLimitEnabled() {    return Template.currentData().getWipLimit('enabled');  },  wipLimitValue(){    return Template.currentData().getWipLimit('value');  },  events() {    return [{      'click .js-enable-wip-limit': this.enableWipLimit,      'click .wip-limit-apply': this.applyWipLimit,      'click .wip-limit-error': Popup.open('wipLimitError'),      'click .materialCheckBox': this.enableSoftLimit,    }];  },}).register('setWipLimitPopup');Template.listMorePopup.events({  'click .js-delete': Popup.afterConfirm('listDelete', function () {    Popup.close();    this.allCards().map((card) => Cards.remove(card._id));    Lists.remove(this._id);    Utils.goBoardId(this.boardId);  }),});
 |