// User menu toggle
$("#dropdown-menu a").on("click", function(event) {
$(this).parent().toggleClass("open");
});
$("body").on("click", function(event) {
if(!$("#dropdown-menu").is(event.target) && $("#dropdown-menu").has(event.target).length === 0) {
$("#dropdown-menu").removeClass("open");
}
});
// Enable/Disable
$("#flip-status").on("click", (e) => {
e.preventDefault();
const btnStatus = $("#flip-status");
const status = $("#status");
const text = btnStatus.text().trim();
const token = encodeURIComponent($("#token").html());
switch(text) {
case "Enable":
btnStatus.html(" Enabling...");
$.getJSON("api.php?enable&token=" + token, (data) => {
if(data.status === "enabled") {
btnStatus.html(" Disable");
status.html(" Active");
}
});
break;
case "Disable":
btnStatus.html(" Disabling...");
$.getJSON("api.php?disable&token=" + token, (data) => {
if(data.status === "disabled") {
btnStatus.html(" Enable");
status.html(" Offline");
}
});
break;
}
});
var piholeVersion = $("#piholeVersion").html();
var webVersion = $("#webVersion").html();
// Credit for following function: https://gist.github.com/alexey-bass/1115557
// Modified to discard any possible "v" in the string
function versionCompare(left, right) {
if (typeof left + typeof right !== "stringstring")
{
return false;
}
// If we are on vDev then we assume that it is always
// newer than the latest online release, i.e. version
// comparison should return 1
if(left === "vDev")
{
return 1;
}
var aa = left.split("v"),
bb = right.split("v");
var a = aa[aa.length-1].split(".")
, b = bb[bb.length-1].split(".")
, i = 0, len = Math.max(a.length, b.length);
for (; i < len; i++) {
if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) {
return 1;
} else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) {
return -1;
}
}
return 0;
}
// Update check
$.getJSON("https://api.github.com/repos/pi-hole/pi-hole/releases/latest", function(json) {
if(versionCompare(piholeVersion, json.tag_name.slice(1)) < 0) {
// Alert user
$("#piholeVersion").html($("#piholeVersion").text() + "(Update available!)");
$("#alPiholeUpdate").show();
}
});
$.getJSON("https://api.github.com/repos/pi-hole/AdminLTE/releases/latest", function(json) {
if(versionCompare(webVersion, json.tag_name.slice(1)) < 0) {
// Alert user
$("#webVersion").html($("#webVersion").text() + "(Update available!)");
$("#alWebUpdate").show();
}
});
/*
* Make sure that Pi-hole is updated to at least v2.7, since that is needed to use the sudo
* features of the interface. Skip if on dev
*/
if(versionCompare(piholeVersion, "v2.7") < 0) {
alert("Pi-hole needs to be updated to at least v2.7 before you can use features such as whitelisting/blacklisting from this web interface!");
}
// Session timer
var sessionvalidity = parseInt(document.getElementById("sessiontimercounter").textContent);
var start = new Date;
function updateSessionTimer()
{
start = new Date;
start.setSeconds(start.getSeconds() + sessionvalidity);
}
if(sessionvalidity > 0)
{
// setSeconds will correctly handle wrap-around cases
updateSessionTimer();
setInterval(function() {
var current = new Date;
var totalseconds = (start - current) / 1000;
// var hours = Math.floor(totalseconds / 3600);
// totalseconds = totalseconds % 3600;
var minutes = Math.floor(totalseconds / 60);
if(minutes < 10){ minutes = "0" + minutes; }
var seconds = Math.floor(totalseconds % 60);
if(seconds < 10){ seconds = "0" + seconds; }
if(totalseconds > 0)
{
document.getElementById("sessiontimercounter").textContent = minutes + ":" + seconds;
}
else
{
document.getElementById("sessiontimercounter").textContent = "-- : --";
}
}, 1000);
}
else
{
document.getElementById("sessiontimer").style.display = "none";
}
// Hide "exact match" button on queryads.php page if version is 2.9.5 or lower
if(versionCompare(piholeVersion, "v2.9.5") < 1)
{
$("#btnSearchExact").hide();
}