123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- BlazeComponent.extendComponent({
- template: function() {
- return 'listBody';
- },
- mixins: function() {
- return [Mixins.PerfectScrollbar];
- },
- openForm: function(options) {
- options = options || {};
- options.position = options.position || 'top';
- var forms = this.componentChildren('inlinedForm');
- var form = _.find(forms, function(component) {
- return component.data().position === options.position;
- });
- if (! form && forms.length > 0) {
- form = forms[0];
- }
- form.open();
- },
- addCard: function(evt) {
- evt.preventDefault();
- var textarea = $(evt.currentTarget).find('textarea');
- var title = textarea.val();
- var position = Blaze.getData(evt.currentTarget).position;
- var sortIndex;
- var firstCard = this.find('.js-minicard:first');
- var lastCard = this.find('.js-minicard:last');
- if (position === 'top') {
- sortIndex = Utils.calculateIndex(null, firstCard).base;
- } else if (position === 'bottom') {
- sortIndex = Utils.calculateIndex(lastCard, null).base;
- }
- if ($.trim(title)) {
- var _id = Cards.insert({
- title: title,
- listId: this.data()._id,
- boardId: this.data().board()._id,
- sort: sortIndex
- });
- // In case the filter is active we need to add the newly inserted card in
- // the list of exceptions -- cards that are not filtered. Otherwise the
- // card will disappear instantly.
- // See https://github.com/libreboard/libreboard/issues/80
- Filter.addException(_id);
- // We keep the form opened, empty it, and scroll to it.
- textarea.val('').focus();
- if (position === 'bottom') {
- this.scrollToBottom();
- }
- }
- },
- scrollToBottom: function() {
- var container = this.firstNode();
- $(container).animate({
- scrollTop: container.scrollHeight
- });
- },
- clickOnMiniCard: function(evt) {
- if (MultiSelection.isActive() || evt.shiftKey) {
- evt.stopImmediatePropagation();
- evt.preventDefault();
- var methodName = evt.shiftKey ? 'toogleRange' : 'toogle';
- MultiSelection[methodName](this.currentData()._id);
- // If the card is already selected, we want to de-select it.
- // XXX We should probably modify the minicard href attribute instead of
- // overwriting the event in case the card is already selected.
- } else if (Session.equals('currentCard', this.currentData()._id)) {
- evt.stopImmediatePropagation();
- evt.preventDefault();
- Utils.goBoardId(Session.get('currentBoard'));
- }
- },
- cardIsSelected: function() {
- return Session.equals('currentCard', this.currentData()._id);
- },
- toggleMultiSelection: function(evt) {
- evt.stopPropagation();
- evt.preventDefault();
- MultiSelection.toogle(this.currentData()._id);
- },
- events: function() {
- return [{
- 'click .js-minicard': this.clickOnMiniCard,
- 'click .js-toggle-multi-selection': this.toggleMultiSelection,
- 'click .open-minicard-composer': this.scrollToBottom,
- submit: this.addCard
- }];
- }
- }).register('listBody');
- BlazeComponent.extendComponent({
- template: function() {
- return 'addCardForm';
- },
- pressKey: function(evt) {
- // Pressing Enter should submit the card
- if (evt.keyCode === 13) {
- evt.preventDefault();
- var $form = $(evt.currentTarget).closest('form');
- // XXX For some reason $form.submit() does not work (it's probably a bug
- // of blaze-component related to the fact that the submit event is non-
- // bubbling). This is why we click on the submit button instead -- which
- // work.
- $form.find('button[type=submit]').click();
- // Pressing Tab should open the form of the next column, and Maj+Tab go
- // in the reverse order
- } else if (evt.keyCode === 9) {
- evt.preventDefault();
- var isReverse = evt.shiftKey;
- var list = $('#js-list-' + this.data().listId);
- var listSelector = '.js-list:not(.js-list-composer)';
- var nextList = list[isReverse ? 'prev' : 'next'](listSelector).get(0);
- // If there is no next list, loop back to the beginning.
- if (! nextList) {
- nextList = $(listSelector + (isReverse ? ':last' : ':first')).get(0);
- }
- BlazeComponent.getComponentForElement(nextList).openForm({
- position:this.data().position
- });
- }
- },
- events: function() {
- return [{
- keydown: this.pressKey
- }];
- }
- }).register('addCardForm');
|