Merge branch 'development' into new/web_prefix

Signed-off-by: DL6ER <dl6er@dl6er.de>
This commit is contained in:
DL6ER
2025-03-17 21:55:25 +01:00
20 changed files with 141 additions and 124 deletions

View File

@@ -46,7 +46,7 @@ mg.include('scripts/lua/header_authenticated.lp','r')
<strong>Hints:</strong> <strong>Hints:</strong>
<ol> <ol>
<li>Please run <code>pihole -g</code> or update your gravity list <a href="<?=webhome?>gravity">online</a> after modifying your lists.</li> <li>Please run <code>pihole -g</code> or update your gravity list <a href="<?=webhome?>gravity">online</a> after modifying your lists.</li>
<li>Multiple lists can be added by separating each <i>unique</i> URL with a space or comma</li> <li>Multiple lists can be added by separating each <em>unique</em> URL with a space or comma</li>
<li>Click on the icon in the first column to get additional information about your lists. The icons correspond to the health of the list.</li> <li>Click on the icon in the first column to get additional information about your lists. The icons correspond to the health of the list.</li>
</ol> </ol>
<div class="btn-toolbar pull-right" role="toolbar" aria-label="Toolbar with buttons"> <div class="btn-toolbar pull-right" role="toolbar" aria-label="Toolbar with buttons">

86
package-lock.json generated
View File

@@ -37,10 +37,10 @@
"waitme": "1.19.0" "waitme": "1.19.0"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.21",
"eslint-plugin-compat": "^6.0.2", "eslint-plugin-compat": "^6.0.2",
"postcss": "^8.5.3", "postcss": "^8.5.3",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.1",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"xo": "^0.60.0" "xo": "^0.60.0"
} }
@@ -1313,9 +1313,9 @@
} }
}, },
"node_modules/autoprefixer": { "node_modules/autoprefixer": {
"version": "10.4.20", "version": "10.4.21",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -1333,11 +1333,11 @@
], ],
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"browserslist": "^4.23.3", "browserslist": "^4.24.4",
"caniuse-lite": "^1.0.30001646", "caniuse-lite": "^1.0.30001702",
"fraction.js": "^4.3.7", "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"picocolors": "^1.0.1", "picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
"bin": { "bin": {
@@ -1834,9 +1834,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001700", "version": "1.0.30001704",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001704.tgz",
"integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "integrity": "sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -2556,13 +2556,13 @@
} }
}, },
"node_modules/dependency-graph": { "node_modules/dependency-graph": {
"version": "0.11.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 0.6.0" "node": ">=4"
} }
}, },
"node_modules/deps-sort": { "node_modules/deps-sort": {
@@ -6946,23 +6946,22 @@
} }
}, },
"node_modules/postcss-cli": { "node_modules/postcss-cli": {
"version": "11.0.0", "version": "11.0.1",
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
"integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"chokidar": "^3.3.0", "chokidar": "^3.3.0",
"dependency-graph": "^0.11.0", "dependency-graph": "^1.0.0",
"fs-extra": "^11.0.0", "fs-extra": "^11.0.0",
"get-stdin": "^9.0.0",
"globby": "^14.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"postcss-load-config": "^5.0.0", "postcss-load-config": "^5.0.0",
"postcss-reporter": "^7.0.0", "postcss-reporter": "^7.0.0",
"pretty-hrtime": "^1.0.3", "pretty-hrtime": "^1.0.3",
"read-cache": "^1.0.0", "read-cache": "^1.0.0",
"slash": "^5.0.0", "slash": "^5.0.0",
"tinyglobby": "^0.2.12",
"yargs": "^17.0.0" "yargs": "^17.0.0"
}, },
"bin": { "bin": {
@@ -8552,6 +8551,51 @@
"node": ">=0.6.0" "node": ">=0.6.0"
} }
}, },
"node_modules/tinyglobby": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.4.3",
"picomatch": "^4.0.2"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tinyglobby/node_modules/fdir": {
"version": "6.4.3",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"picomatch": "^3 || ^4"
},
"peerDependenciesMeta": {
"picomatch": {
"optional": true
}
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/to-absolute-glob": { "node_modules/to-absolute-glob": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-3.0.0.tgz", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-3.0.0.tgz",

View File

@@ -22,7 +22,7 @@
"xo:check": "npm run xo", "xo:check": "npm run xo",
"xo:fix": "npm run xo -- --fix", "xo:fix": "npm run xo -- --fix",
"test": "npm run prettier:check && npm run xo:check", "test": "npm run prettier:check && npm run xo:check",
"testpr": "npm run prettier:fix && git diff --ws-error-highlight=all --color=always --exit-code && npm run xo:check" "testpr": "npm run prefix && npm run prettier:fix && git diff --ws-error-highlight=all --color=always --exit-code && npm run xo:check"
}, },
"dependencies": { "dependencies": {
"admin-lte": "2.4.18", "admin-lte": "2.4.18",
@@ -53,16 +53,19 @@
"waitme": "1.19.0" "waitme": "1.19.0"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.21",
"eslint-plugin-compat": "^6.0.2", "eslint-plugin-compat": "^6.0.2",
"postcss": "^8.5.3", "postcss": "^8.5.3",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.1",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"xo": "^0.60.0" "xo": "^0.60.0"
}, },
"browserslist": [ "browserslist": [
"defaults", ">= 0.5%",
"not IE 11" "last 2 major versions",
"not dead",
"not op_mini all",
"Firefox ESR"
], ],
"prettier": { "prettier": {
"arrowParens": "avoid", "arrowParens": "avoid",

View File

@@ -206,7 +206,7 @@ function initCheckboxRadioStyle() {
chkboxStyle = "primary"; chkboxStyle = "primary";
} }
var boxsheet = $('<link href="' + getCheckboxURL(chkboxStyle) + '" rel="stylesheet" />'); var boxsheet = $('<link href="' + getCheckboxURL(chkboxStyle) + '" rel="stylesheet">');
// Only add the stylesheet if it's not already present // Only add the stylesheet if it's not already present
if ($("link[href='" + boxsheet.attr("href") + "']").length === 0) boxsheet.appendTo("head"); if ($("link[href='" + boxsheet.attr("href") + "']").length === 0) boxsheet.appendTo("head");
@@ -220,7 +220,7 @@ function initCheckboxRadioStyle() {
iCheckStyle.on("change", function () { iCheckStyle.on("change", function () {
var themename = $(this).val(); var themename = $(this).val();
localStorage.setItem("theme_icheck", themename); localStorage.setItem("theme_icheck", themename);
applyCheckboxRadioStyle(themename); applyCheckboxRadioStyle();
}); });
} }
} }
@@ -586,7 +586,7 @@ function updateVersionInfo() {
} }
// Display update information of individual components only if we are not running in a Docker container // Display update information of individual components only if we are not running in a Docker container
if ((!isDocker || (isDocker && v.name === "Docker Tag")) && updateComponentAvailable) { if ((!isDocker || v.name === "Docker Tag") && updateComponentAvailable) {
$("#versions").append( $("#versions").append(
"<li><strong>" + "<li><strong>" +
v.name + v.name +

View File

@@ -11,20 +11,11 @@ function eventsource() {
var alSuccess = $("#alSuccess"); var alSuccess = $("#alSuccess");
var ta = $("#output"); var ta = $("#output");
// https://caniuse.com/fetch - everything except IE
// This is fine, as we dropped support for IE a while ago
if (typeof fetch !== "function") {
ta.show();
ta.html("Updating lists of ad-serving domains is not supported with this browser!");
return;
}
ta.html(""); ta.html("");
ta.show(); ta.show();
alInfo.show(); alInfo.show();
alSuccess.hide(); alSuccess.hide();
// eslint-disable-next-line compat/compat
fetch(apiUrl + "/action/gravity", { fetch(apiUrl + "/action/gravity", {
method: "POST", method: "POST",
headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") }, headers: { "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content") },

View File

@@ -63,29 +63,23 @@ function showSuggestDomains(value) {
var newDomainEl = $("#new_domain"); var newDomainEl = $("#new_domain");
var suggestDomainEl = $("#suggest_domains"); var suggestDomainEl = $("#suggest_domains");
try { var parts = new URL(value).hostname.split(".");
// URL is not supported in all browsers, but we are in a try-block so we can ignore it var table = $("<table>");
// eslint-disable-next-line compat/compat
var parts = new URL(value).hostname.split(".");
var table = $("<table>");
for (var i = 0; i < parts.length - 1; ++i) { for (var i = 0; i < parts.length - 1; ++i) {
var hostname = parts.slice(i).join("."); var hostname = parts.slice(i).join(".");
table.append( table.append(
$("<tr>") $("<tr>")
.append($('<td class="text-nowrap text-right">').text(i === 0 ? "Did you mean" : "or")) .append($('<td class="text-nowrap text-right">').text(i === 0 ? "Did you mean" : "or"))
.append($("<td>").append(createButton(hostname))) .append($("<td>").append(createButton(hostname)))
); );
}
suggestDomainEl.slideUp("fast", function () {
suggestDomainEl.html(table);
suggestDomainEl.slideDown("fast");
});
} catch {
hideSuggestDomains();
} }
suggestDomainEl.slideUp("fast", function () {
suggestDomainEl.html(table);
suggestDomainEl.slideDown("fast");
});
} }
function hideSuggestDomains() { function hideSuggestDomains() {

View File

@@ -181,7 +181,7 @@ $(function () {
// MAC + Vendor field if available // MAC + Vendor field if available
if (data.macVendor && data.macVendor.length > 0) { if (data.macVendor && data.macVendor.length > 0) {
$("td:eq(1)", row).html( $("td:eq(1)", row).html(
utils.escapeHtml(data.hwaddr) + "<br/>" + utils.escapeHtml(data.macVendor) utils.escapeHtml(data.hwaddr) + "<br>" + utils.escapeHtml(data.macVendor)
); );
} }

View File

@@ -323,7 +323,7 @@ function createDynamicConfigTabs() {
// Dynamically fill the tabs with config topics // Dynamically fill the tabs with config topics
Object.keys(data.config).forEach(function (topic) { Object.keys(data.config).forEach(function (topic) {
var value = data.config[topic]; var value = data.config[topic];
generateRow(topic, topic, value, data); generateRow(topic, topic, value);
}); });
$("#advanced-overlay").hide(); $("#advanced-overlay").hide();

View File

@@ -264,5 +264,7 @@ $(document).ready(function () {
}); });
// Add a small legend below the CNAME table // Add a small legend below the CNAME table
$("#cnameRecords-Table").after("<small>* <b>TTL</b> in seconds <i>(optional)</i></small>"); $("#cnameRecords-Table").after(
"<small>* <strong>TTL</strong> in seconds <em>(optional)</em></small>"
);
}); });

View File

@@ -20,13 +20,6 @@ function importZIP() {
return; return;
} }
// https://caniuse.com/fetch - everything except IE
// This is fine, as we dropped support for IE a while ago
if (typeof fetch !== "function") {
alert("Importing Tricorder files is not supported with this browser!");
return;
}
// Get the selected import options // Get the selected import options
const imports = {}, const imports = {},
gravity = {}; gravity = {};
@@ -44,7 +37,6 @@ function importZIP() {
const formData = new FormData(); const formData = new FormData();
formData.append("import", JSON.stringify(imports)); formData.append("import", JSON.stringify(imports));
formData.append("file", file); formData.append("file", file);
// eslint-disable-next-line compat/compat
fetch(apiUrl + "/teleporter", { fetch(apiUrl + "/teleporter", {
method: "POST", method: "POST",
body: formData, body: formData,
@@ -93,14 +85,14 @@ $("#GETTeleporter").on("click", function () {
}, },
success: function (data, status, xhr) { success: function (data, status, xhr) {
var a = document.createElement("a"); var a = document.createElement("a");
// eslint-disable-next-line compat/compat
var url = globalThis.URL.createObjectURL(data); var url = globalThis.URL.createObjectURL(data);
a.href = url; a.href = url;
a.download = xhr.getResponseHeader("Content-Disposition").match(/filename="([^"]*)"/)[1]; a.download = xhr.getResponseHeader("Content-Disposition").match(/filename="([^"]*)"/)[1];
document.body.append(a); document.body.append(a);
a.click(); a.click();
a.remove(); a.remove();
// eslint-disable-next-line compat/compat
globalThis.URL.revokeObjectURL(url); globalThis.URL.revokeObjectURL(url);
}, },
}); });

View File

@@ -26,10 +26,10 @@ function formatDnsmasq(line) {
if (line.includes("denied") || line.includes("gravity blocked")) { if (line.includes("denied") || line.includes("gravity blocked")) {
// Red bold text for blocked domains // Red bold text for blocked domains
txt = `<b class="log-red">${txt}</b>`; txt = `<strong class="log-red">${txt}</strong>`;
} else if (line.includes("query[A") || line.includes("query[DHCP")) { } else if (line.includes("query[A") || line.includes("query[DHCP")) {
// Bold text for initial query lines // Bold text for initial query lines
txt = `<b>${txt}</b>`; txt = `<strong>${txt}</strong>`;
} else { } else {
// Grey text for all other lines // Grey text for all other lines
txt = `<span class="text-muted">${txt}</span>`; txt = `<span class="text-muted">${txt}</span>`;

View File

@@ -18,7 +18,7 @@ mg.include('header.lp','r')
<script src="<?=pihole.fileversion('vendor/chartjs-plugin-deferred/chartjs-plugin-deferred.min.js')?>"></script> <script src="<?=pihole.fileversion('vendor/chartjs-plugin-deferred/chartjs-plugin-deferred.min.js')?>"></script>
<script src="<?=pihole.fileversion('vendor/moment/moment.min.js')?>"></script> <script src="<?=pihole.fileversion('vendor/moment/moment.min.js')?>"></script>
<script src="<?=pihole.fileversion('vendor/chartjs-adapter-moment/chartjs-adapter-moment.js')?>"></script> <script src="<?=pihole.fileversion('vendor/chartjs-adapter-moment/chartjs-adapter-moment.js')?>"></script>
<script src="<?=pihole.fileversion('vendor/hammer/hammer.min.js')?>"></script> <!-- Needed for chartjs-plugin-zoom ---> <script src="<?=pihole.fileversion('vendor/hammer/hammer.min.js')?>"></script> <!-- Needed for chartjs-plugin-zoom -->
<script src="<?=pihole.fileversion('vendor/chartjs-plugin-zoom/chartjs-plugin-zoom.min.js')?>"></script> <script src="<?=pihole.fileversion('vendor/chartjs-plugin-zoom/chartjs-plugin-zoom.min.js')?>"></script>
<script src="<?=pihole.fileversion('vendor/bstreeview/bstreeview.min.js')?>"></script> <script src="<?=pihole.fileversion('vendor/bstreeview/bstreeview.min.js')?>"></script>
</head> </head>

View File

@@ -17,9 +17,9 @@
</div> </div>
<div class="pull-left info"> <div class="pull-left info">
<p>Status</p> <p>Status</p>
<span id="status"></span><br/> <span id="status"></span><br>
<span id="query_frequency"></span><br/> <span id="query_frequency"></span><br>
<span id="cpu"></span><br/> <span id="cpu"></span><br>
<span id="memory"></span> <span id="memory"></span>
</div> </div>
</div> </div>
@@ -43,35 +43,43 @@
<!-- Group Management --> <!-- Group Management -->
<li class="menu-group<? if scriptname == 'groups' then ?> active<? end ?>"> <li class="menu-group<? if scriptname == 'groups' then ?> active<? end ?>">
<a href="<?=webhome?>groups"> <a href="<?=webhome?>groups">
<i class="fa fa-fw menu-icon fa-user-friends"></i> <span>Groups <i class="fa fa-fw menu-icon fa-user-friends"></i>
<span class="pull-right-container"> <span>Groups
<span class="label label-primary pull-right" id="num_groups" title="Number of enabled groups"></span> <span class="pull-right-container">
<span class="label label-primary pull-right" id="num_groups" title="Number of enabled groups"></span>
</span>
</span> </span>
</a> </a>
</li> </li>
<li class="menu-group<? if scriptname == 'groups/clients' then ?> active<? end ?>"> <li class="menu-group<? if scriptname == 'groups/clients' then ?> active<? end ?>">
<a href="<?=webhome?>groups/clients"> <a href="<?=webhome?>groups/clients">
<i class="fa fa-fw menu-icon fa-laptop"></i> <span>Clients <i class="fa fa-fw menu-icon fa-laptop"></i>
<span class="pull-right-container"> <span>Clients
<span class="label label-primary pull-right" id="num_clients" title="Number of defined clients"></span> <span class="pull-right-container">
<span class="label label-primary pull-right" id="num_clients" title="Number of defined clients"></span>
</span>
</span> </span>
</a> </a>
</li> </li>
<li class="menu-group<? if scriptname == 'groups/domains' then ?> active<? end ?>"> <li class="menu-group<? if scriptname == 'groups/domains' then ?> active<? end ?>">
<a href="<?=webhome?>groups/domains"> <a href="<?=webhome?>groups/domains">
<i class="fa fa-fw menu-icon fa-list"></i> <span>Domains <i class="fa fa-fw menu-icon fa-list"></i>
<span class="pull-right-container"> <span>Domains
<span class="label bg-red pull-right" id="num_denied" title="Number of enabled deny rules (domains and regex)"></span> <span class="pull-right-container">
<span class="label bg-green pull-right" id="num_allowed" title="Number of enabled allow rules (domains and regex)"></span> <span class="label bg-red pull-right" id="num_denied" title="Number of enabled deny rules (domains and regex)"></span>
<span class="label bg-green pull-right" id="num_allowed" title="Number of enabled allow rules (domains and regex)"></span>
</span>
</span> </span>
</a> </a>
</li> </li>
<li class="menu-group<? if scriptname == 'groups/lists' then ?> active<? end ?>"> <li class="menu-group<? if scriptname == 'groups/lists' then ?> active<? end ?>">
<a href="<?=webhome?>groups/lists"> <a href="<?=webhome?>groups/lists">
<i class="fa fa-fw menu-icon fa-shield-alt"></i> <span>Lists <i class="fa fa-fw menu-icon fa-shield-alt"></i>
<span class="pull-right-container"> <span>Lists
<span class="label bg-blue pull-right" id="num_lists" title="Number of subscribed and enabled lists"></span> <span class="pull-right-container">
<span class="label bg-yellow pull-right" id="num_gravity" title="Total number of domains subscribed by your Pi-hole"></span> <span class="label bg-blue pull-right" id="num_lists" title="Number of subscribed and enabled lists"></span>
<span class="label bg-yellow pull-right" id="num_gravity" title="Total number of domains subscribed by your Pi-hole"></span>
</span>
</span> </span>
</a> </a>
</li> </li>

View File

@@ -194,7 +194,7 @@ mg.include('scripts/lua/settings_header.lp','r')
<div class="col-md-6 col-md-offset-3"> <div class="col-md-6 col-md-offset-3">
<div id="totp_div" class="has-feedback has-error"> <div id="totp_div" class="has-feedback has-error">
<div class="pwd-field form-group"> <div class="pwd-field form-group">
<input type="text" size="6" maxlength="6" class="form-control totp_token" id="totp_code" placeholder=""/> <input type="text" size="6" maxlength="6" class="form-control totp_token" id="totp_code" placeholder="">
</div> </div>
<i class="fa-solid fa-clock-rotate-left pwd-field form-control-feedback"></i> <i class="fa-solid fa-clock-rotate-left pwd-field form-control-feedback"></i>
</div> </div>

View File

@@ -100,7 +100,7 @@ mg.include('scripts/lua/settings_header.lp','r')
<strong>Note:</strong> <strong>Note:</strong>
<p>The target of a <code>CNAME</code> must be a domain that the Pi-hole already has in its cache or is authoritative for. This is a universal limitation of <code>CNAME</code> records.</p> <p>The target of a <code>CNAME</code> must be a domain that the Pi-hole already has in its cache or is authoritative for. This is a universal limitation of <code>CNAME</code> records.</p>
<p>The reason for this is that Pi-hole will not send additional queries upstream when serving <code>CNAME</code> replies. As consequence, if you set a target that isn't already known, the reply to the client may be incomplete. Pi-hole just returns the information it knows at the time of the query. This results in certain limitations for <code>CNAME</code> targets, <p>The reason for this is that Pi-hole will not send additional queries upstream when serving <code>CNAME</code> replies. As consequence, if you set a target that isn't already known, the reply to the client may be incomplete. Pi-hole just returns the information it knows at the time of the query. This results in certain limitations for <code>CNAME</code> targets,
for instance, only <i>active</i> DHCP leases work as targets - mere DHCP <i>leases</i> aren't sufficient as they aren't (yet) valid DNS records.</p> for instance, only <em>active</em> DHCP leases work as targets - mere DHCP <i>leases</i> aren't sufficient as they aren't (yet) valid DNS records.</p>
<p>Additionally, you can't <code>CNAME</code> external domains (<code>bing.com</code> to <code>google.com</code>) successfully as this could result in invalid SSL certificate errors when the target server does not serve content for the requested domain.</p> <p>Additionally, you can't <code>CNAME</code> external domains (<code>bing.com</code> to <code>google.com</code>) successfully as this could result in invalid SSL certificate errors when the target server does not serve content for the requested domain.</p>
<p>Adding/removing local CNAME records will restart the DNS server.</p> <p>Adding/removing local CNAME records will restart the DNS server.</p>
</div> </div>

View File

@@ -89,7 +89,7 @@ mg.include('scripts/lua/settings_header.lp','r')
<div id="modal-import-gravity" style="display:none"> <div id="modal-import-gravity" style="display:none">
<div class="alert alert-info alert-dismissible"> <div class="alert alert-info alert-dismissible">
<h4><i class="icon fa fa-fw fa-info-circle"></i> Please run gravity</h4> <h4><i class="icon fa fa-fw fa-info-circle"></i> Please run gravity</h4>
<p>Use <a href='/admin/gravity'>Tools &rarr; Gravity</a> or run <code>pihole -g</code> to update your lists.</p> <p>Use <a href='/admin/gravity'>Tools &rarr; Update Gravity</a> or run <code>pihole -g</code> to update your lists.</p>
</div> </div>
</div> </div>
<div id="modal-import-info-message"></div> <div id="modal-import-info-message"></div>

View File

@@ -1094,10 +1094,6 @@ table.dataTable tbody > tr > .selected {
padding: 5px; padding: 5px;
} }
.faint-border {
border-color: rgba(127, 127, 127, 0.1);
}
.pre-scrollable { .pre-scrollable {
/* use dynamic unit to account for mobile browser interface height */ /* use dynamic unit to account for mobile browser interface height */
max-height: max(195px, 100dvh - 170px); max-height: max(195px, 100dvh - 170px);

View File

@@ -621,7 +621,7 @@ kbd {
background: #181c20; background: #181c20;
font-size: 14px; font-size: 14px;
} }
#output b.log-red { #output .log-red {
background: #b23; background: #b23;
color: #fff; color: #fff;
} }

View File

@@ -294,7 +294,7 @@ a:hover {
#output { #output {
font-size: 14px; font-size: 14px;
} }
#output b.log-red { #output .log-red {
background: #c00; background: #c00;
color: #fff; color: #fff;
} }

View File

@@ -535,6 +535,11 @@ p.login-box-msg,
z-index: 1000; z-index: 1000;
} }
.dropdown.bootstrap-select {
border: none;
background: none;
}
.bootstrap-select > .dropdown-toggle.bs-placeholder, .bootstrap-select > .dropdown-toggle.bs-placeholder,
.bootstrap-select > .dropdown-toggle.bs-placeholder:active, .bootstrap-select > .dropdown-toggle.bs-placeholder:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder:focus { .bootstrap-select > .dropdown-toggle.bs-placeholder:focus {
@@ -610,14 +615,6 @@ p.login-box-msg,
flex: 1 1 auto; flex: 1 1 auto;
} }
#pihole-diagnosis {
min-width: 50px;
}
#pihole-diagnosis svg {
font-size: 28px;
}
.warning-count { .warning-count {
position: relative; position: relative;
margin: 0; margin: 0;
@@ -1022,17 +1019,12 @@ p.login-box-msg,
margin-top: 20px; margin-top: 20px;
} }
.user-panel .fa-circle path { .user-panel > .info i {
stroke: rgba(0, 0, 0, 0.5); text-shadow: 0 0 1px black;
stroke-width: 5%;
} }
.user-panel .svg-inline--fa { .user-panel > .info i.text-orange,
margin-right: 2px; .user-panel > .info i.text-red {
}
.user-panel svg.text-orange,
.user-panel svg.text-red {
animation: fire 1s ease-in-out 0s infinite; animation: fire 1s ease-in-out 0s infinite;
} }
@@ -1155,7 +1147,7 @@ footer a:focus {
box-shadow: none; box-shadow: none;
} }
.sidebar-collapse .sidebar-menu svg { .sidebar-collapse .sidebar-menu i {
display: block; display: block;
} }
@@ -2079,11 +2071,6 @@ td.highlight {
font-family: sans-serif; font-family: sans-serif;
} }
/*** size correction to fit in one line - Settings/DNS ***/
#dns .col-md-11 {
width: 84%;
}
/*** add style to the information/about dropdown ***/ /*** add style to the information/about dropdown ***/
.navbar-nav > .user-menu > .dropdown-menu > .user-header, .navbar-nav > .user-menu > .dropdown-menu > .user-header,
.navbar-nav > .user-menu > .dropdown-menu > .user-footer { .navbar-nav > .user-menu > .dropdown-menu > .user-footer {