Release v5.19 (#2551)

This commit is contained in:
Adam Warner
2023-03-22 21:33:05 +00:00
committed by GitHub
27 changed files with 1637 additions and 164 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.4.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
steps:
-
name: Checkout repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.4.0
-
name: Spell-Checking
uses: codespell-project/actions-codespell@master
+1 -1
View File
@@ -9,6 +9,6 @@ jobs:
name: editorconfig-checker
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.3.0
- uses: actions/checkout@v3.4.0
- uses: editorconfig-checker/action-editorconfig-checker@main
- run: editorconfig-checker
+1 -1
View File
@@ -6,7 +6,7 @@ jobs:
name: PHP-CS-Fixer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.3.0
- uses: actions/checkout@v3.4.0
- name: PHP-CS-Fixer
uses: docker://oskarstark/php-cs-fixer-ga
with:
+1 -1
View File
@@ -8,7 +8,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.3.0
- uses: actions/checkout@v3.4.0
- name: Install composer
uses: php-actions/composer@v6
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
name: Syncing branches
steps:
- name: Checkout
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.4.0
- name: Opening pull request
run: gh pr create -B devel -H master --title 'Sync master back into development' --body 'Created by Github action' --label 'internal'
env:
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.4.0
- name: Set up Node.js
uses: actions/setup-node@v3.6.0
Generated
+9 -6
View File
@@ -8,16 +8,16 @@
"packages": [
{
"name": "phpstan/phpstan",
"version": "1.9.14",
"version": "1.10.7",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "e5fcc96289cf737304286a9b505fbed091f02e58"
"reference": "b10ceb526d9607903c5b2673f1fc8775dbe48975"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5fcc96289cf737304286a9b505fbed091f02e58",
"reference": "e5fcc96289cf737304286a9b505fbed091f02e58",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b10ceb526d9607903c5b2673f1fc8775dbe48975",
"reference": "b10ceb526d9607903c5b2673f1fc8775dbe48975",
"shasum": ""
},
"require": {
@@ -46,8 +46,11 @@
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.9.14"
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
@@ -63,7 +66,7 @@
"type": "tidelift"
}
],
"time": "2023-01-19T10:47:09+00:00"
"time": "2023-03-16T15:24:20+00:00"
}
],
"packages-dev": [],
-5
View File
@@ -10,11 +10,6 @@
require 'scripts/pi-hole/php/header_authenticated.php';
?>
<!-- Sourceing CSS colors from stylesheet to be used in JS code -->
<span class="queries-permitted"></span>
<span class="queries-blocked"></span>
<span class="graphs-grid"></span>
<span class="graphs-ticks"></span>
<div class="page-header">
<h1>Compute graphical statistics from the Pi-hole query database</h1>
-4
View File
@@ -11,10 +11,6 @@
require 'scripts/pi-hole/php/header_authenticated.php';
?>
<!-- Sourceing CSS colors from stylesheet to be used in JS code -->
<span class="queries-permitted"></span>
<span class="queries-blocked"></span>
<!-- Title -->
<div class="page-header">
<h1>Compute Top Lists from the Pi-hole query database</h1>
-5
View File
@@ -11,11 +11,6 @@ $indexpage = true;
require 'scripts/pi-hole/php/header_authenticated.php';
require_once 'scripts/pi-hole/php/gravity.php';
?>
<!-- Sourceing CSS colors from stylesheet to be used in JS code -->
<span class="queries-permitted"></span>
<span class="queries-blocked"></span>
<span class="graphs-grid"></span>
<span class="graphs-ticks"></span>
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-sm-6">
+35 -77
View File
@@ -9,11 +9,11 @@
"version": "1.0.0",
"license": "EUPL-1.2",
"devDependencies": {
"autoprefixer": "^10.4.13",
"eslint-plugin-compat": "^4.0.2",
"autoprefixer": "^10.4.14",
"eslint-plugin-compat": "^4.1.2",
"postcss": "^8.4.21",
"postcss-cli": "^10.1.0",
"prettier": "2.8.3",
"prettier": "2.8.4",
"xo": "^0.53.1"
}
},
@@ -244,9 +244,9 @@
}
},
"node_modules/@mdn/browser-compat-data": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.2.1.tgz",
"integrity": "sha512-EWUguj2kd7ldmrF9F+vI5hUOralPd+sdsUnYbRy33vZTuZkduC1shE9TtEMEjAQwyfyMb4ole5KtjF8MsnQOlA==",
"version": "5.2.35",
"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.35.tgz",
"integrity": "sha512-WMGl70X/upKye9Ix0xQtaKzNsFJE6I4ZEexypk1gyiB5REQZv9BI3Stw8Tby25YSGJ7OuYG0+5oCnkv1A+3kRA==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -721,9 +721,9 @@
"dev": true
},
"node_modules/autoprefixer": {
"version": "10.4.13",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
"integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
"version": "10.4.14",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
"integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
"dev": true,
"funding": [
{
@@ -736,8 +736,8 @@
}
],
"dependencies": {
"browserslist": "^4.21.4",
"caniuse-lite": "^1.0.30001426",
"browserslist": "^4.21.5",
"caniuse-lite": "^1.0.30001464",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -803,9 +803,9 @@
}
},
"node_modules/browserslist": {
"version": "4.21.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
"version": "4.21.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
"integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true,
"funding": [
{
@@ -818,10 +818,10 @@
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001400",
"electron-to-chromium": "^1.4.251",
"node-releases": "^2.0.6",
"update-browserslist-db": "^1.0.9"
"caniuse-lite": "^1.0.30001449",
"electron-to-chromium": "^1.4.284",
"node-releases": "^2.0.8",
"update-browserslist-db": "^1.0.10"
},
"bin": {
"browserslist": "cli.js"
@@ -923,9 +923,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001442",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
"integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==",
"version": "1.0.30001464",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz",
"integrity": "sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==",
"dev": true,
"funding": [
{
@@ -1096,17 +1096,6 @@
"integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
"dev": true
},
"node_modules/core-js": {
"version": "3.27.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz",
"integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==",
"dev": true,
"hasInstallScript": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
@@ -1678,22 +1667,21 @@
}
},
"node_modules/eslint-plugin-compat": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
"integrity": "sha512-xqvoO54CLTVaEYGMzhu35Wzwk/As7rCvz/2dqwnFiWi0OJccEtGIn+5qq3zqIu9nboXlpdBN579fZcItC73Ycg==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.1.2.tgz",
"integrity": "sha512-DNrQgDi5L4mAL4FdFboKBlSRg6MWfd75eA7K91lMjtP5ryN+O11qT2FDn7Z6zqy6sZ4sJawUR5V75qzB6l0CBg==",
"dev": true,
"dependencies": {
"@mdn/browser-compat-data": "^4.1.5",
"@mdn/browser-compat-data": "^5.2.34",
"ast-metadata-inferer": "^0.7.0",
"browserslist": "^4.16.8",
"caniuse-lite": "^1.0.30001304",
"core-js": "^3.16.2",
"browserslist": "^4.21.5",
"caniuse-lite": "^1.0.30001451",
"find-up": "^5.0.0",
"lodash.memoize": "4.1.2",
"semver": "7.3.5"
"semver": "7.3.8"
},
"engines": {
"node": ">=9.x"
"node": ">=16.x"
},
"peerDependencies": {
"eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -1849,21 +1837,6 @@
"eslint": ">=7.0.0"
}
},
"node_modules/eslint-plugin-n/node_modules/semver": {
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/eslint-plugin-no-use-extend-native": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz",
@@ -1931,21 +1904,6 @@
"eslint": ">=8.23.1"
}
},
"node_modules/eslint-plugin-unicorn/node_modules/semver": {
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/eslint-rule-docs": {
"version": "1.1.235",
"resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz",
@@ -4431,9 +4389,9 @@
}
},
"node_modules/prettier": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz",
"integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==",
"version": "2.8.4",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -4904,9 +4862,9 @@
}
},
"node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
+3 -3
View File
@@ -24,11 +24,11 @@
"testpr": "npm run prettier:fix && git diff --ws-error-highlight=all --color=always --exit-code && npm run xo"
},
"devDependencies": {
"autoprefixer": "^10.4.13",
"eslint-plugin-compat": "^4.0.2",
"autoprefixer": "^10.4.14",
"eslint-plugin-compat": "^4.1.2",
"postcss": "^8.4.21",
"postcss-cli": "^10.1.0",
"prettier": "2.8.3",
"prettier": "2.8.4",
"xo": "^0.53.1"
},
"browserslist": [
+5 -5
View File
@@ -33,8 +33,8 @@ function updateTopLists() {
"</td> <td>" +
data.top_queries[domain] +
"</td> <td>" +
'<button type="button" class="btn btn-default btn-xs text-red"><i class="fa fa-ban"></i> Blacklist</button>' +
'<button type="button" class="btn btn-default btn-xs text-orange"><i class="fa fa-balance-scale"></i> Audit</button>' +
'<button type="button" class="btn btn-default btn-xs text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>' +
'<button type="button" class="btn btn-default btn-xs text-orange btn-audit"><i class="fa fa-balance-scale"></i> Audit</button>' +
"</td> </tr> "
);
}
@@ -58,7 +58,7 @@ function updateTopLists() {
"</td> <td>" +
data.top_ads[domain] +
"</td> <td>" +
'<button type="button" class="btn btn-default btn-sm text-orange"><i class="fa fa-balance-scale"></i> Audit</button>' +
'<button type="button" class="btn btn-default btn-sm text-orange btn-audit"><i class="fa fa-balance-scale"></i> Audit</button>' +
"</td> </tr> "
);
} else {
@@ -69,8 +69,8 @@ function updateTopLists() {
"</td> <td>" +
data.top_ads[domain] +
"</td> <td>" +
'<button type="button" class="btn btn-default btn-xs text-green"><i class="fas fa-check"></i> Whitelist</button>' +
'<button type="button" class="btn btn-default btn-xs text-orange"><i class="fa fa-balance-scale"></i> Audit</button>' +
'<button type="button" class="btn btn-default btn-xs text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>' +
'<button type="button" class="btn btn-default btn-xs text-orange btn-audit"><i class="fa fa-balance-scale"></i> Audit</button>' +
"</td> </tr> "
);
}
+4 -4
View File
@@ -208,10 +208,10 @@ function updateQueriesOverTime() {
$(function () {
var ctx = document.getElementById("queryOverTimeChart").getContext("2d");
var blockedColor = $(".queries-blocked").css("background-color");
var permittedColor = $(".queries-permitted").css("background-color");
var gridColor = $(".graphs-grid").css("background-color");
var ticksColor = $(".graphs-ticks").css("color");
var blockedColor = utils.getCSSval("queries-blocked", "background-color");
var permittedColor = utils.getCSSval("queries-permitted", "background-color");
var gridColor = utils.getCSSval("graphs-grid", "background-color");
var ticksColor = utils.getCSSval("graphs-ticks", "color");
timeLineChart = new Chart(ctx, {
type: utils.getGraphType(),
+10 -10
View File
@@ -265,7 +265,7 @@ $(function () {
case 1:
fieldtext = "<span class='text-red'>Blocked (gravity)</span>";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 2:
@@ -275,24 +275,24 @@ $(function () {
: "<span class='text-green'>OK</span> (answered by <br class='hidden-lg'>";
fieldtext += (data.length > 5 && data[5] !== "N/A" ? data[5] : "") + ")" + dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case 3:
fieldtext =
"<span class='text-green'>OK</span> <br class='hidden-lg'>(cache)" + dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case 4:
fieldtext = "<span class='text-red'>Blocked <br class='hidden-lg'>(regex blacklist)";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 5:
fieldtext = "<span class='text-red'>Blocked <br class='hidden-lg'>(exact blacklist)";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 6:
@@ -313,21 +313,21 @@ $(function () {
fieldtext =
"<span class='text-red'>Blocked <br class='hidden-lg'>(gravity, CNAME)</span>";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 10:
fieldtext =
"<span class='text-red'>Blocked <br class='hidden-lg'>(regex blacklist, CNAME)</span>";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 11:
fieldtext =
"<span class='text-red'>Blocked <br class='hidden-lg'>(exact blacklist, CNAME)</span>";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case 12:
@@ -341,7 +341,7 @@ $(function () {
"<span class='text-green'>OK</span> <br class='hidden-lg'>(already forwarded)" +
dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case 15:
fieldtext =
@@ -358,7 +358,7 @@ $(function () {
"<span class='text-orange'>OK</span> <br class='hidden-lg'>(stale cache)" +
dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
default:
fieldtext = "Unknown (" + parseInt(data[4], 10) + ")";
+3 -1
View File
@@ -6,6 +6,7 @@
* Please see LICENSE file for your rights under this license. */
/* global utils:false */
//The following functions allow us to display time until pi-hole is enabled after disabling.
//Works between all pages
@@ -185,8 +186,9 @@ function initCPUtemp() {
var token = encodeURIComponent($("#token").text());
$.getJSON("api.php?setTempUnit=" + unit + "&token=" + token, function (data) {
if (showmsg === true) {
utils.showAlert("info", "", "Setting temperature unit...");
if ("result" in data && data.result === "success") {
utils.showAlert("success", "", "Temperature unit set to " + unit, "");
utils.showAlert("success", "far fa-check-circle", "Temperature unit set to " + unit, "");
} else {
utils.showAlert("error", "", "", "Temperature unit not set");
}
+15 -8
View File
@@ -232,8 +232,8 @@ function updateQueriesOverTime() {
timeLineChart.data.datasets = [];
var labels = ["Blocked DNS Queries", "Permitted DNS Queries"];
var blockedColor = $(".queries-blocked").css("background-color");
var permittedColor = $(".queries-permitted").css("background-color");
var blockedColor = utils.getCSSval("queries-blocked", "background-color");
var permittedColor = utils.getCSSval("queries-permitted", "background-color");
var colors = [blockedColor, permittedColor];
// Collect values and colors, and labels
@@ -678,7 +678,6 @@ function updateSummaryData(runOnce) {
updateTopLists();
}
var formatter = new Intl.NumberFormat();
//Element name might have a different name to the property of the API so we split it at |
[
"ads_blocked_today|queries_blocked_today",
@@ -691,9 +690,17 @@ function updateSummaryData(runOnce) {
var apiName = apiElName[0];
var elName = apiElName[1];
var $todayElement = elName ? $("span#" + elName) : $("span#" + apiName);
// Round to one decimal place and format locale-aware
var text = formatter.format(Math.round(data[apiName] * 10) / 10);
var textData = idx === 2 && data[apiName] !== "to" ? text + "%" : text;
var textData = data[apiName];
if (!FTLoffline) {
// Only format as number if FTL is online
var formatter = new Intl.NumberFormat();
// Round to one decimal place and format locale-aware
var text = formatter.format(Math.round(data[apiName] * 10) / 10);
textData = idx === 2 && data[apiName] !== "to" ? text + "%" : text;
}
if ($todayElement.text() !== textData && $todayElement.text() !== textData + "%") {
$todayElement.addClass("glow");
$todayElement.text(textData);
@@ -862,8 +869,8 @@ $(function () {
getMaxlogage();
updateSummaryData();
var gridColor = $(".graphs-grid").css("background-color");
var ticksColor = $(".graphs-ticks").css("color");
var gridColor = utils.getCSSval("graphs-grid", "background-color");
var ticksColor = utils.getCSSval("graphs-ticks", "color");
var ctx = document.getElementById("queryOverTimeChart").getContext("2d");
timeLineChart = new Chart(ctx, {
type: utils.getGraphType(),
+10 -10
View File
@@ -124,7 +124,7 @@ $(function () {
case "1":
fieldtext = "<span class='text-red'>Blocked (gravity)</span>";
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
blocked = true;
break;
case "2":
@@ -135,25 +135,25 @@ $(function () {
fieldtext +=
(data.length > 10 && data[10] !== "N/A" ? data[10] : "") + ")" + dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case "3":
fieldtext =
"<span class='text-green'>OK</span> <br class='hidden-lg'>(cache)" + dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case "4":
fieldtext = "<span class='text-red'>Blocked <br class='hidden-lg'>(regex blacklist)";
blocked = true;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
break;
case "5":
fieldtext = "<span class='text-red'>Blocked <br class='hidden-lg'>(exact blacklist)";
blocked = true;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
break;
case "6":
fieldtext = "<span class='text-red'>Blocked <br class='hidden-lg'>(external, IP)";
@@ -177,7 +177,7 @@ $(function () {
"<span class='text-red'>Blocked <br class='hidden-lg'>(gravity, CNAME)</span>";
blocked = true;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
isCNAME = true;
break;
case "10":
@@ -185,7 +185,7 @@ $(function () {
"<span class='text-red'>Blocked <br class='hidden-lg'>(regex blacklist, CNAME)</span>";
blocked = true;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
isCNAME = true;
break;
case "11":
@@ -193,7 +193,7 @@ $(function () {
"<span class='text-red'>Blocked <br class='hidden-lg'>(exact blacklist, CNAME)</span>";
blocked = true;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-green"><i class="fas fa-check"></i> Whitelist</button>';
'<button type="button" class="btn btn-default btn-sm text-green btn-whitelist"><i class="fas fa-check"></i> Whitelist</button>';
isCNAME = true;
break;
case "12":
@@ -207,7 +207,7 @@ $(function () {
"<span class='text-green'>OK</span> <br class='hidden-lg'>(already forwarded)" +
dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
case "15":
fieldtext =
@@ -224,7 +224,7 @@ $(function () {
"<span class='text-orange'>OK</span> <br class='hidden-lg'>(stale cache)" +
dnssecStatus;
buttontext =
'<button type="button" class="btn btn-default btn-sm text-red"><i class="fa fa-ban"></i> Blacklist</button>';
'<button type="button" class="btn btn-default btn-sm text-red btn-blacklist"><i class="fa fa-ban"></i> Blacklist</button>';
break;
default:
fieldtext = "Unknown (" + parseInt(data[4], 10) + ")";
+8
View File
@@ -408,6 +408,13 @@ function changeBulkDeleteStates(table) {
}
}
function getCSSval(cssclass, cssproperty) {
var elem = $("<div class='" + cssclass + "'></div>"),
val = elem.appendTo("body").css(cssproperty);
elem.remove();
return val;
}
window.utils = (function () {
return {
escapeHtml: escapeHtml,
@@ -432,5 +439,6 @@ window.utils = (function () {
colorBar: colorBar,
checkMessages: checkMessages,
changeBulkDeleteStates: changeBulkDeleteStates,
getCSSval: getCSSval,
};
})();
+3 -11
View File
@@ -26,21 +26,13 @@ $hostname = gethostname() ? gethostname() : '';
<link rel="icon" href="img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
<link rel="icon" href="img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
<link rel="manifest" href="img/favicons/manifest.json">
<link rel="mask-icon" href="img/favicons/safari-pinned-tab.svg" color="#367fa9">
<link rel="mask-icon" href="img/favicons/safari-pinned-tab.svg" color="<?php echo $theme_color; ?>">
<link rel="shortcut icon" href="img/favicons/favicon.ico">
<meta name="msapplication-TileColor" content="#367fa9">
<meta name="msapplication-TileColor" content="<?php echo $theme_color; ?>">
<meta name="msapplication-TileImage" content="img/favicons/mstile-150x150.png">
<!-- Theme styles -->
<?php if ($theme == 'default-light') { ?>
<meta name="theme-color" content="#367fa9">
<?php } elseif ($theme == 'default-dark') { ?>
<meta name="theme-color" content="#272c30">
<?php } elseif ($theme == 'default-darker') { ?>
<meta name="theme-color" content="#2e6786">
<?php } elseif ($theme == 'lcars') { ?>
<meta name="theme-color" content="#4488FF">
<?php } ?>
<meta name="theme-color" content="<?php echo $theme_color; ?>">
<?php if ($darkmode) { ?>
<style>
+1 -1
View File
@@ -206,7 +206,7 @@ if ($auth) {
<ul class="dropdown-menu">
<!-- User image -->
<li class="user-header">
<img src="img/logo.svg" alt="Pi-hole Logo" style="border: 0" width="90" height="90">
<img class="logo-img" src="img/logo.svg" alt="Pi-hole Logo" style="border: 0" width="90" height="90">
<p>
Open Source Ad Blocker
</p>
+1 -1
View File
@@ -5,7 +5,7 @@
<!-- Sidebar user panel -->
<div class="user-panel">
<div class="pull-left image">
<img src="img/logo.svg" alt="Pi-hole logo">
<img class="logo-img" src="img/logo.svg" alt="Pi-hole logo">
</div>
<div class="pull-left info">
<p>Status</p>
+2 -1
View File
@@ -358,6 +358,7 @@ if (isset($_POST['action'])) {
$flushtables = isset($_POST['flushtables']);
echo 'Start importing...'."<br>\n";
foreach (new RecursiveIteratorIterator($archive) as $file) {
if (isset($_POST['blacklist']) && $file->getFilename() === 'blacklist.txt') {
$num = archive_insert_into_table($file, 'blacklist', $flushtables);
@@ -559,7 +560,7 @@ if (isset($_POST['action'])) {
}
unlink($fullfilename);
echo 'OK';
echo 'Done importing';
if ($reloadsettingspage) {
echo "<br>\n<span data-forcereload></span>";
}
+9 -5
View File
@@ -13,13 +13,16 @@ $available_themes = array();
* Array[0] = Description
* Array[1] = Is this a dark mode theme? (Sets background to black during page reloading to avoid white "flashing")
* Array[2] = Style sheet name
* Array[3] = Theme color
*/
$available_themes['default-light'] = array('Pi-hole default theme (light, default)', false, 'default-light');
$available_themes['default-dark'] = array('Pi-hole midnight theme (dark)', true, 'default-dark');
$available_themes['default-darker'] = array('Pi-hole deep-midnight theme (dark)', true, 'default-darker');
$available_themes['default-light'] = array('Pi-hole default theme (light, default)', false, 'default-light', '#367fa9');
$available_themes['default-dark'] = array('Pi-hole midnight theme (dark)', true, 'default-dark', '#272c30');
$available_themes['default-darker'] = array('Pi-hole deep-midnight theme (dark)', true, 'default-darker', '#2e6786');
$available_themes['high-contrast'] = array('High contrast light', false, 'high-contrast', '#0078a0');
$available_themes['high-contrast-dark'] = array('High contrast dark', false, 'high-contrast-dark', '#0077c7');
// Option to have the theme go with the device dark mode setting, always set the background to black to avoid flashing
$available_themes['default-auto'] = array('Pi-hole auto theme (light/dark)', true, 'default-auto');
$available_themes['lcars'] = array('Star Trek LCARS theme (dark)', true, 'lcars');
$available_themes['default-auto'] = array('Pi-hole auto theme (light/dark)', true, 'default-auto', '#367fa9');
$available_themes['lcars'] = array('Star Trek LCARS theme (dark)', true, 'lcars', '#4488FF');
$webtheme = '';
// Try to load theme settings from setupVars.conf
@@ -42,6 +45,7 @@ if (!array_key_exists($webtheme, $available_themes)) {
$darkmode = $available_themes[$webtheme][1];
$theme = $available_themes[$webtheme][2];
$theme_color = $available_themes[$webtheme][3];
function theme_selection()
{
+950
View File
@@ -0,0 +1,950 @@
/* Pi-hole: A black hole for Internet advertisements
* (c) 2020 Pi-hole, LLC (https://pi-hole.net)
* Network-wide ad blocking via your own hardware.
*
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
:root {
--primary-color: #0077c7;
--primary-color-darker: #101820;
--darker-bgcolor: #101c20;
--main-text-color: #d2dde1;
--info-color: var(--primary-color);
--danger-color: #a83333;
--warning-color: #a86600;
--success-color: #027744;
--menu-hover-bgcolor: var(--primary-color-darker);
--submenu-hover-bgcolor: #2d363f;
--network-recent: #184050;
--network-old: #183440;
--network-older: #182840;
--network-never: #182028;
--allowed-color: #3c7;
--blocked-color: var(--danger-color);
--datatable-bgcolor: rgba(18, 44, 68, 0.3);
}
/* removing transition for every element, to avoid unnecessary movement */
* {
transition: none !important;
}
body {
font-size: 15px;
color: var(--main-text-color);
}
.layout-boxed {
background: #181c20;
}
a {
color: #92bed6;
}
a:hover,
a:active {
color: #60a6cc;
text-decoration: underline;
}
h4 {
color: #44def1;
}
.page-header {
border-color: #202830;
}
.page-header small {
color: currentColor;
}
.content-header > .breadcrumb > li > a {
color: var(--main-text-color);
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
border-top: 0;
}
.table > thead > tr.odd,
.table > tbody > tr.odd,
.table > tfoot > tr.odd {
background-color: #1d252d;
}
.table > thead > tr.odd:hover,
.table > tbody > tr.odd:hover,
.table > tfoot > tr.odd:hover,
.table > thead > tr.even:hover,
.table > tbody > tr.even:hover,
.table > tfoot > tr.even:hover {
background-color: #1a2026;
}
.table-bordered,
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #000;
}
.dataTables_wrapper input[type="search"] {
border-radius: 4px;
background-color: #3c4652;
border: 0;
color: var(--main-text-color);
}
.pagination li > a {
color: var(--main-text-color);
background-color: #3c4652;
border-color: #202830;
}
.pagination > .disabled > a,
.pagination > .disabled > a:focus,
.pagination > .disabled > a:hover,
.pagination > .disabled > span,
.pagination > .disabled > span:focus,
.pagination > .disabled > span:hover {
cursor: not-allowed;
color: #9ab;
background-color: #3c4652;
border-color: #202830;
}
.pagination > li > a:focus,
.pagination > li > a:hover,
.pagination > li > span:focus,
.pagination > li > span:hover {
z-index: 2;
color: #fff;
background-color: #54606b;
border-color: #202830;
}
.pagination > .active > a,
.pagination > .active > a:focus,
.pagination > .active > a:hover,
.pagination > .active > span,
.pagination > .active > span:focus,
.pagination > .active > span:hover {
background-color: var(--primary-color);
border-color: #202830;
color: #fff;
}
.wrapper,
.main-sidebar,
.left-side {
background-color: #202830;
}
.user-panel > .info,
.user-panel > .info > a {
color: #fff;
}
.logo-img,
.loginpage-logo {
filter: saturate(0) brightness(4.6) contrast(0.9);
}
.sidebar-menu > li.header {
color: #808a90;
background-color: var(--menu-hover-bgcolor);
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li > a:focus,
.sidebar-menu > li.active > a {
color: #fff;
background-color: var(--menu-hover-bgcolor);
border-left-color: #fff;
}
.sidebar-menu > li > .treeview-menu {
margin: 0 3px;
background-color: var(--submenu-hover-bgcolor);
}
.sidebar a {
color: var(--main-text-color);
}
.sidebar a:hover {
text-decoration: none;
}
.treeview-menu {
padding: 0;
}
.treeview-menu > li > a {
padding: 5px 5px 5px 17px;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover,
.treeview-menu > li > a:focus {
color: #fff;
background: var(--menu-hover-bgcolor);
}
/* "Donate" sidebar button */
.sidebar-menu > li.menu-donate:hover > a,
.sidebar-menu > li.menu-donate > a:focus {
color: #fff;
background-color: #a03333;
}
.box,
.box-footer,
.info-box,
.box-comment,
.comment-text,
.comment-text .username {
color: var(--main-text-color);
background-color: #202830;
}
.box-comments .box-comment {
border-bottom-color: #3c4652;
}
.box-footer {
border-top: 1px solid #3c4652;
}
.box-header.with-border {
border-bottom: 1px solid #3c4652;
}
.box-solid,
.box {
border: 1px solid #202830;
}
.box > .box-header,
.box > .box-header .btn,
.box-solid > .box-header,
.box-solid > .box-header .btn {
color: var(--main-text-color);
}
.box.box-info,
.box.box-primary,
.box.box-success,
.box.box-warning,
.box.box-danger {
border-top-width: 3px;
}
.box.box-info {
border-top-color: #00c0ef;
}
.box.box-primary {
border-top-color: #075383;
}
.box.box-success {
border-top-color: #00a65a;
}
.box.box-warning {
border-top-color: #f94;
}
.box.box-danger {
border-top-color: #dd4b39;
}
.main-header .navbar {
background-color: #202830;
}
.main-header .navbar .nav > li > a,
.main-header .navbar .nav > li > .navbar-text {
color: #fff;
max-height: 50px;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus {
background-color: var(--menu-hover-bgcolor);
color: #f6f6f6;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background-color: var(--menu-hover-bgcolor);
}
.sidebar-toggle-svg:hover {
color: #fff;
background: var(--menu-hover-bgcolor);
}
.timeline li .timeline-item {
color: var(--main-text-color);
background-color: #202830;
border-color: #3c4652;
}
.timeline li .timeline-header {
border-bottom-color: #3c4652;
}
.nav-stacked > li > a {
color: var(--main-text-color);
}
.nav-stacked > li > a:hover {
color: white;
background-color: #1a2026;
}
.content-wrapper,
.right-side {
background-color: #3c4652;
}
.main-footer,
.nav-tabs-custom {
background-color: #202830;
border-top-color: #3c4652;
color: var(--main-text-color);
}
.main-footer .nav-tabs,
.nav-tabs-custom .nav-tabs {
background-color: var(--submenu-hover-bgcolor);
border-bottom-color: #2f363b;
}
.main-footer .tab-content,
.nav-tabs-custom .tab-content {
background-color: var(--submenu-hover-bgcolor);
}
.nav-tabs-custom > .nav-tabs {
background: var(--primary-color-darker);
}
.nav-tabs-custom > .nav-tabs > li {
margin-right: 1px;
color: var(--main-text-color);
}
.nav-tabs-custom > .nav-tabs > li.active {
border-top-color: var(--primary-color);
}
.nav-tabs-custom > .nav-tabs > li:hover > a,
.nav-tabs-custom > .nav-tabs > li.active > a,
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
border-left-color: var(--submenu-hover-bgcolor);
border-right-color: var(--submenu-hover-bgcolor);
background-color: var(--submenu-hover-bgcolor);
color: #fff;
}
.nav-tabs-custom > .nav-tabs > li:not(.active):hover {
border-top-color: #9ab;
background-color: transparent;
}
.nav-tabs-custom > .nav-tabs > li > a {
color: #9ab;
}
.nav-tabs-custom > .nav-tabs > li > a:focus {
color: #cde;
border-top-color: var(--primary-color-darker);
}
input,
select,
select.form-control,
.form-group .input-group-addon,
.input-group .input-group-addon,
.form-group input,
.input-group input,
.form-group textarea,
.input-group textarea,
.daterangepicker select.hourselect,
.daterangepicker select.minuteselect,
.daterangepicker select.secondselect,
.daterangepicker select.ampmselect,
.form-control,
div.dataTables_wrapper div.dataTables_length select {
background-color: #2d363f;
color: var(--main-text-color);
border: 1px solid #3c4652;
}
.list-group {
color: var(--main-text-color);
background-color: #202830;
}
.list-group .list-group-item {
border-color: #3c4652;
background-color: #202830;
}
.input-group .input-group-addon {
background: #3c4652;
}
.select2 .select2-selection {
background-color: #3c4652;
color: var(--main-text-color);
border: 1px solid #3c4652;
}
.select2 .select2-selection .select2-container--default,
.select2 .select2-selection .select2-selection--single,
.select2 .select2-selection .select2-selection--multiple,
.select2 .select2-selection .select2-selection__rendered {
color: var(--main-text-color);
}
.select2-dropdown {
background-color: #3c4652;
color: var(--main-text-color);
border: 1px solid #3c4652;
}
.select2-dropdown .select2-search__field {
background-color: #202830;
color: var(--main-text-color);
border: 1px solid #3c4652;
}
.select2-container--default.select2-container--open {
background-color: #202830;
}
.not-used {
background-color: #eee;
}
.not-used:hover {
background-color: #c5c5c5;
}
.used {
background-color: #fff;
}
.used:hover {
background-color: #ddd;
}
.graphs-grid {
background-color: rgba(255, 255, 255, 0.1);
}
.graphs-ticks {
color: #fff;
}
.progress {
background-color: #181c20;
}
.queries-permitted {
background-color: var(--allowed-color);
}
.queries-blocked {
background-color: var(--blocked-color);
}
code,
pre {
padding: 2px 4px;
font-size: 90%;
color: var(--main-text-color);
background-color: #3c4652;
border-radius: 4px;
}
kbd {
background-color: #3c4652;
}
/* Used in the Query Log table */
.text-green-light {
color: #8fa !important;
}
.text-green {
color: #17cc7c !important;
}
.text-orange {
color: #f80 !important;
}
.text-red {
color: #f65 !important;
}
.text-vivid-blue {
color: #39f !important;
}
.text-muted {
color: #808890;
}
.warning-count {
color: #000;
background: #f94;
}
.sidebar .svg-inline--fa.text-red {
color: #c00 !important;
}
.btn-default {
box-shadow: none;
background-color: #3c4652;
color: #bec5cb;
border: 1px solid #3c4652;
}
.btn-default:hover,
.btn-default:active,
.btn-default.hover {
background: #fff;
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
color: #fff;
}
.btn-primary:active,
.btn-primary:focus,
.btn-primary.hover {
background-color: var(--primary-color-darker);
}
.btn-primary:hover {
color: var(--primary-color);
background-color: #fff;
border-color: var(--primary-color);
}
.btn-info {
background: var(--info-color);
border-color: var(--info-color) !important;
}
.btn-danger {
background: var(--danger-color);
border-color: var(--danger-color) !important;
}
.btn-warning {
background: var(--warning-color);
border-color: var(--warning-color) !important;
}
.btn-success {
background: var(--success-color);
border-color: var(--success-color) !important;
}
.btn-info:hover {
color: var(--info-color);
background: #fff;
}
.btn-danger:hover {
color: var(--danger-color);
background: #fff;
}
.btn-warning:hover {
color: var(--warning-color);
background: #fff;
}
.btn-success:hover {
color: var(--success-color);
background: #fff;
}
.btn-blacklist,
.btn-whitelist,
.btn-audit {
background: #111;
}
.btn-blacklist:hover {
color: #000 !important;
background: #f65;
border-color: #000;
}
.btn-whitelist:hover {
color: #000 !important;
background: #17cc7c;
border-color: #000;
}
.btn-audit:hover {
color: #000 !important;
background: #f80;
border-color: #000;
}
.datatable-bt:hover,
.datatable-bt:active:hover {
background: var(--primary-color);
border-color: var(--primary-color);
color: #fff;
}
/* Used in debug log page */
.log-red {
color: #f76;
}
.log-green {
color: #4c4;
}
.log-yellow {
color: #fb0;
}
.log-blue {
color: #48f;
}
.log-purple {
color: #b8e;
}
.log-cyan {
color: #0df;
}
.log-gray {
color: #999;
}
#output {
border-color: #505458;
background: #181c20;
font-size: 14px;
}
#output b.log-red {
background: #b23;
color: #fff;
}
/* Used by the long-term pages */
.daterangepicker {
border-radius: 4px;
border: 1px solid #fff;
color: var(--primary-color-darker);
}
.daterangepicker .ranges {
border-radius: 3px;
overflow: hidden;
}
.daterangepicker .ranges li:hover {
background-color: var(--primary-color-darker);
color: #fff;
}
.daterangepicker .ranges li.active {
background-color: var(--primary-color); /* Color also used in table pagination */
}
.daterangepicker .calendar-table {
background-color: #3e464c;
border-radius: 4px;
border: 1px solid #3c4652;
}
.daterangepicker td.off,
.daterangepicker td.off.in-range,
.daterangepicker td.off.start-date,
.daterangepicker td.off.end-date {
background-color: #485158;
}
.daterangepicker td.available:hover,
.daterangepicker th.available:hover {
background-color: #1a2026;
}
.daterangepicker td.active,
.daterangepicker td.active:hover,
.daterangepicker td.in-range:hover {
background-color: #225e92;
}
.daterangepicker td.in-range {
background-color: #1a2026;
color: var(--main-text-color);
}
/*** Overwrite chrome's input field auto-filling ***/
input:-webkit-autofill,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
select:-webkit-autofill {
-webkit-text-fill-color: var(--main-text-color) !important;
-webkit-box-shadow: 0 0 0px 1000px #3c4652 inset;
transition: background-color 1s ease-in-out 0s;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
background-color: #3c4652;
opacity: 1;
-moz-appearance: textfield;
appearance: textfield;
}
.dropdown-menu {
background-color: #22282d;
color: var(--main-text-color);
border: 1px solid #4c5761;
}
.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {
background-color: var(--primary-color-darker);
border: 1px solid #000;
box-shadow: 0 0 7px #000;
}
.navbar-nav > .user-menu > .dropdown-menu {
margin: 0;
border: 1px solid var(--primary-color);
}
.navbar-nav > .user-menu > .dropdown-menu > .user-body {
border-color: var(--main-text-color);
}
.navbar-nav > .user-menu > .dropdown-menu > .user-body a {
color: var(--main-text-color) !important;
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer {
padding: 0;
background: #202830;
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer a {
color: var(--main-text-color) !important;
padding: 8px 12px;
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer a:hover {
background-color: var(--primary-color) !important;
color: #fff !important;
}
.user-menu hr {
margin: 0;
opacity: 1;
border-color: var(--primary-color-darker);
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.main-header .navbar .dropdown-menu li a:hover {
background-color: var(--menu-hover-bgcolor);
}
}
.table-striped > tbody > tr:nth-of-type(2n + 1) {
background-color: #1d252d;
}
.panel,
.panel-body,
.panel-default > .panel-heading {
background-color: #3e464c;
border-radius: 4px;
border: 1px solid #3c4652;
color: var(--main-text-color);
}
.box.box-solid.box-info,
.box.box-solid.box-info > .box-header {
color: var(--main-text-color);
background-color: #367fa9 !important;
border: 1px solid #367fa9;
}
input[type="password"]::-webkit-caps-lock-indicator {
filter: invert(100%);
}
.network-never {
background-color: var(--network-never);
}
.network-recent {
background-color: var(--network-recent);
}
.network-old {
background-color: var(--network-old);
}
.network-older {
background-color: var(--network-older);
}
.network-gradient {
background-image: linear-gradient(to right, var(--network-recent) 0%, var(--network-old) 100%);
}
.icheckbox_polaris,
.icheckbox_futurico,
.icheckbox_minimal-blue {
margin-right: 10px;
}
.iradio_polaris,
.iradio_futurico,
.iradio_minimal-blue {
margin-right: 8px;
}
/* Overlay box with spinners as shown during data collection for graphs */
.box .overlay,
.overlay-wrapper .overlay {
z-index: 50;
background-color: rgba(53, 60, 66, 0.733);
border-radius: 3px;
}
.box .overlay > .fa,
.overlay-wrapper .overlay > .fa {
color: var(--main-text-color) !important;
}
.modal-content {
background: #202830;
}
.modal-header {
border-bottom-color: #3c4652;
}
.modal-footer {
border-top-color: #3c4652;
}
.close {
color: #383838;
}
.login-page {
background: #181c20;
}
/*** Fix login input visual misalignment ***/
.login-options input,
.login-options [class*="icheck-"] > input:first-child + input[type="hidden"] + label::before,
.login-options [class*="icheck-"] > input:first-child + label::before {
background: none;
border-color: currentColor;
}
.form-group.has-error label {
color: #f65;
}
.main-header .logo {
background-color: var(--menu-hover-bgcolor);
color: #fff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: var(--menu-hover-bgcolor);
}
.main-header li.user-header {
background-color: var(--primary-color-darker);
}
.content-header {
background-color: transparent;
}
.form-control::placeholder {
color: #9ab;
}
.form-control::-webkit-input-placeholder {
color: #9ab;
}
.form-control:focus::placeholder,
.form-control:focus::-webkit-input-placeholder {
color: transparent;
}
/* Small box and alert colors */
.bg-aqua,
.callout.callout-info,
.alert-info,
.label-info,
.modal-info .modal-body {
background: var(--info-color) !important;
border-color: var(--info-color) !important;
}
.bg-red,
.callout.callout-danger,
.alert-danger,
.alert-error,
.label-danger,
.modal-danger .modal-body {
background: var(--danger-color) !important;
border-color: var(--danger-color) !important;
}
.bg-yellow,
.callout.callout-warning,
.alert-warning,
.label-warning,
.modal-warning .modal-body {
background: var(--warning-color) !important;
border-color: var(--warning-color) !important;
}
.bg-green,
.callout.callout-success,
.alert-success,
.label-success,
.modal-success .modal-body {
background: var(--success-color) !important;
border-color: var(--success-color) !important;
}
.alert .close {
color: currentColor;
opacity: 0.5;
filter: none;
}
.alert .close:hover {
opacity: 1;
filter: none;
}
.small-box > .small-box-footer {
color: #fff;
background: rgba(0, 0, 0, 0.3);
}
/* Tables and Datatables */
.blocked-row td {
background-color: rgba(56, 0, 40, 0.35);
}
.allowed-row td {
background-color: rgba(0, 64, 64, 0.35);
}
table.dataTable thead .sorting::after,
table.dataTable thead .sorting_asc::after,
table.dataTable thead .sorting_desc::after,
table.dataTable thead .sorting_asc_disabled::after,
table.dataTable thead .sorting_desc_disabled::after {
opacity: 1;
width: 20px;
padding: 0 1px;
border-radius: 4px;
text-align: center;
}
table.dataTable thead .sorting::after {
opacity: 0.6;
}
table.dataTable thead th:hover.sorting::after,
table.dataTable thead th:hover.sorting_asc::after,
table.dataTable thead th:hover.sorting_desc::after,
table.dataTable thead th:hover.sorting_asc_disabled::after,
table.dataTable thead th:hover.sorting_desc_disabled::after {
color: #fff;
background: #000;
}
td.highlight {
background-color: rgba(255, 204, 0, 0.15);
}
#domain-frequency .table-responsive table tr th:nth-child(3),
#domain-frequency .table-responsive table tr td:nth-child(3),
#ad-frequency .table-responsive table tr th:nth-child(3),
#ad-frequency .table-responsive table tr td:nth-child(3) {
width: 146px;
text-align: center;
}
.lookatme {
color: #000 !important;
z-index: 1;
}
.lookatme::after {
background: #f94;
text-shadow: none;
content: "";
inset: -2px -4px;
z-index: -100;
animation: none;
border-radius: 6px;
}
+562
View File
@@ -0,0 +1,562 @@
/* Pi-hole: A black hole for Internet advertisements
* (c) 2020 Pi-hole, LLC (https://pi-hole.net)
* Network-wide ad blocking via your own hardware.
*
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
:root {
--primary-color: #0078a0;
--primary-color-darker: #00445b;
--darker-bgcolor: #101c20;
--info-color: var(--primary-color);
--danger-color: #a83333;
--warning-color: #a86600;
--success-color: #027744;
--menu-hover-bgcolor: var(--darker-bgcolor);
--submenu-hover-bgcolor: rgba(0, 0, 0, 0.15);
--network-recent: #f4fcfa;
--network-old: #ddefff;
--network-older: #cce6fe;
--network-never: #ffca98;
--allowed-color: #3c7;
--blocked-color: var(--danger-color);
}
/* removing transition for every element, to avoid unnecessary movement */
* {
transition: none !important;
}
body {
font-size: 15px;
}
.layout-boxed {
background: #abc;
}
a {
color: #1e6188;
}
a:hover {
color: #000;
text-decoration: underline;
}
.logo-img {
filter: saturate(0) brightness(4.6) contrast(0.9);
}
.main-header .navbar {
background-color: var(--primary-color);
}
.main-header .navbar .nav > li > a,
.main-header .navbar .nav > li > .navbar-text {
color: #fff;
max-height: 50px;
}
.main-header .navbar .nav > li > a:hover,
.main-header .navbar .nav > li > a:active,
.main-header .navbar .nav > li > a:focus,
.main-header .navbar .nav .open > a,
.main-header .navbar .nav .open > a:hover,
.main-header .navbar .nav .open > a:focus {
background-color: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.main-header .navbar .nav > li > .navbar-text code {
color: #900;
}
.main-header .navbar .sidebar-toggle {
color: #fff;
}
.main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background-color: var(--primary-color-darker);
}
@media (max-width: 767px) {
.main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.main-header .navbar .dropdown-menu li a:hover {
background-color: var(--primary-color-darker);
}
}
.main-header .logo {
background-color: var(--primary-color-darker);
color: #fff;
border-bottom: 0 solid transparent;
}
.main-header .logo:hover {
background-color: var(--menu-hover-bgcolor);
}
.main-header li.user-header {
background-color: var(--primary-color-darker);
}
.content-header {
background-color: transparent;
}
.navbar-nav > .user-menu > .dropdown-menu {
margin: 0;
border: 2px solid var(--primary-color-darker);
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer {
padding: 0;
color: var(--primary-color-darker);
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer a {
padding: 8px 12px;
}
.navbar-nav > .user-menu > .dropdown-menu > .user-footer a:hover {
background-color: var(--primary-color) !important;
color: #fff;
}
.user-menu hr {
margin: 0;
opacity: 1;
border-color: var(--primary-color-darker);
}
.wrapper,
.main-sidebar,
.left-side {
background-color: #222d32;
}
.user-panel > .info,
.user-panel > .info > a {
color: #fff;
}
.sidebar-menu > li.header {
color: #808a90;
background-color: var(--menu-hover-bgcolor);
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li > a:focus,
.sidebar-menu > li.active > a {
color: #fff;
background-color: var(--menu-hover-bgcolor);
border-left-color: #fff;
}
.sidebar-menu > li > .treeview-menu {
margin: 0 3px;
background-color: #2c3b41;
}
.sidebar a {
color: #d2dde1;
}
.sidebar a:hover {
text-decoration: none;
}
/* "Donate" sidebar button */
.sidebar-menu > li.menu-donate:hover > a,
.sidebar-menu > li.menu-donate > a:focus {
color: #fff;
background-color: #a03333;
}
.treeview-menu {
padding: 0;
}
.treeview-menu > li > a {
padding: 5px 5px 5px 17px;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover,
.treeview-menu > li > a:focus {
color: #fff;
background: var(--menu-hover-bgcolor);
}
.nav-tabs-custom > .nav-tabs {
background: #e4e8f0;
}
.nav-tabs-custom > .nav-tabs > li {
margin-right: 1px;
}
.nav-tabs-custom > .nav-tabs > li:not(.active):hover {
background: #fff;
border-top-color: #d2d6de;
}
.nav-tabs-custom > .nav-tabs > li > a,
.nav-tabs-custom > .nav-tabs > li > a:hover {
color: #567;
}
.nav-tabs-custom > .nav-tabs > li > a:focus {
border-top-color: var(--primary-color-darker);
}
.nav-tabs-custom > .nav-tabs > li.active {
border-top-color: var(--primary-color);
}
.form-control {
color: #000;
}
.form-control::placeholder {
color: #6c747b;
}
.form-control::-webkit-input-placeholder {
color: #6c747b;
}
.login-box {
background: #fff;
}
.form-group.has-error label {
color: var(--danger-color);
}
.not-used {
background-color: #eee;
}
.not-used:hover {
background-color: #c5c5c5;
}
.used {
background-color: #fff;
}
.used:hover {
background-color: #ddd;
}
.graphs-grid {
background-color: rgba(0, 0, 0, 0.2);
}
.graphs-ticks {
color: #000;
}
.queries-permitted {
background-color: var(--allowed-color);
}
.queries-blocked {
background-color: var(--blocked-color);
}
.progress {
background-color: #eee;
}
/* Used in the Query Log table */
.text-black {
color: #000 !important;
}
.text-green-light {
color: #8fa !important;
}
.text-green {
color: #008000 !important;
}
.text-orange {
color: #f80 !important;
}
.text-red {
color: #c00 !important;
}
.text-vivid-blue {
color: #39f !important;
}
/* Used in debug log page */
.log-red {
color: #d00;
font-weight: bold;
}
.log-green {
color: #071;
font-weight: bold;
}
.log-yellow {
color: #b05000;
font-weight: bold;
}
.log-blue {
color: #04d;
font-weight: bold;
}
.log-purple {
color: #a0c;
font-weight: bold;
}
.log-cyan {
color: #07a;
font-weight: bold;
}
.log-gray {
color: #999;
}
#output {
font-size: 14px;
}
#output b.log-red {
background: #c00;
color: #fff;
}
.warning-count {
color: #000;
background: #eb4;
}
.icheckbox_minimal-blue {
margin-right: 10px;
}
.iradio_minimal-blue {
margin-right: 8px;
}
.datatable-bt,
.datatable-bt:active,
.datatable-bt:active:focus,
.datatable-bt:focus {
background: #fff;
border-color: #ddd;
color: #345;
}
.datatable-bt:hover,
.datatable-bt:active:hover {
background: #337ab7;
border-color: #337ab7;
color: #fff;
}
/*** Overwrite chrome's input field auto-filling ***/
input:-webkit-autofill,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
select:-webkit-autofill {
-webkit-text-fill-color: #666 !important;
-webkit-box-shadow: 0 0 0px 1000px #fff inset;
transition: background-color 1s ease-in-out 0s;
}
.sidebar-toggle-svg:hover {
color: #fff;
background: var(--primary-color-darker);
}
/* Small box and alert colors */
.bg-aqua,
.callout.callout-info,
.alert-info,
.label-info,
.modal-info .modal-body {
background: var(--info-color) !important;
}
.bg-red,
.callout.callout-danger,
.alert-danger,
.alert-error,
.label-danger,
.modal-danger .modal-body {
background: var(--danger-color) !important;
}
.bg-yellow,
.callout.callout-warning,
.alert-warning,
.label-warning,
.modal-warning .modal-body {
background: var(--warning-color) !important;
}
.bg-green,
.callout.callout-success,
.alert-success,
.label-success,
.modal-success .modal-body {
background: var(--success-color) !important;
}
.small-box > .small-box-footer {
color: #fff;
}
.small-box > .small-box-footer {
background: rgba(0, 0, 0, 0.3);
}
/* Tables and Datatables */
.table-bordered,
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #d0d0d0;
}
.table-striped > tbody > tr:nth-of-type(2n + 1) {
background-color: #fcfcfc;
}
.blocked-row td {
background-color: rgba(230, 160, 160, 0.3);
}
.allowed-row td {
background-color: rgba(236, 255, 246, 0.3);
}
td.highlight {
background-color: rgba(255, 204, 0, 0.333);
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
opacity: 1;
width: 20px;
padding: 0 1px;
border-radius: 4px;
text-align: center;
}
table.dataTable thead .sorting:after {
opacity: 0.6;
}
table.dataTable thead th:hover.sorting::after,
table.dataTable thead th:hover.sorting_asc::after,
table.dataTable thead th:hover.sorting_desc::after,
table.dataTable thead th:hover.sorting_asc_disabled::after,
table.dataTable thead th:hover.sorting_desc_disabled::after {
color: #fff;
background: #000;
}
#domain-frequency .table-responsive table tr th:nth-child(3),
#domain-frequency .table-responsive table tr td:nth-child(3),
#ad-frequency .table-responsive table tr th:nth-child(3),
#ad-frequency .table-responsive table tr td:nth-child(3) {
width: 146px;
text-align: center;
}
#network-entries td {
border-color: #bbb;
}
.network-never {
background-color: var(--network-never);
}
.network-recent {
background-color: var(--network-recent);
}
.network-old {
background-color: var(--network-old);
}
.network-older {
background-color: var(--network-older);
}
.network-gradient {
background-image: linear-gradient(to right, var(--network-recent) 0%, var(--network-old) 100%);
}
/* Buttons and controls */
.pagination > .active > a,
.pagination > .active > a:focus,
.pagination > .active > a:hover,
.pagination > .active > span,
.pagination > .active > span:focus,
.pagination > .active > span:hover {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.pagination > .disabled > a,
.pagination > .disabled > a:focus,
.pagination > .disabled > a:hover,
.pagination > .disabled > span,
.pagination > .disabled > span:focus,
.pagination > .disabled > span:hover {
color: #747474;
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
color: #fff;
}
.btn-primary:active,
.btn-primary:focus,
.btn-primary.hover {
background-color: var(--primary-color-darker);
}
.btn-primary:hover {
color: var(--primary-color-darker);
background-color: #fff;
border-color: var(--primary-color-darker);
}
.btn-info {
background: var(--info-color);
border-color: var(--info-color) !important;
}
.btn-danger {
background: var(--danger-color);
border-color: var(--danger-color) !important;
}
.btn-warning {
background: var(--warning-color);
border-color: var(--warning-color) !important;
}
.btn-success {
background: var(--success-color);
border-color: var(--success-color) !important;
}
.btn-default:hover {
color: #fff;
background: #444;
}
.btn-info:hover {
color: var(--info-color);
background: #fff;
}
.btn-danger:hover {
color: var(--danger-color);
background: #fff;
}
.btn-warning:hover {
color: var(--warning-color);
background: #fff;
}
.btn-success:hover {
color: var(--success-color);
background: #fff;
}
.btn-blacklist,
.btn-whitelist {
background-color: #fff;
}
.btn-audit {
color: #90c !important;
background-color: #fff;
}
.btn-blacklist:hover {
background-color: var(--danger-color);
color: #fff !important;
}
.btn-whitelist:hover {
background-color: var(--success-color);
color: #fff !important;
}
.btn-audit:hover {
background-color: #90c;
color: #fff !important;
}
.lookatme {
color: #000 !important;
z-index: 1;
}
.lookatme::after {
background: #eb4;
text-shadow: none;
content: "";
inset: -2px -4px;
z-index: -100;
animation: none;
border-radius: 6px;
}