Examples of code I've written in PHP, Javascript, SCSS, etc.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

169 Zeilen
4.9 KiB

  1. <template>
  2. <form v-if="active === 'register'" onsubmit = "event.preventDefault(); return false" id="register-form">
  3. <h3>Registration</h3>
  4. <div>{{errorMessage}}</div>
  5. <div>
  6. <label for='sender_name'>Name</label>
  7. <input id='register-name' required type='name' name='sender_name' placeholder=''
  8. spellcheck='false'>
  9. </div>
  10. <div>
  11. <label for='sender_email'>Email</label>
  12. <input v-on:input="checkPasswords" id='register-email' required type='email' name='sender_email' placeholder=''
  13. spellcheck='false'>
  14. </div>
  15. <div>
  16. <label for='sender_password'>Password</label>
  17. <input v-on:input="checkPasswords" id='register-password' required type='password' name='sender_password'
  18. placeholder='' spellcheck='false'>
  19. </div>
  20. <div>
  21. <label for='confirm_password'>Confirm Password</label>
  22. <input v-on:input="checkPasswords" id='confirm-password' required type='password'
  23. name='sender_password' placeholder='' spellcheck='false'>
  24. </div>
  25. <button @click="register($event)" class="submit-btn" type="submit">Submit</button>
  26. </form>
  27. <form v-if="active === 'forgot'" v-on:submit="forgotPassword" id="forgot-form">
  28. <h3>Forgot Password</h3>
  29. <div>
  30. <label for='sender_email'>Email</label>
  31. <input id='forgot-email' required type='email' name='sender_email' placeholder=''
  32. spellcheck='false'>
  33. </div>
  34. <button class="submit-btn" type="submit">Submit</button>
  35. </form>
  36. <img v-if="active === 'loading'" type="image/svg+xml" class="loading-icon" src="../../images/loading.svg" alt=""/>
  37. <div v-if="active === 'register-completed'">
  38. <img class="medium-icon" src="../../images/checked2.svg" alt="">
  39. <h3>Success!</h3>
  40. <p>A verification link has been sent to your inbox.</p>
  41. </div>
  42. <div v-if="active === 'forgot-completed'">
  43. <img class="medium-icon" src="../../images/checked2.svg" alt="">
  44. <h3>Success!</h3>
  45. <p>A password reset link has been sent.</p>
  46. </div>
  47. <div v-if="active === 'error'">
  48. <img class="medium-icon" src="../../images/warning-colored.svg" alt="">
  49. <h3>An Error Occured.</h3>
  50. <p>{{`${error}: ${errorMessage}`}}</p>
  51. </div>
  52. <div v-on:click="closeArea" class="cancel-button"></div>
  53. </template>
  54. <script>
  55. function getCookie(name) {
  56. var re = new RegExp(name + "=([^;]+)")
  57. var value = re.exec(document.cookie)
  58. let v = (value != null) ? unescape(value[1]) : null
  59. return v
  60. }
  61. function getToken() {
  62. return fetch("/sanctum/csrf-cookie", {
  63. method: 'GET'
  64. }).then( () => {
  65. this.token = this.getCookie('XSRF-TOKEN')
  66. return this.token
  67. })
  68. }
  69. function register(event) {
  70. event.preventDefault();
  71. event.stopPropagation();
  72. this.errorMessage = ''
  73. let name = document.getElementById("register-name").value
  74. let email = document.getElementById("register-email").value
  75. let password = document.getElementById("register-password").value
  76. let password_confirmation = document.getElementById("confirm-password").value
  77. this.active = 'loading'
  78. this.getToken().then(() => {fetch("/register", {
  79. method: 'POST',
  80. headers: {'Content-Type': 'application/json',
  81. 'Accept': 'application/json',
  82. 'X-XSRF-TOKEN': this.token},
  83. body: JSON.stringify({"name": name,
  84. "email": email,
  85. "password": password,
  86. "password_confirmation": password_confirmation})})
  87. .then(response => {
  88. //Give completed or error
  89. if (response.ok) {
  90. this.active = 'register-completed'
  91. } else if (response.status != 500) {
  92. response.json().then((e) => {
  93. try {
  94. for (let i in e.errors) {
  95. this.errorMessage = e.errors[i].flat().join("\n") +
  96. "\n" + this.errorMessage
  97. }
  98. } catch (x) {
  99. this.errorMessage = e.message
  100. }
  101. })
  102. this.active = 'register'
  103. } else {
  104. this.errorMessage = response.statusText
  105. this.active = 'register'
  106. }
  107. });
  108. })
  109. return false
  110. }
  111. function checkPasswords() {
  112. let passInput = document.getElementById('register-password')
  113. let passInput2 = document.getElementById('confirm-password')
  114. if (passInput.value != passInput2.value) {
  115. passInput2.setCustomValidity('Passwords must be matching')
  116. } else {
  117. passInput2.setCustomValidity('');
  118. }
  119. }
  120. function forgotPassword(event) {
  121. let email = document.getElementById("forgot-email").value
  122. this.active = 'loading'
  123. fetch("/forgot-password", {
  124. method: 'POST',
  125. headers: {'Content-Type': 'application/json',
  126. 'Accept': 'application/json',
  127. 'X-XSRF-TOKEN': this.token},
  128. body: JSON.stringify({"email": email})})
  129. .then(response => {
  130. if (response.ok) {
  131. this.active = 'forgot-completed'
  132. } else {
  133. this.error = response.status
  134. this.errorMessage = response.statusText
  135. this.active = 'error'
  136. }
  137. /* console.log(response.json()) */
  138. });
  139. event.preventDefault();
  140. }
  141. module.exports = {
  142. data() {
  143. return {active: 'register', token: '', errorMessage: ''}
  144. },
  145. methods: {
  146. getToken,
  147. getCookie,
  148. register,
  149. checkPasswords,
  150. forgotPassword,
  151. closeArea() {
  152. document.querySelector(".register-area").classList.remove("active")
  153. },
  154. },
  155. mounted() {
  156. this.getToken()
  157. }
  158. }
  159. </script>