var connection_options = { 'sync disconnect on unload':true, 'secure': true, 'force new connection': true }; var socket = io.connect(window.location.protocol + '//' + window.location.hostname + ':8080', connection_options); var api_token_list; $(document).ready(function(){ $('ul.tabs').tabs(); api_token_list = $("#api_token_list").clone(); $("#api_token_list").remove(); loaded(); }); $(document).on("click", "#refresh_all", function(e){ e.preventDefault(); $("#descriptions_cont").empty(); $("#thumbnails_cont").empty(); $(".api_token_container").remove(); if(!$(".channel_things").hasClass("hide")) { $(".channel_things").addClass("hide") } $(".preloader-wrapper").removeClass("hide"); loaded(); $("#listeners").empty(); socket.emit("get_spread"); }); function decodeChannelName(str) { var _fn = decodeURIComponent; str = str.toUpperCase(); var toReturn = _fn(str.replace(/%5F/g, "_")); return toReturn.toLowerCase(); } socket.on("spread_listeners", function(obj){ $("#listeners").append("

Private listeners: " + obj.offline + "

"); $("#listeners").append("

Total listeners: " + obj.total + "

"); $("#listeners").append("
"); for(var x in obj.online_users){ if(obj.online_users[x]._id != "total_users" && obj.online_users[x].hasOwnProperty("users") && obj.online_users[x].users.length > 0){ $("#listeners").append("

" + decodeChannelName(obj.online_users[x]._id) + ": " + obj.online_users[x].users.length + "

"); } } }); if(!$(".channel_things").hasClass("hide")) { $(".channel_things").addClass("hide") } $(".preloader-wrapper").removeClass("hide"); $(document).on("click", ".update_api_token", function(e) { e.preventDefault(); var id = $(this).attr("data-id"); var limit = $("#" + id + "-limit").val(); var that = this; $(that).toggleClass("disabled"); $("#" + id + "-delete").toggleClass("disabled"); $.ajax({ type: "PUT", url: "api/api_token", data: { id: id, limit: limit, }, success: function(response) { if(response == "OK") { Materialize.toast("Updated limit!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } $(that).toggleClass("disabled"); $("#" + id + "-delete").toggleClass("disabled"); } }); }); $(document).on("click", ".delete_api_token", function(e) { e.preventDefault(); var id = $(this).attr("data-id"); var that = this; $(that).toggleClass("disabled"); $("#" + id + "-limit").toggleClass("disabled"); $.ajax({ type: "DELETE", url: "api/api_token", data: { id: id }, success: function(response) { if(response == "success") { Materialize.toast("Removed token!", 2000, "green lighten"); $("#" + id).remove(); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); $(that).toggleClass("disabled"); $("#" + id + "-limit").toggleClass("disabled"); } }, }); }); function loaded() { $.ajax({ type: "GET", url: "/api/api_token", success: function(response) { if(response.length == 0) { if(!$(".header-api-fields").hasClass("hide")) { $(".header-api-fields").addClass("hide"); } return; } $(".header-api-fields").removeClass("hide"); for(var i = 0; i < response.length; i++) { var to_add = api_token_list.clone(); to_add.find(".api_token_limit").val(response[i].limit); to_add.attr("id", response[i]._id); to_add.find(".api_token_name").text(response[i].name); to_add.find(".api_token_usage").text(response[i].usage); to_add.find(".api_token_origin").text(response[i].origin); to_add.find(".update_api_token").attr("id", response[i]._id + "-update"); to_add.find(".api_token_limit").attr("id", response[i]._id + "-limit"); to_add.find(".delete_api_token").attr("id", response[i]._id + "-delete"); to_add.find(".delete_api_token").attr("data-id", response[i]._id); to_add.find(".update_api_token").attr("data-id", response[i]._id); if(response[i].active) { to_add.find(".check").removeClass("hide"); } else { to_add.find(".uncheck").removeClass("hide"); } $("#api_keys").append(to_add); } }, error: function(err) { } }); $.ajax({ type: "GET", url: "/api/lists", success: function(response){ response = response.sort(predicate({ name: '_id', reverse: false })); var output_pinned = ''; var output_delete = ''; for(var x = 0; x < response.length; x++){ if(response[x].count > 2){ output_pinned += ""; } output_delete += ""; } $("#frontpage_pinned").html(output_pinned); $("#remove_thumbnail").html($("#frontpage_pinned").clone().html()); $("#remove_description").html($("#frontpage_pinned").clone().html()); $("#delete_list_name").html($("#frontpage_pinned").clone().html()); $("#delete_userpass_name").html($("#frontpage_pinned").clone().html()); $("#delete_channel_name").html($("#frontpage_pinned").clone().html()); $("select").material_select(); if(!$(".preloader-wrapper").hasClass("hide")) { $(".preloader-wrapper").addClass("hide") } $(".channel_things").removeClass("hide"); } }); $.ajax({ type: "GET", url: "/api/names", success: function(response) { for(var i = 0; i < response.length; i++) { var icon = ""; if(response[i].icon && response[i].icon != "") { icon = "" + response[i]._id + ""; } $(".names-container").append("
" + icon + response[i]._id + "
check
"); } }, }); $.ajax({ type: "GET", url: "/api/thumbnails", success: function(response){ if(response.length > 0){ $(".thumbnails-badge").removeClass("hide"); $(".thumbnails-badge").text(response.length); } add_to_tab("thumbnails", response); } }); $.ajax({ type: "GET", url: "/api/descriptions", success: function(response){ if(response.length > 0){ $(".descriptions-badge").removeClass("hide"); $(".descriptions-badge").text(response.length); } add_to_tab("descriptions", response); } }); } $(document).on("click", ".approve_name", function(e) { var that = this; var name = $(that).attr("data-name"); var value = $("." + name + "_input").val(); $.ajax({ type: "POST", url: "/api/names", data: { icon: value, name: name, }, success: function(resp) { if(resp == true) { Materialize.toast("Approved image!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", ".thumbnail_link", function(e) { e.preventDefault(); window.open("https:" + this.value,'_blank'); }); function add_to_tab(dest, resp){ for(var x = 0; x < resp.length; x++){ if(dest == "thumbnails"){ $("#" + dest + "_cont").append("
" + decodeChannelName(resp[x].channel) + "
checkX
"); } else { $("#" + dest + "_cont").append("
" + decodeChannelName(resp[x].channel) + "
checkX
"); } } } $(document).on("click", "#get_token", function(e){ e.preventDefault(); $.ajax({ type: "GET", url: "/api/token", success: function(response){ if(response != false){ $("#new_token").val(response.token); $("#get_token").toggleClass("hide"); $("#remove_token").toggleClass("hide"); } } }) }); $(document).on("click", ".approve_thumbnails", function(e){ e.preventDefault(); var channel = $(this).attr("data-channel"); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/approve_thumbnail", data: { channel: channel }, success: function(response){ if(response){ $(that).parent().remove(); var length = parseInt($(".thumbnails-badge").text()); length = length - 1; $(".thumbnails-badge").text(length); if(length <= 0 && !$(".thumbnails-badge").hasClass("hide")){ $(".thumbnails-badge").addClass("hide"); } Materialize.toast("Approved Thumbnail!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", ".deny_thumbnails", function(e){ e.preventDefault(); var channel = $(this).attr("data-channel"); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/deny_thumbnail", data: { channel: channel }, success: function(response){ if(response){ $(that).parent().remove(); var length = parseInt($(".thumbnails-badge").text()); length = length - 1; $(".thumbnails-badge").text(length); if(length <= 0 && !$(".thumbnails-badge").hasClass("hide")){ $(".thumbnails-badge").addClass("hide"); } Materialize.toast("Denied thumbnail!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", ".approve_descriptions", function(e){ e.preventDefault(); var channel = $(this).attr("data-channel"); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/approve_description", data: { channel: channel }, success: function(response){ if(response){ $(that).parent().remove(); var length = parseInt($(".descriptions-badge").text()); length = length - 1; $(".descriptions-badge").text(length); if(length <= 0 && !$(".descriptions-badge").hasClass("hide")){ $(".descriptions-badge").addClass("hide"); } Materialize.toast("Approved description!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", ".deny_descriptions", function(e){ e.preventDefault(); var channel = $(this).attr("data-channel"); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/deny_description", data: { channel: channel }, success: function(response){ if(response){ $(that).parent().remove(); var length = parseInt($(".descriptions-badge").text()); length = length - 1; $(".descriptions-badge").text(length); if(length <= 0 && !$(".descriptions-badge").hasClass("hide")){ $(".descriptions-badge").addClass("hide"); } Materialize.toast("Denied description!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", "#remove_description_button", function(e){ e.preventDefault(); var channel = $("#remove_description").val(); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/remove_description", data: { channel: channel }, success: function(response){ if(response){ Materialize.toast("Removed description!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("click", "#remove_thumbnail_button", function(e){ e.preventDefault(); var channel = $("#remove_thumbnail").val(); if(!channel) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var that = this; $.ajax({ type: "POST", url: "/api/remove_thumbnail", data: { channel: channel }, success: function(response){ if(response){ Materialize.toast("Removed thumbnail!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }); }); $(document).on("submit", "#delete_channel", function(e){ e.preventDefault(); var to_delete = $("#delete_channel_name").val(); if(!to_delete) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } var r = confirm("Delete list \""+ decodeChannelName(to_delete) + "\"?"); if (r == true) { $.ajax({ type: "POST", url: "/api/delete", data: { _id: to_delete }, success: function(response){ if(response == true){ loaded(); Materialize.toast("Deleted channel!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }) } }); $(document).on("click", "#delete_channel_button", function(e){ e.preventDefault(); $("#delete_channel").submit(); }); $(document).on("click", "#remove_token", function(e){ e.preventDefault(); $.ajax({ type: "GET", url: "/api/remove_token", success: function(response){ if(response != false){ $("#new_token").val(""); $("#get_token").toggleClass("hide"); $("#remove_token").toggleClass("hide"); } } }) }); $(document).on("submit", "#change_pinned", function(e){ e.preventDefault(); var to_pin = $("#frontpage_pinned").val(); if(!to_pin) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } $.ajax({ type: "POST", url: "/api/pinned", data: { _id: to_pin }, success: function(response){ if(response == true){ Materialize.toast("Pinned channel!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }) }); $(document).on("click", "#change_pinned_button", function(){ $("#change_pinned").submit(); }); $(document).on("click", "#delete_admin_button", function(){ $("#delete_list").submit(); }); $(document).on("click", "#delete_userpass_button", function(){ $("#delete_userpass").submit(); }); $(document).on("submit", "#delete_list", function(e){ e.preventDefault(); var to_remove_password = $("#delete_list_name").val(); if(!to_remove_password) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } $.ajax({ type: "POST", url: "/api/admin", data: { _id: to_remove_password }, success: function(response){ if(response == true){ Materialize.toast("Removed admin password!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }) }); $(document).on("submit", "#delete_userpass", function(e){ e.preventDefault(); var to_remove_password = $("#delete_userpass_name").val(); if(!to_remove_password) { Materialize.toast("Something went wrong...", 2000, "red lighten"); return; } $.ajax({ type: "POST", url: "/api/userpass", data: { _id: to_remove_password }, success: function(response){ if(response == true){ Materialize.toast("Removed userpass password!", 2000, "green lighten"); } else { Materialize.toast("Something went wrong...", 2000, "red lighten"); } } }) }); function predicate() { var fields = [], n_fields = arguments.length, field, name, cmp; var default_cmp = function (a, b) { if(a == undefined) a = 0; if(b == undefined) b = 0; if (a === b) return 0; return a < b ? -1 : 1; }, getCmpFunc = function (primer, reverse) { var dfc = default_cmp, // closer in scope cmp = default_cmp; if (primer) { cmp = function (a, b) { return dfc(primer(a), primer(b)); }; } if (reverse) { return function (a, b) { return -1 * cmp(a, b); }; } return cmp; }; // preprocess sorting options for (var i = 0; i < n_fields; i++) { field = arguments[i]; if (typeof field === 'string') { name = field; cmp = default_cmp; } else { name = field.name; cmp = getCmpFunc(field.primer, field.reverse); } fields.push({ name: name, cmp: cmp }); } // final comparison function return function (A, B) { var name, result; for (var i = 0; i < n_fields; i++) { result = 0; field = fields[i]; name = field.name; result = field.cmp(A[name], B[name]); if (result !== 0) break; } return result; }; } socket.emit("get_spread");