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; var dynamicListeners = {}; function toast(text, length, classes) { M.toast({ html: text, displayLength: length, classes: classes}); } window.addEventListener("DOMContentLoaded", function() { M.Tabs.init(document.querySelector(".tabs_admin"), { onShow: function() { if(this.index == 2) { M.Tabs.getInstance(document.querySelector(".tabs_admin_info")).updateTabIndicator(); } } }); M.Tabs.init(document.querySelector(".tabs_admin_info")); api_token_list = document.querySelector("#api_token_list").cloneNode(true); document.querySelector("#api_token_list").remove(); loaded(); addClass(".channel_things", "hide"); removeClass(".preloader-wrapper", "hide"); document.addEventListener("click", function(event) { handleEvent(event, event.target, false, "click"); }, true); document.addEventListener("input", function(event) { handleEvent(event, event.target, false, "input"); }, true); document.addEventListener("change", function(event) { handleEvent(event, event.target, false, "change"); }, true); document.addEventListener("submit", function(event) { handleEvent(event, event.target, false, "submit"); }, true); document.getElementById("refresh_all").addEventListener("click", function(event) { event.preventDefault(); document.getElementById("descriptions_cont").innerHTML = ""; document.getElementById("thumbnails_cont").innerHTML = ""; document.querySelector(".names-container").innerHTML = ""; var elements = document.querySelectorAll(".api_token_container"); for(var i = 0; i < elements.length; i++) { elements[i].remove(); } addClass(".channel_things", "hide"); removeClass(".preloader-wrapper", "hide"); loaded(); document.querySelector("#listeners").innerHTML = ""; socket.emit("get_spread"); }); }); addListener("click", ".update_api_token", function(event) { this.preventDefault(); var that = event; var id = that.getAttribute("data-id"); var limit = document.querySelector("#limit-" + id).value; toggleClass(that, "disabled"); toggleClass("#delete-" + id, "disabled"); ajax({ type: "PUT", url: "api/api_token", headers: { "Content-Type": "application/json" }, data: { id: id, limit: limit, }, success: function(response) { if(response == "OK") { toast("Updated limit!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } toggleClass(that, "disabled"); toggleClass("#delete-" + id, "disabled"); } }); }); addListener("click", ".delete_api_token", function(event) { this.preventDefault(); var that = event; var id = that.getAttribute("data-id"); toggleClass(that, "disabled"); toggleClass("#limit-" + id, "disabled"); ajax({ type: "DELETE", url: "api/api_token", headers: { "Content-Type": "application/json" }, data: { id: id }, success: function(response) { if(response == "success") { toast("Removed token!", 2000, "green lighten"); document.querySelector("#element-" + id).remove(); } else { toast("Something went wrong...", 2000, "red lighten"); toggleClass(that, "disabled"); toggleClass("#limit-" + id, "disabled"); } }, }); }); addListener("click", ".approve_name", function(event) { var that = event; var name = that.getAttribute("data-name"); var value = document.querySelector("." + name + "_input").value; ajax({ type: "POST", url: "/api/names", data: { icon: value, name: name, }, headers: { "Content-Type": "application/json" }, success: function(resp) { if(resp == true) { toast("Approved image!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".remove_name", function(event) { var that = event; var name = that.getAttribute("data-name"); var value = document.querySelector("." + name + "_input").value; ajax({ type: "DELETE", url: "/api/names", data: { name: name, }, headers: { "Content-Type": "application/json" }, success: function(resp) { if(resp == true) { toast("Removed username!", 2000, "green lighten"); that.parentElement.remove(); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".thumbnail_link", function(event) { this.preventDefault(); window.open("https:" + event.value,'_blank'); }); addListener("click", "#get_token", function(event) { this.preventDefault(); ajax({ type: "GET", url: "/api/token", headers: { "Content-Type": "application/json" }, success: function(response){ if(response != false){ document.querySelector("#new_token").value = response.token; toggleClass("#get_token", "hide"); toggleClass("#remove_token", "hide"); } } }) }); addListener("click", ".approve_thumbnails", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/approve_thumbnail", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".thumbnails-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".thumbnails-badge").innerText = length; if(length <= 0){ addClass(".thumbnails-badge", "hide"); } toast("Approved Thumbnail!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } }, error: function(err) { } }); }); addListener("click", ".deny_thumbnails", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/deny_thumbnail", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".thumbnails-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".thumbnails-badge").innerText = length; if(length <= 0){ addClass(".thumbnails-badge", "hide"); } toast("Denied thumbnail!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".approve_descriptions", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/approve_description", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".descriptions-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".descriptions-badge").innerText = length; if(length <= 0){ addClass(".descriptions-badge", "hide"); } toast("Approved description!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".deny_descriptions", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/deny_description", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".descriptions-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".descriptions-badge").innerText = length; if(length <= 0){ addClass(".descriptions-badge", "hide"); } toast("Denied description!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".approve_rules", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/approve_rules", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".rules-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".rules-badge").innerText = length; if(length <= 0){ addClass(".rules-badge", "hide"); } toast("Approved rules!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", ".deny_rules", function(event) { this.preventDefault(); var that = event; var channel = that.getAttribute("data-channel"); if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/deny_rules", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ that.parentElement.remove(); var length = parseInt(document.querySelector(".rules-badge").innerText); length = length - 1; increaseInfo(-1); document.querySelector(".rules-badge").innerText = length; if(length <= 0){ addClass(".rules-badge", "hide"); } toast("Denied description!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", "#remove_description_button", function(event) { this.preventDefault(); var that = event; var channel = document.querySelector("#remove_description").value; if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/remove_description", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ toast("Removed description!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", "#remove_rules_button", function(event) { this.preventDefault(); var that = event; var channel = document.querySelector("#remove_rules").value; if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/remove_rules", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ toast("Removed rules!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); addListener("click", "#remove_thumbnail_button", function(event) { this.preventDefault(); var that = event; var channel = document.querySelector("#remove_thumbnail").value; if(!channel) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/remove_thumbnail", data: { channel: channel }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response){ toast("Removed thumbnail!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); }); function delete_channel(that) { var to_delete = document.querySelector("#delete_channel_name").value; if(!to_delete) { 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 }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response == true){ loaded(); toast("Deleted channel!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }) } } addListener("submit", "#delete_channel", function(event) { this.preventDefault(); delete_channel(event); }); addListener("click", "#delete_channel_button", function(event) { this.preventDefault(); delete_channel(event); }); addListener("click", "#remove_token", function(event) { this.preventDefault(); ajax({ type: "GET", url: "/api/remove_token", headers: { "Content-Type": "application/json" }, success: function(response){ if(response != false){ document.querySelector("#new_token").value = ""; toggleClass("#get_token", "hide"); toggleClass("#remove_token", "hide"); } } }) }); addListener("submit", "#change_pinned", function(event) { this.preventDefault(); change_pinned(event); }); addListener("click", "#change_pinned_button", function(event) { this.preventDefault(); change_pinned(event); }); addListener("click", "#delete_admin_button", function(event) { this.preventDefault(); delete_admin_list(event); }); function change_pinned(that) { var to_pin = document.querySelector("#frontpage_pinned").value; if(!to_pin) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/pinned", data: { _id: to_pin }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response == true){ toast("Pinned channel!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }) } function delete_admin_list(that) { var to_remove_password = document.querySelector("#delete_list_name").value; if(!to_remove_password) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/admin", data: { _id: to_remove_password }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response == true){ toast("Removed admin password!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }); } function delete_userpass(that) { var to_remove_password = document.querySelector("#delete_userpass_name").value; if(!to_remove_password) { toast("Something went wrong...", 2000, "red lighten"); return; } ajax({ type: "POST", url: "/api/userpass", data: { _id: to_remove_password }, headers: { "Content-Type": "application/json" }, success: function(response){ if(response == true){ toast("Removed userpass password!", 2000, "green lighten"); } else { toast("Something went wrong...", 2000, "red lighten"); } } }) } addListener("click", "#delete_userpass_button", function(event) { this.preventDefault(); delete_userpass(event); }); addListener("submit", "#delete_list", function(event) { this.preventDefault(); delete_admin_list(event); }); addListener("submit", "#delete_userpass", function(event) { this.preventDefault(); delete_userpass(event); }); socket.on("spread_listeners", function(obj){ document.querySelector("#listeners").insertAdjacentHTML("beforeend", "
Private listeners: " + obj.offline + "
"); document.querySelector("#listeners").insertAdjacentHTML("beforeend", "Total listeners: " + obj.total + "
"); document.querySelector("#listeners").insertAdjacentHTML("beforeend", "" + decodeChannelName(obj.online_users[x]._id) + ": " + obj.online_users[x].users.length + "
"); } } }); function add_to_tab(dest, resp){ for(var x = 0; x < resp.length; x++){ if(dest == "thumbnails"){ document.querySelector("#" + dest + "_cont").insertAdjacentHTML("beforeend", ""); } else if(dest == "descriptions"){ document.querySelector("#" + dest + "_cont").insertAdjacentHTML("beforeend", ""); } else { resp[x].rules = resp[x].rules.replace(/\n/g, " /n\\ "); document.querySelector("#" + dest + "_cont").insertAdjacentHTML("beforeend", ""); } } } function increaseInfo(num) { removeClass(".info-badge", "hide"); try { var currentNumber = parseInt(document.querySelector(".info-badge").innerText); if(isNaN(currentNumber)) currentNumber = 0; document.querySelector(".info-badge").innerText = currentNumber + num; currentNumber += num; if(currentNumber <= 0) { addClass(".info-badge", "hide"); } } catch(e) { document.querySelector(".info-badge").innerText = 1; } } function loaded() { ajax({ type: "GET", headers: { "Content-Type": "application/json" }, url: "/api/api_token", success: function(response) { if(response.length == 0) { addClass(".header-api-fields", "hide"); return; } removeClass(".header-api-fields", "hide"); for(var i = 0; i < response.length; i++) { var to_add = api_token_list.cloneNode(true); to_add.setAttribute("id", "element-" + response[i]._id); to_add.querySelector(".api_token_name").innerText = response[i].name; to_add.querySelector(".api_token_usage").innerText = response[i].usage; to_add.querySelector(".api_token_origin").innerText = response[i].origin; to_add.querySelector(".update_api_token").setAttribute("id", "update-" + response[i]._id); to_add.querySelector(".api_token_limit").setAttribute("id", "limit-" + response[i]._id); to_add.querySelector("#limit-" + response[i]._id).value = parseInt(response[i].limit); to_add.querySelector(".delete_api_token").setAttribute("id", "delete-" + response[i]._id); to_add.querySelector(".delete_api_token").setAttribute("data-id", response[i]._id); to_add.querySelector(".update_api_token").setAttribute("data-id", response[i]._id); if(response[i].active) { removeClass(to_add.querySelector(".check"), "hide"); } else { removeClass(to_add.querySelector(".uncheck"), "hide"); } document.querySelector("#api_keys").insertAdjacentHTML("beforeend", '