You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mod.js 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. document.addEventListener("DOMContentLoaded", function(){
  2. var form = document.getElementById("formNewUser");
  3. form.addEventListener("submit", function(e){
  4. e.preventDefault();
  5. console.log("Sending Formular")
  6. async function register(){
  7. var email = document.getElementById("email").value;
  8. var username = document.getElementById("username").value;
  9. var bodyContent = {email:email, username:username};
  10. var response = await fetch("/newuser", {
  11. method: "POST",
  12. headers: {
  13. "Accept":"application/json",
  14. "Content-Type":"application/json"
  15. },
  16. body:JSON.stringify(bodyContent)
  17. });
  18. var data = await response.json();
  19. console.log(data);
  20. loadUsers();
  21. }
  22. register();
  23. });
  24. document.getElementById("changePwBtn").onclick = function(){
  25. window.location = "/new-password";
  26. }
  27. /*changin page*/
  28. var pageUp = document.getElementById("pageUp");
  29. var pageDown = document.getElementById("pageDown");
  30. pageUp.addEventListener("click", () => {
  31. if(maxPages > currentPage+1) {
  32. currentPage++;
  33. loadUsers();
  34. }
  35. });
  36. pageDown.addEventListener("click", () => {
  37. if(currentPage > 0){
  38. currentPage--;
  39. loadUsers();
  40. }
  41. });
  42. /*logout*/
  43. var lgoBtn = document.getElementById("lgoBtn");
  44. lgoBtn.addEventListener("click", () => {
  45. window.location = "/logout";
  46. });
  47. var mngBtn = document.getElementById("mngBtn");
  48. mngBtn.addEventListener("click", () => {
  49. window.location = "/manage-posts";
  50. });
  51. var maxPages;
  52. var currentPage = 0;
  53. var maxDisplayed = 8;
  54. async function loadUsers(){
  55. var response = await fetch("/getusers", {
  56. method: "GET",
  57. headers: {
  58. "Accept":"application/json",
  59. "Content-Type":"application/json"
  60. }
  61. })
  62. var data = await response.json();
  63. try{
  64. showUsers(data.users.slice(0 + (currentPage * maxDisplayed), maxDisplayed + (currentPage * maxDisplayed)));
  65. console.log(data.users.slice(0 + (currentPage * maxDisplayed), maxDisplayed + (currentPage * maxDisplayed)));
  66. maxPages = data.users.length / 8;
  67. console.log(maxPages, currentPage+1)
  68. }catch(error){
  69. document.getElementById("table").innerHTML = ""; //empty table
  70. }
  71. };
  72. loadUsers();
  73. function showUsers(pdata){
  74. document.getElementById("table").innerHTML = ""; //empty table
  75. var container = document.getElementById("table"); //insert in table
  76. pdata.forEach(element => {
  77. var row = document.createElement("div");
  78. var status;
  79. var susbuttonstate;
  80. if(element.suspended) {
  81. status = "suspended"
  82. susbuttonstate = "icon-pause"
  83. } else {
  84. status = "notSuspended"
  85. susbuttonstate = "icon-play"
  86. }
  87. row.classList.add("row");
  88. row.innerHTML = `
  89. <div class="col-left">
  90. <h2>${element.username}</h2>
  91. </div>
  92. <div class="col-right">
  93. <button class="${status} susButton" data-username="${element.username}">
  94. <i class="${susbuttonstate} , icon"></i>
  95. </button>
  96. <button class="remButton" data-username="${element.username}">
  97. <i class="icon-trash , icon"></i>
  98. </button>
  99. </div>
  100. `
  101. container.appendChild(row)
  102. });
  103. }
  104. async function toggleSus(pun){
  105. var response = await fetch("/toggleSus", {
  106. method: "POST",
  107. headers: {
  108. "Accept":"application/json",
  109. "Content-Type":"application/json"
  110. },
  111. body:JSON.stringify({username:pun})
  112. })
  113. var data = await response.json();
  114. console.log(data);
  115. if(data.suc || !data.suc){
  116. loadUsers();
  117. }
  118. };
  119. async function deleteUser(username){
  120. var response = await fetch("/deleteUser", {
  121. method: "POST",
  122. headers: {
  123. "Accept":"application/json",
  124. "Content-Type":"application/json"
  125. },
  126. body:JSON.stringify({username:username})
  127. })
  128. var data = await response.json();
  129. console.log(data);
  130. if(data.suc || !data.suc){
  131. loadUsers();
  132. }
  133. };
  134. document.addEventListener("click", function(e){
  135. if(e.target && e.target.classList.contains("susButton")){
  136. var un = e.target.getAttribute("data-username");
  137. toggleSus(un);
  138. }else if(e.target && e.target.classList.contains("remButton")){
  139. var username = e.target.getAttribute("data-username");
  140. deleteUser(username);
  141. }
  142. })
  143. /*-----New User Popup-----*/
  144. const openPopupBtns = document.querySelectorAll("[data-popup-target]");
  145. const closePopupBtns = document.querySelectorAll("[data-close-btn]");
  146. const overlay = document.getElementById("overlay");
  147. openPopupBtns.forEach(btn => {
  148. btn.addEventListener("click", () => {
  149. const popup = document.querySelector(btn.dataset.popupTarget);
  150. openPopup(popup);
  151. })
  152. });
  153. closePopupBtns.forEach(btn => {
  154. btn.addEventListener("click", () => {
  155. const popup = btn.closest(".popup")
  156. closePopup(popup);
  157. })
  158. });
  159. function openPopup(popup) {
  160. if (popup == null) return
  161. popup.classList.add("active");
  162. overlay.classList.add("active");
  163. }
  164. function closePopup(popup) {
  165. if (popup == null) return
  166. popup.classList.remove("active");
  167. overlay.classList.remove("active");
  168. }
  169. });