summaryrefslogtreecommitdiffstats
path: root/client/components/boards/body.js
diff options
context:
space:
mode:
authorMaxime Quandalle <maxime@quandalle.com>2015-05-24 12:30:58 +0200
committerMaxime Quandalle <maxime@quandalle.com>2015-05-24 22:11:40 +0200
commit781577db041e0008de22f31bcc1cb11ae96670e0 (patch)
treeb45e220039b81149c463ee060dcc03d79e589a77 /client/components/boards/body.js
parent40b605f7d897db6eb2697be1748741221378e71c (diff)
downloadwekan-781577db041e0008de22f31bcc1cb11ae96670e0.tar.gz
wekan-781577db041e0008de22f31bcc1cb11ae96670e0.tar.bz2
wekan-781577db041e0008de22f31bcc1cb11ae96670e0.zip
Experiment new ergonomics to interact with card details
The idea is that by displaying card details in a sidebar stuck on the right of the screen, the mouse had to travel too much before interacting with it. I also don’t want to use the Trello solution (modal) on big screens, because I like the ability to interact with the selected card and with the board at the same time (like in a e-mail client). The solution introduced in this commit consist of opening the card detail in a column next to the minicard list. This commit also fix right sidebar members and labels drag and drop.
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');