My SMM panel
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

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