diff --git a/groups-domains.php b/groups-domains.php index 9c4659e4..ca99dfc5 100644 --- a/groups-domains.php +++ b/groups-domains.php @@ -6,11 +6,19 @@ * This file is copyright under the latest version of the EUPL. * Please see LICENSE file for your rights under this license. */ require "scripts/pi-hole/php/header.php"; + $type = "all"; + $pagetitle = "Domain"; + $adjective = ""; + if (isset($_GET['type']) && ($_GET['type'] === "white" || $_GET['type'] === "black")) { + $type = $_GET['type']; + $pagetitle = ucfirst($type)."list"; + $adjective = $type."listed"; + } ?> @@ -20,7 +28,7 @@

- Add a new domain + Add a new domain

@@ -33,10 +41,17 @@
@@ -56,7 +71,7 @@

- List of configured domains + List of domains

diff --git a/list.php b/list.php deleted file mode 100644 index 95fbcd1a..00000000 --- a/list.php +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -
-
- - -
-
- -
- - - - - - - -
-
-
- - - - - - - - - - - - - - - - diff --git a/scripts/pi-hole/js/groups-adlists.js b/scripts/pi-hole/js/groups-adlists.js index f16e1bc5..0c5bc604 100644 --- a/scripts/pi-hole/js/groups-adlists.js +++ b/scripts/pi-hole/js/groups-adlists.js @@ -89,7 +89,11 @@ function initTable() { comment.on("change", editAdlist); $("td:eq(3)", row).empty(); - $("td:eq(3)", row).append(''); + $("td:eq(3)", row).append( + '
' + ); var sel = $("#multiselect", row); // Add all known groups for (var i = 0; i < groups.length; i++) { @@ -108,7 +112,35 @@ function initTable() { // Select assigned groups sel.val(data.groups); // Initialize multiselect - sel.multiselect({ includeSelectAllOption: true }); + sel.multiselect({ + includeSelectAllOption: true, + buttonContainer: '
', + maxHeight: 200, + onDropdownShown: function() { + var el = $("#container" + data.id); + var top = el[0].getBoundingClientRect().top; + var bottom = $(window).height() - top - el.height(); + if (bottom < 200) { + el.addClass("dropup"); + } + + if (bottom > 200) { + el.removeClass("dropup"); + } + + var offset = el.offset(); + $("body").append(el); + el.css("position", "absolute"); + el.css("top", offset.top + "px"); + el.css("left", offset.left + "px"); + }, + onDropdownHide: function() { + var el = $("#container" + data.id); + var home = $("#selectHome" + data.id); + home.append(el); + el.removeAttr("style"); + } + }); sel.on("change", editAdlist); var button = diff --git a/scripts/pi-hole/js/groups-clients.js b/scripts/pi-hole/js/groups-clients.js index f3440456..21f3840a 100644 --- a/scripts/pi-hole/js/groups-clients.js +++ b/scripts/pi-hole/js/groups-clients.js @@ -116,7 +116,11 @@ function initTable() { $("#comment", row).on("change", editClient); $("td:eq(2)", row).empty(); - $("td:eq(2)", row).append(''); + $("td:eq(2)", row).append( + '
' + ); var sel = $("#multiselect", row); // Add all known groups for (var i = 0; i < groups.length; i++) { @@ -135,7 +139,35 @@ function initTable() { // Select assigned groups sel.val(data.groups); // Initialize multiselect - sel.multiselect({ includeSelectAllOption: true }); + sel.multiselect({ + includeSelectAllOption: true, + buttonContainer: '
', + maxHeight: 200, + onDropdownShown: function() { + var el = $("#container" + data.id); + var top = el[0].getBoundingClientRect().top; + var bottom = $(window).height() - top - el.height(); + if (bottom < 200) { + el.addClass("dropup"); + } + + if (bottom > 200) { + el.removeClass("dropup"); + } + + var offset = el.offset(); + $("body").append(el); + el.css("position", "absolute"); + el.css("top", offset.top + "px"); + el.css("left", offset.left + "px"); + }, + onDropdownHide: function() { + var el = $("#container" + data.id); + var home = $("#selectHome" + data.id); + home.append(el); + el.removeAttr("style"); + } + }); sel.on("change", editClient); var button = diff --git a/scripts/pi-hole/js/groups-domains.js b/scripts/pi-hole/js/groups-domains.js index e48045e2..e76168b9 100644 --- a/scripts/pi-hole/js/groups-domains.js +++ b/scripts/pi-hole/js/groups-domains.js @@ -11,6 +11,7 @@ var table; var groups = []; var token = $("#token").html(); var GETDict = {}; +var showtype = "all"; function get_groups() { $.post( @@ -32,6 +33,10 @@ $(document).ready(function() { GETDict[item.split("=")[0]] = item.split("=")[1]; }); + if ("type" in GETDict && (GETDict.type === "white" || GETDict.type === "black")) { + showtype = GETDict.type; + } + $("#btnAdd").on("click", addDomain); get_groups(); @@ -46,7 +51,7 @@ function initTable() { table = $("#domainsTable").DataTable({ ajax: { url: "scripts/pi-hole/php/groups.php", - data: { action: "get_domains", token: token }, + data: { action: "get_domains", showtype: showtype, token: token }, type: "POST" }, order: [[0, "asc"]], @@ -71,23 +76,35 @@ function initTable() { "\nDatabase ID: " + data.id; $("td:eq(0)", row).html( - '' + data.domain + "" + '' + data.domain + "" ); - $("td:eq(1)", row).html( - '' + + whitelist_options + + blacklist_options + "" ); $("#type", row).on("change", editDomain); @@ -113,21 +130,62 @@ function initTable() { $("#comment", row).val(data.comment); $("#comment", row).on("change", editDomain); - $("td:eq(4)", row).empty(); - $("td:eq(4)", row).append(''); - var sel = $("#multiselect", row); - // Add all known groups - for (var i = 0; i < groups.length; i++) { - var extra = ""; - if (!groups[i].enabled) { - extra = " (disabled)"; + // Show group assignment field only if in full domain management mode + if (table.column(5).visible()) { + $("td:eq(4)", row).empty(); + $("td:eq(4)", row).append( + '
' + ); + var sel = $("#multiselect", row); + // Add all known groups + for (var i = 0; i < groups.length; i++) { + var extra = ""; + if (!groups[i].enabled) { + extra = " (disabled)"; + } + + sel.append( + $("