var connection_options = { "sync disconnect on unload": true, secure: true, "force new connection": true }; var socket = io.connect( window.location.protocol + "//" + window.location.hostname, 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 = that.parentElement.querySelector("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"); 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 escapeHtml(text) { var map = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }; return text.replace(/[&<>"']/g, function(m) { return map[m]; }); } 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", '