The version of vichan running on lainchan.org
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.

158 Zeilen
5.1KB

  1. var banlist_init = function(token, my_boards, inMod) {
  2. inMod = !inMod;
  3. var lt;
  4. var selected = {};
  5. var time = function() { return Date.now()/1000|0; }
  6. $.getJSON(inMod ? ("?/bans.json/"+token) : token, function(t) {
  7. $("#banlist").on("new-row", function(e, drow, el) {
  8. var sel = selected[drow.id];
  9. if (sel) {
  10. $(el).find('input.unban').prop("checked", true);
  11. }
  12. $(el).find('input.unban').on("click", function() {
  13. selected[drow.id] = $(this).prop("checked");
  14. });
  15. if (drow.expires && drow.expires != 0 && drow.expires < time()) {
  16. $(el).find("td").css("text-decoration", "line-through");
  17. }
  18. });
  19. var selall = "<input type='checkbox' id='select-all' style='float: left;'>";
  20. lt = $("#banlist").longtable({
  21. mask: {name: selall+_("IP address"), width: "220px", fmt: function(f) {
  22. var pre = "";
  23. if (inMod && f.access) {
  24. pre = "<input type='checkbox' class='unban'>";
  25. }
  26. if (inMod && f.single_addr && !f.masked) {
  27. return pre+"<a href='?/IP/"+f.mask+"'>"+f.mask+"</a>";
  28. }
  29. return pre+f.mask;
  30. } },
  31. reason: {name: _("Reason"), width: "calc(100% - 715px - 6 * 4px)", fmt: function(f) {
  32. var add = "", suf = '';
  33. if (f.seen == 1) add += "<i class='fa fa-check' title='"+_("Seen")+"'></i>";
  34. if (f.message) {
  35. add += "<i class='fa fa-comment' title='"+_("Message for which user was banned is included")+"'></i>";
  36. suf = "<br /><br /><strong>"+_("Message:")+"</strong><br />"+f.message;
  37. }
  38. if (add) { add = "<div style='float: right;'>"+add+"</div>"; }
  39. if (f.reason) return add + f.reason + suf;
  40. else return add + "-" + suf;
  41. } },
  42. board: {name: _("Board"), width: "60px", fmt: function(f) {
  43. if (f.board) return "/"+f.board+"/";
  44. else return "<em>"+_("all")+"</em>";
  45. } },
  46. created: {name: _("Set"), width: "100px", fmt: function(f) {
  47. return ago(f.created) + _(" ago"); // in AGO form
  48. } },
  49. // duration?
  50. expires: {name: _("Expires"), width: "235px", fmt: function(f) {
  51. if (!f.expires || f.expires == 0) return "<em>"+_("never")+"</em>";
  52. return strftime(window.post_date, new Date((f.expires|0)*1000), datelocale) +
  53. ((f.expires < time()) ? "" : " <small>"+_("in ")+until(f.expires|0)+"</small>");
  54. } },
  55. username: {name: _("Staff"), width: "100px", fmt: function(f) {
  56. var pre='',suf='',un=f.username;
  57. if (inMod && f.username && f.username != '?' && !f.vstaff) {
  58. pre = "<a href='?/new_PM/"+f.username+"'>";
  59. suf = "</a>";
  60. }
  61. if (!f.username) {
  62. un = "<em>"+_("system")+"</em>";
  63. }
  64. return pre + un + suf;
  65. } }
  66. }, {}, t);
  67. $("#select-all").click(function(e) {
  68. var $this = $(this);
  69. $("input.unban").prop("checked", $this.prop("checked"));
  70. lt.get_data().forEach(function(v) { v.access && (selected[v.id] = $this.prop("checked")); });
  71. e.stopPropagation();
  72. });
  73. var filter = function(e) {
  74. if ($("#only_mine").prop("checked") && ($.inArray(e.board, my_boards) === -1)) return false;
  75. if ($("#only_not_expired").prop("checked") && e.expires && e.expires != 0 && e.expires < time()) return false;
  76. if ($("#search").val()) {
  77. var terms = $("#search").val().split(" ");
  78. var fields = ["mask", "reason", "board", "staff", "message"];
  79. var ret_false = false;
  80. terms.forEach(function(t) {
  81. var fs = fields;
  82. var re = /^(mask|reason|board|staff|message):/, ma;
  83. if (ma = t.match(re)) {
  84. fs = [ma[1]];
  85. t = t.replace(re, "");
  86. }
  87. var found = false
  88. fs.forEach(function(f) {
  89. if (e[f] && e[f].indexOf(t) !== -1) {
  90. found = true;
  91. }
  92. });
  93. if (!found) ret_false = true;
  94. });
  95. if (ret_false) return false;
  96. }
  97. return true;
  98. };
  99. $("#only_mine, #only_not_expired, #search").on("click input", function() {
  100. lt.set_filter(filter);
  101. });
  102. lt.set_filter(filter);
  103. $(".banform").on("submit", function() { return false; });
  104. $("#unban").on("click", function() {
  105. $(".banform .hiddens").remove();
  106. $("<input type='hidden' name='unban' value='unban' class='hiddens'>").appendTo(".banform");
  107. $.each(selected, function(e) {
  108. $("<input type='hidden' name='ban_"+e+"' value='unban' class='hiddens'>").appendTo(".banform");
  109. });
  110. $(".banform").off("submit").submit();
  111. });
  112. if (device_type == 'desktop') {
  113. // Stick topbar
  114. var stick_on = $(".banlist-opts").offset().top;
  115. var state = true;
  116. $(window).on("scroll resize", function() {
  117. if ($(window).scrollTop() > stick_on && state == true) {
  118. $("body").css("margin-top", $(".banlist-opts").height());
  119. $(".banlist-opts").addClass("boardlist top").detach().prependTo("body");
  120. $("#banlist tr:not(.row)").addClass("tblhead").detach().appendTo(".banlist-opts");
  121. state = !state;
  122. }
  123. else if ($(window).scrollTop() < stick_on && state == false) {
  124. $("body").css("margin-top", "auto");
  125. $(".banlist-opts").removeClass("boardlist top").detach().prependTo(".banform");
  126. $(".tblhead").detach().prependTo("#banlist");
  127. state = !state;
  128. }
  129. });
  130. }
  131. });
  132. }