From 4d3d64b90426fc97eb6dc0425b33ed8956f71c14 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Sat, 6 May 2023 19:26:09 +0200 Subject: [PATCH] Ported groups-domains.lp and groups-adlists.lp Signed-off-by: DL6ER --- groups-adlists.php => groups-adlists.lp | 16 +- groups-clients.lp | 1 + groups-domains.php => groups-domains.lp | 32 +- scripts/pi-hole/js/groups-adlists.js | 752 ++++++++++------------ scripts/pi-hole/js/groups-clients.js | 491 +++++++------- scripts/pi-hole/js/groups-common.js | 21 + scripts/pi-hole/js/groups-domains.js | 815 +++++++++++------------- scripts/pi-hole/js/groups.js | 50 +- scripts/pi-hole/js/queries.js | 2 +- scripts/pi-hole/js/utils.js | 42 +- scripts/pi-hole/lua/sidebar.lp | 4 +- 11 files changed, 1097 insertions(+), 1129 deletions(-) rename groups-adlists.php => groups-adlists.lp (90%) rename groups-domains.php => groups-domains.lp (88%) create mode 100644 scripts/pi-hole/js/groups-common.js diff --git a/groups-adlists.php b/groups-adlists.lp similarity index 90% rename from groups-adlists.php rename to groups-adlists.lp index 802b82e3..f35971d5 100644 --- a/groups-adlists.php +++ b/groups-adlists.lp @@ -1,12 +1,11 @@ - @@ -85,6 +84,7 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r') + diff --git a/groups-clients.lp b/groups-clients.lp index f778fa69..6cd2e222 100644 --- a/groups-clients.lp +++ b/groups-clients.lp @@ -93,6 +93,7 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r') + diff --git a/groups-domains.php b/groups-domains.lp similarity index 88% rename from groups-domains.php rename to groups-domains.lp index 8231ea97..784065ef 100644 --- a/groups-domains.php +++ b/groups-domains.lp @@ -1,12 +1,11 @@ - @@ -91,11 +90,11 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r')

@@ -150,6 +149,7 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r') + diff --git a/scripts/pi-hole/js/groups-adlists.js b/scripts/pi-hole/js/groups-adlists.js index be353a7c..db910a83 100644 --- a/scripts/pi-hole/js/groups-adlists.js +++ b/scripts/pi-hole/js/groups-adlists.js @@ -5,37 +5,18 @@ * This file is copyright under the latest version of the EUPL. * Please see LICENSE file for your rights under this license. */ -/* global utils:false */ +/* global utils:false, groups:false, apiFailure:false, updateFtlInfo:false, getGroups:false */ var table; -var groups = []; -var token = $("#token").text(); var GETDict = {}; -function getGroups() { - $.post( - "scripts/pi-hole/php/groups.php", - { action: "get_groups", token: token }, - function (data) { - groups = data.data; - initTable(); - }, - "json" - ); -} - $(function () { - window.location.search - .substr(1) - .split("&") - .forEach(function (item) { - GETDict[item.split("=")[0]] = item.split("=")[1]; - }); + GETDict = utils.parseQueryString(); $("#btnAdd").on("click", addAdlist); utils.setBsSelectDefaults(); - getGroups(); + initTable(); }); function format(data) { @@ -110,281 +91,290 @@ function format(data) { } function initTable() { - table = $("#adlistsTable").DataTable({ - ajax: { - url: "scripts/pi-hole/php/groups.php", - data: { action: "get_adlists", token: token }, - type: "POST", - }, - order: [[0, "asc"]], - columns: [ - { data: "id", visible: false }, - { data: null, visible: true, orderable: false, width: "15px" }, - { data: "status", searchable: false, class: "details-control" }, - { data: "address" }, - { data: "enabled", searchable: false }, - { data: "comment" }, - { data: "groups", searchable: false }, - { data: null, width: "22px", orderable: false }, - ], - columnDefs: [ - { - targets: 1, - className: "select-checkbox", - render: function () { - return ""; + table = $("#adlistsTable") + .on("preXhr.dt", function () { + getGroups(); + }) + .DataTable({ + processing: true, + ajax: { + url: "/api/lists", + dataSrc: "lists", + type: "GET", + }, + order: [[0, "asc"]], + columns: [ + { data: "id", visible: false }, + { data: null, visible: true, orderable: false, width: "15px" }, + { data: "status", searchable: false, class: "details-control" }, + { data: "address" }, + { data: "enabled", searchable: false }, + { data: "comment" }, + { data: "groups", searchable: false }, + { data: null, width: "22px", orderable: false }, + ], + columnDefs: [ + { + targets: 1, + className: "select-checkbox", + render: function () { + return ""; + }, }, + { + targets: "_all", + render: $.fn.dataTable.render.text(), + }, + ], + drawCallback: function () { + // Hide buttons if all adlists were deleted + var hasRows = this.api().rows({ filter: "applied" }).data().length > 0; + $(".datatable-bt").css("visibility", hasRows ? "visible" : "hidden"); + + $('button[id^="deleteAdlist_"]').on("click", deleteAdlist); + // Remove visible dropdown to prevent orphaning + $("body > .bootstrap-select.dropdown").remove(); }, - { - targets: "_all", - render: $.fn.dataTable.render.text(), - }, - ], - drawCallback: function () { - // Hide buttons if all adlists were deleted - var hasRows = this.api().rows({ filter: "applied" }).data().length > 0; - $(".datatable-bt").css("visibility", hasRows ? "visible" : "hidden"); + rowCallback: function (row, data) { + var dataId = utils.hexEncode(data.address); + $(row).attr("data-id", dataId); - $('button[id^="deleteAdlist_"]').on("click", deleteAdlist); - // Remove visible dropdown to prevent orphaning - $("body > .bootstrap-select.dropdown").remove(); - }, - rowCallback: function (row, data) { - $(row).attr("data-id", data.id); - - var disabled = data.enabled === 0; - var statusCode = 0, - statusIcon; - // If there is no status or the list is disabled, we keep - // status 0 (== unknown) - if (data.status !== null && disabled !== true) { - statusCode = parseInt(data.status, 10); - } - - switch (statusCode) { - case 1: - statusIcon = "fa-check"; - break; - case 2: - statusIcon = "fa-history"; - break; - case 3: - statusIcon = "fa-exclamation-circle"; - break; - case 4: - statusIcon = "fa-times"; - break; - default: - statusIcon = "fa-question-circle"; - break; - } - - $("td:eq(1)", row).addClass("list-status-" + statusCode); - $("td:eq(1)", row).html( - "" - ); - - if (data.address.startsWith("file://")) { - // Local files cannot be downloaded from a distant client so don't show - // a link to such a list here - $("td:eq(2)", row).html( - '' + data.address + "" - ); - } else { - $("td:eq(2)", row).html( - '' + - data.address + - "" - ); - } - - $("td:eq(3)", row).html( - '" - ); - var statusEl = $("#status_" + data.id, row); - statusEl.bootstrapToggle({ - on: "Enabled", - off: "Disabled", - size: "small", - onstyle: "success", - width: "80px", - }); - statusEl.on("change", editAdlist); - - $("td:eq(4)", row).html(''); - var commentEl = $("#comment_" + data.id, row); - commentEl.val(utils.unescapeHtml(data.comment)); - commentEl.on("change", editAdlist); - - $("td:eq(5)", row).empty(); - $("td:eq(5)", row).append( - '' - ); - var selectEl = $("#multiselect_" + data.id, row); - // Add all known groups - for (var i = 0; i < groups.length; i++) { - var dataSub = ""; - if (!groups[i].enabled) { - dataSub = 'data-subtext="(disabled)"'; + var statusCode = 0, + statusIcon; + // If there is no status or the list is disabled, we keep + // status 0 (== unknown) + if (data.status !== null && data.enabled) { + statusCode = parseInt(data.status, 10); } - selectEl.append( - $("