page-user.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. $("#menu-users").addClass("active");
  2. var app = new Vue({
  3. el: "#app",
  4. data: {
  5. user: {},
  6. user_email: "",
  7. all_badges: [],
  8. filtered_badges: [],
  9. selected_grant: -1,
  10. selected_revoke: -1,
  11. pages: []
  12. },
  13. mounted: function() {
  14. this.getUser();
  15. },
  16. methods: {
  17. getUser() {
  18. let username = $("#username").val();
  19. $.ajax({
  20. url: "/api/user/" + username,
  21. method: "GET",
  22. success: function(data) {
  23. app.user = data;
  24. app.getAllBadges();
  25. app.getAllPages();
  26. },
  27. error: toast.defaultAjaxError
  28. });
  29. },
  30. getAllPages: function() {
  31. $.ajax({
  32. url: "/api/page/user/all/" + app.user.id,
  33. method: "GET",
  34. success: function(data) {
  35. app.pages = data;
  36. },
  37. error: toast.defaultAjaxError
  38. });
  39. },
  40. requestUserEmail: function(userId) {
  41. $.ajax({
  42. url: "/api/user/email/" + userId,
  43. method: "GET",
  44. success: function(data) {
  45. app.user_email = data.message;
  46. },
  47. error: toast.defaultAjaxError
  48. });
  49. },
  50. getAllBadges() {
  51. $.ajax({
  52. url: "/api/badges/",
  53. method: "GET",
  54. success: function(data) {
  55. app.all_badges = data;
  56. app.filterBadges(data);
  57. },
  58. error: toast.defaultAjaxError
  59. });
  60. },
  61. // gets all badges that the user does not have.
  62. filterBadges(data) {
  63. var badge_filter = [];
  64. for (let i = 0; i < this.all_badges.length; i++) {
  65. let addme = true;
  66. if (this.user.badges) {
  67. for (let j = 0; j < this.user.badges.length; j++) {
  68. if (this.user.badges[j].id == this.all_badges[i].id) {
  69. addme = false;
  70. }
  71. }
  72. if (addme) {
  73. badge_filter.push(this.all_badges[i]);
  74. }
  75. } else {
  76. for (let i = 0; i < this.all_badges.length; i++) {
  77. badge_filter.push(this.all_badges[i]);
  78. }
  79. }
  80. }
  81. this.filtered_badges = badge_filter;
  82. },
  83. grantBadge() {
  84. if (this.selected_grant == -1) {
  85. return;
  86. }
  87. let badge = this.filtered_badges[this.selected_grant];
  88. let formData = new FormData();
  89. formData.append("userId", app.user.id);
  90. formData.append("badgeId", badge.id);
  91. $.ajax({
  92. url: "/api/badges/grant/",
  93. method: "POST",
  94. data: formData,
  95. cache: false,
  96. contentType: false,
  97. processData: false,
  98. success: function(data) {
  99. app.filtered_badges.splice(app.selected_grant, 1);
  100. app.user.badges.push(badge);
  101. app.selected_grant = -1;
  102. $("#badgeGrants").dropdown("clear");
  103. toast.info(null, "Badge Granted: " + badge.name, false);
  104. },
  105. error: toast.defaultAjaxError
  106. });
  107. },
  108. revokeBadge() {
  109. if (this.selected_revoke == -1) {
  110. return;
  111. }
  112. let badge = this.user.badges[this.selected_revoke];
  113. let formData = new FormData();
  114. formData.append("userId", app.user.id);
  115. formData.append("badgeId", badge.id);
  116. $.ajax({
  117. url: "/api/badges/revoke/",
  118. method: "POST",
  119. data: formData,
  120. cache: false,
  121. contentType: false,
  122. processData: false,
  123. success: function(data) {
  124. app.user.badges.splice(app.selected_revoke, 1);
  125. app.filtered_badges.push(data);
  126. app.selected_revoke = -1;
  127. $("#badgeRevokes").dropdown("clear");
  128. toast.info(null, "Badge Revoked: " + badge.name, false);
  129. },
  130. error: toast.defaultAjaxError
  131. });
  132. },
  133. // delete
  134. deleteDraft: deleteDraft,
  135. deleteLivePage: deleteLivePage,
  136. deleteAmendment: deleteAmendment,
  137. millisToDate: millisToDate
  138. }
  139. });
  140. $("#badgeGrants").dropdown({
  141. action: "hide",
  142. onChange: function(value, text, $selectedItem) {
  143. let selectedBadge = app.filtered_badges[value];
  144. $("#badgeGrants").dropdown("set selected", value);
  145. app.selected_grant = value;
  146. }
  147. });
  148. $("#badgeRevokes").dropdown({
  149. action: "hide",
  150. onChange: function(value, text, $selectedItem) {
  151. let selectedBadge = app.filtered_badges[value];
  152. $("#badgeRevokes").dropdown("set selected", value);
  153. app.selected_revoke = value;
  154. }
  155. });