/* Pi-hole: A black hole for Internet advertisements * (c) 2020 Pi-hole, LLC (https://pi-hole.net) * Network-wide ad blocking via your own hardware. * * This file is copyright under the latest version of the EUPL. * Please see LICENSE file for your rights under this license. */ /* global moment:false */ var info = null; function showAlert(type, icon, title, message) { var opts = {}; title = " " + title + "
"; switch (type) { case "info": opts = { type: "info", icon: "far fa-clock", title: title, message: message }; info = $.notify(opts); break; case "success": opts = { type: "success", icon: icon, title: title, message: message }; if (info) { info.update(opts); } else { $.notify(opts); } break; case "warning": opts = { type: "warning", icon: "fas fa-exclamation-triangle", title: title, message: message }; if (info) { info.update(opts); } else { $.notify(opts); } break; case "error": opts = { type: "danger", icon: "fas fa-times", title: " Error, something went wrong!
", message: message }; if (info) { info.update(opts); } else { $.notify(opts); } break; default: } } function datetime(date) { return moment.unix(Math.floor(date)).format("Y-MM-DD []HH:mm:ss z"); } function disableAll() { $("input").attr("disabled", true); $("select").attr("disabled", true); $("button").attr("disabled", true); $("textarea").attr("disabled", true); } function enableAll() { $("input").attr("disabled", false); $("select").attr("disabled", false); $("button").attr("disabled", false); $("textarea").attr("disabled", false); // Enable custom input field only if applicable var ip = $("#select") ? $("#select").val() : null; if (ip !== null && ip !== "custom") { $("#ip-custom").attr("disabled", true); } } // Pi-hole IPv4/CIDR validator by DL6ER, see regexr.com/50csh function validateIPv4CIDR(ip) { // One IPv4 element is 8bit: 0 - 256 var ipv4elem = "(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)"; // CIDR for IPv4 is 1 - 32 bit var v4cidr = "(\\/([1-9]|[1-2][0-9]|3[0-2])){0,1}"; var ipv4validator = new RegExp( "^" + ipv4elem + "\\." + ipv4elem + "\\." + ipv4elem + "\\." + ipv4elem + v4cidr + "$" ); return ipv4validator.test(ip); } // Pi-hole IPv6/CIDR validator by DL6ER, see regexr.com/50csn function validateIPv6CIDR(ip) { // One IPv6 element is 16bit: 0000 - FFFF var ipv6elem = "[0-9A-Fa-f]{1,4}"; // CIDR for IPv6 is 1- 128 bit var v6cidr = "(\\/([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])){0,1}"; var ipv6validator = new RegExp( "^(((?:" + ipv6elem + "))((?::" + ipv6elem + "))*::((?:" + ipv6elem + "))*((?::" + ipv6elem + "))*|((?:" + ipv6elem + "))((?::" + ipv6elem + ")){7})" + v6cidr + "$" ); return ipv6validator.test(ip); } // set bootstrap-select defaults function setBsSelectDefaults() { var bsSelectDefaults = $.fn.selectpicker.Constructor.DEFAULTS; bsSelectDefaults.noneSelectedText = "none selected"; bsSelectDefaults.selectedTextFormat = "count > 1"; bsSelectDefaults.actionsBox = true; bsSelectDefaults.width = "fit"; bsSelectDefaults.container = "body"; bsSelectDefaults.dropdownAlignRight = "auto"; bsSelectDefaults.selectAllText = "All"; bsSelectDefaults.deselectAllText = "None"; bsSelectDefaults.countSelectedText = function (num, total) { if (num === total) { return "All selected (" + num + ")"; } return num + " selected"; }; } function stateSaveCallback(itemName, data) { localStorage.setItem(itemName, JSON.stringify(data)); } function stateLoadCallback(itemName) { // Receive previous state from client's local storage area var data = localStorage.getItem(itemName); // Return if not available if (data === null) { return null; } data = JSON.parse(data); // Always start on the first page to show most recent queries data.start = 0; // Always start with empty search field data.search.search = ""; // Apply loaded state to table return data; } window.utils = (function () { return { showAlert: showAlert, datetime: datetime, disableAll: disableAll, enableAll: enableAll, validateIPv4CIDR: validateIPv4CIDR, validateIPv6CIDR: validateIPv6CIDR, setBsSelectDefaults: setBsSelectDefaults, stateSaveCallback: stateSaveCallback, stateLoadCallback: stateLoadCallback }; })();