Răsfoiți Sursa

Animate popup screens transition

Maxime Quandalle 10 ani în urmă
părinte
comite
6fe08cd4b3

+ 1 - 1
client/components/main/popup.js

@@ -7,7 +7,7 @@ Popup.template.events({
   'click .js-back-view': function() {
     Popup.back();
   },
-  'click .js-close-popover': function() {
+  'click .js-close-pop-over': function() {
     Popup.close();
   },
   'click .js-confirm': function() {

+ 24 - 5
client/components/main/popup.styl

@@ -73,8 +73,17 @@
         color: darken(white, 80%)
 
     .back-btn
-      padding: 10px
       float: left
+      overflow: hidden
+      width: 30px
+      transition: width 0.2s
+
+      i.fa
+        margin: 10px
+        margin-top: 12px
+
+      &.is-hidden
+        width: 0
 
     .close-btn
       padding: 10px 10px 10px 4px
@@ -82,11 +91,21 @@
       top: 0
       right: 0
 
-  .content
-    overflow-x: hidden
-    overflow-y: auto
-    padding: 0 10px 10px
+  .content-wrapper
+    width: 100%
+
+  .content-container
+    width: 1000px
     max-height: 550px
+    transition: transform 0.2s
+
+    .content
+      width: 300 - 20px
+      padding: 0 10px 10px
+      float: left
+
+      &.is-hidden
+        height: 0
 
   .quiet
     padding: 6px 6px 4px

+ 14 - 6
client/components/main/popup.tpl.jade

@@ -3,11 +3,19 @@
   class=currentBoard.colorClass
   style="display:block; left:{{offset.left}}px; top:{{offset.top}}px;")
   .header.clearfix
-    if hasPopupParent
-      a.back-btn.js-back-view
-        i.fa.fa-chevron-left
+    a.back-btn.js-back-view(class="{{#unless hasPopupParent}}is-hidden{{/unless}}")
+      i.fa.fa-chevron-left
     span.header-title= title
-    a.close-btn.js-close-popover
+    a.close-btn.js-close-pop-over
       i.fa.fa-times
-  .content.clearfix
-    +Template.dynamic(template=popupName data=dataContext)
+  .content-wrapper
+    //-
+      We display the all stack of popup content next to each other and move
+      the "window" by translating .content-container inside .content-wrapper.
+    .content-container(style="transform:translateX({{containerTranslation}}px)")
+      each stack
+        //-
+          XXX We need a better way to express the "is the last element" condition.
+          Hopefully the @last helper will come soon (or at least @index)
+        .content(class="{{#unless $eq popupName ../popupName}}is-hidden{{/unless}}")
+          +Template.dynamic(template=popupName data=dataContext)

+ 7 - 4
client/lib/popup.js

@@ -56,9 +56,9 @@ Popup = {
 
       // If there are no popup currently opened we use the Blaze API to render
       // one into the DOM. We use a reactive function as the data parameter that
-      // just return the top element on the stack and depends on our internal
-      // dependency that is being invalidated every time the top element of the
-      // stack has changed and we want to update the popup.
+      // return the the complete along with its top element and depends on our
+      // internal dependency that is being invalidated every time the top
+      // element of the stack has changed and we want to update the popup.
       //
       // Otherwise if there is already a popup open we just need to invalidate
       // our internal dependency, and since we just changed the top element of
@@ -66,7 +66,10 @@ Popup = {
       if (! self.isOpen()) {
         self.current = Blaze.renderWithData(self.template, function() {
           self._dep.depend();
-          return self._stack[self._stack.length - 1];
+          return _.extend(self._stack[self._stack.length - 1], {
+            stack: self._stack,
+            containerTranslation: (self._stack.length - 1) * -300
+          });
         }, document.body);
 
       } else {