mirror of
https://github.com/billz/raspap-webgui.git
synced 2023-10-10 13:37:24 +02:00
Merge pull request #1318 from RaspAP/feat/signal-bars
Updates wifi client UI w/ RSSI signal bars
This commit is contained in:
commit
fc95d844f3
230
app/css/all.css
Normal file
230
app/css/all.css
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
/*
|
||||||
|
Name: all.css
|
||||||
|
Author: @billz
|
||||||
|
Author URI: https://github.com/billz
|
||||||
|
Description: Classes shared by all themes
|
||||||
|
License: GNU General Public License v3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Small devices (portrait phones, up to 576px) */
|
||||||
|
@media (max-width: 576px) {
|
||||||
|
.container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
||||||
|
.card .card-header { padding: .75rem .5rem; font-size: 1.0rem; }
|
||||||
|
.row { margin-left: 0rem; margin-right: 0rem; }
|
||||||
|
.col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; }
|
||||||
|
.form-group.col-md-6 { margin-left: -0.5rem; }
|
||||||
|
h4.mt-3 { margin-left: 0.5rem; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-brand-text {
|
||||||
|
text-transform: none;
|
||||||
|
color: #212529;
|
||||||
|
font-size: 2.0rem;
|
||||||
|
font-weight: 500;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h-underlined {
|
||||||
|
border-bottom: 1px solid #e3e6f0;
|
||||||
|
padding-bottom: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-logo {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
font-size: 26pt;
|
||||||
|
margin: 20px 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.7em;
|
||||||
|
color: #858796;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
margin-left: 0.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item-xs {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
margin-left: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-item-wifi {
|
||||||
|
width: 6rem;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-status {
|
||||||
|
border-width: 0;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-status-up {
|
||||||
|
color: #a1ec38 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-status-warn {
|
||||||
|
color: #f6f044 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-status-down {
|
||||||
|
color: #f80107 !important;
|
||||||
|
animation: flash 1s linear infinite;
|
||||||
|
}
|
||||||
|
@keyframes flash {
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.logoutput {
|
||||||
|
width:100%;
|
||||||
|
height: 20rem;
|
||||||
|
border: 1px solid #d1d3e2;
|
||||||
|
border-radius: .35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dhcp-static-leases {
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dhcp-static-lease-row {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-spinner {
|
||||||
|
background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent;
|
||||||
|
min-height: 450px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 576px) {
|
||||||
|
.card-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) 50%;
|
||||||
|
grid-gap: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-off.btn {
|
||||||
|
padding-left: 1.2rem;
|
||||||
|
font-size: 0.9rem!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-on.btn {
|
||||||
|
font-size: 0.9rem!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas#divDBChartBandwidthhourly {
|
||||||
|
height: 350px!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chart-container {
|
||||||
|
height: 150px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbChart {
|
||||||
|
display: flex;
|
||||||
|
height: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
margin-bottom: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.check-hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.check-progress {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-check {
|
||||||
|
color: #90ee90;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-times {
|
||||||
|
color: #ff4500;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.btn.btn-light.js-toggle-password {
|
||||||
|
border: 1px solid lightgrey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signal-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
.signal-icon .signal-bar {
|
||||||
|
width: 4px;
|
||||||
|
border-radius: 1px;
|
||||||
|
opacity: 30%;
|
||||||
|
background: <?php echo $color; ?>;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signal-icon .signal-bar:nth-child(1) { height: 40%; }
|
||||||
|
.signal-icon .signal-bar:nth-child(2) { height: 70%; }
|
||||||
|
.signal-icon .signal-bar:nth-child(3) { height: 100%; }
|
||||||
|
|
||||||
|
.signal-icon.weak .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.medium .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.medium .signal-bar:nth-child(2),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(2),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(3)
|
||||||
|
{ opacity: 100%; }.signal-icon {
|
||||||
|
margin-top: 2px;
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
.signal-icon .signal-bar {
|
||||||
|
width: 4px;
|
||||||
|
border-radius: 1px;
|
||||||
|
opacity: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signal-icon .signal-bar:nth-child(1) { height: 40%; }
|
||||||
|
.signal-icon .signal-bar:nth-child(2) { height: 70%; }
|
||||||
|
.signal-icon .signal-bar:nth-child(3) { height: 100%; }
|
||||||
|
|
||||||
|
.signal-icon.weak .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.medium .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.medium .signal-bar:nth-child(2),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(1),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(2),
|
||||||
|
.signal-icon.strong .signal-bar:nth-child(3)
|
||||||
|
{ opacity: 100%; }
|
||||||
|
|
||||||
|
.gs-edit {
|
||||||
|
border: 1px dashed #ccc;
|
||||||
|
background-color: #f1faee;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption.figure-caption a {
|
||||||
|
color: #858796;
|
||||||
|
}
|
||||||
|
|
||||||
|
button > i.fas {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
@ -12,46 +12,16 @@ Description: Default theme for RaspAP
|
|||||||
License: GNU General Public License v3.0
|
License: GNU General Public License v3.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@import url('all.css');
|
||||||
|
|
||||||
body {
|
body {
|
||||||
color: #212529;
|
color: #212529;
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-underlined {
|
|
||||||
border-bottom: 1px solid #e3e6f0;
|
|
||||||
padding-bottom: 0.3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-header {
|
|
||||||
margin: 20px 0 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-logo {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Small devices (portrait phones, up to 576px) */
|
|
||||||
@media (max-width: 576px) {
|
|
||||||
.container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
|
||||||
.card .card-header { padding: .75rem .5rem; font-size: 1.0rem; }
|
|
||||||
.row { margin-left: 0rem; margin-right: 0rem; }
|
|
||||||
.col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; }
|
|
||||||
.form-group.col-md-6 { margin-left: -0.5rem; }
|
|
||||||
h4.mt-3 { margin-left: 0.5rem; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar {
|
.sidebar {
|
||||||
background-color: #f8f9fc;
|
background-color: #f8f9fc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-brand-text {
|
|
||||||
text-transform: none;
|
|
||||||
color: #212529;
|
|
||||||
font-size: 2.0rem;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .nav-item.active .nav-link {
|
.sidebar .nav-item.active .nav-link {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
@ -122,87 +92,12 @@ i.fa.fa-bars:hover{
|
|||||||
color: #6e707e;
|
color: #6e707e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-item {
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-size: 0.7em;
|
|
||||||
color: #858796;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-value {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
margin-left: 0.7rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-xs {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
margin-left: 0.3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-wifi {
|
|
||||||
width: 6rem;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status {
|
|
||||||
border-width: 0;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-up {
|
|
||||||
color: #a1ec38;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-warn {
|
|
||||||
color: #f6f044;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-down {
|
|
||||||
color: #f80107;
|
|
||||||
animation: flash 1s linear infinite;
|
|
||||||
}
|
|
||||||
@keyframes flash {
|
|
||||||
50% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.logoutput {
|
|
||||||
width:100%;
|
|
||||||
height: 20rem;
|
|
||||||
border: 1px solid #d1d3e2;
|
|
||||||
border-radius: .35rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre.unstyled {
|
pre.unstyled {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dhcp-static-leases {
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dhcp-static-lease-row {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading-spinner {
|
|
||||||
background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent;
|
|
||||||
min-height: 150px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
.card-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: minmax(0, 1fr) 50%;
|
|
||||||
grid-gap: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar.toggled .nav-item .nav-link span {
|
.sidebar.toggled .nav-item .nav-link span {
|
||||||
display: none;
|
display: none;
|
||||||
} .sidebar .nav-item .nav-link i,
|
} .sidebar .nav-item .nav-link i,
|
||||||
@ -214,46 +109,7 @@ pre.unstyled {
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-off.btn {
|
.signal-icon .signal-bar {
|
||||||
padding-left: 1.2rem;
|
background: <?php echo $color; ?>;
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-on.btn {
|
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas#divDBChartBandwidthhourly {
|
|
||||||
height: 350px!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-container {
|
|
||||||
height: 150px;
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table {
|
|
||||||
margin-bottom: 0rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-updated {
|
|
||||||
opacity: 0;
|
|
||||||
color: #90ee90;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-progress {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-check {
|
|
||||||
color: #90ee90;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-times {
|
|
||||||
color: #ff4500;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@ Description: A theme inspired by HackerNews for RaspAP
|
|||||||
License: GNU General Public License v3.0
|
License: GNU General Public License v3.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@import url('all.css');
|
||||||
|
|
||||||
html * {
|
html * {
|
||||||
font-family: Verdana, Geneva, sans-serif;
|
font-family: Verdana, Geneva, sans-serif;
|
||||||
color: #828282;
|
color: #828282;
|
||||||
@ -33,13 +35,8 @@ h5.card-title {
|
|||||||
color: #212529;
|
color: #212529;
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-underlined {
|
|
||||||
border-bottom: 1px solid #e3e6f0;
|
|
||||||
padding-bottom: 0.3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card, .modal-dialog {
|
.card, .modal-dialog {
|
||||||
border-radius: 1px;
|
border-radius: 3px;
|
||||||
border-color: #ff6600;
|
border-color: #ff6600;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,14 +68,6 @@ h5.card-title {
|
|||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-brand-text {
|
|
||||||
text-transform: none;
|
|
||||||
color: #212529;
|
|
||||||
font-size: 2.0rem;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: Verdana, Geneva, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-light hr.sidebar-divider {
|
.sidebar-light hr.sidebar-divider {
|
||||||
padding-top: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
}
|
}
|
||||||
@ -90,38 +79,19 @@ ul.nav-tabs, .nav-tabs .nav-link {
|
|||||||
|
|
||||||
.sidebar .nav-item .nav-link {
|
.sidebar .nav-item .nav-link {
|
||||||
padding: 0.6rem;
|
padding: 0.6rem;
|
||||||
|
margin-left: 0.6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-light .nav-item.active .nav-link {
|
.sidebar-light .nav-item.active .nav-link {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-header {
|
|
||||||
font-size: 26pt;
|
|
||||||
margin: 10px 0 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-logo {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wrapper,#page-wrapper,
|
#wrapper,#page-wrapper,
|
||||||
#wrapper #content-wrapper,
|
#wrapper #content-wrapper,
|
||||||
.nav>li>a,.nav {
|
.nav>li>a,.nav {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Small devices (portrait phones, up to 576px) */
|
|
||||||
@media (max-width: 576px) {
|
|
||||||
.container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
|
||||||
.card .card-header { padding: .75rem .5rem; font-size: 1.0rem; }
|
|
||||||
.row { margin-left: 0rem; margin-right: 0rem; }
|
|
||||||
.col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; }
|
|
||||||
.form-group.col-md-6 { margin-left: -0.5rem; }
|
|
||||||
h4.mt-3 { margin-left: 0.5rem; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-body {
|
.card-body {
|
||||||
background-color: #f6f6ef;
|
background-color: #f6f6ef;
|
||||||
}
|
}
|
||||||
@ -152,60 +122,8 @@ ul.nav-tabs, .nav-tabs .nav-link {
|
|||||||
color: #eee;
|
color: #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-item {
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-size: 0.7em;
|
|
||||||
color: #858796;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-value {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
margin-left: 0.7rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-xs {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
margin-left: 0.3rem;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-wifi {
|
|
||||||
width: 6rem;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logoutput {
|
|
||||||
width: 100%;
|
|
||||||
height: 20rem;
|
|
||||||
border: 1px solid #d1d3e2;
|
|
||||||
border-radius: .35rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status {
|
|
||||||
border-width: 0;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-up {
|
|
||||||
color: #a1ec38!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-warn {
|
|
||||||
color: #f6f044!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-down {
|
|
||||||
color: #f80107!important;
|
|
||||||
animation: flash 1s linear infinite;
|
|
||||||
}
|
|
||||||
@keyframes flash {
|
|
||||||
50% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.fas.fa-circle {
|
.fas.fa-circle {
|
||||||
font-size: 0.5rem;
|
font-size: 0.7rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logoutput {
|
.logoutput {
|
||||||
@ -219,30 +137,6 @@ pre.unstyled {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dhcp-static-leases {
|
|
||||||
margin-top: 1em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dhcp-static-lease-row {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading-spinner {
|
|
||||||
background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent;
|
|
||||||
min-height: 150px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
.card-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: minmax(0, 1fr) 50%;
|
|
||||||
grid-gap: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar.toggled .nav-item .nav-link {
|
.sidebar.toggled .nav-item .nav-link {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: .6rem 1rem;
|
padding: .6rem 1rem;
|
||||||
@ -260,45 +154,7 @@ pre.unstyled {
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-off.btn {
|
.signal-icon .signal-bar {
|
||||||
padding-left: 0.9rem;
|
background: #ff6600;
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-on.btn {
|
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas#divDBChartBandwidthhourly {
|
|
||||||
height: 350px!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-container {
|
|
||||||
height: 150px;
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
.table {
|
|
||||||
margin-bottom: 0rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-updated {
|
|
||||||
opacity: 0;
|
|
||||||
color: #1cc88a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-progress {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-check {
|
|
||||||
color: #90ee90;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-times {
|
|
||||||
color: #ff4500;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@ Description: A dark mode theme for RaspAP
|
|||||||
License: GNU General Public License v3.0
|
License: GNU General Public License v3.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@import url('all.css');
|
||||||
|
|
||||||
html * {
|
html * {
|
||||||
font-family: Helvetica,Arial,sans-serif;
|
font-family: Helvetica,Arial,sans-serif;
|
||||||
color: #afafaf;
|
color: #afafaf;
|
||||||
@ -23,20 +25,9 @@ h5.card-title {
|
|||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-underlined {
|
|
||||||
border-bottom: 1px solid #e3e6f0;
|
|
||||||
padding-bottom: 0.3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-header {
|
.page-header {
|
||||||
padding: 0 20px;
|
|
||||||
border-left: .01rem solid #d2d2d2;
|
border-left: .01rem solid #d2d2d2;
|
||||||
}
|
border-bottom: .01rem solid #d2d2d2;
|
||||||
|
|
||||||
.navbar-logo {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
filter: brightness(70%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-light .nav-item.active .nav-link i {
|
.sidebar-light .nav-item.active .nav-link i {
|
||||||
@ -51,16 +42,6 @@ h5.card-title {
|
|||||||
background-color: #202020;
|
background-color: #202020;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Small devices (portait phones, up to 576px) */
|
|
||||||
@media (max-width: 576px) {
|
|
||||||
.container-fluid, .card-body, .col-md-6 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
|
||||||
.card .card-header { padding: .75rem .5rem; font-size: 1.0rem; }
|
|
||||||
.row { margin-left: 0rem; margin-right: 0rem; }
|
|
||||||
.col-lg-12 { padding-right: 0.25rem; padding-left: 0.25rem; }
|
|
||||||
.form-group.col-md-6 { margin-left: -0.5rem; }
|
|
||||||
h4.mt-3 { margin-left: 0.5rem; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.topbar {
|
.topbar {
|
||||||
background-color: #202020;
|
background-color: #202020;
|
||||||
}
|
}
|
||||||
@ -95,7 +76,6 @@ h5.card-title {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#content, .navbar, .sidebar, .footer, .sticky-footer {
|
#content, .navbar, .sidebar, .footer, .sticky-footer {
|
||||||
background-image: url('/app/img/bg.png');
|
|
||||||
background-attachment: scroll;
|
background-attachment: scroll;
|
||||||
background-repeat: repeat;
|
background-repeat: repeat;
|
||||||
background-size: auto;
|
background-size: auto;
|
||||||
@ -159,18 +139,8 @@ hr {
|
|||||||
border-top: .01rem solid #d2d2d2;
|
border-top: .01rem solid #d2d2d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-header {
|
|
||||||
font-size: 24pt;
|
|
||||||
margin: 10px 0 20px;
|
|
||||||
border-bottom: .01rem solid #d2d2d2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-brand-text {
|
.sidebar-brand-text {
|
||||||
text-transform: none;
|
color: #2b8080 !important;
|
||||||
color: #ac1b3d;
|
|
||||||
font-size: 2.0rem;
|
|
||||||
font-weight: 500;
|
|
||||||
font-family: inherit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ra-raspap:before {
|
.ra-raspap:before {
|
||||||
@ -252,28 +222,6 @@ hr {
|
|||||||
border-right: 1px solid #404040;
|
border-right: 1px solid #404040;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-item {
|
|
||||||
text-transform: uppercase;
|
|
||||||
font-size: 0.7em;
|
|
||||||
color: #858796;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-value {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
margin-left: 0.7rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-xs {
|
|
||||||
font-size: 0.7rem;
|
|
||||||
line-height: 1.5em;
|
|
||||||
margin-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-item-wifi {
|
|
||||||
width: 6rem;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.label-warning {
|
.label-warning {
|
||||||
background-color: #d2d2d2;
|
background-color: #d2d2d2;
|
||||||
}
|
}
|
||||||
@ -367,15 +315,25 @@ color: #d2d2d2 !important
|
|||||||
background-color: #d2d2d2;
|
background-color: #d2d2d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logoutput {
|
.figure-img {
|
||||||
width: 100%;
|
filter: opacity(0.7);
|
||||||
height: 300px;
|
|
||||||
background-color: #202020;
|
|
||||||
border-color: #404040;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tspan, rect {
|
.ra-wireguard:before {
|
||||||
fill: #d2d2d2;
|
color: #404040 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ra-wireguard:hover:before {
|
||||||
|
color: #d1d3e2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar .nav-item.active .nav-link span.ra-wireguard:before {
|
||||||
|
color: #d2d2d2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logoutput {
|
||||||
|
background-color: #202020;
|
||||||
|
border-color: #404040;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-muted {
|
.text-muted {
|
||||||
@ -383,29 +341,7 @@ tspan, rect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fas.fa-circle {
|
.fas.fa-circle {
|
||||||
font-size: 0.5rem;
|
font-size: 0.7rem;
|
||||||
}
|
|
||||||
|
|
||||||
.service-status {
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-up {
|
|
||||||
color: #a1ec38 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-warn {
|
|
||||||
color: #f6f044 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-status-down {
|
|
||||||
color: #f80107 !important;
|
|
||||||
animation: flash 1s linear infinite;
|
|
||||||
}
|
|
||||||
@keyframes flash {
|
|
||||||
50% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
@ -413,74 +349,12 @@ pre {
|
|||||||
border: #202020;
|
border: #202020;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dhcp-static-leases {
|
button.btn.btn-light.js-toggle-password {
|
||||||
margin-top: 1em;
|
border: 1px solid #343434;
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dhcp-static-lease-row {
|
|
||||||
margin-top: 0.5em;
|
.signal-icon .signal-bar {
|
||||||
margin-bottom: 0.5em;
|
background: #2b8080;
|
||||||
}
|
|
||||||
|
|
||||||
.loading-spinner {
|
|
||||||
background: url("../../app/img/loading-spinner.gif") no-repeat scroll center center transparent;
|
|
||||||
min-height: 150px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 576px) {
|
|
||||||
.card-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: minmax(0, 1fr) 50%;
|
|
||||||
grid-gap: 1rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-off.btn {
|
|
||||||
padding-left: 1.2rem;
|
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toggle-on.btn {
|
|
||||||
font-size: 0.9rem!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas#divDBChartBandwidthhourly {
|
|
||||||
height: 350px!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-container {
|
|
||||||
height: 150px;
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table {
|
|
||||||
margin-bottom: 0rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.figure, .authors {
|
|
||||||
filter: brightness(70%) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-updated {
|
|
||||||
opacity: 0;
|
|
||||||
color: #1cc88a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.check-progress {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-check {
|
|
||||||
color: #90ee90;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fa-times {
|
|
||||||
color: #ff4500;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB |
BIN
app/img/bg.png
BIN
app/img/bg.png
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB |
@ -480,18 +480,18 @@ Array.range = (start, end) => Array.from({length: (end - start)}, (v, k) => k +
|
|||||||
$(document).on("click", ".js-toggle-password", function(e) {
|
$(document).on("click", ".js-toggle-password", function(e) {
|
||||||
var button = $(e.target)
|
var button = $(e.target)
|
||||||
var field = $(button.data("target"));
|
var field = $(button.data("target"));
|
||||||
|
|
||||||
if (field.is(":input")) {
|
if (field.is(":input")) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
if (!button.data("__toggle-with-initial")) {
|
if (!button.data("__toggle-with-initial")) {
|
||||||
button.data("__toggle-with-initial", button.text())
|
$("i", this).removeClass("fas fa-eye").addClass(button.attr("data-toggle-with"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field.attr("type") === "password") {
|
if (field.attr("type") === "password") {
|
||||||
button.text(button.data("toggle-with"));
|
|
||||||
field.attr("type", "text");
|
field.attr("type", "text");
|
||||||
} else {
|
} else {
|
||||||
button.text(button.data("__toggle-with-initial"));
|
$("i", this).removeClass("fas fa-eye-slash").addClass("fas fa-eye");
|
||||||
field.attr("type", "password");
|
field.attr("type", "password");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
require_once 'functions.php';
|
require_once 'functions.php';
|
||||||
|
|
||||||
|
const MIN_RSSI = -100;
|
||||||
|
const MAX_RSSI = -55;
|
||||||
|
|
||||||
function knownWifiStations(&$networks)
|
function knownWifiStations(&$networks)
|
||||||
{
|
{
|
||||||
// Find currently configured networks
|
// Find currently configured networks
|
||||||
@ -191,7 +194,42 @@ function reinitializeWPA($force)
|
|||||||
*
|
*
|
||||||
* @param string $ssid
|
* @param string $ssid
|
||||||
*/
|
*/
|
||||||
function ssid2utf8($ssid) {
|
function ssid2utf8($ssid)
|
||||||
|
{
|
||||||
return evalHexSequence($ssid);
|
return evalHexSequence($ssid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a signal strength indicator based on RSSI value
|
||||||
|
*
|
||||||
|
* @param string $rssi
|
||||||
|
*/
|
||||||
|
function getSignalBars($rssi)
|
||||||
|
{
|
||||||
|
// assign css class based on RSSI value
|
||||||
|
if ($rssi >= MAX_RSSI) {
|
||||||
|
$class = 'strong';
|
||||||
|
} elseif ($rssi >= -56) {
|
||||||
|
$class = 'medium';
|
||||||
|
} elseif ($rssi >= -67) {
|
||||||
|
$class = 'weak';
|
||||||
|
} elseif ($rssi >= -89) {
|
||||||
|
$class = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate percent strength
|
||||||
|
if ($rssi >= -50) {
|
||||||
|
$pct = 100;
|
||||||
|
} elseif ($rssi <= MIN_RSSI) {
|
||||||
|
$pct = 0;
|
||||||
|
} else {
|
||||||
|
$pct = 2*($rssi + 100);
|
||||||
|
}
|
||||||
|
$elem = '<div data-toggle="tooltip" title="' . _("Signal strength"). ': ' .$pct. '%" class="signal-icon ' .$class. '">'.PHP_EOL;
|
||||||
|
for ($n = 0; $n < 3; $n++ ) {
|
||||||
|
$elem .= '<div class="signal-bar"></div>'.PHP_EOL;
|
||||||
|
}
|
||||||
|
$elem .= '</div>'.PHP_EOL;
|
||||||
|
return $elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -24,8 +24,10 @@
|
|||||||
<h4 class="card-title"><?php echo _("Hourly traffic amount"); ?></h4>
|
<h4 class="card-title"><?php echo _("Hourly traffic amount"); ?></h4>
|
||||||
<div id="divInterface" class="d-none"><?php echo $apInterface; ?></div>
|
<div id="divInterface" class="d-none"><?php echo $apInterface; ?></div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
<div class="col dbChart">
|
||||||
<canvas id="divDBChartBandwidthhourly"></canvas>
|
<canvas id="divDBChartBandwidthhourly"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div><!-- /.card-body -->
|
</div><!-- /.card-body -->
|
||||||
</div><!-- /.card-->
|
</div><!-- /.card-->
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<?php if (strlen($network['ssid']) == 0) {
|
<?php if (strlen($network['ssid']) == 0) {
|
||||||
$network['ssid'] = "(unknown)";
|
$network['ssid'] = "(unknown)";
|
||||||
} ?>
|
} ?>
|
||||||
<h5 class="card-title"><?php echo htmlspecialchars($network['ssidutf8'], ENT_QUOTES); ?></h5>
|
<h5 class="card-title"><i class="fas fa-wifi mr-2"></i><?php echo htmlspecialchars($network['ssidutf8'], ENT_QUOTES); ?></h5>
|
||||||
<div class="info-item-wifi"><?php echo _("Status"); ?></div>
|
<div class="info-item-wifi"><?php echo _("Status"); ?></div>
|
||||||
<div>
|
<div>
|
||||||
<?php if ($network['configured']) { ?>
|
<?php if ($network['configured']) { ?>
|
||||||
@ -29,18 +29,11 @@
|
|||||||
|
|
||||||
<div class="info-item-wifi"><?php echo _("RSSI"); ?></div>
|
<div class="info-item-wifi"><?php echo _("RSSI"); ?></div>
|
||||||
<div>
|
<div>
|
||||||
<?php
|
<?php if (isset($network['RSSI']) && $network['RSSI'] >= -200) {
|
||||||
if (isset($network['RSSI']) && $network['RSSI'] >= -200) {
|
echo '<div class="d-flex justify-content-start">';
|
||||||
echo htmlspecialchars($network['RSSI'], ENT_QUOTES);
|
echo getSignalBars($network['RSSI']);
|
||||||
echo "dB (";
|
echo '<div class="ml-2">' .htmlspecialchars($network['RSSI'], ENT_QUOTES) . "dB" . "</div>";
|
||||||
if ($network['RSSI'] >= -50) {
|
echo '</div>';
|
||||||
echo 100;
|
|
||||||
} elseif ($network['RSSI'] <= -100) {
|
|
||||||
echo 0;
|
|
||||||
} else {
|
|
||||||
echo 2*($network['RSSI'] + 100);
|
|
||||||
}
|
|
||||||
echo "%)";
|
|
||||||
} else {
|
} else {
|
||||||
echo " not found ";
|
echo " not found ";
|
||||||
}
|
}
|
||||||
@ -56,14 +49,14 @@
|
|||||||
<div><?php echo empty($network['protocol']) ? "-" : $network['protocol'] ?></div>
|
<div><?php echo empty($network['protocol']) ? "-" : $network['protocol'] ?></div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="info-item-wifi"><?php echo _("Passphrase"); ?></div>
|
<div class="info-item-wifi mb-2"><?php echo _("Passphrase"); ?></div>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<?php if ($network['protocol'] === 'Open') { ?>
|
<?php if ($network['protocol'] === 'Open') { ?>
|
||||||
<input type="password" disabled class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="" />
|
<input type="password" disabled class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="" />
|
||||||
<?php } else { ?>
|
<?php } else { ?>
|
||||||
<input type="password" class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="<?php echo $network['passphrase'] ?>" data-target="#update<?php echo $index ?>" data-colors="#ffd0d0,#d0ffd0">
|
<input type="password" class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="<?php echo $network['passphrase'] ?>" data-target="#update<?php echo $index ?>" data-colors="#ffd0d0,#d0ffd0">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<button class="btn btn-outline-secondary js-toggle-password" type="button" data-target="[name=passphrase<?php echo $index ?>]" data-toggle-with="<?php echo _("Hide") ?>">Show</button>
|
<button class="btn btn-light js-toggle-password" type="button" data-target="[name=passphrase<?php echo $index ?>]" data-toggle-with="fas fa-eye-slash"><i class="fas fa-eye mx-2"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user