summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/local-time.js10
-rw-r--r--js/mod/ban-list.js157
2 files changed, 157 insertions, 10 deletions
diff --git a/js/local-time.js b/js/local-time.js
index e6b3495d..a4e25d6d 100644
--- a/js/local-time.js
+++ b/js/local-time.js
@@ -25,16 +25,6 @@ onready(function(){
return [Math.pow(10, count - num.toString().length), num].join('').substr(1);
};
- var datelocale =
- { days: [_('Sunday'), _('Monday'), _('Tuesday'), _('Wednesday'), _('Thursday'), _('Friday'), _('Saturday')]
- , shortDays: [_("Sun"), _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat")]
- , months: [_('January'), _('February'), _('March'), _('April'), _('May'), _('June'), _('July'), _('August'), _('September'), _('October'), _('November'), _('December')]
- , shortMonths: [_('Jan'), _('Feb'), _('Mar'), _('Apr'), _('May'), _('Jun'), _('Jul'), _('Aug'), _('Sep'), _('Oct'), _('Nov'), _('Dec')]
- , AM: _('AM')
- , PM: _('PM')
- , am: _('am')
- , pm: _('pm')
- };
var dateformat = (typeof strftime === 'undefined') ? function(t) {
return zeropad(t.getMonth() + 1, 2) + "/" + zeropad(t.getDate(), 2) + "/" + t.getFullYear().toString().substring(2) +
" (" + [_("Sun"), _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun")][t.getDay()] + ") " +
diff --git a/js/mod/ban-list.js b/js/mod/ban-list.js
new file mode 100644
index 00000000..30529044
--- /dev/null
+++ b/js/mod/ban-list.js
@@ -0,0 +1,157 @@
+var banlist_init = function(token, my_boards, inMod) {
+ inMod = !inMod;
+
+ var lt;
+
+ var selected = {};
+
+ var time = function() { return Date.now()/1000|0; }
+
+ $.getJSON(inMod ? ("?/bans.json/"+token) : token, function(t) {
+ $("#banlist").on("new-row", function(e, drow, el) {
+ var sel = selected[drow.id];
+ if (sel) {
+ $(el).find('input.unban').prop("checked", true);
+ }
+ $(el).find('input.unban').on("click", function() {
+ selected[drow.id] = $(this).prop("checked");
+ });
+
+
+ if (drow.expires && drow.expires != 0 && drow.expires < time()) {
+ $(el).find("td").css("text-decoration", "line-through");
+ }
+ });
+
+ var selall = "<input type='checkbox' id='select-all' style='float: left;'>";
+
+ lt = $("#banlist").longtable({
+ mask: {name: selall+_("IP address"), width: "220px", fmt: function(f) {
+ var pre = "";
+ if (inMod && f.access) {
+ pre = "<input type='checkbox' class='unban'>";
+ }
+
+ if (inMod && f.single_addr && !f.masked) {
+ return pre+"<a href='?/IP/"+f.mask+"'>"+f.mask+"</a>";
+ }
+ return pre+f.mask;
+ } },
+ reason: {name: _("Reason"), width: "calc(100% - 715px - 6 * 4px)", fmt: function(f) {
+ var add = "", suf = '';
+ if (f.seen == 1) add += "<i class='fa fa-check' title='"+_("Seen")+"'></i>";
+ if (f.message) {
+ add += "<i class='fa fa-comment' title='"+_("Message for which user was banned is included")+"'></i>";
+ suf = "<br /><br /><strong>"+_("Message:")+"</strong><br />"+f.message;
+ }
+
+ if (add) { add = "<div style='float: right;'>"+add+"</div>"; }
+
+ if (f.reason) return add + f.reason + suf;
+ else return add + "-" + suf;
+ } },
+ board: {name: _("Board"), width: "60px", fmt: function(f) {
+ if (f.board) return "/"+f.board+"/";
+ else return "<em>"+_("all")+"</em>";
+ } },
+ created: {name: _("Set"), width: "100px", fmt: function(f) {
+ return ago(f.created) + _(" ago"); // in AGO form
+ } },
+ // duration?
+ expires: {name: _("Expires"), width: "235px", fmt: function(f) {
+ if (!f.expires || f.expires == 0) return "<em>"+_("never")+"</em>";
+ return strftime(window.post_date, new Date((f.expires|0)*1000), datelocale) +
+ ((f.expires < time()) ? "" : " <small>"+_("in ")+until(f.expires|0)+"</small>");
+ } },
+ username: {name: _("Staff"), width: "100px", fmt: function(f) {
+ var pre='',suf='',un=f.username;
+ if (inMod && f.username && f.username != '?') {
+ pre = "<a href='?/new_PM/"+f.username+"'>";
+ suf = "</a>";
+ }
+ if (!f.username) {
+ un = "<em>"+_("system")+"</em>";
+ }
+ return pre + un + suf;
+ } }
+ }, {}, t);
+
+ $("#select-all").click(function(e) {
+ var $this = $(this);
+ $("input.unban").prop("checked", $this.prop("checked"));
+ lt.get_data().forEach(function(v) { v.access && (selected[v.id] = $this.prop("checked")); });
+ e.stopPropagation();
+ });
+
+ var filter = function(e) {
+ if ($("#only_mine").prop("checked") && ($.inArray(e.board, my_boards) === -1)) return false;
+ if ($("#only_not_expired").prop("checked") && e.expires && e.expires != 0 && e.expires < time()) return false;
+ if ($("#search").val()) {
+ var terms = $("#search").val().split(" ");
+
+ var fields = ["mask", "reason", "board", "staff", "message"];
+
+ var ret_false = false;
+ terms.forEach(function(t) {
+ var fs = fields;
+
+ var re = /^(mask|reason|board|staff|message):/, ma;
+ if (ma = t.match(re)) {
+ fs = [ma[1]];
+ t = t.replace(re, "");
+ }
+
+ var found = false
+ fs.forEach(function(f) {
+ if (e[f] && e[f].indexOf(t) !== -1) {
+ found = true;
+ }
+ });
+ if (!found) ret_false = true;
+ });
+
+ if (ret_false) return false;
+ }
+
+ return true;
+ };
+
+ $("#only_mine, #only_not_expired, #search").on("click input", function() {
+ lt.set_filter(filter);
+ });
+ lt.set_filter(filter);
+
+ $(".banform").on("submit", function() { return false; });
+
+ $("#unban").on("click", function() {
+ $(".banform .hiddens").remove();
+ $("<input type='hidden' name='unban' value='unban' class='hiddens'>").appendTo(".banform");
+
+ $.each(selected, function(e) {
+ $("<input type='hidden' name='ban_"+e+"' value='unban' class='hiddens'>").appendTo(".banform");
+ });
+
+ $(".banform").off("submit").submit();
+ });
+
+ if (device_type == 'desktop') {
+ // Stick topbar
+ var stick_on = $(".banlist-opts").offset().top;
+ var state = true;
+ $(window).on("scroll resize", function() {
+ if ($(window).scrollTop() > stick_on && state == true) {
+ $("body").css("margin-top", $(".banlist-opts").height());
+ $(".banlist-opts").addClass("boardlist top").detach().prependTo("body");
+ $("#banlist tr:not(.row)").addClass("tblhead").detach().appendTo(".banlist-opts");
+ state = !state;
+ }
+ else if ($(window).scrollTop() < stick_on && state == false) {
+ $("body").css("margin-top", "auto");
+ $(".banlist-opts").removeClass("boardlist top").detach().prependTo(".banform");
+ $(".tblhead").detach().prependTo("#banlist");
+ state = !state;
+ }
+ });
+ }
+ });
+}