My SMM panel
 
 
 
 
 
 

120 行
3.3 KiB

  1. import RegisterArea from './register-area/register-area.vue'
  2. import Panel from './panel/panel.vue'
  3. import '../scss/main.scss'
  4. import { createApp } from 'vue'
  5. import.meta.glob([
  6. '../images/**',
  7. ]);
  8. let heroText = document.querySelectorAll(".landing-hero h2,.landing-hero p")
  9. let registerToggles = document.querySelectorAll(".register-btn, .register-area\
  10. .cancel-button, .services-cards button")
  11. let token = getCookie('XSRF-TOKEN')
  12. function importAll(r) {
  13. return r.keys().map(r)
  14. }
  15. function getCookie(name) {
  16. var re = new RegExp(name + "=([^;]+)")
  17. var value = re.exec(document.cookie)
  18. return (value != null) ? unescape(value[1]) : null
  19. }
  20. function getToken() {
  21. return fetch("/sanctum/csrf-cookie", {
  22. method: 'GET'
  23. }).then( () => {
  24. token = getCookie('XSRF-TOKEN')
  25. return token
  26. })
  27. }
  28. function login(event) {
  29. getToken().then(fetch("/login", {
  30. method: 'POST',
  31. headers: {'Content-Type': 'application/json',
  32. 'Accept': 'application/json',
  33. 'X-XSRF-TOKEN': token},
  34. body: JSON.stringify({"email":
  35. document.getElementById("login_email").value,
  36. "password": document.getElementById("login_password").value}),
  37. }).then(response => {
  38. if (response.ok) {
  39. window.location.assign("/panel")
  40. } else {
  41. document.querySelector("#login_form .error").innerText =
  42. "Invalid credentials."
  43. }
  44. }))
  45. event.preventDefault()
  46. // event.stopPropogation()
  47. }
  48. //Attempt to resend the verification link
  49. function resendLink(event) {
  50. fetch("/resend-verification", {
  51. method: 'POST',
  52. headers: {'Content-Type': 'application/json',
  53. 'Accept': 'application/json',
  54. 'X-XSRF-TOKEN': token},
  55. }).then(response => {
  56. if (response.ok) {
  57. event.target.parentNode.getElementsByTagName('h3')[0].innerText =
  58. "The link has been resent."
  59. } else {
  60. event.target.parentNode.getElementsByTagName('h3')[0].innerText =
  61. `${response.status} : ${response.statusText}`
  62. }})
  63. event.preventDefault();
  64. }
  65. function toggleNav() {
  66. heroText.forEach(item => {
  67. item.classList.toggle("hidden")
  68. })
  69. document.querySelector("nav form.login").classList.toggle("active")
  70. this.classList.toggle("toggled")
  71. }
  72. if (window.location.pathname == '/') {
  73. document.getElementById('nav_toggle').addEventListener('click', toggleNav)
  74. document.querySelector('#login_form button').addEventListener('click', login)
  75. const app = createApp(RegisterArea).mount('#app')
  76. // app.token = token
  77. if (!token) {app.token = getToken()}
  78. //Triggers for registration menu
  79. for (let i = 0; i < registerToggles.length; i++) {
  80. registerToggles[i].addEventListener("click", function() {
  81. document.querySelector(".register-area").classList.add("active")
  82. app.active = 'register'
  83. })
  84. }
  85. document.getElementById("forgot-password-btn").onclick = event => {
  86. document.querySelector(".register-area").classList.add("active")
  87. app.active = 'forgot'
  88. event.preventDefault()
  89. }
  90. //FAQ collapsibles
  91. let cols = document.getElementsByClassName("collapsible");
  92. for (let i = 0; i < cols.length; i++) {
  93. cols[i].addEventListener("click", function() {
  94. this.classList.toggle("active");
  95. });
  96. }
  97. } else if (window.location.pathname == '/verify-email') {
  98. document.getElementById('resend_verification').addEventListener("click", resendLink)
  99. } else if (window.location.pathname == '/panel') {
  100. const app = createApp(Panel).mount('#panel')
  101. getToken().then(()=> {app.token = token})
  102. window.onhashchange = ()=>{app.active = location.hash}
  103. }