summaryrefslogtreecommitdiffstats
path: root/client/components/boards/body.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/components/boards/body.js')
-rw-r--r--client/components/boards/body.js99
1 files changed, 68 insertions, 31 deletions
diff --git a/client/components/boards/body.js b/client/components/boards/body.js
index ffb132c5..5e743001 100644
--- a/client/components/boards/body.js
+++ b/client/components/boards/body.js
@@ -1,3 +1,12 @@
+// XXX This event list must be abstracted somewhere else.
+var endTransitionEvents = [
+ 'webkitTransitionEnd',
+ 'otransitionend',
+ 'oTransitionEnd',
+ 'msTransitionEnd',
+ 'transitionend'
+].join(' ');
+
BlazeComponent.extendComponent({
template: function() {
return 'boardComponent';
@@ -17,50 +26,78 @@ BlazeComponent.extendComponent({
// TODO
},
+ currentCardIsInThisList: function() {
+ var currentCard = Cards.findOne(Session.get('currentCard'));
+ var listId = this.currentData()._id;
+ return currentCard && currentCard.listId === listId;
+ },
+
onRendered: function() {
var self = this;
self.scrollLeft();
- if (Meteor.user().isBoardMember()) {
- self.$('.js-lists').sortable({
- tolerance: 'pointer',
- appendTo: '.js-lists',
- helper: 'clone',
- items: '.js-list:not(.add-list)',
- placeholder: 'list placeholder',
- start: function(event, ui) {
- $('.list.placeholder').height(ui.item.height());
- Popup.close();
- },
- stop: function() {
- self.$('.js-lists').find('.js-list:not(.add-list)').each(
- function(i, list) {
- var data = Blaze.getData(list);
- Lists.update(data._id, {
- $set: {
- sort: i
- }
- });
- }
- );
+ var lists = this.find('.js-lists');
+
+ // We want to animate the card details window closing. We rely on CSS
+ // transition for the actual animation.
+ lists._uihooks = {
+ removeElement: function(node) {
+ var removeNode = function() {
+ node.parentNode.removeChild(node);
+ };
+ if ($(node).hasClass('js-card-detail')) {
+ $(node).css({
+ flex: '0',
+ padding: 0
+ });
+ $(lists).one(endTransitionEvents, function() {
+ removeNode();
+ });
+ } else {
+ removeNode();
}
- });
+ }
+ };
+
+ if (! Meteor.user().isBoardMember())
+ return;
- // If there is no data in the board (ie, no lists) we autofocus the list
- // creation form by clicking on the corresponding element.
- if (self.data().lists().count() === 0) {
- this.openNewListForm();
+ self.$(lists).sortable({
+ tolerance: 'pointer',
+ appendTo: '.js-lists',
+ helper: 'clone',
+ items: '.js-list:not(.add-list)',
+ placeholder: 'list placeholder',
+ start: function(event, ui) {
+ $('.list.placeholder').height(ui.item.height());
+ Popup.close();
+ },
+ stop: function() {
+ self.$('.js-lists').find('.js-list:not(.add-list)').each(
+ function(i, list) {
+ var data = Blaze.getData(list);
+ Lists.update(data._id, {
+ $set: {
+ sort: i
+ }
+ });
+ }
+ );
}
+ });
+
+ // If there is no data in the board (ie, no lists) we autofocus the list
+ // creation form by clicking on the corresponding element.
+ if (self.data().lists().count() === 0) {
+ this.openNewListForm();
}
},
sidebarSize: function() {
var sidebar = this.componentChildren('boardSidebar')[0];
- if (Session.get('currentCard') !== null)
- return 'next-large-sidebar';
- else if (sidebar && sidebar.isOpen())
- return 'next-small-sidebar';
+ if (sidebar && sidebar.isOpen())
+ return 'next-sidebar';
}
}).register('boardComponent');