Browse Source

feat: improved modal animations

NGPixel 8 years ago
parent
commit
a0a19cd76f

+ 15 - 12
client/js/components/anchor.vue

@@ -1,16 +1,19 @@
 <template lang="pug">
-  .modal(v-bind:class='{ "is-active": isShown }')
-    .modal-background
-    .modal-container
-      .modal-content
-        header.is-blue
-          span Copy link to this section
-        section
-          p.control.is-fullwidth
-            input.input(type='text', ref='anchorURLinput', v-model='anchorURL')
-        footer
-          a.button.is-grey.is-outlined(v-on:click='cancel') Discard
-          a.button.is-blue(v-clipboard='anchorURL', @success="clipboardSuccess", @error="clipboardError") Copy to Clipboard
+  transition(:duration="400")
+    .modal(v-show='isShown', v-cloak)
+      transition(name='modal-background')
+        .modal-background(v-show='isShown')
+      .modal-container
+        transition(name='modal-content')
+          .modal-content(v-show='isShown')
+            header.is-blue
+              span Copy link to this section
+            section
+              p.control.is-fullwidth
+                input.input(type='text', ref='anchorURLinput', v-model='anchorURL')
+            footer
+              a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+              a.button.is-blue(v-clipboard='anchorURL', @success="clipboardSuccess", @error="clipboardError") Copy to Clipboard
 </template>
 
 <script>

+ 16 - 13
client/js/components/modal-create-page.vue

@@ -1,17 +1,20 @@
 <template lang="pug">
-  .modal(v-bind:class='{ "is-active": isShown }')
-    .modal-background
-    .modal-container
-      .modal-content
-        header.is-light-blue Create New Document
-        section
-          label.label Enter the new document path:
-          p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
-            input.input(type='text', placeholder='page-name', v-model='userPath', ref='createPageInput', @keyup.enter='create', @keyup.esc='cancel')
-            span.help.is-red(v-show='isInvalid') This document path is invalid!
-        footer
-          a.button.is-grey.is-outlined(v-on:click='cancel') Discard
-          a.button.is-light-blue(v-on:click='create') Create
+  transition(:duration="400")
+    .modal(v-show='isShown', v-cloak)
+      transition(name='modal-background')
+        .modal-background(v-show='isShown')
+      .modal-container
+        transition(name='modal-content')
+          .modal-content(v-show='isShown')
+            header.is-light-blue Create New Document
+            section
+              label.label Enter the new document path:
+              p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
+                input.input(type='text', placeholder='page-name', v-model='userPath', ref='createPageInput', @keyup.enter='create', @keyup.esc='cancel')
+                span.help.is-red(v-show='isInvalid') This document path is invalid!
+            footer
+              a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+              a.button.is-light-blue(v-on:click='create') Create
 </template>
 
 <script>

+ 17 - 14
client/js/components/modal-move-page.vue

@@ -1,18 +1,21 @@
 <template lang="pug">
-  .modal(v-bind:class='{ "is-active": isShown }')
-    .modal-background
-    .modal-container
-      .modal-content
-        header.is-indigo Move document
-        section
-          label.label Enter the new document path:
-          p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
-            input.input(type='text', placeholder='page-name', v-model='movePath', ref='movePageInput', @keyup.enter='move', @keyup.esc='cancel')
-            span.help.is-red(v-show='isInvalid') This document path is invalid or not allowed!
-            span.note Note that moving or renaming documents can lead to broken links. Make sure to edit any page that links to this document afterwards!
-        footer
-          a.button.is-grey.is-outlined(v-on:click='cancel') Discard
-          a.button.is-indigo(v-on:click='move') Move
+  transition(:duration="400")
+    .modal(v-show='isShown', v-cloak)
+      transition(name='modal-background')
+        .modal-background(v-show='isShown')
+      .modal-container
+        transition(name='modal-content')
+          .modal-content(v-show='isShown')
+            header.is-indigo Move document
+            section
+              label.label Enter the new document path:
+              p.control.is-fullwidth(v-bind:class='{ "is-loading": isLoading }')
+                input.input(type='text', placeholder='page-name', v-model='movePath', ref='movePageInput', @keyup.enter='move', @keyup.esc='cancel')
+                span.help.is-red(v-show='isInvalid') This document path is invalid or not allowed!
+                span.note Note that moving or renaming documents can lead to broken links. Make sure to edit any page that links to this document afterwards!
+            footer
+              a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+              a.button.is-indigo(v-on:click='move') Move
 </template>
 
 <script>

+ 16 - 7
client/scss/components/modal.scss

@@ -1,10 +1,6 @@
 .modal {
 	align-items: flex-start;
-	display: none;
-
-	&.is-active {
-		display: block;
-	}
+	display: block;
 
 	&.is-superimposed {
 		.modal-background {
@@ -23,8 +19,15 @@
 	height: 100vh;
 	position: fixed;
 	background-color: rgba(0,0,0,0.85);
-	animation: .4s ease fadeIn;
 	z-index: 10;
+
+  &-enter-active {
+    animation: .4s ease fadeIn;
+  }
+  &-leave-active {
+    animation: .4s ease fadeOut;
+  }
+
 }
 .modal-container {
 	position: fixed;
@@ -38,10 +41,16 @@
 	align-items: center;
 }
 .modal-content {
-	animation: .3s ease zoomIn;
 	width: 600px;
 	background-color: #FFF;
 
+  &-enter-active {
+    animation: .3s ease zoomIn;
+  }
+  &-leave-active {
+    animation: .3s ease zoomOut;
+  }
+
 	&.is-expanded {
 		align-self: stretch;
 		width: 100%;