diff --git a/scripts/pi-hole/js/footer.js b/scripts/pi-hole/js/footer.js index bddadaa5..e5909737 100644 --- a/scripts/pi-hole/js/footer.js +++ b/scripts/pi-hole/js/footer.js @@ -10,8 +10,6 @@ //The following functions allow us to display time until pi-hole is enabled after disabling. //Works between all pages -var settingsLevel = 0; - const REFRESH_INTERVAL = { logs: 500, // 0.5 sec (logs page) summary: 1000, // 1 sec (dashboard) @@ -188,6 +186,8 @@ function applyCheckboxRadioStyle() { var sel = $("input[type='radio'],input[type='checkbox']") .not("#selSec") .not("#selMin") + .not("#expert-settings") + .not("#only-changed") .not("[id^=status_]"); sel.parent().removeClass(); sel.parent().addClass("icheck-" + iCheckStyle); @@ -646,36 +646,44 @@ $("#pihole-disable-custom").on("click", function (e) { }); function initSettingsLevel() { - // Restore settings level from local storage (if available) or default to 0 - settingsLevel = parseInt(localStorage.getItem("settings-level"), 10); - if (isNaN(settingsLevel)) { - settingsLevel = 0; - localStorage.setItem("settings-level", settingsLevel); + const elem = $("#expert-settings"); + + // Skip if element is not present (e.g. on login page) + if (!elem) return; + + // Restore settings level from local storage (if available) or default to "false" + if (localStorage.getItem("expert_settings") === null) { + localStorage.setItem("expert_settings", "false"); } - // Set the settings level + elem.prop("checked", localStorage.getItem("expert_settings") === "true"); - $("#settings-level").append( - '" - ); - $("#settings-level").append( - '" - ); - $("#settings-level").append( - '" - ); - applySettingsLevel(); + // Init the settings level toggle + elem.bootstrapToggle({ + on: "Expert", + off: "Basic", + size: "small", + offstyle: "success", + onstyle: "danger", + width: "80px", + }); + + // Add handler for settings level toggle + elem.on("change", function () { + localStorage.setItem("expert_settings", $(this).prop("checked") ? "true" : "false"); + applyExpertSettings(); + addAdvancedInfo(); + }); + + // Apply settings level + applyExpertSettings(); } -function applySettingsLevel() { - if (settingsLevel === 2) { +function applyExpertSettings() { + if (localStorage.getItem("expert_settings") === "true") { $(".settings-level-0").show(); $(".settings-level-1").show(); $(".settings-level-2").show(); - } else if (settingsLevel === 1) { - $(".settings-level-0").show(); - $(".settings-level-1").show(); - $(".settings-level-2").hide(); } else { $(".settings-level-0").show(); $(".settings-level-1").hide(); @@ -683,13 +691,6 @@ function applySettingsLevel() { } } -$("#settings-level").on("change", function () { - settingsLevel = parseInt($(this).val(), 10); - localStorage.setItem("settings-level", settingsLevel); - applySettingsLevel(); - addAdvancedInfo(); -}); - function addAdvancedInfo() { const advancedInfoSource = $("#advanced-info-data"); const advancedInfoTarget = $("#advanced-info"); diff --git a/scripts/pi-hole/js/settings-advanced.js b/scripts/pi-hole/js/settings-advanced.js index 5aad6bb6..81a9ba11 100644 --- a/scripts/pi-hole/js/settings-advanced.js +++ b/scripts/pi-hole/js/settings-advanced.js @@ -38,7 +38,11 @@ function generateRow(topic, key, value) { var box = '
' + '
' + - '

' + + '

' + key + (value.modified ? '  ' @@ -332,12 +336,52 @@ function createDynamicConfigTabs() { }); applyCheckboxRadioStyle(); + applyOnlyChanged(); }) .fail(function (data) { apiFailure(data); }); } +function initOnlyChanged() { + const elem = $("#only-changed"); + + // Restore settings level from local storage (if available) or default to "false" + if (localStorage.getItem("only-changed") === null) { + localStorage.setItem("only-changed", "false"); + } + + elem.prop("checked", localStorage.getItem("only-changed") === "true"); + + elem.bootstrapToggle({ + on: "Only modified settings", + off: "Show all settings", + onstyle: "warning", + offstyle: "success", + size: "small", + width: "180px", + }); + + elem.on("change", function () { + localStorage.setItem("only-changed", $(this).prop("checked") ? "true" : "false"); + applyOnlyChanged(); + }); + + elem.bootstrapToggle(localStorage.getItem("only-changed") === "true" ? "on" : "off"); + elem.trigger("change"); +} + +function applyOnlyChanged() { + if (localStorage.getItem("only-changed") === "true") { + // Hide all boxes that have a data-key attribute + $(".box-title[data-key]").not("[data-modified='true']").closest(".box").hide(); + } else { + // Show all boxes that have a data-key attribute + $(".box-title[data-key]").closest(".box").show(); + } +} + $(document).ready(function () { createDynamicConfigTabs(); + initOnlyChanged(); }); diff --git a/scripts/pi-hole/lua/header.lp b/scripts/pi-hole/lua/header.lp index 8e41a0e8..d602606f 100644 --- a/scripts/pi-hole/lua/header.lp +++ b/scripts/pi-hole/lua/header.lp @@ -95,12 +95,12 @@ if startsWith(scriptname, 'groups') then -- Group management styles ?> - + diff --git a/scripts/pi-hole/lua/settings_header.lp b/scripts/pi-hole/lua/settings_header.lp index a0a4fe1f..5832399b 100644 --- a/scripts/pi-hole/lua/settings_header.lp +++ b/scripts/pi-hole/lua/settings_header.lp @@ -1,14 +1,13 @@ diff --git a/settings-all.lp b/settings-all.lp index 210cf0c4..720cb633 100644 --- a/settings-all.lp +++ b/settings-all.lp @@ -22,6 +22,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r')

+ diff --git a/settings-api.lp b/settings-api.lp index 0aa107cf..695bd278 100644 --- a/settings-api.lp +++ b/settings-api.lp @@ -254,6 +254,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-dhcp.lp b/settings-dhcp.lp index 5636fe72..c1a57129 100644 --- a/settings-dhcp.lp +++ b/settings-dhcp.lp @@ -204,6 +204,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-dns.lp b/settings-dns.lp index 5250df9e..bc77cf75 100644 --- a/settings-dns.lp +++ b/settings-dns.lp @@ -262,6 +262,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-dnsrecords.lp b/settings-dnsrecords.lp index 7e726a85..5f64bdc1 100644 --- a/settings-dnsrecords.lp +++ b/settings-dnsrecords.lp @@ -107,6 +107,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-privacy.lp b/settings-privacy.lp index f2aeed7b..3de3c3b7 100644 --- a/settings-privacy.lp +++ b/settings-privacy.lp @@ -108,6 +108,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-system.lp b/settings-system.lp index 44b2fc59..213ed60d 100644 --- a/settings-system.lp +++ b/settings-system.lp @@ -303,6 +303,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/settings-teleporter.lp b/settings-teleporter.lp index 0d6bb28e..a33b1138 100644 --- a/settings-teleporter.lp +++ b/settings-teleporter.lp @@ -91,6 +91,7 @@ mg.include('scripts/pi-hole/lua/settings_header.lp','r') + diff --git a/style/pi-hole.css b/style/pi-hole.css index e9707ffd..2cc8dbe3 100644 --- a/style/pi-hole.css +++ b/style/pi-hole.css @@ -914,13 +914,6 @@ body:not(.lcars) .filter_types [class*="icheck-"] > input:first-child:checked + font-size: 18px; } -/* Global settings level selector */ -#settings-level { - display: inline-block; - width: auto; - min-width: 90px; -} - .navbar-nav { height: 50px; }