diff --git a/install.sh b/install.sh
index 57a5281ad..094bab316 100644
--- a/install.sh
+++ b/install.sh
@@ -2,8 +2,22 @@
alias=r1
+# 20220527
+if [[ $( pacman -Q camilladsp 2> /dev/null ) == 'camilladsp 0.6.3-1' ]]; then
+ systemctl stop camilladsp camillagui
+ pacman -R --noconfirm camillagui
+ pacman -Sy --noconfirm camilladsp camillagui-backend python-pycamilladsp python-pycamilladsp-plot
+ rm -rf /srv/http/settings/camillagui/build
+ mkdir /srv/http/settings/camillagui/build
+ ln -sf /srv/http/assets/fonts /srv/http/settings/camillagui/build
+fi
+if grep -q 'force user = mpd' /etc/samba/smb.conf; then
+ sed -i 's/\(force user = \).*/\1http/' /etc/samba/smb.conf
+ systemctl try-restart smb
+fi
+
# 20220505
-[[ ! -e /srv/http/data/system/asoundcard ]] && cp /srv/http/data/{shm,system}/asoundcard
+[[ ! -e /srv/http/data/system/asoundcard && ! -e /srv/http/data/shm/nosound ]] && cp /srv/http/data/{shm,system}/asoundcard
dir=/srv/http/shareddata
if [[ -e $dir ]]; then
diff --git a/srv/http/assets/css/camillagui.css b/srv/http/assets/css/camillagui.css
deleted file mode 100644
index 955b5cb35..000000000
--- a/srv/http/assets/css/camillagui.css
+++ /dev/null
@@ -1,687 +0,0 @@
-@font-face {
- font-family: rern;
- src: url( '../fonts/rern.woff2' ) format( 'woff2' );
- font-display: block;
- font-style: normal;
- font-weight: normal;
-}
-@font-face {
- font-family: Lato;
- src: url( '../fonts/Lato-Regular.woff2' ) format( 'woff2' );
- font-weight: normal;
- font-style: normal;
-}
-@font-face {
- font-family: Lato;
- src: url( '../fonts/Lato-Light.woff2' ) format( 'woff2' );
- font-weight: 300;
- font-style: normal;
-}
-@font-face {
- font-family: Inconsolata;
- src: url('../fonts/Inconsolata.woff2') format('woff2');
- font-weight: normal;
- font-style: normal;
-}
-.fa {
- display: inline-block;
- font-family: rern;
- font-style: normal;
-}
-.fa-camilladsp::before { content: '\f59D'; position: absolute; color: var( --cg75 ); }
-.fa-camilladsp::after { content: '\f59C'; position: relative; }
-.fa-help::before { content: '\f560' }
-.fa-info-circle::before { content: '\f561' }
-.fa-times::before { content: '\f51A' }
-
-.css-variables {
- --background-color: var( --cg );
- --button-add-icon-color: #46c846;
- --button-background-color: var( --cg );
- --error-field-background-color: #bb2828 !important;
- --border-radius: 3px;
- --gain-color: hsl( 200 100% 45% );
- --phase-color: hsl( 0 40% 55% );
- --success-text-color: var( --cml );
-}
-body {
- padding-top: 40px;
- font-family: Lato;
- font-size: 16px;
- color: var( --cw );
- background: #000000;
-}
-#root {
- max-width: 700px;
- margin: auto;
-}
-/* head + help ------------------------------------------------------------------ */
-.head {
- position: fixed;
- top: 0;
- width: 100%;
- height: 40px;
- line-height: 40px;
- background: var( --cga );
- box-shadow: 0px 4px 10px #000000;
- z-index: 10;
-}
-.head .page-icon {
- float: left;
- width: 40px;
- height: 40px;
- font-size: 24px;
- line-height: 38px;
- text-align: center;
- background: var( --cm );
-}
-.head span {
- margin-left: 15px;
- font-size: 26px;
- font-weight: 300;
- letter-spacing: 20px;
-}
-#help {
- float: right;
- margin-right: 5px;
- font-size: 24px;
- color: var( --cg60 );
-}
-#close {
- float: right;
- font-size: 30px;
- color: var( --cm );
-}
-.head i {
- width: 40px;
- height: 40px;
- text-shadow: -1px 0 2px #000000;
-}
-#divhelp {
- position: sticky;
- top: 40px;
- max-width: 720px;
- margin: auto;
- padding: 20px;
- text-align: right;
- background: #000000;
-}
-#divhelp a {
- color: var( --cg60 );
- text-decoration: none;
-}
-#divhelp i {
- color: var( --cg60 );
-}
-#divhelp i {
- margin: 0 2px
-}
-#logo {
- position: absolute;
- font-size: 14px;
- text-align: left;
- color: var( --cg60 );
-}
-#logo img {
- width: 145px;
- margin-bottom: 5px;
-}
-#version {
- font-size: 12px;
-}
-/* common --------------------------------------------------------------------- */
-/* main container */
-.configapp {
- display: block;
- padding: 5px 0;
-}
-.configapp:after {
- display: block;
- content: '';
- clear: both;
-}
-.box {
- margin: 5px 0;
- padding: 10px;
- border: 1px solid var( --cg );
-}
-legend {
- width: fit-content;
- font-size: 18px;
- letter-spacing: 2px;
-}
-legend label {
- font-size: 16px;
- letter-spacing: 0;
-}
-.two-column-grid {
- width: fit-content;
- margin: auto;
-}
-.setting,
-.alignRight {
- color: var( --cg60 );
-}
-hr {
- border: none;
-}
-/* ---------------------------------------------------------------------------- */
-input,
-select {
- margin: 4px 0;
- padding: 0 5px !important;
- font-family: Lato;
- font-size: 16px;
- border: solid 1px var( --cgl ) !important;
-}
-input[type=text] {
- width: 150px !important;
-}
-input[data-tip='Mixer name, must be unique'] {
- width: 150px !important;
-}
-select {
- width: 100% !important;
- max-width: 175px;
- padding: 0 !important;
-}
-input[type=number] {
- width: 70px !important;
-}
-input[type=checkbox] {
- -webkit-appearance: none;
- width: 24px;
- height: 24px;
- margin: 4px 0 !important;
- vertical-align: -12px;
- border: none;
- border-radius: 3px;
- background-color: var(--cg) !important;
- background: radial-gradient( 160% 100% at 50% -50%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
- background: -webkit-radial-gradient( 50% -50%, 160% 200%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
-}
-input:checked {
- background-color: var( --cm ) !important;
-}
-input[type=text]:focus {
- outline: solid 2px var( --cg60 );
-}
-input[type=range] {
- --gloss: radial-gradient( 225% 90% at 100% 0%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
- --wkgloss: -webkit-radial-gradient( 100% 0%, 225% 90%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
- --track: linear-gradient( 90deg, transparent 10px, var( --cg ) 10px, var( --cg ) calc( 100% - 10px ), transparent 10px );
- --trackborder : 1px solid var( --cgd );
- display: block;
- width: 270px !important;
- height: 4px;
- margin: 24px auto !important;
- padding: 0 9px !important;
- background-color: var( --cga ) !important;
- -webkit-appearance: none;
-}
-@supports (-moz-appearance:none) {
- input[type=range] { padding: 0 !important }
-}
-input[type=range]::-webkit-slider-thumb {
- height: 36px;
- width: 36px;
- margin-top: -18px;
- border: none;
- border-radius: 3px;
- background: var( --gloss );
- background: var( --wkgloss );
- background-color: var( --cm );
- -webkit-appearance: none;
- box-shadow: -2px 2px 4px #000000;
-}
-input[type=range]::-moz-range-thumb {
- height: 36px;
- width: 36px;
- border: none;
- border-radius: 3px;
- background: var( --gloss );
- background: var( --wkgloss );
- background-color: var( --cm );
- box-shadow: -2px 2px 4px #000000;
-}
-input[type=range]::-webkit-slider-runnable-track {
- width: 100%;
- margin: -10px;
- height: 4px;
- background: var( --track );
- border: var( --trackborder );
-}
-input[type=range]:focus::-webkit-slider-runnable-track {
- background: var( --track );
-}
-input[type=range]::-moz-range-track {
- width: 100%;
- height: 2px;
- background: var( --track );
- border: var( --trackborder );
-}
-input[type=range]:disabled::-webkit-slider-thumb {
- background-color: var( --cmd );
-}
-input[type=range]:disabled::-moz-range-thumb {
- background-color: var( --cmd );
-}
-
-/* ---------------------------------------------------------------------------- */
-.button {
- border: none;
- background-color: var( --cg ) !important;
- background: radial-gradient( 160% 100% at 50% -50%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
- background: -webkit-radial-gradient( 50% -50%, 160% 200%, hsla(0,0%,100%,.3) 50%, hsla(0,0%,100%,0) 55% );
- text-shadow: -1px 1px 2px #000000;
- width:36px;
- height: 36px;
-}
-.highlighted-button,
-.highlighted-button:active {
- background-color: var( --cm ) !important;
-}
-svg {
- -webkit-filter: drop-shadow( -1px 1px 2px #000000 );
- filter: drop-shadow( -1px 1px 2px #000000 );
-}
-.smallbutton {
- width: 36px !important;
- height: 36px !important;
-}
-.smallbutton svg {
- width: 36px !important;
-}
-.button-with-text {
- padding: 0px 10px;
- font-size: 16px;
- justify-content: left;
- text-shadow: -1px 1px 2px #000000;
-}
-.button[data-tip]:not(.highlighted-button) {
- background-color: var( --cg );
-}
-/* volume + status ------------------------------------------------------------ */
-section.tabpanel {
- position: fixed;
- display: block;
- float: left;
- width: 270px !important;
- margin: auto;
- padding: 16px 10px 0 10px;
-}
-section.tabpanel img {
- display: none;
-}
-section.tabpanel .smallbutton {
- margin-top: -20px;
-}
-section.tabpanel .box {
- position: relative;
- max-width: calc( 100vw - 50px );
- margin-bottom: 20px;
- padding: 10px 0;
- border: none;
-}
-section.tabpanel legend {
- padding: 0;
-}
-section.tabpanel legend .horizontally-spaced-content {
- width: 270px;
- border-bottom: 1px solid var( --cg );
-}
-/* vu + volume bar */
-section.tabpanel .split-20-80 {
- grid-template-columns: 14% 85%;
- column-gap: 0;
- line-height: 15px;
-}
-.split-20-80 div:first-child {
- display: flex;
- height: 100%;
- align-items: center;
- justify-content: right;
- padding-right: 5px;
- background: #000000;
- z-index: 1;
-}
-section.tabpanel .split-20-80 svg {
- position: relative;
- margin: 0 -1px 0 -3px;
-}
-.rc-progress-line-path {
- stroke-width: 2;
- stroke: var( --cml );
-}
-.rc-progress-line-trail {
- stroke-width: 2;
- stroke: var( --cg );
-}
-
-section .horizontally-spaced-content:first-of-type div:first-child {
- width: 100% !important;
- font-family: Inconsolata;
- font-size: 16px;
- font-weight: 300;
- letter-spacing: 0;
-}
-section.tabpanel .box:last-of-type div:not([class]):first-of-type {
- width: 250px !important;
- padding: 0 10px;
- font-family: Inconsolata;
- line-height: 26px;
- background: var( --cga );
-}
-section.tabpanel .box:last-of-type div:not([class]):nth-of-type( 3 ) {
- padding-top: 10px;
- text-align: left !important;
- color: var( --cg60 );
-}
-section.tabpanel .box:last-of-type div:not([class]):nth-of-type( 3 ) input {
- float: left;
- margin: -3px 6px 0 0 !important;
-}
-section.tabpanel .box:last-of-type .two-column-grid {
- display: block;
- margin-top: 15px;
- text-align: center;
-}
-
-/* Fetch and Apply button */
-section .two-column-grid:nth-of-type( 2 ) {
- display: block;
- text-align: center;
-}
-section:first-of-type .button-with-text {
- display: inline-block;
- width: 70px !important;
- height: 34px;
- margin: 0 5px;
- font-size: 14px;
- line-height: 34px;
- text-align: center;
-}
-section.tabpanel .box:nth-last-of-type( 2 ) .button {
- position: absolute;
- top: -41px;
- left: 105px;
- width: 40px !important;
- padding-top: 7px;
- line-height: 0;
- background: none !important;
- color: transparent;
- text-shadow: none;
-}
-section.tabpanel .box:nth-last-of-type( 2 ) .button:before {
- content: '\f50A';
- font-family: rern;
- font-size: 18px;
- line-height: 20px;
- color: var( --cg60 );
-}
-section.tabpanel .box:nth-last-of-type( 2 ) .button:hover {
- background: none !important;
-}
-section.tabpanel .box:last-of-type .button {
- white-space: break-spaces;
- overflow: hidden;
- width: 75px !important;
- padding: 0px 20px;
-}
-section.tabpanel .box:last-of-type .button:last-of-type {
- background-color: var( --cm ) !important;
-}
-.config-status {
- position: absolute;
- top: -31px;
- right: -4px;
- font-family: Inconsolata;
- font-weight: bold;
-}
-.versions {
- display: none;
-}
-/* config ----------------------------------------------------------------- */
-.configtabs {
- display: block;
- width: 410px;
- max-width: 100vw;
- margin-left: 300px !important;
- padding: 0;
-}
-.configtabs .tabpanel {
- width: 400px !important;
- min-height: calc( 100vh - 140px );
- padding: 50px 5px 40px 5px;
- background: var( --cgd );
-}
-.react-tabs__tab-list {
- position: fixed;
- width: 410px;
- margin-top: -6px;
- padding-top: 10px;
- background: #000000;
- box-shadow: 0px 4px 10px #000000;
- border: none;
- z-index: 1;
-}
-.react-tabs__tab {
- position: static;
- width: calc( 100% / 5 - 1px );
- padding: 0;
- line-height: 36px;
- text-align: center;
- text-shadow: -1px 1px 2px #000000;
- background: var( --cga);
- border: none;
- border-radius: 5px 5px 0 0;
- border-right: 1px solid #000000;
-}
-.react-tabs__tab-panel:nth-of-type( 5 ) {
- width: calc( 100% / 5 );
- border: none;
-}
-.react-tabs__tab-list .react-tabs__tab--selected {
- background: var( --cgl );
-}
-.react-tabs__tab-list span {
- display: none;
-}
-/* Devices ------------------------------ */
-.react-tabs__tab-panel:nth-of-type( 1 ) .setting-label {
- width: 50%;
- min-width: 160px;
-}
-.react-tabs__tab-panel:nth-of-type( 1 ) input:not[type=checkbox] {
- width: 100% !important;
- max-width: 150px;
-}
-.react-tabs__tab-panel:nth-of-type( 1 ) select {
- width: 100% !important;
- max-width: 170px;
-}
-/* Filters ------------------------------- */
-label.setting[style*="text-align"] {
- text-align: left !important;
-}
-label.setting select:first-child {
- width: 125px !important;
- margin-left: 23px;
-}
-.react-tabs__tab-panel:nth-of-type( 2 ) .button[data-tip*="Delete"] {
- margin-top: auto;
-}
-/* Mixers ------------------------------- */
-.react-tabs__tab-panel:nth-of-type( 3 ) div[style*='display: flex; justify-content: space-evenly;'] {
- margin: 10px 0;
- padding: 0 25px 0 15px;
- background: var( --cga );
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) select {
- max-width: 200px;
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) legend .setting-label {
- min-width: 35px;
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) .horizontally-spaced-content legend .setting-label {
- min-width: 130px;
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) .setting-label {
- letter-spacing: 0;
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) .box .box input {
- width: 60px !important;
-}
-.react-tabs__tab-panel:nth-of-type( 3 ) .horizontally-spaced-content div svg {
- width: 36px !important;
-}
-/* Pipeline ----------------------------- */
-.react-tabs__tab-panel:nth-of-type( 4 ) legend {
- margin-bottom: 5px;
- padding-left: 0;
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) legend label {
- margin-left: -4px;
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) select {
- width: 170px !important;
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) input[type=number] {
- width: 50px !important;
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) .dropTargetParent > div > div:not(.horizontally-spaced-content) {
- position: absolute;
- top: 9px;
- left: 35px;
- letter-spacing: normal;
- color: var( --cw ) !important;
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) .pipeline-channel {
- width: 100%;
- margin: 10px auto;
- line-height: 26px;
- letter-spacing: 2px;
- background: var( --cga );
-}
-.react-tabs__tab-panel:nth-of-type( 4 ) .box > div > .horizontally-spaced-content:last-of-type {
- margin-top: 10px;
-}
-/* Files -------------------------------- */
-.react-tabs__tab-panel:nth-of-type( 5 ) .button-with-text {
- width: 100% !important;
- height: 36px;
-}
-.react-tabs__tab-panel:nth-of-type( 5 ) div:not([class]) {
- max-width: 215px !important;
-}
-.react-tabs__tab-panel:nth-of-type( 5 ) div:not([class]) .button-with-text {
- display: block;
- font-family: Inconsolata;
- line-height: 36px;
- text-align: center;
-}
-.react-tabs__tab-panel:nth-of-type( 5 ) input[type=text] {
- width: 100% !important;
- font-family: Inconsolata;
-}
-/* popup --------------------------------- */
-#popup-root h3 {
- font-size: 18px;
- font-weight: normal;
-}
-textarea {
- padding: 5px;
- border: none;
- background: var( --cgd );
- font-family: Inconsolata;
- font-size: 15px;
- color: var( --cw );
-}
-textarea:focus-visible {
- outline: none;
-}
-.popup-overlay {
- background: rgba( 0, 0, 0, .85 );
-}
-.popup-content {
- padding: 0;
- border: none !important;
- border-radius: 6px !important;
- background-color: var( --cgd ) !important;
- box-shadow: 0px 0px 5px var( --cgl );
-}
-.popup-content div:not([class]) {
- float: right;
- text-align: center !important;
- color: transparent;
-}
-/* ---------------------------------------------------------------------------- */
-@media (max-width: 719px) {
- #divhelp { margin: 0 20px }
- section.tabpanel {
- position: relative;
- float: none;
- min-width: 380px !important;
- margin: auto;
- padding: 0;
- }
- section.tabpanel legend .horizontally-spaced-content {
- width: 380px;
- padding-top: 15px;
- }
- section.tabpanel .split-20-80 {
- margin-left: 55px;
- width: 270px;
- }
- .configtabs .tabpanel {
- width: 400px !important;
- padding: 15px 5px 5px 5px;
- }
- .configapp > :last-child {
- float: none;
- margin: 0 auto !important;
- }
- .react-tabs__tab-list {
- position: sticky;
- top: 80px;
- background: #000;
- padding-top: 10px;
- }
- .popup-content {
- width: 100% !important;
- min-width: 100%;
- }
-}
-@media (max-width: 490px) {
- .head span {
- margin-left: 10px;
- letter-spacing: calc( 100vw / 30 - 1px );
- }
-}
-@media (max-width: 440px) {
- .head span {
- letter-spacing: calc( 100vw / 50 - 3px );
- }
- .two-column-grid .alignRight {
- width: fit-content;
- }
- .react-tabs__tab-panel:nth-of-type( 5 ) div:not([class]) {
- max-width: calc( 100vw - 180px ) !important;
- }
-}
-/* ---------------------------------------------------------------------------- */
-.button:hover {
- background-color: var( --cga ) !important;
- border: none;
-}
-.highlighted-button:hover,
-section:first-of-type .button-with-text:nth-of-type( 2 ):hover {
- background-color: var( --cma ) !important;
-}
-.head i,
-#divhelp i,
-#logo,
-input[type=range] {
- cursor: pointer;
-}
-
diff --git a/srv/http/assets/css/common.css b/srv/http/assets/css/common.css
index f351dd6e7..3202021ae 100644
--- a/srv/http/assets/css/common.css
+++ b/srv/http/assets/css/common.css
@@ -121,7 +121,7 @@ input::-moz-focus-inner {
.fa-btreceiver::before { content: '\f595' }
.fa-btsender::before { content: '\f596' }
.fa-brush::before { content: '\f536' }
-.fa-camilladsp::before {content: '\f59D'; position: absolute; color: var( --cg60 ); }
+.fa-camilladsp::before {content: '\f59D'; position: absolute; color: var( --cg60 ); text-shadow: none; }
.fa-camilladsp::after {content: '\f59C'; position: relative; } /* position: relative - fix order */
.fa-capslock:before { content: '\f607' }
.fa-check::before { content: '\f51B' }
diff --git a/srv/http/assets/img/camilladsp.svg b/srv/http/assets/img/camilladsp.svg
new file mode 100644
index 000000000..1cfe1a0a1
--- /dev/null
+++ b/srv/http/assets/img/camilladsp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/srv/http/assets/js/main.js b/srv/http/assets/js/main.js
index 1b307de1c..1c37cba08 100644
--- a/srv/http/assets/js/main.js
+++ b/srv/http/assets/js/main.js
@@ -157,7 +157,7 @@ $( '#settings' ).on( 'click', '.submenu', function() {
switch ( this.id ) {
case 'camilladsp':
bash( 'systemctl start camillagui', function() {
- urlReachable( 'http://'+ location.host +':5005' );
+ urlReachable( 'http://'+ location.host +':5000' );
} );
loader();
break;
diff --git a/srv/http/bash/cmd.sh b/srv/http/bash/cmd.sh
index 0bd8f8d0c..a48e74d8e 100644
--- a/srv/http/bash/cmd.sh
+++ b/srv/http/bash/cmd.sh
@@ -973,6 +973,11 @@ plsimilar )
;;
power )
action=${args[1]}
+ if [[ $action == reboot ]]; then
+ pushstreamNotifyBlink Power 'Reboot ...' reboot
+ else
+ pushstreamNotify Power 'Off ...' 'power blink' 10000
+ fi
touch $dirshm/power
mpc -q stop
pushstream btreceiver false
@@ -989,11 +994,6 @@ power )
sleep 2
fi
systemctl -q is-active camilladsp && $dirbash/settings/camilladsp-gain.py
- if [[ $action == reboot ]]; then
- pushstreamNotifyBlink Power 'Reboot ...' reboot
- else
- pushstreamNotify Power 'Off ...' 'power blink' 10000
- fi
ply-image /srv/http/assets/img/splash.png &> /dev/null
if mount | grep -q /mnt/MPD/NAS; then
umount -l /mnt/MPD/NAS/* &> /dev/null
diff --git a/srv/http/bash/settings/camilladsp-setformat.sh b/srv/http/bash/settings/camilladsp-setformat.sh
index e3785a59c..62fcb14dd 100644
--- a/srv/http/bash/settings/camilladsp-setformat.sh
+++ b/srv/http/bash/settings/camilladsp-setformat.sh
@@ -31,6 +31,9 @@ if [[ $formatok ]]; then
sleep 1
systemctl start camilladsp
$dirbash/settings/camilladsp-gain.py set
+ defaultyml=$dirdata/camilladsp/configs/default_config.yml
+ lineformat=$( sed -n '/playback:/,/format:/=' $defaultyml | tail -1 )
+ sed -i "$lineformat s/\(format: \).*/\1$format/" $defaultyml
else
pushstreamNotify CamillaDSP "Playback format:
pyCamillaDSP ${ status.py_cdsp_version }
-
Backend ${ status.backend_version }
-`;
-} );
-
-if ( [ 'localhost', '127.0.0.1' ].includes( location.hostname ) ) document.getElementById( 'help' ).classList.add( 'hide' );
-
-document.body.addEventListener( 'click', function( e ) {
- if ( e.target.id === 'close' ) {
- var hostname = location.hostname;
- var http = new XMLHttpRequest();
- http.open( 'POST', 'http://' + hostname + '/cmd.php', true );
- http.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
- http.send( 'cmd=bash&bash=systemctl%20stop%20camillagui' );
- location.href = 'http://' + hostname;
- } else if ( e.target.id === 'help' || e.target.id === 'eqhelp' ) {
- document.getElementById( 'div'+ e.target.id ).classList.toggle( 'hide' );
- }
-});
-
-cacheBusting = () => {
- setTimeout( () => {
- var buttons = document.getElementsByClassName( 'button-with-text' );
- if ( !buttons.length ) {
- cacheBusting();
- return
- }
-
- var hash = '?v='+ Date.now();
- document.querySelectorAll( 'link' ).forEach( ( link ) => {
- link.href = link.href + hash;
- } );
- document.querySelectorAll( 'script' ).forEach( ( script ) => {
- script.src = script.attributes.src.textContent + hash;
- } );
- setTimeout( () => {
- document.body.classList.toggle( 'hide' );
- }, 300 );
- }, 300 );
-}
-cacheBusting();
diff --git a/srv/http/settings/camillagui/build/css-variables.css b/srv/http/settings/camillagui/build/css-variables.css
deleted file mode 100644
index 8ab00dccf..000000000
--- a/srv/http/settings/camillagui/build/css-variables.css
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Dark skin. */
-.css-variables {
-
- /*
- Styling is only supported using the following CSS variables.
- They will be maintained in a backwards-compatible manner as good as possible.
- It is technically possible to add any valid CSS to this file,
- but there are no guarantees with respect to backwards-compatibility.
-
- Variable types:
- - variables ending with -color: any valid CSS color
- - variables ending with -border: any value valid for the CSS border shorthand property (e.g. 1px solid red)
- - border-radius: any positive CSS length/percentage
- - variables ending with -opacity: any positive CSS float value (e.g. 0.5)
- */
-
- /* General */
- --background-color: #202020;
- --text-color: #ddd;
- --error-text-color: #dc4646;
- --error-field-background-color: var(--error-text-color);
- --success-text-color: #46c846;
- --neutral-text-color: #bbb;
- --border-radius: 5px;
-
- /* Buttons */
- --button-icon-color: var(--text-color);
- --button-add-icon-color: var(--success-text-color);
- --button-remove-icon-color: var(--error-text-color);
- --button-text-color: var(--text-color);
- --button-background-color: #333;
- --button-border: 2px solid rgb(70, 70, 70);
- --hovered-button-background-color: #444;
- --hovered-button-border: 2px solid #bbb;
- --active-button-background-color: #555;
- --active-button-border: 2px solid #ddd;
- --disabled-button-opacity: 0.4;
- --disabled-button-background-color: var(--button-background-color);
- --disabled-button-border: var(--button-border);
- --highlighted-button-background-color: #242;
- --highlighted-button-border: 2px solid #4b4;
-
- /* Boxes */
- --box-border-width: 2px;
- --box-border-color: rgb(70, 70, 70);
- --box-border: var(--box-border-width) solid var(--box-border-color);
-
- /* Inputs */
- --input-border: 2px solid rgba(70, 70, 70, 0.5);
- --focused-input-border: 2px solid var(--success-text-color);
-
- /* Filter plot */
- --axes-color: #555;
- --gain-color: #4646f0;
- --phase-color: var(--error-text-color);
- --impulse-color: var(--success-text-color);
-
- /* Pipeline plot */
- --arrow-color: var(--axes-color);
- --frame-background-color: #333;
- --block-background-color: rgb(200, 200, 200);
- --block-text-color: rgb(16, 10, 90);
-}
-
-/*
- Bright skin (black/white)
- Rename to .css-variables to enable
-*/
-.css-variables-disabled {
-
- /* General */
- --background-color: white;
- --text-color: black;
- --error-text-color: #f00;
- --error-field-background-color: var(--error-text-color);
- --success-text-color: #0c0;
- --neutral-text-color: #bbb;
- --border-radius: 5px;
-
- /* Buttons */
- --button-icon-color: var(--text-color);
- --button-add-icon-color: var(--success-text-color);
- --button-remove-icon-color: var(--error-text-color);
- --button-text-color: var(--text-color);
- --button-background-color: #f3f3f3;
- --button-border: 1px inset #9090B0;
- --hovered-button-background-color: #ddd;
- --hovered-button-border: var(--button-border);
- --active-button-background-color: #aaa;
- --active-button-border: var(--button-border);
- --disabled-button-opacity: 1.0;
- --disabled-button-background-color: #aaa;
- --disabled-button-border: var(--button-border);
- --highlighted-button-background-color: #cfc;
- --highlighted-button-border: var(--button-border);
-
- /* Boxes */
- --box-border-width: 1px;
- --box-border-color: #9090B0;
- --box-border: var(--box-border-width) solid var(--box-border-color);
-
- /* Inputs */
- --input-border: 1px solid #9090B0;
- --focused-input-border: 2px solid #9292f6;
-
- /* Filter plot */
- --axes-color: #555;
- --gain-color: rgba(0,0,220,1);
- --phase-color: rgba(0,220,0,1);
- --impulse-color: rgba(220,0,0,1);
-
- /* Pipeline plot */
- --arrow-color: var(--text-color);
- --frame-background-color: rgb(180, 180, 180);
- --block-background-color: rgb(233, 233, 233);
- --block-text-color: rgb(16, 10, 90);
-}
\ No newline at end of file
diff --git a/srv/http/settings/camillagui/build/icon.png b/srv/http/settings/camillagui/build/icon.png
new file mode 100644
index 000000000..2f6d0d9ed
Binary files /dev/null and b/srv/http/settings/camillagui/build/icon.png differ
diff --git a/srv/http/settings/camillagui/build/index.html b/srv/http/settings/camillagui/build/index.html
index 4b799be46..e794030da 100644
--- a/srv/http/settings/camillagui/build/index.html
+++ b/srv/http/settings/camillagui/build/index.html
@@ -1,42 +1 @@
-
-
-
=0;)(r=i[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=Tt);for(var n=this._groups,r=n.length,i=new Array(r),o=0;o >1)+d+e+k+T.slice(C);break;default:e=T+d+e+k}return s(e)}return v=void 0===v?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,v)):Math.max(0,Math.min(20,v)),k.toString=function(){return e+""},k}return{format:f,formatPrefix:function(e,t){var n=f(((e=ao(e)).type="f",e)),r=3*Math.max(-8,Math.min(8,Math.floor(lo(t)/3))),i=Math.pow(10,-r),o=yo[8+r/3];return function(e){return n(i*e)+o}}}}function _o(e,t,n,r){var i,o=function(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=Ii?i*=10:o>=Ai?i*=5:o>=Ni&&(i*=2),t
/;return r&&"false"!==r&&i.test(e)?e.split(i).map((function(e,t){return d.createElement("span",{key:t,className:"multi-line"},e)})):e}function Yc(e){var t={};return Object.keys(e).filter((function(e){return/(^aria-\w+$|^role$)/.test(e)})).forEach((function(n){t[n]=e[n]})),t}function qc(e){var t=e.length;return e.hasOwnProperty?Array.prototype.slice.call(e):new Array(t).fill().map((function(t){return e[t]}))}var Kc={dark:{text:"#fff",background:"#222",border:"transparent",arrow:"#222"},success:{text:"#fff",background:"#8DC572",border:"transparent",arrow:"#8DC572"},warning:{text:"#fff",background:"#F0AD4E",border:"transparent",arrow:"#F0AD4E"},error:{text:"#fff",background:"#BE6464",border:"transparent",arrow:"#BE6464"},info:{text:"#fff",background:"#337AB7",border:"transparent",arrow:"#337AB7"},light:{text:"#222",background:"#fff",border:"transparent",arrow:"#fff"}};function Gc(e,t,n,r){return function(e,t){var n=t.text,r=t.background,i=t.border,o=t.arrow;return"\n \t.".concat(e," {\n\t color: ").concat(n,";\n\t background: ").concat(r,";\n\t border: 1px solid ").concat(i,";\n \t}\n\n \t.").concat(e,".place-top {\n margin-top: -10px;\n }\n .").concat(e,".place-top::before {\n border-top: 8px solid ").concat(i,";\n }\n .").concat(e,".place-top::after {\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n bottom: -6px;\n left: 50%;\n margin-left: -8px;\n border-top-color: ").concat(o,";\n border-top-style: solid;\n border-top-width: 6px;\n }\n\n .").concat(e,".place-bottom {\n margin-top: 10px;\n }\n .").concat(e,".place-bottom::before {\n border-bottom: 8px solid ").concat(i,";\n }\n .").concat(e,".place-bottom::after {\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n top: -6px;\n left: 50%;\n margin-left: -8px;\n border-bottom-color: ").concat(o,";\n border-bottom-style: solid;\n border-bottom-width: 6px;\n }\n\n .").concat(e,".place-left {\n margin-left: -10px;\n }\n .").concat(e,".place-left::before {\n border-left: 8px solid ").concat(i,";\n }\n .").concat(e,".place-left::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n right: -6px;\n top: 50%;\n margin-top: -4px;\n border-left-color: ").concat(o,";\n border-left-style: solid;\n border-left-width: 6px;\n }\n\n .").concat(e,".place-right {\n margin-left: 10px;\n }\n .").concat(e,".place-right::before {\n border-right: 8px solid ").concat(i,";\n }\n .").concat(e,".place-right::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n left: -6px;\n top: 50%;\n margin-top: -4px;\n border-right-color: ").concat(o,";\n border-right-style: solid;\n border-right-width: 6px;\n }\n ")}(e,function(e,t,n){var r=e.text,i=e.background,o=e.border,a=e.arrow?e.arrow:e.background,s=function(e){return Kc[e]?Tc({},Kc[e]):void 0}(t);r&&(s.text=r);i&&(s.background=i);n&&(s.border=o||("light"===t?"black":"white"));a&&(s.arrow=a);return s}(t,n,r))}var $c="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:"undefined"!==typeof self?self:{};function Xc(e,t){return e(t={exports:{}},t.exports),t.exports}var Qc=function(e){return e&&e.Math==Math&&e},Zc=Qc("object"==typeof globalThis&&globalThis)||Qc("object"==typeof window&&window)||Qc("object"==typeof self&&self)||Qc("object"==typeof $c&&$c)||function(){return this}()||Function("return this")(),Jc=function(e){try{return!!e()}catch(t){return!0}},ef=!Jc((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),tf={}.propertyIsEnumerable,nf=Object.getOwnPropertyDescriptor,rf={f:nf&&!tf.call({1:2},1)?function(e){var t=nf(this,e);return!!t&&t.enumerable}:tf},of=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},af={}.toString,sf=function(e){return af.call(e).slice(8,-1)},uf="".split,lf=Jc((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==sf(e)?uf.call(e,""):Object(e)}:Object,cf=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},ff=function(e){return lf(cf(e))},df=function(e){return"object"===typeof e?null!==e:"function"===typeof e},hf=function(e,t){if(!df(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!df(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!df(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!df(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},pf=function(e){return Object(cf(e))},gf={}.hasOwnProperty,vf=function(e,t){return gf.call(pf(e),t)},mf=Zc.document,yf=df(mf)&&df(mf.createElement),bf=function(e){return yf?mf.createElement(e):{}},_f=!ef&&!Jc((function(){return 7!=Object.defineProperty(bf("div"),"a",{get:function(){return 7}}).a})),xf=Object.getOwnPropertyDescriptor,wf={f:ef?xf:function(e,t){if(e=ff(e),t=hf(t,!0),_f)try{return xf(e,t)}catch(n){}if(vf(e,t))return of(!rf.f.call(e,t),e[t])}},kf=function(e){if(!df(e))throw TypeError(String(e)+" is not an object");return e},Sf=Object.defineProperty,Cf={f:ef?Sf:function(e,t,n){if(kf(e),t=hf(t,!0),kf(n),_f)try{return Sf(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},Tf=ef?function(e,t,n){return Cf.f(e,t,of(1,n))}:function(e,t,n){return e[t]=n,e},Of=function(e,t){try{Tf(Zc,e,t)}catch(n){Zc[e]=t}return t},Ef="__core-js_shared__",Mf=Zc[Ef]||Of(Ef,{}),Df=Function.toString;"function"!=typeof Mf.inspectSource&&(Mf.inspectSource=function(e){return Df.call(e)});var Pf,jf,If,Af=Mf.inspectSource,Nf=Zc.WeakMap,Lf="function"===typeof Nf&&/native code/.test(Af(Nf)),Ff=Xc((function(e){(e.exports=function(e,t){return Mf[e]||(Mf[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.12.1",mode:"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})})),Rf=0,zf=Math.random(),Vf=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++Rf+zf).toString(36)},Hf=Ff("keys"),Bf=function(e){return Hf[e]||(Hf[e]=Vf(e))},Wf={},Uf="Object already initialized",Yf=Zc.WeakMap;if(Lf||Mf.state){var qf=Mf.state||(Mf.state=new Yf),Kf=qf.get,Gf=qf.has,$f=qf.set;Pf=function(e,t){if(Gf.call(qf,e))throw new TypeError(Uf);return t.facade=e,$f.call(qf,e,t),t},jf=function(e){return Kf.call(qf,e)||{}},If=function(e){return Gf.call(qf,e)}}else{var Xf=Bf("state");Wf[Xf]=!0,Pf=function(e,t){if(vf(e,Xf))throw new TypeError(Uf);return t.facade=e,Tf(e,Xf,t),t},jf=function(e){return vf(e,Xf)?e[Xf]:{}},If=function(e){return vf(e,Xf)}}var Qf,Zf,Jf={set:Pf,get:jf,has:If,enforce:function(e){return If(e)?jf(e):Pf(e,{})},getterFor:function(e){return function(t){var n;if(!df(t)||(n=jf(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},ed=Xc((function(e){var t=Jf.get,n=Jf.enforce,r=String(String).split("String");(e.exports=function(e,t,i,o){var a,s=!!o&&!!o.unsafe,u=!!o&&!!o.enumerable,l=!!o&&!!o.noTargetGet;"function"==typeof i&&("string"!=typeof t||vf(i,"name")||Tf(i,"name",t),(a=n(i)).source||(a.source=r.join("string"==typeof t?t:""))),e!==Zc?(s?!l&&e[t]&&(u=!0):delete e[t],u?e[t]=i:Tf(e,t,i)):u?e[t]=i:Of(t,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&t(this).source||Af(this)}))})),td=Zc,nd=function(e){return"function"==typeof e?e:void 0},rd=function(e,t){return arguments.length<2?nd(td[e])||nd(Zc[e]):td[e]&&td[e][t]||Zc[e]&&Zc[e][t]},id=Math.ceil,od=Math.floor,ad=function(e){return isNaN(e=+e)?0:(e>0?od:id)(e)},sd=Math.min,ud=function(e){return e>0?sd(ad(e),9007199254740991):0},ld=Math.max,cd=Math.min,fd=function(e){return function(t,n,r){var i,o=ff(t),a=ud(o.length),s=function(e,t){var n=ad(e);return n<0?ld(n+t,0):cd(n,t)}(r,a);if(e&&n!=n){for(;a>s;)if((i=o[s++])!=i)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},dd={includes:fd(!0),indexOf:fd(!1)}.indexOf,hd=function(e,t){var n,r=ff(e),i=0,o=[];for(n in r)!vf(Wf,n)&&vf(r,n)&&o.push(n);for(;t.length>i;)vf(r,n=t[i++])&&(~dd(o,n)||o.push(n));return o},pd=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],gd=pd.concat("length","prototype"),vd={f:Object.getOwnPropertyNames||function(e){return hd(e,gd)}},md={f:Object.getOwnPropertySymbols},yd=rd("Reflect","ownKeys")||function(e){var t=vd.f(kf(e)),n=md.f;return n?t.concat(n(e)):t},bd=function(e,t){for(var n=yd(t),r=Cf.f,i=wf.f,o=0;o