Advertisement
Guest User

Untitled

a guest
Feb 2nd, 2019
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. <template lang="pug">
  2. .content
  3. .logo-box Memory Game
  4. .form-box
  5. .form-title Log in to play
  6. form(@submit.prevent="handleSubmit")
  7. .input-box
  8. .input-icon
  9. MdFace
  10. input(type="text" v-model="name" placeholder="Name" :maxlength="16" :disabled="isFetching")
  11. .input-box
  12. .input-icon
  13. MdLock
  14. input(type="password" v-model="password" placeholder="Password" :disabled="isFetching")
  15. transition(name="fade")
  16. .input-box.email-box(v-if="canEnterEmail")
  17. .input-icon
  18. MdEmail
  19. input(type="text" v-model="email" placeholder="E-mail" :disabled="isFetching")
  20. PulseLoader.pulse(v-if="isFetching" size="8px" color="#181818")
  21. transition(name="fade")
  22. .button-box(v-if="isPasswordEntered && isNameEntered && !isFetching")
  23. .input-box
  24. input.sign-in(type="submit" value="Submit" :disabled="isDisabled")
  25. .input-box
  26. .sign-up(@click="toggleSignUp") {{ signUpText }}
  27. </template>
  28.  
  29.  
  30. <script>
  31. import Validator from '@/utils/Validator';
  32.  
  33. import MdFace from '@/assets/icons/MdFace';
  34. import MdLock from '@/assets/icons/MdLock';
  35. import MdEmail from '@/assets/icons/MdEmail';
  36.  
  37. export default {
  38. name: 'home',
  39. data() {
  40. return {
  41. isJoining: false,
  42. isFetching: false,
  43. name: '',
  44. password: '',
  45. email: '',
  46. signUpText: 'Create account'
  47. }
  48. },
  49. components: {
  50. MdFace,
  51. MdLock,
  52. MdEmail
  53. },
  54. computed: {
  55. isNameEntered() {
  56. return this.name.length > 3;
  57. },
  58. isPasswordEntered() {
  59. return this.password.length > 4;
  60. },
  61. canEnterEmail() {
  62. return this.isJoining && this.isNameEntered && this.isPasswordEntered;
  63. },
  64. isDisabled() {
  65. return this.isJoining && !Validator.validateEmail(this.email) || this.isFetching;
  66. },
  67. },
  68. methods: {
  69. handleSubmit() {
  70. if (this.isFetching) return;
  71. this.isFetching = true;
  72. },
  73. toggleSignUp() {
  74. if (this.isJoining)
  75. this.signUpText = 'Sign up';
  76. else
  77. this.signUpText = 'I have an account';
  78. return this.isJoining = !this.isJoining;
  79. }
  80. }
  81. }
  82. </script>
  83.  
  84. <style scoped>
  85.  
  86. .content {
  87. width: 100%;
  88. height: 100%;
  89. display: flex;
  90. flex-flow: column;
  91. align-items: center;
  92. justify-content: center;
  93. }
  94.  
  95. .logo-box {
  96. margin-bottom: 1.5rem;
  97. font-size: 1.5rem;
  98. font-weight: bold;
  99. }
  100.  
  101. .form-box {
  102. display: flex;
  103. justify-content: center;
  104. align-items: center;
  105. flex-flow: column;
  106. }
  107.  
  108. .form-title {
  109. margin-bottom: .5rem;
  110. }
  111.  
  112. form {
  113. color: var(--dec-p);
  114. background-color: var(--bg-p);
  115. width: 20rem;
  116. height: 20rem;
  117. display: flex;
  118. justify-content: center;
  119. align-items: center;
  120. flex-flow: column;
  121. -webkit-box-shadow: 6px 6px 6px -3px rgba(0,0,0,0.3);
  122. -moz-box-shadow: 6px 6px 6px -3px rgba(0,0,0,0.3);
  123. box-shadow: 6px 6px 6px -3px rgba(0,0,0,0.3);
  124. }
  125.  
  126. .input-box {
  127. display: flex;
  128. justify-content: center;
  129. align-items: center;
  130. flex-flow: row;
  131. margin-bottom: .5rem;
  132. }
  133.  
  134. .input-icon {
  135. display: flex;
  136. justify-content: center;
  137. align-items: center;
  138. padding: .2rem;
  139. }
  140.  
  141. input {
  142. background-color: var(--bg-d);
  143. }
  144.  
  145. input[type="text"], input[type="password"] {
  146. border: 2px solid var(--bg-p);
  147. }
  148.  
  149. input[type="text"]:focus, input[type="password"]:focus {
  150. border: 2px solid var(--dec-p);
  151. }
  152.  
  153. .button-box {
  154. width: 100%;
  155. display: flex;
  156. flex-flow: row;
  157. justify-content: space-evenly;
  158. margin-top: .5rem;
  159. }
  160.  
  161. input[type="submit"] {
  162. width: 5rem;
  163. }
  164.  
  165. .sign-in {
  166. height: 2rem;
  167. color: var(--bg-p);
  168. background-color: var(--dec-p);
  169. }
  170.  
  171.  
  172. .sign-in:hover {
  173. background-color: var(--dec-d);
  174. }
  175.  
  176. .sign-up {
  177. height: 2rem;
  178. width: 5rem;
  179. display: flex;
  180. justify-content: center;
  181. align-items: center;
  182. cursor: pointer;
  183. background-color: var(--bg-p);
  184. font-size: .8rem;
  185. text-align: center;
  186. }
  187.  
  188. .sign-up:hover {
  189. background-color: var(--bg-d);
  190. }
  191.  
  192. .fade-enter-active {
  193. transition: opacity 500ms;
  194. }
  195.  
  196. .fade-leave-active {
  197. transition: opacity 0;
  198. }
  199.  
  200. .fade-enter, .fade-leave-to {
  201. opacity: 0;
  202. }
  203.  
  204. :disabled {
  205. cursor: not-allowed;
  206. }
  207.  
  208. .pulse {
  209. margin-top: 1rem;
  210. }
  211.  
  212. </style>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement