Browse Source

Fix some sidebar bugs

Maxime Quandalle 10 years ago
parent
commit
879fc47b53
1 changed files with 44 additions and 36 deletions
  1. 44 36
      client/components/sidebar/sidebar.js

+ 44 - 36
client/components/sidebar/sidebar.js

@@ -62,6 +62,10 @@ BlazeComponent.extendComponent({
     return this.isOpen() && this.getView() !== defaultView;
   },
 
+  scrollTop: function() {
+    this.$('.js-board-sidebar-content').scrollTop(0);
+  },
+
   getView: function() {
     return this._view.get();
   },
@@ -70,6 +74,7 @@ BlazeComponent.extendComponent({
     view = _.isString(view) ? view : defaultView;
     if (this._view.get() !== view) {
       this._view.set(view);
+      this.scrollTop();
       EscapeActions.executeUpTo('detailsPane');
     }
     this.open();
@@ -87,42 +92,6 @@ BlazeComponent.extendComponent({
     return TAPi18n.__(viewTitles[this.getView()]);
   },
 
-  // Board members can assign people or labels by drag-dropping elements from
-  // the sidebar to the cards on the board. In order to re-initialize the
-  // jquery-ui plugin any time a draggable member or label is modified or
-  // removed we use a autorun function and register a dependency on the both
-  // members and labels fields of the current board document.
-  onRendered: function() {
-    var self = this;
-    if (! Meteor.userId() || ! Meteor.user().isBoardMember())
-      return;
-
-    self.autorun(function() {
-      var currentBoardId = Tracker.nonreactive(function() {
-        return Session.get('currentBoard');
-      });
-      Boards.findOne(currentBoardId, {
-        fields: {
-          members: 1,
-          labels: 1
-        }
-      });
-      Tracker.afterFlush(function() {
-        self.$('.js-member,.js-label').draggable({
-          appendTo: 'body',
-          helper: 'clone',
-          revert: 'invalid',
-          revertDuration: 150,
-          snap: false,
-          snapMode: 'both',
-          start: function() {
-            EscapeActions.executeUpTo('popup');
-          }
-        });
-      });
-    });
-  },
-
   events: function() {
     // XXX Hacky, we need some kind of `super`
     var mixinEvents = this.getMixin(Mixins.InfiniteScrolling).events();
@@ -186,6 +155,45 @@ Template.labelsWidget.events({
   'click .js-add-label': Popup.open('createLabel')
 });
 
+// Board members can assign people or labels by drag-dropping elements from the
+// sidebar to the cards on the board. In order to re-initialize the jquery-ui
+// plugin any time a draggable member or label is modified or removed we use a
+// autorun function and register a dependency on the both members and labels
+// fields of the current board document.
+var draggableMembersLabelsWidgets = function() {
+  var self = this;
+  if (! Meteor.userId() || ! Meteor.user().isBoardMember())
+    return;
+
+  self.autorun(function() {
+    var currentBoardId = Tracker.nonreactive(function() {
+      return Session.get('currentBoard');
+    });
+    Boards.findOne(currentBoardId, {
+      fields: {
+        members: 1,
+        labels: 1
+      }
+    });
+    Tracker.afterFlush(function() {
+      self.$('.js-member,.js-label').draggable({
+        appendTo: 'body',
+        helper: 'clone',
+        revert: 'invalid',
+        revertDuration: 150,
+        snap: false,
+        snapMode: 'both',
+        start: function() {
+          EscapeActions.executeUpTo('popup');
+        }
+      });
+    });
+  });
+};
+
+Template.membersWidget.onRendered(draggableMembersLabelsWidgets);
+Template.labelsWidget.onRendered(draggableMembersLabelsWidgets);
+
 Template.addMemberPopup.helpers({
   isBoardMember: function() {
     var user = Users.findOne(this._id);