From 9b228800f9e33a0cd1222d89be1de7c39b23fde0 Mon Sep 17 00:00:00 2001 From: Ian Gray Date: Sat, 8 Jan 2022 20:58:22 +0000 Subject: [PATCH 1/3] Implement separators, and grouped controls This adds separator elements, and allows arbitrary grouping of controls. For details see the updates to README.md --- README.md | 41 +++ data/css/style.css | 34 +- data/css/style.min.css | 2 +- data/js/controls.js | 650 +++++++++++++----------------------- data/js/controls.min.js | 273 +++------------ docs/ui_groupedbuttons.png | Bin 0 -> 24947 bytes docs/ui_groupedbuttons2.png | Bin 0 -> 43987 bytes docs/ui_separators.png | Bin 0 -> 20434 bytes src/ESPUI.cpp | 4 + src/ESPUI.h | 3 + src/dataControlsJS.h | 275 +++------------ src/dataStyleCSS.h | 4 +- 12 files changed, 392 insertions(+), 894 deletions(-) create mode 100644 docs/ui_groupedbuttons.png create mode 100644 docs/ui_groupedbuttons2.png create mode 100644 docs/ui_separators.png diff --git a/README.md b/README.md index e8c5726..823ae76 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,8 @@ The Library runs fine on any kind of **ESP8266** and **ESP32** (NodeMCU Boards, - Public Access to ESPAsyncServer - Graph Widget (Persist save graph in local storage #10) - Inline CSS styles by @iangray001 +- Separators by @iangray001 +- Grouped controls by @iangray001 ## Further Roadmap @@ -304,6 +306,18 @@ Then all widgets for the tab need to be added to it by specifying the tab as the `ESPUI.addControl( ControlType::Text, "Text Title:", "a Text Field", ControlColor::Alizarin, tab1, &textCall );` +### Separators + +![separators](docs/ui_separators.png) + +You can use separators to break up the UI and better organise your controls. Adding a separator will force any following controls onto the subsequent line. Add separators as follows: + +``` +ESPUI.separator("Separator name"); +//or +ESPUI.addControl(ControlType::Separator, "Separator name", "", ControlColor::None, maintab); +``` + ### Initialisation of the UI After all the elements are configured you can use `ESPUI.begin("Some Title");` @@ -389,6 +403,33 @@ Note: The images in this example are formed by setting a Label to contain an `", ControlColor::Peterriver); ``` +### Grouped controls + +Normally, whenever a control is added to the UI, an new panel is generated. However, when addings the control you can +set the "parent" of the control to an existing other control. This allows you to add multiple widgets into the same +panel. For example: + +``` + panel1 = ESPUI.addControl(ControlType::Button, "Button Set", "Button A", ControlColor::Turquoise, Control::noParent, btncallback); + ESPUI.addControl(ControlType::Button, "", "Button B", ControlColor::None, panel1, btncallback); + ESPUI.addControl(ControlType::Button, "", "Button C", ControlColor::None, panel1, btncallback); +``` + +The first call to `addControl` has no parent (or it could be set to a tab), so therefore a new panel is added containing one button +with the value `Button A`. The two subsequent calls have their parent set to the control we added in the first so instead of adding +a new panel, buttons are added to the existing panel from `Button A`. The result is the following: + +![Grouped buttons](docs/ui_groupedbuttons.png) + +The grouped controls operate entirely independently, and can be assigned different callbacks, or updated separately. The grouping +is purely visual. + +Most controls can be grouped this way, but the result is not always visually pleasant. This works best with labels, sliders, switchers, +and buttons. + +![Other grouped elements](docs/ui_groupedbuttons2.png) + +If you group too many elements it might throw the layout of the rest of the UI out of line. Consider adding separators to correct this. # Notes for Development diff --git a/data/css/style.css b/data/css/style.css index c1be6ee..30ae24a 100644 --- a/data/css/style.css +++ b/data/css/style.css @@ -13,22 +13,44 @@ .card { min-height: 100px; - margin-top: 2%; border-radius: 6px; box-shadow: 0 4px 4px rgba(204, 197, 185, 0.5); padding-left: 20px; padding-right: 20px; - margin-bottom: 10px; + margin-bottom: 40px; min-width: 500px; color: #fff; } + +@media (min-width: 1205px) { + .wide.card { + min-width: 1075px; + } +} + +@media (min-width: 1790px) { + .wide.card { + min-width: 1650px; + } +} + @media (max-width: 630px) { .card { min-width: 98%; } } +.sectionbreak.columns { + color: black; +} + +.sectionbreak.columns hr { + border: none; + height: 2px; + background-color: #666 +} + .card-slider {} .turquoise { @@ -137,7 +159,7 @@ .column, .columns { - margin-right: 2%; + margin-right: 35px; } .column:first-child, @@ -423,6 +445,8 @@ button:active { button, .button { margin-bottom: 1rem; + margin-left: 0.3rem; + margin-right: 0.3rem; } /* Utilities @@ -576,7 +600,8 @@ hr { display: block; font-size: 14px; height: 26px; - margin-bottom: 12px; + margin-left: 0.3rem; + margin-right: 0.3rem; position: relative; width: 60px; -webkit-transition: background-color 0.2s ease-in-out; @@ -933,6 +958,7 @@ input[id^="num"] { body div>ul.navigation { margin: 0; + margin-bottom: 30px; padding: 0; border-bottom: 3px solid #666; overflow: hidden; diff --git a/data/css/style.min.css b/data/css/style.min.css index 4497794..1d83c6b 100644 --- a/data/css/style.min.css +++ b/data/css/style.min.css @@ -1 +1 @@ -.container{position:relative;width:79%;margin:20px;box-sizing:border-box}.column,.columns{width:100%;float:left}.card{min-height:100px;margin-top:2%;border-radius:6px;box-shadow:0 4px 4px rgba(204,197,185,0.5);padding-left:20px;padding-right:20px;margin-bottom:10px;min-width:500px;color:#fff}@media(max-width:630px){.card{min-width:98%}}.turquoise{background:#1abc9c;border-bottom:#16a085 3px solid}.emerald{background:#2ecc71;border-bottom:#27ae60 3px solid}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.dark{background:#444857;border-bottom:#444857 3px solid}.label{box-sizing:border-box;white-space:nowrap;border-radius:.2em;padding:.12em .4em .14em;text-align:center;color:#fff;font-weight:700;line-height:1.3;margin-bottom:5px;display:inline-block;white-space:nowrap;vertical-align:baseline;position:relative;top:-.15em;background-color:#999;margin-bottom:10px}.label-wrap{width:90%;white-space:pre-wrap;word-wrap:break-word}.label.color-blue{background-color:#6f9ad1}.label.color-red{background-color:#d37c7c}.label.color-green{background-color:#9bc268}.label.color-orange{background-color:#dea154}.label.color-yellow{background-color:#e9d641}.label.color-purple{background-color:#9f83d1}@media(min-width:400px){.container{width:84%}}@media(min-width:630px){.container{width:98%}.column,.columns{margin-right:2%}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{margin:0;font-size:1.5em;line-height:1;font-weight:400;font-family:"Open Sans",sans-serif;color:#222;background-color:#ecf0f1}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:300}h1{font-size:4rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:630px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}button{display:inline-block;padding:10px;border-radius:3px;color:#fff;background-color:#999}button:active{background-color:#666;transform:translateX(4px) translateY(4px)}#mainHeader{display:inline-block}#conStatus{position:inherit;font-size:.75em}button,.button{margin-bottom:1rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}.tcenter{text-align:center}hr{margin-top:.5rem;margin-bottom:1.2rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both}.control{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.1),hsla(0,0%,100%,0.1));border-radius:50%;box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.75),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.75);height:9em;margin:3em auto;position:relative;width:9em}.control ul{height:100%;padding:0;transform:rotate(45deg)}.control li{border-radius:100% 0 0 0;box-shadow:inset -1px -1px 1px hsla(0,0%,100%,0.5),0 0 1px hsla(0,0%,0%,0.75);display:inline-block;height:50%;overflow:hidden;width:50%}.control ul li:nth-child(2){transform:rotate(90deg)}.control ul li:nth-child(3){transform:rotate(-90deg)}.control ul li:nth-child(4){transform:rotate(180deg)}.control ul a{height:200%;position:relative;transform:rotate(-45deg);width:200%}.control a:hover,.control a:focus{background-color:hsla(0,0%,100%,0.25)}.control a{border-radius:50%;color:#333;display:block;font:bold 1em/3 sans-serif;text-align:center;text-decoration:none;text-shadow:0 1px 1px hsla(0,0%,100%,0.4);transition:.15s}.control .confirm{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.15),hsla(0,0%,100%,0.25));box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.25),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.85);left:50%;line-height:3;margin:-1.5em;position:absolute;top:50%;width:3em}.control .confirm:hover,.control .confirm:focus{background-color:#eee}.switch{display:inline-block !important;background-color:#bebebe;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);color:#fff;cursor:pointer;display:block;font-size:14px;height:26px;margin-bottom:12px;position:relative;width:60px;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;-ms-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.switch.checked{background-color:#76d21d}.switch input[type="checkbox"]{display:none;cursor:pointer;height:10px;left:12px;position:absolute;top:8px;width:10px}.in{position:absolute;top:8px;left:12px;-webkit-transition:left .08s ease-in-out;-moz-transition:left .08s ease-in-out;-o-transition:left .08s ease-in-out;-ms-transition:left .08s ease-in-out;transition:left .08s ease-in-out}.switch.checked div{left:38px}.switch .in:before{background:#fff;background:-moz-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#f0f0f0));background:-webkit-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top,#fff 0,#f0f0f0 100%);background:linear-gradient(to bottom,#fff 0,#f0f0f0 100%);border:1px solid #fff;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,0.3);content:"";height:18px;position:absolute;top:-5px;left:-9px;width:26px}.switch .in:after{background:#f0f0f0;background:-moz-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f0f0f0),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top,#f0f0f0 0,#fff 100%);background:linear-gradient(to bottom,#f0f0f0 0,#fff 100%);border-radius:10px;content:"";height:12px;margin:-1px 0 0 -1px;position:absolute;width:12px}.rkmd-slider{display:block;position:relative;font-size:16px;font-family:"Roboto",sans-serif}.rkmd-slider input[type="range"]{overflow:hidden;position:absolute;width:1px;height:1px;opacity:0}.rkmd-slider input[type="range"]+.slider{display:block;position:relative;width:100%;height:27px;border-radius:13px;background-color:#bebebe}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider{height:4px;border-radius:0}}.rkmd-slider input[type="range"]+.slider .slider-fill{display:block;position:absolute;width:0;height:100%;user-select:none;z-index:1}.rkmd-slider input[type="range"]+.slider .slider-handle{cursor:pointer;position:absolute;top:12px;left:0;width:15px;height:15px;margin-left:-8px;border-radius:50%;transition:all .2s ease;user-select:none;z-index:2}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider .slider-handle{top:-5.5px}}.rkmd-slider input[type="range"]:disabled+.slider{background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle{cursor:default !important;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle .slider-label{display:none;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active{top:-5.5px;width:15px;height:15px;margin-left:-8px}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active .slider-label{display:none;border-radius:50%;transform:none}.rkmd-slider input[type="range"]:disabled+.slider .slider-handle:active{box-shadow:none !important;transform:scale(1) !important}.rkmd-slider.slider-discrete .slider .slider-handle{position:relative;z-index:1}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{position:absolute;top:-17.5px;left:4px;width:30px;height:30px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;border-radius:50%;-webkit-transform:scale(1) rotate(-45deg);transform:scale(1) rotate(-45deg);-webkit-transition:all .2s ease;transition:all .2s ease}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{left:-2px;-webkit-transform:scale(0.5) rotate(-45deg);transform:scale(0.5) rotate(-45deg)}}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{position:absolute;top:7px;left:0;width:100%;color:#fff;font-size:16px;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{font-size:12px}}.rkmd-slider.slider-discrete .slider .slider-handle.is-active{top:0;margin-left:-2px;width:4px;height:4px}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label{top:-15px;left:-2px;border-radius:15px 15px 15px 0;-webkit-transform:rotate(-45deg) translate(23px,-25px);transform:rotate(-45deg) translate(23px,-25px)}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label span{opacity:1}.rkmd-slider.slider-discrete.slider-turquoise .slider-label{background-color:#16a085}.rkmd-slider.slider-discrete.slider-emerald .slider-label{background-color:#27ae60}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.rkmd-slider.slider-discrete.slider-peterriver .slider-label{background-color:#2980b9}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.rkmd-slider.slider-discrete.slider-wetasphalt .slider-label{background-color:#2c3e50}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.rkmd-slider.slider-discrete.slider-sunflower .slider-label{background-color:#e6bb0f}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.rkmd-slider.slider-discrete.slider-carrot .slider-label{background-color:#d35400}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.rkmd-slider.slider-discrete.slider-alizarin .slider-label{background-color:#c0392b}input{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}select{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}input[id^="num"]{max-width:6em;width:auto;text-align:right;font-weight:bold;font-size:115%}body div>ul.navigation{margin:0;padding:0;border-bottom:3px solid #666;overflow:hidden}ul.navigation li{list-style:none;float:left;margin-right:4px}ul.navigation li.controls{float:right}ul.navigation li a{font-weight:bold;display:inline-block;padding:6px 12px;color:#888;outline:0;text-decoration:none;background:#f3f3f3;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#e4e4e4));background:-moz-linear-gradient(#eee,#e4e4e4);background:linear-gradient(#eee,#e4e4e4);-pie-background:linear-gradient(#eee,#e4e4e4)}ul.navigation li.active a{pointer-events:none;color:white;background:#666;background:-webkit-gradient(linear,0 0,0 bottom,from(#888),to(#666));background:-moz-linear-gradient(#888,#666);background:linear-gradient(#888,#666);-pie-background:linear-gradient(#888,#666)}div.tabscontent>div{padding:0 15px}#tabsnav:empty{display:none}.range-slider{margin:0}.range-slider{width:100%}.range-slider__range{-webkit-appearance:none;width:calc(100% - (45px));height:10px;border-radius:5px;outline:0;padding:0;margin:0}.range-slider__value{display:inline-block;position:relative;width:30px;color:#fff;line-height:20px;text-align:center;border-radius:3px;padding:5px 5px;margin-left:2px}.range-slider__value:after{position:absolute;top:8px;left:-7px;width:0;height:0;content:""}::-moz-range-track{border:0}input::-moz-focus-inner,input::-moz-focus-outer{border:0}svg{display:block;width:100%;height:100%}.y-axis path,.x-axis path{stroke:gray;stroke-width:1;fill:none}.series{stroke:steelblue;stroke-width:3;fill:none}.data-points circle{stroke:steelblue;stroke-width:2;fill:white}.data-points text{display:none}.data-points circle:hover{fill:steelblue;stroke-width:6}.data-points circle:hover+text{display:inline-block}text{text-anchor:end} \ No newline at end of file +.container{position:relative;width:79%;margin:20px;box-sizing:border-box}.column,.columns{width:100%;float:left}.card{min-height:100px;border-radius:6px;box-shadow:0 4px 4px rgba(204,197,185,0.5);padding-left:20px;padding-right:20px;margin-bottom:40px;min-width:500px;color:#fff}@media(min-width:1205px){.wide.card{min-width:1075px}}@media(min-width:1790px){.wide.card{min-width:1650px}}@media(max-width:630px){.card{min-width:98%}}.sectionbreak.columns{color:black}.sectionbreak.columns hr{border:0;height:2px;background-color:#666}.turquoise{background:#1abc9c;border-bottom:#16a085 3px solid}.emerald{background:#2ecc71;border-bottom:#27ae60 3px solid}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.dark{background:#444857;border-bottom:#444857 3px solid}.label{box-sizing:border-box;white-space:nowrap;border-radius:.2em;padding:.12em .4em .14em;text-align:center;color:#fff;font-weight:700;line-height:1.3;margin-bottom:5px;display:inline-block;white-space:nowrap;vertical-align:baseline;position:relative;top:-.15em;background-color:#999;margin-bottom:10px}.label-wrap{width:90%;white-space:pre-wrap;word-wrap:break-word}.label.color-blue{background-color:#6f9ad1}.label.color-red{background-color:#d37c7c}.label.color-green{background-color:#9bc268}.label.color-orange{background-color:#dea154}.label.color-yellow{background-color:#e9d641}.label.color-purple{background-color:#9f83d1}@media(min-width:400px){.container{width:84%}}@media(min-width:630px){.container{width:98%}.column,.columns{margin-right:35px}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{margin:0;font-size:1.5em;line-height:1;font-weight:400;font-family:"Open Sans",sans-serif;color:#222;background-color:#ecf0f1}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:300}h1{font-size:4rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:630px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}button{display:inline-block;padding:10px;border-radius:3px;color:#fff;background-color:#999}button:active{background-color:#666;transform:translateX(4px) translateY(4px)}#mainHeader{display:inline-block}#conStatus{position:inherit;font-size:.75em}button,.button{margin-bottom:1rem;margin-left:.3rem;margin-right:.3rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}.tcenter{text-align:center}hr{margin-top:.5rem;margin-bottom:1.2rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both}.control{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.1),hsla(0,0%,100%,0.1));border-radius:50%;box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.75),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.75);height:9em;margin:3em auto;position:relative;width:9em}.control ul{height:100%;padding:0;transform:rotate(45deg)}.control li{border-radius:100% 0 0 0;box-shadow:inset -1px -1px 1px hsla(0,0%,100%,0.5),0 0 1px hsla(0,0%,0%,0.75);display:inline-block;height:50%;overflow:hidden;width:50%}.control ul li:nth-child(2){transform:rotate(90deg)}.control ul li:nth-child(3){transform:rotate(-90deg)}.control ul li:nth-child(4){transform:rotate(180deg)}.control ul a{height:200%;position:relative;transform:rotate(-45deg);width:200%}.control a:hover,.control a:focus{background-color:hsla(0,0%,100%,0.25)}.control a{border-radius:50%;color:#333;display:block;font:bold 1em/3 sans-serif;text-align:center;text-decoration:none;text-shadow:0 1px 1px hsla(0,0%,100%,0.4);transition:.15s}.control .confirm{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.15),hsla(0,0%,100%,0.25));box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.25),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.85);left:50%;line-height:3;margin:-1.5em;position:absolute;top:50%;width:3em}.control .confirm:hover,.control .confirm:focus{background-color:#eee}.switch{display:inline-block !important;background-color:#bebebe;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);color:#fff;cursor:pointer;display:block;font-size:14px;height:26px;margin-left:.3rem;margin-right:.3rem;position:relative;width:60px;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;-ms-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.switch.checked{background-color:#76d21d}.switch input[type="checkbox"]{display:none;cursor:pointer;height:10px;left:12px;position:absolute;top:8px;width:10px}.in{position:absolute;top:8px;left:12px;-webkit-transition:left .08s ease-in-out;-moz-transition:left .08s ease-in-out;-o-transition:left .08s ease-in-out;-ms-transition:left .08s ease-in-out;transition:left .08s ease-in-out}.switch.checked div{left:38px}.switch .in:before{background:#fff;background:-moz-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#f0f0f0));background:-webkit-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top,#fff 0,#f0f0f0 100%);background:linear-gradient(to bottom,#fff 0,#f0f0f0 100%);border:1px solid #fff;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,0.3);content:"";height:18px;position:absolute;top:-5px;left:-9px;width:26px}.switch .in:after{background:#f0f0f0;background:-moz-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f0f0f0),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top,#f0f0f0 0,#fff 100%);background:linear-gradient(to bottom,#f0f0f0 0,#fff 100%);border-radius:10px;content:"";height:12px;margin:-1px 0 0 -1px;position:absolute;width:12px}.rkmd-slider{display:block;position:relative;font-size:16px;font-family:"Roboto",sans-serif}.rkmd-slider input[type="range"]{overflow:hidden;position:absolute;width:1px;height:1px;opacity:0}.rkmd-slider input[type="range"]+.slider{display:block;position:relative;width:100%;height:27px;border-radius:13px;background-color:#bebebe}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider{height:4px;border-radius:0}}.rkmd-slider input[type="range"]+.slider .slider-fill{display:block;position:absolute;width:0;height:100%;user-select:none;z-index:1}.rkmd-slider input[type="range"]+.slider .slider-handle{cursor:pointer;position:absolute;top:12px;left:0;width:15px;height:15px;margin-left:-8px;border-radius:50%;transition:all .2s ease;user-select:none;z-index:2}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider .slider-handle{top:-5.5px}}.rkmd-slider input[type="range"]:disabled+.slider{background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle{cursor:default !important;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle .slider-label{display:none;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active{top:-5.5px;width:15px;height:15px;margin-left:-8px}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active .slider-label{display:none;border-radius:50%;transform:none}.rkmd-slider input[type="range"]:disabled+.slider .slider-handle:active{box-shadow:none !important;transform:scale(1) !important}.rkmd-slider.slider-discrete .slider .slider-handle{position:relative;z-index:1}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{position:absolute;top:-17.5px;left:4px;width:30px;height:30px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;border-radius:50%;-webkit-transform:scale(1) rotate(-45deg);transform:scale(1) rotate(-45deg);-webkit-transition:all .2s ease;transition:all .2s ease}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{left:-2px;-webkit-transform:scale(0.5) rotate(-45deg);transform:scale(0.5) rotate(-45deg)}}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{position:absolute;top:7px;left:0;width:100%;color:#fff;font-size:16px;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{font-size:12px}}.rkmd-slider.slider-discrete .slider .slider-handle.is-active{top:0;margin-left:-2px;width:4px;height:4px}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label{top:-15px;left:-2px;border-radius:15px 15px 15px 0;-webkit-transform:rotate(-45deg) translate(23px,-25px);transform:rotate(-45deg) translate(23px,-25px)}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label span{opacity:1}.rkmd-slider.slider-discrete.slider-turquoise .slider-label{background-color:#16a085}.rkmd-slider.slider-discrete.slider-emerald .slider-label{background-color:#27ae60}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.rkmd-slider.slider-discrete.slider-peterriver .slider-label{background-color:#2980b9}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.rkmd-slider.slider-discrete.slider-wetasphalt .slider-label{background-color:#2c3e50}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.rkmd-slider.slider-discrete.slider-sunflower .slider-label{background-color:#e6bb0f}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.rkmd-slider.slider-discrete.slider-carrot .slider-label{background-color:#d35400}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.rkmd-slider.slider-discrete.slider-alizarin .slider-label{background-color:#c0392b}input{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}select{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}input[id^="num"]{max-width:6em;width:auto;text-align:right;font-weight:bold;font-size:115%}body div>ul.navigation{margin:0;margin-bottom:30px;padding:0;border-bottom:3px solid #666;overflow:hidden}ul.navigation li{list-style:none;float:left;margin-right:4px}ul.navigation li.controls{float:right}ul.navigation li a{font-weight:bold;display:inline-block;padding:6px 12px;color:#888;outline:0;text-decoration:none;background:#f3f3f3;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#e4e4e4));background:-moz-linear-gradient(#eee,#e4e4e4);background:linear-gradient(#eee,#e4e4e4);-pie-background:linear-gradient(#eee,#e4e4e4)}ul.navigation li.active a{pointer-events:none;color:white;background:#666;background:-webkit-gradient(linear,0 0,0 bottom,from(#888),to(#666));background:-moz-linear-gradient(#888,#666);background:linear-gradient(#888,#666);-pie-background:linear-gradient(#888,#666)}div.tabscontent>div{padding:0 15px}#tabsnav:empty{display:none}.range-slider{margin:0}.range-slider{width:100%}.range-slider__range{-webkit-appearance:none;width:calc(100% - (45px));height:10px;border-radius:5px;outline:0;padding:0;margin:0}.range-slider__value{display:inline-block;position:relative;width:30px;color:#fff;line-height:20px;text-align:center;border-radius:3px;padding:5px 5px;margin-left:2px}.range-slider__value:after{position:absolute;top:8px;left:-7px;width:0;height:0;content:""}::-moz-range-track{border:0}input::-moz-focus-inner,input::-moz-focus-outer{border:0}svg{display:block;width:100%;height:100%}.y-axis path,.x-axis path{stroke:gray;stroke-width:1;fill:none}.series{stroke:steelblue;stroke-width:3;fill:none}.data-points circle{stroke:steelblue;stroke-width:2;fill:white}.data-points text{display:none}.data-points circle:hover{fill:steelblue;stroke-width:6}.data-points circle:hover+text{display:inline-block}text{text-anchor:end} \ No newline at end of file diff --git a/data/js/controls.js b/data/js/controls.js index f8a8101..3a57493 100644 --- a/data/js/controls.js +++ b/data/js/controls.js @@ -52,7 +52,10 @@ const UPDATE_STEP = 116; const UI_GAUGE = 17; const UPDATE_GAUGE = 117; const UI_ACCEL = 18; -const UPTDATE_ACCEL = 117; +const UPDATE_ACCEL = 118; + +const UI_SEPARATOR = 19; +const UPDATE_SEPARATOR = 119; const UP = 0; const DOWN = 1; @@ -233,9 +236,6 @@ function start() { var e = document.body; var center = ""; - panelStyle = data.hasOwnProperty('panelStyle') ? " style='" + data.panelStyle + "'" : ""; - elementStyle = data.hasOwnProperty('elementStyle') ? " style='" + data.elementStyle + "'" : ""; - switch (data.type) { case UI_INITIAL_GUI: // Clear current elements @@ -272,366 +272,130 @@ function start() { $("#mainHeader").html(data.label); break; + /* + Most elements have the same behaviour when added. + */ case UI_LABEL: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "" + - data.value + - "" + - "
" - ); - } + case UI_NUMBER: + case UI_TEXT_INPUT: + case UI_SELECT: + case UI_GAUGE: + case UI_SEPARATOR: + if (data.visible) addToHTML(data); break; + /* + These elements must call additional functions after being added to the DOM + */ case UI_BUTTON: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); + if (data.visible) { + addToHTML(data); + $("#btn" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + buttonclick(data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + buttonclick(data.id, false); + }, + }); } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "
" - ); - $("#btn" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - buttonclick(data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - buttonclick(data.id, false); - }, - }); - } break; case UI_SWITCHER: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); + if (data.visible) { + addToHTML(data); + switcher(data.id, data.value); } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "" + - "
" - ); - switcher(data.id, data.value); - } break; case UI_CPAD: case UI_PAD: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "" + - "
" - ); - - $("#pf" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - padclick(UP, data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - padclick(UP, data.id, false); - }, - }); - $("#pl" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - padclick(LEFT, data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - padclick(LEFT, data.id, false); - }, - }); - $("#pr" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - padclick(RIGHT, data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - padclick(RIGHT, data.id, false); - }, - }); - $("#pb" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - padclick(DOWN, data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - padclick(DOWN, data.id, false); - }, - }); - $("#pc" + data.id).on({ - touchstart: function (e) { - e.preventDefault(); - padclick(CENTER, data.id, true); - }, - touchend: function (e) { - e.preventDefault(); - padclick(CENTER, data.id, false); - }, - }); - } + if (data.visible) { + addToHTML(data); + $("#pf" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + padclick(UP, data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + padclick(UP, data.id, false); + }, + }); + $("#pl" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + padclick(LEFT, data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + padclick(LEFT, data.id, false); + }, + }); + $("#pr" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + padclick(RIGHT, data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + padclick(RIGHT, data.id, false); + }, + }); + $("#pb" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + padclick(DOWN, data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + padclick(DOWN, data.id, false); + }, + }); + $("#pc" + data.id).on({ + touchstart: function (e) { + e.preventDefault(); + padclick(CENTER, data.id, true); + }, + touchend: function (e) { + e.preventDefault(); + padclick(CENTER, data.id, false); + }, + }); + } break; - //https://codepen.io/seanstopnik/pen/CeLqA case UI_SLIDER: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); + //https://codepen.io/seanstopnik/pen/CeLqA + if (data.visible) { + addToHTML(data); + rangeSlider(!sliderContinuous); } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "
" + - "" + - "" + - data.value + - "" + - "
" + - "
" - ); - rangeSlider(!sliderContinuous); - } - break; - - case UI_NUMBER: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "" + - "
" - ); - } - break; - - case UI_TEXT_INPUT: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } - if (data.visible) { - parent.append( - "
" + - "
" + - data.label + - "

" + - "" + - "
" - ); - } break; case UI_TAB: - if (data.visible) { - $("#tabsnav").append( - "
  • " + data.value + "
  • " - ); - $("#tabscontent").append("
    "); + if (data.visible) { + $("#tabsnav").append( + "
  • " + data.value + "
  • " + ); + $("#tabscontent").append("
    "); - tabs = $(".tabscontent").tabbedContent({ loop: true }).data("api"); - // switch to tab... - $("a") - .filter(function () { - return $(this).attr("href") === "#click-to-switch"; - }) - .on("click", function (e) { - var tab = prompt("Tab to switch to (number or id)?"); - if (!tabs.switchTab(tab)) { - alert("That tab does not exist :\\"); - } - e.preventDefault(); - }); - } - break; - - case UI_SELECT: - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } - if (data.visible) { - parent.append( - "
    " + - "
    " + - data.label + - "

    " + - "" + - "
    " - ); - } - break; case UI_ACCEL: if (hasAccel) break; - var parent; - if (data.parentControl) { - parent = $("#tab" + data.parentControl); - } else { - parent = $("#row"); - } hasAccel = true; - if (data.visible) { - parent.append( - "
    " + - "
    " + - data.label + - "

    " + - "ACCEL // Not implemented fully!
    " +
    -            "
    " - ); - - requestOrientationPermission(); - } + if (data.visible) { + addToHTML(data); + requestOrientationPermission(); + } break; + /* + * Update messages change the value/style of a component without adding new HTML + */ case UPDATE_LABEL: $("#l" + data.id).html(data.value); if(data.hasOwnProperty('elementStyle')) { @@ -964,3 +657,108 @@ var rangeSlider = function (isDiscrete) { } }); }; + + +var addToHTML = function(data) { + panelStyle = data.hasOwnProperty('panelStyle') ? " style='" + data.panelStyle + "' " : ""; + elementStyle = data.hasOwnProperty('elementStyle') ? " style='" + data.elementStyle + "' " : ""; + + if(!data.hasOwnProperty('parentControl') || $("#tab" + data.parentControl).length > 0) { + //We add the control with its own panel + var parent = data.hasOwnProperty('parentControl') ? + $("#tab" + data.parentControl) : + $("#row"); + + var html = ""; + switch(data.type) { + case UI_LABEL: + case UI_BUTTON: + case UI_SWITCHER: + case UI_CPAD: + case UI_PAD: + case UI_SLIDER: + case UI_NUMBER: + case UI_TEXT_INPUT: + case UI_SELECT: + case UI_GRAPH: + case UI_GAUGE: + case UI_ACCEL: + html = "
    " + data.label + "

    " + + elementHTML(data.type, data.id, data.value, elementStyle) + + "
    "; + break; + case UI_SEPARATOR: + html = "
    " + + "
    " + data.label + "

    "; + break; + } + + parent.append(html); + + } else { + //We are adding to an existing panel so we only need the HTML for the element + var parent = $("#id" + data.parentControl); + parent.append(elementHTML(data.type, data.id, data.value, elementStyle)); + } +} + +var elementHTML = function(type, id, value, elementStyle) { + switch(type) { + case UI_LABEL: + return "" + value + ""; + case UI_BUTTON: + return ""; + case UI_SWITCHER: + return ""; + case UI_CPAD: + case UI_PAD: + return ""; + case UI_SLIDER: + return "
    " + + "" + + value + "
    "; + case UI_NUMBER: + return ""; + case UI_TEXT_INPUT: + return ""; + case UI_SELECT: + return ""; + case UI_ACCEL: + return "ACCEL // Not implemented fully!
    ";
    +    default:
    +      return "";
    +  }
    +}
    \ No newline at end of file
    diff --git a/data/js/controls.min.js b/data/js/controls.min.js
    index 6667c78..1c0f96a 100644
    --- a/data/js/controls.min.js
    +++ b/data/js/controls.min.js
    @@ -1,4 +1,4 @@
    -const UI_INITIAL_GUI=200;const UI_RELOAD=201;const UPDATE_OFFSET=100;const UI_EXTEND_GUI=210;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPDATE_GAUGE=117;const UI_ACCEL=18;const UPTDATE_ACCEL=117;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;var graphData=new Array();var hasAccel=false;var sliderContinuous=false;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}}
    +const UI_INITIAL_GUI=200;const UI_RELOAD=201;const UPDATE_OFFSET=100;const UI_EXTEND_GUI=210;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPDATE_GAUGE=117;const UI_ACCEL=18;const UPDATE_ACCEL=118;const UI_SEPARATOR=19;const UPDATE_SEPARATOR=119;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;var graphData=new Array();var hasAccel=false;var sliderContinuous=false;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}}
     var websock;var websockConnected=false;function requestOrientationPermission(){}
     function saveGraphData(){localStorage.setItem("espuigraphs",JSON.stringify(graphData));}
     function restoreGraphData(id){var savedData=localStorage.getItem("espuigraphs",graphData);if(savedData!=null){savedData=JSON.parse(savedData);return savedData[id];}
    @@ -7,185 +7,13 @@ function restart(){$(document).add("*").off();$("#row").html("");websock.close()
     function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart,});}
     function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}}
     function start(){document.addEventListener("visibilitychange",handleVisibilityChange,false);if(window.location.port!=""||window.location.port!=80||window.location.port!=443){websock=new WebSocket("ws://"+window.location.hostname+":"+window.location.port+"/ws");}else{websock=new WebSocket("ws://"+window.location.hostname+"/ws");}
    -websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){console.log(evt);var data=JSON.parse(evt.data);var e=document.body;var center="";panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"'":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"'":"";switch(data.type){case UI_INITIAL_GUI:$("#row").html("");$("#tabsnav").html("");$("#tabscontent").html("");if(data.sliderContinuous){sliderContinuous=data.sliderContinuous;}
    -data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_EXTEND_GUI:data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");}
    -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -data.value+ -""+ -"
    ");} -break;case UI_BUTTON:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"
    ");$("#btn"+data.id).on({touchstart:function(e){e.preventDefault();buttonclick(data.id,true);},touchend:function(e){e.preventDefault();buttonclick(data.id,false);},});} -break;case UI_SWITCHER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");switcher(data.id,data.value);} -break;case UI_CPAD:case UI_PAD:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");$("#pf"+data.id).on({touchstart:function(e){e.preventDefault();padclick(UP,data.id,true);},touchend:function(e){e.preventDefault();padclick(UP,data.id,false);},});$("#pl"+data.id).on({touchstart:function(e){e.preventDefault();padclick(LEFT,data.id,true);},touchend:function(e){e.preventDefault();padclick(LEFT,data.id,false);},});$("#pr"+data.id).on({touchstart:function(e){e.preventDefault();padclick(RIGHT,data.id,true);},touchend:function(e){e.preventDefault();padclick(RIGHT,data.id,false);},});$("#pb"+data.id).on({touchstart:function(e){e.preventDefault();padclick(DOWN,data.id,true);},touchend:function(e){e.preventDefault();padclick(DOWN,data.id,false);},});$("#pc"+data.id).on({touchstart:function(e){e.preventDefault();padclick(CENTER,data.id,true);},touchend:function(e){e.preventDefault();padclick(CENTER,data.id,false);},});} -break;case UI_SLIDER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"
    "+ -""+ -""+ -data.value+ -""+ -"
    "+ -"
    ");rangeSlider(!sliderContinuous);} -break;case UI_NUMBER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} -break;case UI_TEXT_INPUT:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} +websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){console.log(evt);var data=JSON.parse(evt.data);var e=document.body;var center="";switch(data.type){case UI_INITIAL_GUI:$("#row").html("");$("#tabsnav").html("");$("#tabscontent").html("");if(data.sliderContinuous){sliderContinuous=data.sliderContinuous;} +data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_EXTEND_GUI:data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GAUGE:case UI_SEPARATOR:if(data.visible)addToHTML(data);break;case UI_BUTTON:if(data.visible){addToHTML(data);$("#btn"+data.id).on({touchstart:function(e){e.preventDefault();buttonclick(data.id,true);},touchend:function(e){e.preventDefault();buttonclick(data.id,false);},});} +break;case UI_SWITCHER:if(data.visible){addToHTML(data);switcher(data.id,data.value);} +break;case UI_CPAD:case UI_PAD:if(data.visible){addToHTML(data);$("#pf"+data.id).on({touchstart:function(e){e.preventDefault();padclick(UP,data.id,true);},touchend:function(e){e.preventDefault();padclick(UP,data.id,false);},});$("#pl"+data.id).on({touchstart:function(e){e.preventDefault();padclick(LEFT,data.id,true);},touchend:function(e){e.preventDefault();padclick(LEFT,data.id,false);},});$("#pr"+data.id).on({touchstart:function(e){e.preventDefault();padclick(RIGHT,data.id,true);},touchend:function(e){e.preventDefault();padclick(RIGHT,data.id,false);},});$("#pb"+data.id).on({touchstart:function(e){e.preventDefault();padclick(DOWN,data.id,true);},touchend:function(e){e.preventDefault();padclick(DOWN,data.id,false);},});$("#pc"+data.id).on({touchstart:function(e){e.preventDefault();padclick(CENTER,data.id,true);},touchend:function(e){e.preventDefault();padclick(CENTER,data.id,false);},});} +break;case UI_SLIDER:if(data.visible){addToHTML(data);rangeSlider(!sliderContinuous);} break;case UI_TAB:if(data.visible){$("#tabsnav").append("
  • "+data.value+"
  • ");$("#tabscontent").append("
    ");tabs=$(".tabscontent").tabbedContent({loop:true}).data("api");$("a").filter(function(){return $(this).attr("href")==="#click-to-switch";}).on("click",function(e){var tab=prompt("Tab to switch to (number or id)?");if(!tabs.switchTab(tab)){alert("That tab does not exist :\\");} e.preventDefault();});} -break;case UI_SELECT:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} -break;case UI_ACCEL:if(hasAccel)break;var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -hasAccel=true;if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"ACCEL // Not implemented fully!
    "+
    -"
    ");requestOrientationPermission();} +break;case UI_GRAPH:if(data.visible){addToHTML(data);graphData[data.id]=restoreGraphData(data.id);renderGraphSvg(graphData[data.id],"graph"+data.id);} +break;case ADD_GRAPH_POINT:var ts=Math.round(new Date().getTime()/1000);graphData[data.id].push({x:ts,y:data.value});saveGraphData();renderGraphSvg(graphData[data.id],"graph"+data.id);break;case CLEAR_GRAPH:graphData[data.id]=[];saveGraphData();renderGraphSvg(graphData[data.id],"graph"+data.id);break;case UI_ACCEL:if(hasAccel)break;hasAccel=true;if(data.visible){addToHTML(data);requestOrientationPermission();} break;case UPDATE_LABEL:$("#l"+data.id).html(data.value);if(data.hasOwnProperty('elementStyle')){$("#l"+data.id).attr("style",data.elementStyle);} break;case UPDATE_SWITCHER:switcher(data.id,data.value=="0"?0:1);if(data.hasOwnProperty('elementStyle')){$("#sl"+data.id).attr("style",data.elementStyle);} break;case UPDATE_SLIDER:slider_move($("#id"+data.id),data.value,"100",false);if(data.hasOwnProperty('elementStyle')){$("#sl"+data.id).attr("style",data.elementStyle);} @@ -269,4 +48,38 @@ function buttonclick(number,isdown){if(isdown)websock.send("bdown:"+number);else function padclick(type,number,isdown){switch(type){case CENTER:if(isdown)websock.send("pcdown:"+number);else websock.send("pcup:"+number);break;case UP:if(isdown)websock.send("pfdown:"+number);else websock.send("pfup:"+number);break;case DOWN:if(isdown)websock.send("pbdown:"+number);else websock.send("pbup:"+number);break;case LEFT:if(isdown)websock.send("pldown:"+number);else websock.send("plup:"+number);break;case RIGHT:if(isdown)websock.send("prdown:"+number);else websock.send("prup:"+number);break;}} function switcher(number,state){if(state==null){if($("#s"+number).is(":checked")){websock.send("sactive:"+number);$("#sl"+number).addClass("checked");}else{websock.send("sinactive:"+number);$("#sl"+number).removeClass("checked");}}else if(state==1){$("#sl"+number).addClass("checked");$("#sl"+number).prop("checked",true);}else if(state==0){$("#sl"+number).removeClass("checked");$("#sl"+number).prop("checked",false);}} var rangeSlider=function(isDiscrete){var range=$(".range-slider__range");var slidercb=function(){sliderchange($(this).attr("id").replace(/^\D+/g,""));};range.on({input:function(){$(this).next().html(this.value)}});range.each(function(){$(this).next().html(this.value);if($(this).attr("callbackSet")!="true"){if(!isDiscrete){$(this).on({input:slidercb});}else{$(this).on({change:slidercb});} -$(this).attr("callbackSet","true");}});}; \ No newline at end of file +$(this).attr("callbackSet","true");}});};var addToHTML=function(data){panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"' ":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"' ":"";if(!data.hasOwnProperty('parentControl')||$("#tab"+data.parentControl).length>0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    "+data.label+"

    "+ +elementHTML(data.type,data.id,data.value,elementStyle)+ +"
    ";break;case UI_SEPARATOR:html="
    "+ +"
    "+data.label+"

    ";break;} +parent.append(html);}else{var parent=$("#id"+data.parentControl);parent.append(elementHTML(data.type,data.id,data.value,elementStyle));}} +var elementHTML=function(type,id,value,elementStyle){switch(type){case UI_LABEL:return""+value+"";case UI_BUTTON:return"";case UI_SWITCHER:return"";case UI_CPAD:case UI_PAD:return"";case UI_SLIDER:return"
    "+ +""+ +value+"
    ";case UI_NUMBER:return"";case UI_TEXT_INPUT:return"";case UI_SELECT:return"";case UI_ACCEL:return"ACCEL // Not implemented fully!
    ";default:return"";}}
    \ No newline at end of file
    diff --git a/docs/ui_groupedbuttons.png b/docs/ui_groupedbuttons.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..55a13c3f10d8912ebbf78ff6ec129301a3089b29
    GIT binary patch
    literal 24947
    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

    1_VFHzJP1WsUFr#rb-wTzAi+ zx*K*nzkKVG_ja=2d;%WShJ!6~{hk==QDMVizv)3o1|6@24J3z-u-`L0&cN7wtH87P zd9lgCIdrk*W@5?O)vj7Y(0TrP_4Y8vcV?6>JY?3VV#iy7&HDB3&eg9mIW`6NSMl

    sEP^*s0L0=;aDOaLz|ig3K|l8rp0h!dy3Z%^={t5A91e9NuYqeqWu?tH}Kha5t%|Q>Nn2=ytP^Jw-21z7>#X`ZEFVa!=J*VC6ZCihSv z#pZ|*D5m`+u-WfhMQilRokQ=>T-J%ORwc`db~I$xS`NGqIDx|x#X72++;`#nC!P~>L&tOr`}kGY zvwAvhD3V7-8mxwKpwbJn~P_d$p&`s2aK8KNfl>Ia>3_IR=+l+_ajCBIgfuE;a0x8#}l5(9N zb$_MtW_^OH;+DJT34y&hvjH9y(sXg?@7>=YD;H!rJa^O}8bWk*|#kYR{e1Jqhk^ z3RWA3&tqmKg6<5Un>wo&?ZH@0%iBXxb5dg-2WYHBbj@-9tCY@Y7%oIM(nid^fg!G> zSVLp(^=gBxb1pLgM#upaduqib3zRinxJ4j~w=cxWe9ny^ze<$&b|e(f_E|p$f8Lf} z3Oa#}qd;Sb;D`ru2*2fI_b7RX}roultJ zlfCH)CSL{eyBWc(-(hrM)3xsSRai!ffk$t}-NYV=%~V+x z>};!bL?T+`;~;cuEMIOfvmvo)B6InA?;evjdulA{0#=ybgLe8Ck8UlOJEh~Xu=)}2 z%Z<>ipss_^@If;?(VPvSa$1~!RU2ASQ2(^)gM-qr0Rx#iT`?Ao*to-{TaJT zz>>;B87hX)=W{f?=(C{T&NlwVW^IDTrDojd2Du2Fx~H-ia*6)2d(KsZHJxtgTUo%tU{HyRcdD^vDAA2t5rrS1z?T_Tw%Jd;qB%Zrf zXA74$(A%A5hhuzMBDCWWk?U_{fWod%rK&g471qwPhqEBdFz>6gG*|_sVwqCx;2(V5 zmT%Na!|SFE<{PkX6r1*~o#BhF^Q$)!iqJQa{fcWv?{E1T-z@r8(Sk%KFH=!IXvL(`wwr~qxJ#tnM@(Gi%qwZ_m0}x*^6!U<*R-zdKY7~4) z)-q-Re8l4^Y;eB|8hDRKCBjUA?Hzx_hb41_!t04@0~edw*;C&Q#k-W&&R^(_1p+ZZ zQJ$L;kE5$ zIX(v5bc=bJHC=R=Gfu5=M!yM^-}LJ{h8mGV)Yzx<8oMK{qX`y%k$G}-a{Eg z?%0DgzNeS9`C=E)c~#=s(mo*{9CVGP7#Z{ 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%0A=zSvYc?M1vSPViXGJuR|be?wh+{&3ru%j9Pz z2tLc>`2lBgV=AefM;k%ATcBAhNIsfuTV_k0po6tJH6Vq??bc^DL$RJLoRA2%5$2np zYk{8VZfg8DzE^%&g=%t`|fTVwbqxOHnm6C{oC+^sN@Bo)jv>PH*4A+?R)T z9}~-8M7@Jf9Y$Z-@y?s(6{Ukc5}L&y*+d;ATZ{C-mK^;WM2&9H$eFSBO2q44O5R+T z>JrgvtIJm8&5GIZD{R}cCQ=JhwCNO)F8dZdhDmF2ooIp{_e>jG;c|?4ekOJsks|s@0gQvHzjo?J(*jyAbzcd6Vx2ZbTss&baVtlVg^%5 zjUBVVNLu~xLnmqiaZ1eo)*i`Opb8tKWvS1m=9Chod&YVWGCWk+whD;p2u1dcaAWs) z2Nw`}e)6DCzY>30*{N*pYiiGmj5v%S(gj(j7DkC?wkn7Nul8hNc#1HuaU$4<<7dj% z#b(qY$yP=M0p%7y)7nJ6f&bXdO!Oq5`83wwu_q@DPH#Y_$ro#BB+XMi`ju851>^LM9t|dvstI_FdOP5_wVW~4hb6|$8gp~%H|{Z&JHUJ zCPnx7)af@6QrwQ2*hkK*H>Ydo&%=E_g^Al&c?d+F>`2!i@z0V(G^bu5F!%3R%Db|gPY{B3aj-u5Lv z$$w=&;u#;D?k1&5PRdq8utOfl_W=62g`U}{3xLtejqJLG54O5^0brC930u7wjF!s5 zXwkg_<3+=DdjMcGGMkjN2vWc!05Iww9{qeV80Dw~__}XiEWBVJ*^mt+`MsWu_ltrX xJW`IYD@XJI;$*>&@b!~EPRW0>(v!Jwrdp7L-#nJcuaI1ZJm6$kyzf}jzX4u+KZO7Q literal 0 HcmV?d00001 diff --git a/docs/ui_groupedbuttons2.png b/docs/ui_groupedbuttons2.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4ddd218dc97e3094055125fcbeb59dc48dd0eb GIT binary patch literal 43987 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

    j>pe<<*%l_x|CRrfPry-<$ye#R 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 M1Eu>p_jF(VFOxxX#{d8T literal 0 HcmV?d00001 diff --git a/docs/ui_separators.png b/docs/ui_separators.png new file mode 100644 index 0000000000000000000000000000000000000000..d355bacd719e7359353a458200f28a5a7eede335 GIT binary patch literal 20434 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 literal 0 HcmV?d00001 diff --git a/src/ESPUI.cpp b/src/ESPUI.cpp index 41589b9..3fd67fe 100644 --- a/src/ESPUI.cpp +++ b/src/ESPUI.cpp @@ -714,6 +714,10 @@ uint16_t ESPUIClass::gauge(const char* label, ControlColor color, int number, in return numberId; } +uint16_t ESPUIClass::separator(const char* label) { + return addControl(ControlType::Separator, label, "", ControlColor::Alizarin, Control::noParent, nullptr); +} + uint16_t ESPUIClass::accelerometer(const char* label, void (*callback)(Control*, int), ControlColor color) { return addControl(ControlType::Accel, label, "", color, Control::noParent, callback); diff --git a/src/ESPUI.h b/src/ESPUI.h index af26ce3..946b71c 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -56,6 +56,7 @@ enum ControlType : uint8_t Step, Gauge, Accel, + Separator, UpdateOffset = 100, UpdatePad = 101, @@ -75,6 +76,7 @@ enum ControlType : uint8_t UpdateStep, UpdateGauge, UpdateAccel, + UpdateSeparator, InitialGui = 200, Reload = 201, @@ -256,6 +258,7 @@ public: uint16_t graph(const char* label, ControlColor color); // Create Graph display uint16_t gauge(const char* label, ControlColor color, int value, int min = 0, int max = 100); // Create Gauge display + uint16_t separator(const char* label); //Create separator // Input only uint16_t accelerometer(const char* label, void (*callback)(Control*, int), ControlColor color); diff --git a/src/dataControlsJS.h b/src/dataControlsJS.h index 35a274a..fc06d73 100644 --- a/src/dataControlsJS.h +++ b/src/dataControlsJS.h @@ -1,5 +1,5 @@ const char JS_CONTROLS[] PROGMEM = R"=====( -const UI_INITIAL_GUI=200;const UI_RELOAD=201;const UPDATE_OFFSET=100;const UI_EXTEND_GUI=210;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPDATE_GAUGE=117;const UI_ACCEL=18;const UPTDATE_ACCEL=117;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;var graphData=new Array();var hasAccel=false;var sliderContinuous=false;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} +const UI_INITIAL_GUI=200;const UI_RELOAD=201;const UPDATE_OFFSET=100;const UI_EXTEND_GUI=210;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPDATE_GAUGE=117;const UI_ACCEL=18;const UPDATE_ACCEL=118;const UI_SEPARATOR=19;const UPDATE_SEPARATOR=119;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;var graphData=new Array();var hasAccel=false;var sliderContinuous=false;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} var websock;var websockConnected=false;function requestOrientationPermission(){} function saveGraphData(){localStorage.setItem("espuigraphs",JSON.stringify(graphData));} function restoreGraphData(id){var savedData=localStorage.getItem("espuigraphs",graphData);if(savedData!=null){savedData=JSON.parse(savedData);return savedData[id];} @@ -8,185 +8,13 @@ function restart(){$(document).add("*").off();$("#row").html("");websock.close() function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart,});} function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}} function start(){document.addEventListener("visibilitychange",handleVisibilityChange,false);if(window.location.port!=""||window.location.port!=80||window.location.port!=443){websock=new WebSocket("ws://"+window.location.hostname+":"+window.location.port+"/ws");}else{websock=new WebSocket("ws://"+window.location.hostname+"/ws");} -websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){console.log(evt);var data=JSON.parse(evt.data);var e=document.body;var center="";panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"'":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"'":"";switch(data.type){case UI_INITIAL_GUI:$("#row").html("");$("#tabsnav").html("");$("#tabscontent").html("");if(data.sliderContinuous){sliderContinuous=data.sliderContinuous;} -data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_EXTEND_GUI:data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("

    "+ -"
    "+ -data.label+ -"

    "+ -""+ -data.value+ -""+ -"
    ");} -break;case UI_BUTTON:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"
    ");$("#btn"+data.id).on({touchstart:function(e){e.preventDefault();buttonclick(data.id,true);},touchend:function(e){e.preventDefault();buttonclick(data.id,false);},});} -break;case UI_SWITCHER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");switcher(data.id,data.value);} -break;case UI_CPAD:case UI_PAD:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");$("#pf"+data.id).on({touchstart:function(e){e.preventDefault();padclick(UP,data.id,true);},touchend:function(e){e.preventDefault();padclick(UP,data.id,false);},});$("#pl"+data.id).on({touchstart:function(e){e.preventDefault();padclick(LEFT,data.id,true);},touchend:function(e){e.preventDefault();padclick(LEFT,data.id,false);},});$("#pr"+data.id).on({touchstart:function(e){e.preventDefault();padclick(RIGHT,data.id,true);},touchend:function(e){e.preventDefault();padclick(RIGHT,data.id,false);},});$("#pb"+data.id).on({touchstart:function(e){e.preventDefault();padclick(DOWN,data.id,true);},touchend:function(e){e.preventDefault();padclick(DOWN,data.id,false);},});$("#pc"+data.id).on({touchstart:function(e){e.preventDefault();padclick(CENTER,data.id,true);},touchend:function(e){e.preventDefault();padclick(CENTER,data.id,false);},});} -break;case UI_SLIDER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"
    "+ -""+ -""+ -data.value+ -""+ -"
    "+ -"
    ");rangeSlider(!sliderContinuous);} -break;case UI_NUMBER:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} -break;case UI_TEXT_INPUT:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} +websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){console.log(evt);var data=JSON.parse(evt.data);var e=document.body;var center="";switch(data.type){case UI_INITIAL_GUI:$("#row").html("");$("#tabsnav").html("");$("#tabscontent").html("");if(data.sliderContinuous){sliderContinuous=data.sliderContinuous;} +data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_EXTEND_GUI:data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element),};handleEvent(fauxEvent);});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GAUGE:case UI_SEPARATOR:if(data.visible)addToHTML(data);break;case UI_BUTTON:if(data.visible){addToHTML(data);$("#btn"+data.id).on({touchstart:function(e){e.preventDefault();buttonclick(data.id,true);},touchend:function(e){e.preventDefault();buttonclick(data.id,false);},});} +break;case UI_SWITCHER:if(data.visible){addToHTML(data);switcher(data.id,data.value);} +break;case UI_CPAD:case UI_PAD:if(data.visible){addToHTML(data);$("#pf"+data.id).on({touchstart:function(e){e.preventDefault();padclick(UP,data.id,true);},touchend:function(e){e.preventDefault();padclick(UP,data.id,false);},});$("#pl"+data.id).on({touchstart:function(e){e.preventDefault();padclick(LEFT,data.id,true);},touchend:function(e){e.preventDefault();padclick(LEFT,data.id,false);},});$("#pr"+data.id).on({touchstart:function(e){e.preventDefault();padclick(RIGHT,data.id,true);},touchend:function(e){e.preventDefault();padclick(RIGHT,data.id,false);},});$("#pb"+data.id).on({touchstart:function(e){e.preventDefault();padclick(DOWN,data.id,true);},touchend:function(e){e.preventDefault();padclick(DOWN,data.id,false);},});$("#pc"+data.id).on({touchstart:function(e){e.preventDefault();padclick(CENTER,data.id,true);},touchend:function(e){e.preventDefault();padclick(CENTER,data.id,false);},});} +break;case UI_SLIDER:if(data.visible){addToHTML(data);rangeSlider(!sliderContinuous);} break;case UI_TAB:if(data.visible){$("#tabsnav").append("
  • "+data.value+"
  • ");$("#tabscontent").append("
    ");tabs=$(".tabscontent").tabbedContent({loop:true}).data("api");$("a").filter(function(){return $(this).attr("href")==="#click-to-switch";}).on("click",function(e){var tab=prompt("Tab to switch to (number or id)?");if(!tabs.switchTab(tab)){alert("That tab does not exist :\\");} e.preventDefault();});} -break;case UI_SELECT:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -""+ -"
    ");} -break;case UI_ACCEL:if(hasAccel)break;var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} -hasAccel=true;if(data.visible){parent.append("
    "+ -"
    "+ -data.label+ -"

    "+ -"ACCEL // Not implemented fully!
    "+
    -"
    ");requestOrientationPermission();} +break;case UI_GRAPH:if(data.visible){addToHTML(data);graphData[data.id]=restoreGraphData(data.id);renderGraphSvg(graphData[data.id],"graph"+data.id);} +break;case ADD_GRAPH_POINT:var ts=Math.round(new Date().getTime()/1000);graphData[data.id].push({x:ts,y:data.value});saveGraphData();renderGraphSvg(graphData[data.id],"graph"+data.id);break;case CLEAR_GRAPH:graphData[data.id]=[];saveGraphData();renderGraphSvg(graphData[data.id],"graph"+data.id);break;case UI_ACCEL:if(hasAccel)break;hasAccel=true;if(data.visible){addToHTML(data);requestOrientationPermission();} break;case UPDATE_LABEL:$("#l"+data.id).html(data.value);if(data.hasOwnProperty('elementStyle')){$("#l"+data.id).attr("style",data.elementStyle);} break;case UPDATE_SWITCHER:switcher(data.id,data.value=="0"?0:1);if(data.hasOwnProperty('elementStyle')){$("#sl"+data.id).attr("style",data.elementStyle);} break;case UPDATE_SLIDER:slider_move($("#id"+data.id),data.value,"100",false);if(data.hasOwnProperty('elementStyle')){$("#sl"+data.id).attr("style",data.elementStyle);} @@ -270,7 +49,41 @@ function buttonclick(number,isdown){if(isdown)websock.send("bdown:"+number);else function padclick(type,number,isdown){switch(type){case CENTER:if(isdown)websock.send("pcdown:"+number);else websock.send("pcup:"+number);break;case UP:if(isdown)websock.send("pfdown:"+number);else websock.send("pfup:"+number);break;case DOWN:if(isdown)websock.send("pbdown:"+number);else websock.send("pbup:"+number);break;case LEFT:if(isdown)websock.send("pldown:"+number);else websock.send("plup:"+number);break;case RIGHT:if(isdown)websock.send("prdown:"+number);else websock.send("prup:"+number);break;}} function switcher(number,state){if(state==null){if($("#s"+number).is(":checked")){websock.send("sactive:"+number);$("#sl"+number).addClass("checked");}else{websock.send("sinactive:"+number);$("#sl"+number).removeClass("checked");}}else if(state==1){$("#sl"+number).addClass("checked");$("#sl"+number).prop("checked",true);}else if(state==0){$("#sl"+number).removeClass("checked");$("#sl"+number).prop("checked",false);}} var rangeSlider=function(isDiscrete){var range=$(".range-slider__range");var slidercb=function(){sliderchange($(this).attr("id").replace(/^\D+/g,""));};range.on({input:function(){$(this).next().html(this.value)}});range.each(function(){$(this).next().html(this.value);if($(this).attr("callbackSet")!="true"){if(!isDiscrete){$(this).on({input:slidercb});}else{$(this).on({change:slidercb});} -$(this).attr("callbackSet","true");}});}; +$(this).attr("callbackSet","true");}});};var addToHTML=function(data){panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"' ":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"' ":"";if(!data.hasOwnProperty('parentControl')||$("#tab"+data.parentControl).length>0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    "+data.label+"

    "+ +elementHTML(data.type,data.id,data.value,elementStyle)+ +"
    ";break;case UI_SEPARATOR:html="
    "+ +"
    "+data.label+"

    ";break;} +parent.append(html);}else{var parent=$("#id"+data.parentControl);parent.append(elementHTML(data.type,data.id,data.value,elementStyle));}} +var elementHTML=function(type,id,value,elementStyle){switch(type){case UI_LABEL:return""+value+"";case UI_BUTTON:return"";case UI_SWITCHER:return"";case UI_CPAD:case UI_PAD:return"";case UI_SLIDER:return"
    "+ +""+ +value+"
    ";case UI_NUMBER:return"";case UI_TEXT_INPUT:return"";case UI_SELECT:return"";case UI_ACCEL:return"ACCEL // Not implemented fully!
    ";default:return"";}}
     )=====";
     
    -const uint8_t JS_CONTROLS_GZIP[3564] PROGMEM = { 31,139,8,0,182,30,210,97,2,255,237,91,109,115,219,54,18,254,158,95,65,51,157,136,60,43,122,73,226,52,149,76,103,20,89,73,212,42,182,207,150,155,206,165,57,15,68,66,22,199,20,201,146,160,95,234,234,191,223,226,141,4,40,74,86,236,180,157,222,228,139,45,46,22,139,7,187,11,236,2,92,186,81,152,18,227,116,120,54,60,24,142,135,189,209,217,187,211,161,243,172,213,234,186,178,225,120,48,58,236,237,3,173,45,105,71,251,189,241,224,236,240,237,219,147,193,216,105,171,188,131,95,198,131,131,125,46,163,173,208,199,195,241,96,228,40,132,35,144,88,146,199,72,197,32,195,179,62,165,60,211,153,250,156,235,89,193,245,230,116,60,62,60,112,158,235,124,130,218,110,61,47,56,71,189,55,0,226,133,206,200,137,237,214,139,130,239,228,227,112,220,127,63,56,118,118,116,214,156,222,110,237,40,220,163,225,62,208,94,150,120,57,181,221,122,89,112,30,156,126,120,3,180,239,117,78,65,109,183,190,87,212,5,122,4,131,28,157,142,157,87,58,183,210,210,110,189,42,122,188,59,238,29,189,119,126,16,132,222,254,62,167,156,29,29,14,15,40,171,104,232,143,6,189,99,193,220,110,253,160,140,216,123,227,180,75,6,225,52,197,32,39,131,209,160,15,210,74,54,145,228,182,98,149,195,163,241,144,234,191,100,22,73,110,43,102,249,48,4,66,201,42,140,214,86,108,242,161,247,139,211,46,217,131,209,218,170,41,198,131,35,167,93,182,4,35,182,21,59,188,235,157,190,27,56,237,146,29,4,181,173,152,161,215,239,83,223,40,76,48,102,156,130,172,8,200,61,123,255,240,227,65,238,215,163,193,219,113,238,191,199,195,119,239,199,185,151,246,7,7,99,48,186,156,96,255,108,124,122,252,239,211,195,225,201,32,23,213,63,27,124,24,28,247,70,197,58,233,159,29,13,160,215,241,240,103,232,250,44,39,126,28,140,123,39,71,239,123,35,69,252,217,201,233,193,219,209,225,71,109,140,126,239,248,248,112,156,123,117,255,172,55,26,254,167,119,12,170,126,153,147,246,123,199,63,229,30,218,63,59,56,60,24,56,207,118,118,186,151,40,49,206,19,20,207,246,17,65,78,136,175,140,94,146,160,27,203,102,45,51,148,246,92,23,7,206,20,5,41,102,164,52,240,61,156,244,163,144,248,97,22,101,169,104,154,102,161,75,252,40,52,220,40,136,146,126,128,210,212,98,63,135,158,125,43,126,56,7,217,124,130,147,156,222,77,175,124,226,206,20,62,148,98,85,103,157,4,147,44,9,77,248,243,91,22,249,41,54,187,130,69,168,80,50,224,57,78,80,224,229,205,133,62,37,71,140,9,78,18,255,18,39,57,83,161,95,201,116,133,9,74,227,25,10,72,206,148,235,91,242,164,89,56,13,162,43,69,14,87,191,108,119,81,146,68,69,127,105,10,217,140,2,255,119,148,248,97,206,64,45,33,27,61,148,92,152,93,15,79,81,22,16,73,52,187,139,197,35,170,249,43,60,73,35,247,162,171,252,6,51,132,216,37,216,43,91,33,193,191,101,56,37,135,137,143,67,130,40,233,8,39,115,63,77,225,151,101,223,46,30,229,156,41,186,196,239,164,3,64,83,16,185,40,56,33,81,130,206,113,35,197,100,72,240,220,50,113,26,103,62,243,147,212,172,255,120,114,120,208,72,9,204,226,220,159,222,88,185,251,216,118,87,17,156,192,248,81,162,200,246,193,194,204,131,96,68,143,185,155,54,214,121,229,88,133,240,174,63,181,242,174,91,78,152,5,129,125,91,200,98,160,98,148,164,184,224,178,187,92,135,197,144,159,124,239,51,128,228,228,79,159,203,120,81,66,64,5,223,89,94,228,102,115,208,156,221,64,158,103,153,255,50,237,70,52,157,194,162,248,206,50,31,39,209,21,60,207,200,60,176,76,211,238,10,83,52,220,32,130,177,193,169,185,20,85,52,172,186,19,176,66,150,14,192,55,18,24,97,133,249,168,244,156,23,198,72,240,60,186,196,124,49,153,108,149,60,61,79,48,14,77,123,137,21,112,106,124,9,246,42,184,56,104,134,194,104,26,7,145,33,16,80,144,79,30,191,122,249,124,167,91,209,171,152,186,70,13,173,91,55,240,221,139,142,208,92,125,161,77,122,134,66,47,192,63,251,169,63,241,3,159,220,244,129,112,14,10,186,5,59,110,149,21,240,228,201,150,212,121,99,230,123,30,14,237,219,220,32,116,1,20,254,42,140,148,179,195,204,7,151,240,99,228,167,4,135,176,189,152,151,249,152,46,27,211,172,87,99,169,51,173,51,199,186,242,67,47,186,106,80,135,164,163,52,226,40,33,91,142,105,254,241,71,117,203,171,214,170,150,23,47,158,231,246,101,251,233,71,60,57,129,223,152,88,230,85,218,105,54,205,237,114,199,89,148,146,16,205,241,182,217,89,110,164,82,183,205,230,21,168,188,187,192,128,247,222,194,133,140,71,210,97,163,48,138,113,232,72,205,90,248,146,208,173,58,76,163,0,67,255,115,16,201,57,13,202,183,129,207,173,242,77,130,175,1,95,110,235,98,205,20,254,79,146,12,119,23,221,2,26,91,77,155,96,99,140,32,178,188,198,52,105,152,210,214,72,163,132,42,9,60,6,82,223,97,46,118,151,4,202,238,149,54,35,104,104,120,108,47,162,173,216,201,253,118,18,121,55,140,230,194,19,78,192,217,186,49,10,49,236,135,55,1,176,65,151,6,132,223,195,171,240,40,1,253,39,228,198,170,21,237,53,251,181,9,75,129,114,214,204,109,198,92,52,110,155,53,240,36,179,139,3,76,71,90,35,80,229,168,16,169,54,75,161,34,102,179,118,114,19,99,17,181,245,131,70,167,98,159,164,36,130,38,105,136,46,171,200,160,76,88,190,68,109,130,117,201,134,41,167,28,176,237,151,147,144,74,62,240,117,70,167,162,147,40,72,27,211,40,25,32,0,47,230,229,236,177,120,4,209,246,154,155,247,150,178,119,74,225,77,48,219,245,69,87,113,5,43,239,5,126,98,119,39,9,70,23,93,169,137,226,180,212,249,123,0,240,163,93,167,188,23,36,56,136,144,103,149,185,217,33,174,147,59,38,241,137,244,151,0,77,112,192,76,52,71,126,248,30,35,208,175,180,80,193,80,150,199,142,94,29,58,51,88,2,32,49,55,36,127,236,115,109,216,183,252,209,17,30,144,187,177,202,35,182,60,133,147,121,21,88,86,202,100,155,125,128,165,180,6,138,97,179,130,152,189,235,249,151,134,239,57,53,223,51,183,185,31,248,222,246,35,179,102,152,219,234,82,129,13,4,182,48,167,70,174,34,154,187,102,243,48,53,32,135,243,12,194,215,37,176,63,82,114,90,97,79,120,182,169,176,61,104,53,119,103,59,123,114,12,166,16,74,107,2,113,119,150,52,57,71,10,67,50,52,193,18,24,125,145,73,56,76,142,193,254,62,189,130,28,168,150,143,112,137,130,12,179,17,168,80,46,190,9,147,221,99,106,209,45,193,79,203,255,52,83,192,126,253,39,154,98,146,17,18,113,99,76,72,120,151,57,104,151,40,156,195,110,130,97,41,133,208,135,117,103,137,143,165,117,174,27,52,136,217,53,181,75,22,175,237,192,243,143,42,211,242,78,123,185,97,169,186,25,90,209,157,167,95,36,202,220,25,75,136,58,69,100,178,111,113,35,78,48,221,25,246,249,73,130,46,120,5,132,16,81,103,112,187,139,58,147,2,134,186,143,12,145,65,45,120,238,167,59,159,188,86,249,230,126,170,251,241,133,77,225,164,155,238,5,60,228,210,225,173,194,77,28,199,108,155,175,77,176,28,164,127,30,13,205,10,12,58,99,209,217,15,107,123,187,126,24,103,196,160,225,218,169,177,30,147,232,186,198,65,148,48,68,97,159,26,88,14,74,211,105,205,103,217,177,171,182,17,150,166,116,95,166,4,54,111,125,183,202,135,144,222,84,72,92,246,38,122,65,216,145,15,244,247,183,248,162,120,21,36,85,114,32,145,108,136,174,153,208,121,224,239,237,34,67,219,201,98,228,241,197,124,122,84,55,170,183,50,101,27,91,199,45,246,49,166,142,120,170,171,99,239,201,227,31,94,238,180,186,187,77,4,254,0,48,238,132,195,110,212,190,4,81,117,7,13,84,242,80,80,244,206,239,75,48,85,242,107,144,130,135,66,162,119,146,95,2,169,146,95,131,52,217,4,82,147,187,84,113,2,112,28,177,60,95,155,128,181,240,194,169,159,204,107,43,176,243,123,210,250,230,224,69,135,181,240,221,18,252,195,159,40,114,185,29,237,54,97,145,232,27,16,93,239,212,95,239,25,84,213,37,113,223,160,90,37,67,13,170,12,98,240,112,136,204,31,31,12,82,147,178,4,51,121,56,76,190,148,31,140,83,23,179,4,116,242,112,160,108,49,61,24,167,38,101,9,166,251,112,152,98,217,60,24,104,73,206,218,180,143,189,33,251,191,9,207,244,225,41,191,89,248,58,161,90,201,205,18,122,11,41,132,139,254,60,83,171,76,15,121,250,198,250,212,140,185,15,219,105,11,254,163,107,167,214,110,193,47,158,137,213,202,103,137,213,105,165,58,250,217,25,151,171,156,86,43,185,152,212,77,206,162,234,54,203,68,156,48,9,214,214,210,101,206,146,3,241,23,167,223,242,59,213,105,184,91,136,219,57,214,189,51,9,144,123,209,173,48,47,5,29,102,243,74,239,9,217,27,184,53,206,2,7,60,118,55,46,89,249,147,126,8,128,120,219,92,127,239,80,188,205,254,102,198,135,152,145,222,156,151,96,111,96,57,218,235,158,118,235,189,233,44,105,84,191,184,205,21,171,165,166,52,87,3,30,121,203,33,199,164,67,206,18,60,117,106,138,105,41,157,106,76,193,111,22,41,102,213,141,240,146,49,203,194,242,9,209,126,212,63,26,186,0,120,154,96,175,207,159,173,219,32,138,226,14,141,133,11,155,221,205,91,38,138,125,62,50,2,238,169,31,128,197,173,60,54,210,87,81,236,53,226,119,22,153,249,41,224,33,4,206,197,116,98,166,237,192,225,247,49,155,247,83,18,61,229,71,90,179,187,96,17,219,100,116,179,174,70,89,186,30,0,142,19,39,209,60,38,150,57,70,19,131,68,134,56,227,195,47,139,47,60,35,74,96,170,246,107,126,15,190,69,231,211,224,76,208,195,130,71,219,190,69,1,78,168,136,25,34,84,166,225,69,56,53,194,136,24,248,218,79,137,209,249,245,87,102,227,138,192,94,21,183,89,181,199,183,245,170,93,219,194,154,116,191,100,193,242,14,75,119,42,114,101,242,230,251,173,77,94,98,211,89,97,148,194,108,76,221,18,71,149,109,202,26,143,98,246,98,149,194,231,63,55,221,113,36,133,15,134,41,119,133,66,185,204,170,25,125,24,110,58,29,234,12,203,108,84,231,116,67,229,75,68,76,43,245,127,199,150,93,248,21,91,170,144,45,153,250,237,210,18,150,222,47,127,21,22,116,125,7,22,90,217,244,23,129,73,9,142,239,64,195,138,202,190,109,11,234,182,48,245,207,179,4,51,60,172,62,165,116,239,32,121,92,36,92,127,73,154,222,200,9,32,81,223,0,242,210,151,79,66,248,103,103,169,166,70,158,15,187,160,45,72,171,89,195,201,229,185,181,220,183,110,10,168,121,23,205,208,165,202,66,102,111,146,58,31,16,153,53,146,40,3,27,208,114,3,144,8,62,68,75,117,198,254,28,126,53,225,228,209,170,66,218,136,179,116,102,221,94,119,72,90,191,233,20,254,5,113,167,84,112,116,31,228,10,110,165,240,177,83,161,176,79,159,191,242,120,178,204,240,219,130,80,22,196,199,225,104,100,188,25,24,61,131,233,198,88,151,231,178,69,131,178,115,252,119,158,79,88,165,39,221,98,101,129,163,205,219,255,100,163,230,229,148,172,220,229,31,101,98,166,49,163,73,139,198,136,225,207,99,158,250,96,207,152,102,65,112,179,165,222,106,32,58,69,12,233,45,45,185,228,6,103,164,210,36,246,212,62,19,20,148,239,195,185,241,118,33,117,173,20,28,101,132,70,184,114,159,184,188,139,174,175,132,44,121,134,82,58,206,74,88,212,139,215,162,232,65,68,74,105,191,245,69,53,252,252,164,10,146,145,23,154,69,232,85,123,84,67,202,223,165,174,121,103,6,7,145,150,249,186,213,105,127,25,180,244,193,216,248,133,159,184,34,162,21,139,150,150,154,128,92,5,101,221,132,152,97,42,165,119,127,29,80,113,177,68,101,177,251,145,92,24,0,187,183,101,117,73,247,129,165,92,150,176,109,133,157,249,191,10,182,146,168,123,25,151,159,10,151,206,20,15,133,182,36,236,62,224,68,121,139,74,42,222,18,23,223,149,116,150,123,242,24,78,129,136,88,244,85,38,85,150,117,159,57,241,208,196,233,178,18,92,22,26,178,50,70,203,60,13,47,194,232,42,100,33,147,94,19,176,179,189,41,211,148,34,119,160,237,123,142,246,85,207,147,39,121,203,174,94,178,199,143,22,178,48,173,188,128,87,170,65,45,73,228,74,80,187,85,104,160,232,96,151,160,58,142,182,161,216,183,2,140,94,6,205,183,153,167,249,39,1,226,131,132,167,226,19,0,249,88,212,251,75,74,81,220,47,41,121,41,191,36,240,218,125,249,148,151,234,219,178,146,82,169,120,21,60,230,118,117,100,149,73,64,229,20,10,236,18,180,130,86,133,153,227,19,192,214,33,90,137,99,241,136,222,135,85,92,246,155,118,3,211,98,68,229,158,75,92,112,125,106,125,22,33,69,191,241,98,52,118,79,198,169,33,45,236,21,145,177,146,147,95,52,41,133,184,115,156,166,8,178,55,165,144,81,173,25,231,248,68,78,199,19,60,238,151,32,207,145,49,64,208,217,74,45,202,239,83,150,51,165,1,27,185,99,110,195,127,86,79,45,184,213,81,180,204,177,106,20,182,167,175,27,38,220,96,20,229,22,182,106,12,190,55,175,27,132,108,50,136,188,115,173,28,130,38,168,107,71,64,147,13,198,208,46,173,42,141,34,246,242,181,134,217,96,32,181,192,140,55,215,253,148,22,14,176,111,6,196,79,93,236,132,210,20,105,116,209,25,37,150,44,174,30,46,127,185,73,55,159,122,105,64,81,230,172,84,56,243,87,160,157,85,72,98,247,110,40,177,171,97,209,54,255,213,130,167,27,8,158,174,18,76,223,48,175,22,189,129,250,226,201,42,209,180,24,96,181,232,96,3,209,193,42,209,236,253,253,106,217,201,6,178,147,10,217,218,119,36,50,145,22,134,79,225,112,128,153,163,177,95,142,248,192,8,158,153,139,23,222,237,195,14,222,145,165,110,118,254,173,135,244,115,4,226,47,177,50,116,121,219,82,190,154,144,66,244,15,59,164,36,63,188,83,150,254,129,80,33,142,201,51,138,185,180,139,12,122,29,140,50,79,12,97,190,104,151,213,3,37,217,173,101,217,43,96,221,33,94,22,21,240,175,221,148,151,198,197,103,23,126,186,239,167,110,130,137,120,145,194,152,156,149,241,77,249,96,209,157,56,74,156,211,226,140,30,185,32,125,161,19,136,3,228,98,171,249,223,95,247,183,155,231,117,147,133,50,254,34,155,149,98,176,11,142,206,114,228,212,66,34,165,136,52,114,177,16,175,193,87,133,220,85,29,187,204,1,85,128,46,28,149,39,200,189,56,193,144,243,109,57,38,181,138,201,191,170,82,213,35,59,21,104,165,34,22,210,223,84,22,174,11,141,231,209,234,113,235,98,212,238,130,197,247,255,1,115,164,240,143,108,62,0,0 };
    +const uint8_t JS_CONTROLS_GZIP[3743] PROGMEM = { 31,139,8,0,160,250,217,97,2,255,197,91,91,119,218,72,18,126,247,175,144,149,57,65,44,132,75,110,147,128,229,28,130,73,194,14,49,94,27,79,230,108,38,235,35,68,99,116,44,36,141,36,124,25,135,255,190,213,213,23,117,11,129,25,156,157,125,137,81,169,186,250,235,170,234,238,186,40,110,24,36,169,113,222,191,232,31,247,71,253,206,224,226,227,121,223,126,222,104,180,93,241,226,180,55,24,118,142,128,214,20,180,147,163,206,168,119,49,252,240,225,172,55,178,155,42,111,239,183,81,239,248,136,201,104,42,244,81,127,212,27,216,10,225,4,36,230,228,33,41,155,164,127,209,165,148,231,58,83,151,113,61,207,184,222,159,143,70,195,99,251,133,206,199,169,205,198,139,140,115,208,121,15,32,94,234,140,140,216,108,188,204,248,206,190,244,71,221,79,189,83,251,149,206,42,233,205,198,43,133,123,208,63,2,218,235,28,47,163,54,27,175,51,206,227,243,207,239,129,246,179,206,201,169,205,198,207,138,186,64,143,96,144,147,243,145,253,70,231,86,222,52,27,111,178,17,31,79,59,39,159,236,183,156,208,57,58,98,148,139,147,97,255,152,178,242,23,221,65,175,115,202,153,155,141,183,202,140,157,247,118,51,103,16,70,83,12,114,214,27,244,186,32,45,103,19,65,110,42,86,25,158,140,250,84,255,57,179,8,114,83,49,203,231,62,16,114,86,65,90,83,177,201,231,206,111,118,51,103,15,164,53,85,83,140,122,39,118,51,111,9,36,54,21,59,124,236,156,127,236,217,205,156,29,56,181,169,152,161,211,237,82,223,200,153,128,83,155,111,84,197,156,116,78,59,163,33,152,241,109,94,55,242,141,242,74,238,132,163,225,151,99,185,15,6,189,15,35,233,239,167,253,143,159,70,210,171,187,189,227,17,56,137,80,72,247,98,116,126,250,175,243,97,255,172,39,69,117,47,122,159,123,167,157,65,182,175,186,23,39,61,24,117,218,255,21,134,62,151,196,47,189,81,231,236,228,83,103,160,136,191,56,59,63,254,48,24,126,209,230,232,118,78,79,135,35,185,11,186,23,157,65,255,223,157,83,48,205,107,73,58,234,156,254,34,61,186,123,113,60,60,238,217,207,95,189,106,95,59,177,113,25,59,209,236,200,73,29,59,32,55,70,39,142,157,59,171,140,111,102,78,210,113,93,226,219,83,199,79,8,146,18,223,155,144,184,27,6,169,23,44,194,69,194,95,77,23,129,155,122,97,96,184,161,31,198,93,223,73,18,11,127,246,39,229,123,254,195,62,94,204,199,36,150,244,118,114,227,165,238,76,225,115,18,162,234,172,21,147,116,17,7,38,252,243,199,34,244,18,98,182,57,11,87,161,96,32,115,18,59,254,68,190,206,244,41,56,34,146,146,56,246,174,73,44,153,50,253,10,166,27,146,58,73,52,115,252,84,50,73,125,11,158,100,17,76,253,240,70,145,195,212,47,222,187,78,28,135,217,120,97,10,241,218,241,189,63,157,216,11,36,3,181,132,120,57,113,226,43,179,61,33,83,103,225,167,130,104,182,151,203,61,170,249,27,50,78,66,247,170,173,252,6,51,4,196,77,201,36,111,133,152,252,177,32,73,58,140,61,18,164,14,37,157,144,120,238,37,9,252,178,202,247,203,61,201,153,56,215,228,163,112,0,120,229,135,174,227,159,165,97,236,92,146,90,66,210,126,74,230,150,73,146,104,225,161,159,36,102,245,159,103,195,227,90,146,194,42,46,189,233,157,37,221,167,92,110,43,130,99,152,63,140,21,217,30,88,24,61,8,102,156,160,187,105,115,93,22,206,149,9,111,123,83,75,14,221,183,131,133,239,151,239,51,89,8,42,114,226,132,100,92,229,54,211,97,54,229,87,111,242,13,64,50,242,215,111,121,188,78,156,130,10,126,178,38,161,187,152,131,230,202,53,103,50,177,204,127,152,229,90,56,157,194,166,248,201,50,159,196,225,13,60,207,210,185,111,153,102,185,205,77,81,115,253,16,230,6,167,102,82,84,209,176,235,206,192,10,139,164,7,190,17,195,12,107,204,71,165,75,94,152,35,38,243,240,154,176,205,100,226,46,121,118,25,19,18,152,229,21,86,192,169,241,197,100,82,192,197,64,35,10,163,110,28,135,6,71,64,65,62,125,242,230,245,139,87,237,130,81,217,210,53,106,96,221,187,190,231,94,181,184,230,170,75,109,209,51,39,152,248,228,87,47,241,198,158,239,165,119,93,32,92,130,130,238,193,142,251,121,5,60,125,186,47,116,94,155,121,147,9,9,202,247,210,32,116,3,100,254,202,141,36,217,97,229,189,107,248,49,240,146,148,4,112,188,152,215,114,78,23,231,52,171,197,88,170,168,117,116,172,27,47,152,132,55,53,234,144,116,150,90,20,198,233,190,109,154,223,191,23,191,121,211,88,247,230,229,203,23,210,190,120,158,126,33,227,51,248,77,82,203,188,73,90,245,186,89,201,15,156,133,73,26,56,115,82,49,91,171,47,169,212,138,89,191,1,149,183,151,4,240,238,44,156,203,216,19,14,27,6,97,68,2,91,104,214,34,215,41,61,170,131,36,244,9,140,191,4,145,140,211,160,124,91,248,220,58,223,76,201,45,224,147,182,206,246,76,230,255,105,188,32,237,101,59,131,134,187,105,27,108,200,8,34,243,123,76,147,70,40,109,131,52,74,40,146,192,238,64,234,59,232,98,15,73,160,236,147,220,97,4,47,106,19,60,139,232,91,98,75,191,29,135,147,59,164,185,240,68,98,112,54,113,31,82,246,90,122,23,17,126,35,234,65,127,171,224,12,162,164,212,25,39,129,115,93,68,6,160,176,53,82,245,21,248,60,78,147,191,206,225,72,205,95,240,133,124,224,71,72,167,162,227,208,79,106,211,48,238,57,0,158,248,132,46,207,62,196,179,30,110,178,91,166,186,123,202,222,202,93,29,156,185,92,93,182,21,53,91,114,20,216,160,220,30,199,196,185,106,11,77,100,153,75,235,255,3,128,165,89,173,252,62,139,137,31,58,19,43,207,141,9,85,75,26,61,245,82,159,48,141,250,206,152,248,104,162,185,227,5,159,136,3,250,21,22,202,24,242,242,48,13,106,137,39,150,147,200,199,44,233,144,36,22,243,203,71,12,158,149,151,60,232,109,9,119,192,163,211,39,101,216,218,163,240,211,232,243,192,98,190,171,131,96,73,219,202,160,251,252,40,186,184,113,26,152,21,100,131,251,31,47,141,52,92,184,51,60,198,91,217,126,42,223,147,90,20,19,170,243,35,22,255,80,85,46,210,148,30,5,112,201,88,92,68,149,158,20,96,149,42,74,33,193,100,23,25,252,220,95,178,27,75,95,155,72,30,31,94,29,219,173,112,225,8,177,140,221,241,17,96,78,44,205,135,165,222,233,239,173,148,23,77,119,214,93,228,76,216,162,207,79,170,187,234,174,72,134,170,59,132,232,63,30,34,77,168,30,15,82,147,178,2,51,126,60,76,76,245,30,143,83,23,179,2,116,252,120,160,52,91,125,60,78,77,202,10,76,247,241,48,89,178,252,120,160,57,57,27,119,55,150,123,30,222,124,49,141,15,207,240,206,179,246,87,238,200,21,177,163,206,251,85,153,250,165,236,68,16,68,65,46,113,224,123,135,7,142,17,6,115,144,68,22,145,93,2,30,182,14,169,209,138,89,46,25,179,152,76,237,18,149,160,208,75,135,252,1,143,153,138,121,80,119,14,15,234,32,178,240,182,151,115,78,188,107,195,155,224,84,154,176,131,58,188,161,99,233,56,27,4,212,116,1,240,52,38,147,46,123,182,32,55,12,163,22,53,211,178,140,49,141,101,58,145,199,102,118,128,123,234,249,16,200,88,210,108,52,132,199,244,235,39,43,157,121,9,224,73,83,8,207,233,194,204,178,109,219,16,37,210,117,63,75,195,103,236,44,133,84,23,157,201,68,186,89,85,29,128,94,230,0,199,142,226,112,30,65,56,57,114,198,70,26,26,108,32,253,101,5,88,93,48,32,181,1,159,124,199,98,156,125,186,158,26,99,130,17,22,60,150,193,218,62,137,169,136,153,147,82,153,198,36,36,137,17,132,169,65,110,33,137,48,90,191,255,142,129,114,129,207,21,184,20,43,149,73,243,67,212,7,35,186,44,42,97,176,25,137,170,247,73,2,1,135,155,114,27,232,172,109,246,152,25,45,140,48,225,161,118,99,63,205,202,158,176,221,158,89,50,208,5,236,146,160,50,143,160,47,4,133,77,70,40,247,161,160,97,80,1,132,131,58,147,121,104,174,174,232,115,127,219,229,120,147,162,165,84,76,195,11,162,69,202,76,192,151,149,120,127,66,242,87,190,23,171,68,87,152,123,129,169,95,155,43,88,58,191,253,93,88,156,219,7,176,208,10,229,223,4,6,82,217,232,1,52,88,28,126,248,36,147,5,148,175,220,119,190,217,43,149,25,113,144,183,1,1,156,116,248,226,236,250,210,90,29,91,53,145,150,157,253,186,243,228,234,217,45,220,180,137,253,217,73,103,181,56,92,128,91,211,164,21,36,194,138,105,193,103,228,205,225,87,189,217,104,52,138,144,214,162,69,50,179,238,111,91,105,82,189,107,101,218,128,93,152,43,91,237,130,92,193,173,148,219,91,5,10,251,250,237,7,207,39,106,214,212,124,162,198,90,102,239,101,201,21,83,226,135,47,170,141,133,190,220,214,86,58,41,152,69,170,161,91,150,119,112,135,19,83,3,160,225,77,112,18,135,17,28,154,119,86,137,167,76,103,233,157,79,74,101,118,205,169,130,132,3,195,107,238,193,234,136,98,72,50,232,222,16,83,195,125,209,48,223,53,90,205,191,6,45,121,52,54,22,50,176,32,224,130,22,228,44,109,135,131,92,5,101,213,4,103,54,149,202,210,223,7,148,39,131,84,22,92,133,138,48,0,182,179,101,117,73,187,192,82,146,82,140,80,200,109,250,131,176,229,68,237,100,92,150,30,175,92,205,143,133,182,34,108,23,112,60,205,86,73,89,22,153,181,89,91,171,35,89,154,79,129,92,58,139,75,242,131,22,149,151,181,203,154,216,177,199,232,162,209,33,234,104,88,165,179,204,243,224,42,8,111,2,131,86,192,104,52,135,33,152,41,206,207,229,158,128,76,223,31,218,90,147,251,233,83,249,230,64,175,154,177,27,90,212,134,242,27,120,173,26,34,39,32,190,166,4,117,88,129,6,178,1,229,28,84,219,214,14,20,72,105,24,24,189,202,207,142,153,103,178,227,197,251,109,207,120,135,75,60,102,237,44,65,201,122,87,130,34,59,85,130,192,90,83,226,73,118,162,202,109,129,36,43,232,114,30,179,162,180,243,120,185,13,158,203,162,20,93,184,132,12,187,0,173,160,85,97,74,124,28,216,38,68,107,113,44,247,104,218,130,249,218,51,126,70,95,224,19,36,36,132,214,3,149,116,132,231,33,95,27,223,248,149,162,39,38,72,195,116,134,81,3,90,183,230,55,99,33,39,203,7,148,58,243,156,36,137,115,73,108,165,150,168,182,68,24,62,214,148,224,233,10,243,75,144,103,139,59,128,211,113,167,102,221,165,4,115,130,196,199,153,91,102,5,254,98,187,128,115,171,179,48,210,134,89,240,76,223,52,77,176,197,44,244,240,221,48,7,59,155,55,77,146,110,51,137,72,141,11,167,160,201,236,198,25,156,241,22,115,176,163,122,147,81,248,89,190,209,48,91,76,164,86,34,217,235,170,151,76,224,164,195,150,24,255,169,139,29,83,154,34,141,110,58,35,199,178,136,138,167,147,229,17,122,248,84,115,19,242,78,131,210,100,96,69,148,214,58,36,145,251,48,148,200,213,176,104,135,255,122,193,211,45,4,79,215,9,166,53,170,245,162,183,80,95,52,94,39,154,150,19,215,139,246,183,16,237,175,19,141,21,192,245,178,227,45,100,199,5,178,181,54,169,8,164,185,225,19,72,14,8,58,26,254,178,121,255,28,158,209,197,51,239,246,224,4,111,193,72,247,138,118,234,100,43,83,248,185,3,226,175,137,50,117,254,216,82,154,130,66,136,222,183,20,146,188,224,65,89,122,255,59,19,135,242,140,108,45,205,44,130,222,4,35,207,19,193,53,159,189,23,245,199,156,236,198,170,236,53,176,30,16,47,202,146,236,99,14,165,192,152,117,21,189,228,200,75,220,152,164,188,222,133,76,246,218,251,77,249,30,199,29,219,202,61,167,221,51,250,205,5,225,11,93,64,228,59,46,177,234,255,249,253,168,82,191,172,154,120,149,177,162,39,22,115,177,74,209,90,189,57,181,43,145,82,120,24,185,92,242,146,233,186,43,119,221,192,54,58,160,10,208,117,124,127,236,184,87,103,4,98,190,125,219,164,86,49,217,71,3,170,122,196,160,12,173,80,196,82,248,155,202,194,116,161,241,236,173,159,183,202,103,109,47,151,162,11,44,243,238,76,207,152,128,223,103,1,159,253,96,4,249,206,52,48,86,164,69,187,92,180,88,161,117,187,150,105,182,213,16,218,222,34,52,95,145,169,190,150,82,169,250,214,192,83,234,83,165,242,247,239,242,102,45,168,114,213,124,18,92,166,179,195,134,86,239,218,70,238,187,77,98,179,142,54,107,184,131,143,108,238,134,235,77,80,45,77,82,26,120,107,91,111,185,102,192,238,205,84,172,23,21,183,86,89,158,195,150,34,203,239,74,238,128,150,169,168,246,55,92,122,160,216,165,244,38,164,31,209,45,230,65,66,3,227,137,145,178,15,4,104,89,183,56,10,198,74,254,236,149,104,13,176,18,175,121,80,7,210,193,44,174,211,218,47,119,10,89,56,66,133,86,87,139,44,85,45,131,195,58,49,118,8,114,197,171,172,113,188,203,10,19,246,197,17,138,20,75,165,141,13,152,109,195,42,116,36,203,61,189,92,78,113,136,141,191,85,45,54,95,111,223,77,67,242,60,87,134,103,39,4,138,128,209,5,3,11,34,48,233,216,252,195,191,131,4,148,135,90,133,75,69,232,83,219,221,123,82,165,168,45,3,255,125,118,19,59,17,85,167,108,17,81,57,135,102,190,123,47,102,97,97,41,206,131,189,250,117,51,241,142,21,141,77,128,83,137,101,217,144,170,129,247,39,109,71,152,106,119,171,136,147,93,133,104,114,9,146,241,41,48,229,62,22,64,217,26,41,206,228,97,133,240,190,144,89,177,68,241,176,105,190,147,151,49,28,137,101,214,76,219,99,190,203,71,121,1,167,225,149,130,21,8,187,132,131,198,225,109,137,205,45,166,14,131,46,93,148,152,138,126,120,198,150,135,145,21,118,97,54,204,45,252,249,160,142,203,82,214,189,114,92,137,245,7,142,196,201,63,122,129,109,191,240,25,96,173,171,200,108,164,118,239,13,221,72,20,156,169,24,169,144,149,91,9,87,77,63,68,96,45,195,167,79,222,190,126,213,104,103,141,199,135,102,103,237,238,109,1,228,184,53,12,241,206,24,240,211,128,109,33,232,204,26,2,127,103,4,216,76,223,22,129,206,172,33,24,111,68,80,103,238,96,241,122,19,115,166,119,38,160,202,28,103,234,197,243,210,26,148,188,147,190,37,76,206,93,12,212,21,64,135,191,80,140,204,237,41,68,112,99,117,151,179,59,88,248,184,178,23,213,144,87,219,149,250,9,192,246,40,50,151,140,185,7,171,105,192,95,231,214,46,53,27,13,165,73,202,15,26,92,141,30,34,21,77,200,99,108,216,96,120,8,23,114,160,68,253,16,195,147,86,92,84,185,184,66,44,145,45,130,199,108,120,129,183,198,16,141,95,181,87,78,51,19,151,138,213,26,222,242,101,139,101,9,70,209,218,224,160,197,64,87,240,240,20,128,233,10,44,83,87,96,41,241,205,174,208,88,145,39,223,142,46,64,163,20,139,10,177,240,192,74,94,124,88,113,249,11,64,68,137,134,67,201,38,214,138,59,133,83,179,32,78,204,60,245,46,23,49,65,153,188,125,199,63,148,128,23,174,195,59,230,21,25,155,40,84,124,128,177,170,104,140,8,185,232,47,253,193,192,120,223,51,58,6,146,141,77,202,198,233,89,177,253,127,96,120,22,154,114,88,248,96,212,233,199,224,176,179,230,17,211,45,153,24,83,184,197,238,246,213,13,233,208,182,36,137,195,57,173,230,50,144,72,146,32,15,85,238,49,228,83,82,123,236,170,139,64,179,69,178,194,69,74,155,226,146,57,66,45,22,252,55,136,255,2,191,111,104,3,4,55,0,0 };
    diff --git a/src/dataStyleCSS.h b/src/dataStyleCSS.h
    index 2ad2f97..4615248 100644
    --- a/src/dataStyleCSS.h
    +++ b/src/dataStyleCSS.h
    @@ -1,5 +1,5 @@
     const char CSS_STYLE[] PROGMEM = R"=====(
    -.container{position:relative;width:79%;margin:20px;box-sizing:border-box}.column,.columns{width:100%;float:left}.card{min-height:100px;margin-top:2%;border-radius:6px;box-shadow:0 4px 4px rgba(204,197,185,0.5);padding-left:20px;padding-right:20px;margin-bottom:10px;min-width:500px;color:#fff}@media(max-width:630px){.card{min-width:98%}}.turquoise{background:#1abc9c;border-bottom:#16a085 3px solid}.emerald{background:#2ecc71;border-bottom:#27ae60 3px solid}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.dark{background:#444857;border-bottom:#444857 3px solid}.label{box-sizing:border-box;white-space:nowrap;border-radius:.2em;padding:.12em .4em .14em;text-align:center;color:#fff;font-weight:700;line-height:1.3;margin-bottom:5px;display:inline-block;white-space:nowrap;vertical-align:baseline;position:relative;top:-.15em;background-color:#999;margin-bottom:10px}.label-wrap{width:90%;white-space:pre-wrap;word-wrap:break-word}.label.color-blue{background-color:#6f9ad1}.label.color-red{background-color:#d37c7c}.label.color-green{background-color:#9bc268}.label.color-orange{background-color:#dea154}.label.color-yellow{background-color:#e9d641}.label.color-purple{background-color:#9f83d1}@media(min-width:400px){.container{width:84%}}@media(min-width:630px){.container{width:98%}.column,.columns{margin-right:2%}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{margin:0;font-size:1.5em;line-height:1;font-weight:400;font-family:"Open Sans",sans-serif;color:#222;background-color:#ecf0f1}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:300}h1{font-size:4rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:630px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}button{display:inline-block;padding:10px;border-radius:3px;color:#fff;background-color:#999}button:active{background-color:#666;transform:translateX(4px) translateY(4px)}#mainHeader{display:inline-block}#conStatus{position:inherit;font-size:.75em}button,.button{margin-bottom:1rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}.tcenter{text-align:center}hr{margin-top:.5rem;margin-bottom:1.2rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both}.control{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.1),hsla(0,0%,100%,0.1));border-radius:50%;box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.75),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.75);height:9em;margin:3em auto;position:relative;width:9em}.control ul{height:100%;padding:0;transform:rotate(45deg)}.control li{border-radius:100% 0 0 0;box-shadow:inset -1px -1px 1px hsla(0,0%,100%,0.5),0 0 1px hsla(0,0%,0%,0.75);display:inline-block;height:50%;overflow:hidden;width:50%}.control ul li:nth-child(2){transform:rotate(90deg)}.control ul li:nth-child(3){transform:rotate(-90deg)}.control ul li:nth-child(4){transform:rotate(180deg)}.control ul a{height:200%;position:relative;transform:rotate(-45deg);width:200%}.control a:hover,.control a:focus{background-color:hsla(0,0%,100%,0.25)}.control a{border-radius:50%;color:#333;display:block;font:bold 1em/3 sans-serif;text-align:center;text-decoration:none;text-shadow:0 1px 1px hsla(0,0%,100%,0.4);transition:.15s}.control .confirm{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.15),hsla(0,0%,100%,0.25));box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.25),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.85);left:50%;line-height:3;margin:-1.5em;position:absolute;top:50%;width:3em}.control .confirm:hover,.control .confirm:focus{background-color:#eee}.switch{display:inline-block !important;background-color:#bebebe;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);color:#fff;cursor:pointer;display:block;font-size:14px;height:26px;margin-bottom:12px;position:relative;width:60px;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;-ms-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.switch.checked{background-color:#76d21d}.switch input[type="checkbox"]{display:none;cursor:pointer;height:10px;left:12px;position:absolute;top:8px;width:10px}.in{position:absolute;top:8px;left:12px;-webkit-transition:left .08s ease-in-out;-moz-transition:left .08s ease-in-out;-o-transition:left .08s ease-in-out;-ms-transition:left .08s ease-in-out;transition:left .08s ease-in-out}.switch.checked div{left:38px}.switch .in:before{background:#fff;background:-moz-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#f0f0f0));background:-webkit-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top,#fff 0,#f0f0f0 100%);background:linear-gradient(to bottom,#fff 0,#f0f0f0 100%);border:1px solid #fff;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,0.3);content:"";height:18px;position:absolute;top:-5px;left:-9px;width:26px}.switch .in:after{background:#f0f0f0;background:-moz-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f0f0f0),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top,#f0f0f0 0,#fff 100%);background:linear-gradient(to bottom,#f0f0f0 0,#fff 100%);border-radius:10px;content:"";height:12px;margin:-1px 0 0 -1px;position:absolute;width:12px}.rkmd-slider{display:block;position:relative;font-size:16px;font-family:"Roboto",sans-serif}.rkmd-slider input[type="range"]{overflow:hidden;position:absolute;width:1px;height:1px;opacity:0}.rkmd-slider input[type="range"]+.slider{display:block;position:relative;width:100%;height:27px;border-radius:13px;background-color:#bebebe}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider{height:4px;border-radius:0}}.rkmd-slider input[type="range"]+.slider .slider-fill{display:block;position:absolute;width:0;height:100%;user-select:none;z-index:1}.rkmd-slider input[type="range"]+.slider .slider-handle{cursor:pointer;position:absolute;top:12px;left:0;width:15px;height:15px;margin-left:-8px;border-radius:50%;transition:all .2s ease;user-select:none;z-index:2}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider .slider-handle{top:-5.5px}}.rkmd-slider input[type="range"]:disabled+.slider{background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle{cursor:default !important;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle .slider-label{display:none;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active{top:-5.5px;width:15px;height:15px;margin-left:-8px}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active .slider-label{display:none;border-radius:50%;transform:none}.rkmd-slider input[type="range"]:disabled+.slider .slider-handle:active{box-shadow:none !important;transform:scale(1) !important}.rkmd-slider.slider-discrete .slider .slider-handle{position:relative;z-index:1}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{position:absolute;top:-17.5px;left:4px;width:30px;height:30px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;border-radius:50%;-webkit-transform:scale(1) rotate(-45deg);transform:scale(1) rotate(-45deg);-webkit-transition:all .2s ease;transition:all .2s ease}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{left:-2px;-webkit-transform:scale(0.5) rotate(-45deg);transform:scale(0.5) rotate(-45deg)}}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{position:absolute;top:7px;left:0;width:100%;color:#fff;font-size:16px;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{font-size:12px}}.rkmd-slider.slider-discrete .slider .slider-handle.is-active{top:0;margin-left:-2px;width:4px;height:4px}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label{top:-15px;left:-2px;border-radius:15px 15px 15px 0;-webkit-transform:rotate(-45deg) translate(23px,-25px);transform:rotate(-45deg) translate(23px,-25px)}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label span{opacity:1}.rkmd-slider.slider-discrete.slider-turquoise .slider-label{background-color:#16a085}.rkmd-slider.slider-discrete.slider-emerald .slider-label{background-color:#27ae60}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.rkmd-slider.slider-discrete.slider-peterriver .slider-label{background-color:#2980b9}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.rkmd-slider.slider-discrete.slider-wetasphalt .slider-label{background-color:#2c3e50}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.rkmd-slider.slider-discrete.slider-sunflower .slider-label{background-color:#e6bb0f}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.rkmd-slider.slider-discrete.slider-carrot .slider-label{background-color:#d35400}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.rkmd-slider.slider-discrete.slider-alizarin .slider-label{background-color:#c0392b}input{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}select{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}input[id^="num"]{max-width:6em;width:auto;text-align:right;font-weight:bold;font-size:115%}body div>ul.navigation{margin:0;padding:0;border-bottom:3px solid #666;overflow:hidden}ul.navigation li{list-style:none;float:left;margin-right:4px}ul.navigation li.controls{float:right}ul.navigation li a{font-weight:bold;display:inline-block;padding:6px 12px;color:#888;outline:0;text-decoration:none;background:#f3f3f3;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#e4e4e4));background:-moz-linear-gradient(#eee,#e4e4e4);background:linear-gradient(#eee,#e4e4e4);-pie-background:linear-gradient(#eee,#e4e4e4)}ul.navigation li.active a{pointer-events:none;color:white;background:#666;background:-webkit-gradient(linear,0 0,0 bottom,from(#888),to(#666));background:-moz-linear-gradient(#888,#666);background:linear-gradient(#888,#666);-pie-background:linear-gradient(#888,#666)}div.tabscontent>div{padding:0 15px}#tabsnav:empty{display:none}.range-slider{margin:0}.range-slider{width:100%}.range-slider__range{-webkit-appearance:none;width:calc(100% - (45px));height:10px;border-radius:5px;outline:0;padding:0;margin:0}.range-slider__value{display:inline-block;position:relative;width:30px;color:#fff;line-height:20px;text-align:center;border-radius:3px;padding:5px 5px;margin-left:2px}.range-slider__value:after{position:absolute;top:8px;left:-7px;width:0;height:0;content:""}::-moz-range-track{border:0}input::-moz-focus-inner,input::-moz-focus-outer{border:0}svg{display:block;width:100%;height:100%}.y-axis path,.x-axis path{stroke:gray;stroke-width:1;fill:none}.series{stroke:steelblue;stroke-width:3;fill:none}.data-points circle{stroke:steelblue;stroke-width:2;fill:white}.data-points text{display:none}.data-points circle:hover{fill:steelblue;stroke-width:6}.data-points circle:hover+text{display:inline-block}text{text-anchor:end}
    +.container{position:relative;width:79%;margin:20px;box-sizing:border-box}.column,.columns{width:100%;float:left}.card{min-height:100px;border-radius:6px;box-shadow:0 4px 4px rgba(204,197,185,0.5);padding-left:20px;padding-right:20px;margin-bottom:40px;min-width:500px;color:#fff}@media(min-width:1205px){.wide.card{min-width:1075px}}@media(min-width:1790px){.wide.card{min-width:1650px}}@media(max-width:630px){.card{min-width:98%}}.sectionbreak.columns{color:black}.sectionbreak.columns hr{border:0;height:2px;background-color:#666}.turquoise{background:#1abc9c;border-bottom:#16a085 3px solid}.emerald{background:#2ecc71;border-bottom:#27ae60 3px solid}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.dark{background:#444857;border-bottom:#444857 3px solid}.label{box-sizing:border-box;white-space:nowrap;border-radius:.2em;padding:.12em .4em .14em;text-align:center;color:#fff;font-weight:700;line-height:1.3;margin-bottom:5px;display:inline-block;white-space:nowrap;vertical-align:baseline;position:relative;top:-.15em;background-color:#999;margin-bottom:10px}.label-wrap{width:90%;white-space:pre-wrap;word-wrap:break-word}.label.color-blue{background-color:#6f9ad1}.label.color-red{background-color:#d37c7c}.label.color-green{background-color:#9bc268}.label.color-orange{background-color:#dea154}.label.color-yellow{background-color:#e9d641}.label.color-purple{background-color:#9f83d1}@media(min-width:400px){.container{width:84%}}@media(min-width:630px){.container{width:98%}.column,.columns{margin-right:35px}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74%}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78%}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{margin:0;font-size:1.5em;line-height:1;font-weight:400;font-family:"Open Sans",sans-serif;color:#222;background-color:#ecf0f1}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:300}h1{font-size:4rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:630px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}button{display:inline-block;padding:10px;border-radius:3px;color:#fff;background-color:#999}button:active{background-color:#666;transform:translateX(4px) translateY(4px)}#mainHeader{display:inline-block}#conStatus{position:inherit;font-size:.75em}button,.button{margin-bottom:1rem;margin-left:.3rem;margin-right:.3rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}.tcenter{text-align:center}hr{margin-top:.5rem;margin-bottom:1.2rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both}.control{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.1),hsla(0,0%,100%,0.1));border-radius:50%;box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.75),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.75);height:9em;margin:3em auto;position:relative;width:9em}.control ul{height:100%;padding:0;transform:rotate(45deg)}.control li{border-radius:100% 0 0 0;box-shadow:inset -1px -1px 1px hsla(0,0%,100%,0.5),0 0 1px hsla(0,0%,0%,0.75);display:inline-block;height:50%;overflow:hidden;width:50%}.control ul li:nth-child(2){transform:rotate(90deg)}.control ul li:nth-child(3){transform:rotate(-90deg)}.control ul li:nth-child(4){transform:rotate(180deg)}.control ul a{height:200%;position:relative;transform:rotate(-45deg);width:200%}.control a:hover,.control a:focus{background-color:hsla(0,0%,100%,0.25)}.control a{border-radius:50%;color:#333;display:block;font:bold 1em/3 sans-serif;text-align:center;text-decoration:none;text-shadow:0 1px 1px hsla(0,0%,100%,0.4);transition:.15s}.control .confirm{background-color:#ddd;background-image:linear-gradient(hsla(0,0%,0%,0.15),hsla(0,0%,100%,0.25));box-shadow:inset 0 1px 1px 1px hsla(0,0%,100%,0.5),0 0 1px 1px hsla(0,0%,100%,0.25),0 0 1px 2px hsla(0,0%,100%,0.25),0 0 1px 3px hsla(0,0%,100%,0.25),0 0 1px 4px hsla(0,0%,100%,0.25),0 0 1px 6px hsla(0,0%,0%,0.85);left:50%;line-height:3;margin:-1.5em;position:absolute;top:50%;width:3em}.control .confirm:hover,.control .confirm:focus{background-color:#eee}.switch{display:inline-block !important;background-color:#bebebe;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);color:#fff;cursor:pointer;display:block;font-size:14px;height:26px;margin-left:.3rem;margin-right:.3rem;position:relative;width:60px;-webkit-transition:background-color .2s ease-in-out;-moz-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;-ms-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.switch.checked{background-color:#76d21d}.switch input[type="checkbox"]{display:none;cursor:pointer;height:10px;left:12px;position:absolute;top:8px;width:10px}.in{position:absolute;top:8px;left:12px;-webkit-transition:left .08s ease-in-out;-moz-transition:left .08s ease-in-out;-o-transition:left .08s ease-in-out;-ms-transition:left .08s ease-in-out;transition:left .08s ease-in-out}.switch.checked div{left:38px}.switch .in:before{background:#fff;background:-moz-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#f0f0f0));background:-webkit-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top,#fff 0,#f0f0f0 100%);background:linear-gradient(to bottom,#fff 0,#f0f0f0 100%);border:1px solid #fff;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,0.3);content:"";height:18px;position:absolute;top:-5px;left:-9px;width:26px}.switch .in:after{background:#f0f0f0;background:-moz-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f0f0f0),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top,#f0f0f0 0,#fff 100%);background:linear-gradient(to bottom,#f0f0f0 0,#fff 100%);border-radius:10px;content:"";height:12px;margin:-1px 0 0 -1px;position:absolute;width:12px}.rkmd-slider{display:block;position:relative;font-size:16px;font-family:"Roboto",sans-serif}.rkmd-slider input[type="range"]{overflow:hidden;position:absolute;width:1px;height:1px;opacity:0}.rkmd-slider input[type="range"]+.slider{display:block;position:relative;width:100%;height:27px;border-radius:13px;background-color:#bebebe}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider{height:4px;border-radius:0}}.rkmd-slider input[type="range"]+.slider .slider-fill{display:block;position:absolute;width:0;height:100%;user-select:none;z-index:1}.rkmd-slider input[type="range"]+.slider .slider-handle{cursor:pointer;position:absolute;top:12px;left:0;width:15px;height:15px;margin-left:-8px;border-radius:50%;transition:all .2s ease;user-select:none;z-index:2}@media(pointer:fine){.rkmd-slider input[type="range"]+.slider .slider-handle{top:-5.5px}}.rkmd-slider input[type="range"]:disabled+.slider{background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle{cursor:default !important;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle .slider-label{display:none;background-color:#b0b0b0 !important}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active{top:-5.5px;width:15px;height:15px;margin-left:-8px}.rkmd-slider input[type="range"]:disabled+.slider .slider-fill.is-active .slider-label,.rkmd-slider input[type="range"]:disabled+.slider .slider-handle.is-active .slider-label{display:none;border-radius:50%;transform:none}.rkmd-slider input[type="range"]:disabled+.slider .slider-handle:active{box-shadow:none !important;transform:scale(1) !important}.rkmd-slider.slider-discrete .slider .slider-handle{position:relative;z-index:1}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{position:absolute;top:-17.5px;left:4px;width:30px;height:30px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;border-radius:50%;-webkit-transform:scale(1) rotate(-45deg);transform:scale(1) rotate(-45deg);-webkit-transition:all .2s ease;transition:all .2s ease}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label{left:-2px;-webkit-transform:scale(0.5) rotate(-45deg);transform:scale(0.5) rotate(-45deg)}}.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{position:absolute;top:7px;left:0;width:100%;color:#fff;font-size:16px;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(pointer:fine){.rkmd-slider.slider-discrete .slider .slider-handle .slider-label span{font-size:12px}}.rkmd-slider.slider-discrete .slider .slider-handle.is-active{top:0;margin-left:-2px;width:4px;height:4px}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label{top:-15px;left:-2px;border-radius:15px 15px 15px 0;-webkit-transform:rotate(-45deg) translate(23px,-25px);transform:rotate(-45deg) translate(23px,-25px)}.rkmd-slider.slider-discrete .slider .slider-handle.is-active .slider-label span{opacity:1}.rkmd-slider.slider-discrete.slider-turquoise .slider-label{background-color:#16a085}.rkmd-slider.slider-discrete.slider-emerald .slider-label{background-color:#27ae60}.peterriver{background:#3498db;border-bottom:#2980b9 3px solid}.rkmd-slider.slider-discrete.slider-peterriver .slider-label{background-color:#2980b9}.wetasphalt{background:#34495e;border-bottom:#2c3e50 3px solid}.rkmd-slider.slider-discrete.slider-wetasphalt .slider-label{background-color:#2c3e50}.sunflower{background:#f1c40f;border-bottom:#e6bb0f 3px solid}.rkmd-slider.slider-discrete.slider-sunflower .slider-label{background-color:#e6bb0f}.carrot{background:#e67e22;border-bottom:#d35400 3px solid}.rkmd-slider.slider-discrete.slider-carrot .slider-label{background-color:#d35400}.alizarin{background:#e74c3c;border-bottom:#c0392b 3px solid}.rkmd-slider.slider-discrete.slider-alizarin .slider-label{background-color:#c0392b}input{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}select{margin:0 auto 1.2rem auto;padding:2px 5px;width:100%;box-sizing:border-box;border:0;border-radius:4px;box-shadow:inset 0 0 6px rgba(0,0,0,0.3);background:rgba(255,255,255,0.8)}input[id^="num"]{max-width:6em;width:auto;text-align:right;font-weight:bold;font-size:115%}body div>ul.navigation{margin:0;margin-bottom:30px;padding:0;border-bottom:3px solid #666;overflow:hidden}ul.navigation li{list-style:none;float:left;margin-right:4px}ul.navigation li.controls{float:right}ul.navigation li a{font-weight:bold;display:inline-block;padding:6px 12px;color:#888;outline:0;text-decoration:none;background:#f3f3f3;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#e4e4e4));background:-moz-linear-gradient(#eee,#e4e4e4);background:linear-gradient(#eee,#e4e4e4);-pie-background:linear-gradient(#eee,#e4e4e4)}ul.navigation li.active a{pointer-events:none;color:white;background:#666;background:-webkit-gradient(linear,0 0,0 bottom,from(#888),to(#666));background:-moz-linear-gradient(#888,#666);background:linear-gradient(#888,#666);-pie-background:linear-gradient(#888,#666)}div.tabscontent>div{padding:0 15px}#tabsnav:empty{display:none}.range-slider{margin:0}.range-slider{width:100%}.range-slider__range{-webkit-appearance:none;width:calc(100% - (45px));height:10px;border-radius:5px;outline:0;padding:0;margin:0}.range-slider__value{display:inline-block;position:relative;width:30px;color:#fff;line-height:20px;text-align:center;border-radius:3px;padding:5px 5px;margin-left:2px}.range-slider__value:after{position:absolute;top:8px;left:-7px;width:0;height:0;content:""}::-moz-range-track{border:0}input::-moz-focus-inner,input::-moz-focus-outer{border:0}svg{display:block;width:100%;height:100%}.y-axis path,.x-axis path{stroke:gray;stroke-width:1;fill:none}.series{stroke:steelblue;stroke-width:3;fill:none}.data-points circle{stroke:steelblue;stroke-width:2;fill:white}.data-points text{display:none}.data-points circle:hover{fill:steelblue;stroke-width:6}.data-points circle:hover+text{display:inline-block}text{text-anchor:end}
     )=====";
     
    -const uint8_t CSS_STYLE_GZIP[3356] PROGMEM = { 31,139,8,0,190,230,204,97,2,255,213,27,219,110,235,184,241,87,212,4,1,98,172,164,234,110,91,194,46,250,216,183,2,221,151,22,197,246,128,150,168,72,136,44,185,18,125,146,172,161,127,239,144,212,133,23,41,118,146,179,40,122,124,146,216,212,204,112,238,28,14,105,59,109,106,130,202,26,183,151,83,211,149,164,108,234,184,197,21,34,229,119,156,188,148,25,41,226,237,254,33,57,162,246,169,172,99,207,57,189,38,135,230,213,234,202,223,203,250,41,62,52,109,134,91,11,70,122,59,109,170,243,177,54,135,191,221,133,35,187,142,243,144,228,85,131,72,92,225,156,0,24,106,179,203,177,172,173,2,151,79,5,161,0,64,147,211,183,72,115,138,189,135,100,32,219,162,172,60,119,113,52,206,89,160,172,121,137,29,35,56,189,178,159,246,233,128,30,61,39,48,221,253,214,116,119,161,233,216,225,38,57,161,44,3,222,44,58,29,103,120,28,105,217,132,158,48,223,161,33,164,57,2,15,116,8,62,115,158,67,198,18,200,209,180,241,125,158,231,253,95,142,56,43,209,227,17,189,14,16,145,15,16,155,203,44,12,31,222,239,30,250,222,38,231,246,63,231,166,236,240,229,128,210,231,167,182,57,215,89,124,239,162,67,186,79,147,73,99,108,226,123,55,66,206,46,52,124,144,166,107,170,50,235,109,124,196,45,170,50,9,215,195,105,186,117,85,92,111,139,112,228,136,184,39,76,112,219,130,229,90,9,221,15,246,187,236,160,161,239,119,206,97,47,162,191,96,130,186,83,129,42,162,160,7,251,16,107,232,169,143,67,105,246,238,92,131,161,95,148,201,115,55,13,156,92,197,198,209,225,224,228,34,54,168,178,109,228,137,113,180,197,158,167,162,102,126,24,56,210,196,168,42,127,71,109,89,203,200,219,32,245,53,125,167,142,191,247,14,34,114,134,218,103,9,49,8,130,93,184,85,17,249,168,136,88,161,3,174,46,139,193,144,188,20,37,193,86,119,66,41,142,235,230,165,69,39,197,167,109,15,31,71,191,140,109,23,62,25,118,64,127,185,240,59,33,248,149,88,32,213,83,29,167,184,6,155,10,206,152,228,16,176,214,11,15,158,173,227,36,21,4,239,20,76,182,175,184,118,8,158,156,149,221,169,66,111,113,89,51,216,67,213,164,207,75,44,130,223,144,50,69,213,48,245,1,117,152,34,36,122,98,160,113,106,217,110,8,188,206,170,179,6,38,247,251,253,66,124,13,10,179,232,76,67,110,216,67,106,16,217,56,181,152,61,78,94,64,87,236,93,124,104,49,122,182,232,231,1,223,102,147,128,12,103,49,188,198,169,163,124,143,50,87,6,109,113,182,0,153,249,219,116,155,202,144,79,45,198,245,2,236,254,144,122,209,78,134,109,90,84,63,45,177,144,97,228,134,129,12,252,134,43,8,140,5,96,188,207,162,64,225,247,116,110,79,213,18,229,125,190,243,65,184,49,25,77,89,39,112,134,100,52,101,114,62,190,11,32,27,105,208,83,234,82,160,105,238,210,114,248,96,198,33,113,78,0,113,94,182,29,177,210,162,172,178,9,88,28,28,17,89,14,118,122,187,169,241,68,123,126,63,174,17,129,29,77,255,182,48,9,121,105,212,85,196,183,253,233,31,133,40,192,84,10,140,71,249,203,155,115,171,140,251,142,45,81,207,193,129,85,144,189,76,190,43,95,85,22,169,118,58,252,29,215,202,131,48,146,169,179,56,84,96,162,80,38,95,151,154,10,182,1,149,74,163,190,243,20,234,213,2,11,123,87,81,206,11,174,52,17,217,58,172,91,197,34,69,217,102,3,236,138,194,192,28,28,172,147,225,84,177,40,57,88,60,114,25,138,105,174,201,243,14,19,235,240,102,73,158,176,48,218,73,174,179,83,60,99,198,152,125,196,92,28,149,233,184,91,133,213,25,67,240,36,115,101,92,166,229,69,18,1,193,227,204,229,97,25,221,15,236,21,145,4,199,52,151,135,101,74,129,191,38,212,236,191,230,226,168,76,39,244,100,100,193,197,204,149,113,153,64,228,172,137,36,70,131,185,50,174,208,218,175,9,37,68,141,185,60,44,83,218,202,142,71,22,133,34,43,34,237,162,85,145,170,21,253,40,177,41,82,219,135,107,66,169,33,104,190,243,236,86,63,210,226,213,124,239,225,173,234,87,162,219,92,127,164,123,87,95,144,99,117,97,133,11,212,74,56,142,60,59,124,232,15,77,246,54,128,198,78,50,63,117,109,90,87,72,101,141,84,244,192,122,199,63,231,232,88,86,111,241,221,223,78,184,54,126,69,117,119,103,118,240,27,60,181,45,243,177,100,242,104,5,169,47,188,105,238,228,110,95,184,102,225,153,133,111,22,129,89,132,102,17,93,132,141,136,163,84,49,118,216,2,95,34,39,190,227,0,9,65,176,160,85,57,183,189,164,194,4,74,56,86,227,208,106,15,234,38,128,234,11,79,192,243,237,104,1,51,92,67,245,69,84,29,209,95,195,11,4,60,207,94,96,214,95,152,210,217,49,220,240,34,90,104,167,227,46,161,134,12,53,146,80,67,29,53,82,81,157,213,186,69,82,119,168,41,50,176,61,93,67,76,185,178,244,190,38,147,183,194,106,223,159,36,167,232,209,101,240,33,23,35,156,29,122,20,23,13,221,113,13,163,78,142,156,20,247,135,51,248,76,125,89,44,189,199,186,223,229,187,105,113,95,224,75,27,207,229,226,122,160,29,163,148,214,226,75,85,112,20,37,4,234,211,46,111,218,99,204,222,65,221,142,255,241,8,155,230,141,49,125,254,39,251,220,223,31,161,12,252,43,70,192,197,34,187,253,61,148,138,191,18,68,206,221,220,34,40,235,2,130,140,8,81,107,111,33,106,7,214,76,123,16,95,217,6,80,117,218,103,43,63,87,21,183,170,88,156,172,180,21,206,22,221,118,11,40,243,46,252,125,180,19,69,97,149,235,133,247,31,216,251,233,9,77,78,23,177,49,65,248,86,235,162,109,190,250,162,21,61,128,59,176,34,25,115,187,209,150,156,59,103,252,72,145,220,113,223,104,220,99,151,190,250,185,0,143,81,14,179,152,118,219,188,140,111,207,86,154,95,40,0,48,16,223,221,77,59,56,130,14,21,78,210,10,163,22,164,37,5,167,210,54,213,210,70,36,203,68,255,41,143,232,9,199,212,172,136,238,116,192,221,128,246,99,1,158,240,232,152,206,3,251,111,187,27,115,30,161,234,101,99,27,197,73,195,81,237,188,33,83,214,176,14,24,142,65,101,28,127,52,42,225,198,116,4,24,237,249,86,0,240,150,0,60,1,192,191,6,16,92,3,136,36,128,145,131,100,200,72,251,201,192,177,15,155,114,116,38,77,178,214,29,219,83,159,30,172,96,156,171,203,220,214,122,152,2,221,17,194,177,109,32,148,240,99,16,102,248,105,51,99,86,229,69,86,50,37,96,80,118,29,93,215,22,21,193,186,69,215,11,50,46,166,164,129,107,106,89,154,204,104,31,39,46,202,44,195,117,50,246,196,30,68,49,129,223,184,38,5,223,237,61,122,155,139,38,224,222,145,5,84,113,252,5,28,235,26,82,176,128,228,238,116,36,52,154,193,99,102,208,251,23,218,204,220,30,131,176,20,107,166,55,36,120,83,24,200,155,20,178,161,22,115,75,46,39,208,185,232,97,52,196,42,20,91,147,93,184,65,104,98,133,16,175,50,195,197,199,63,251,134,80,216,232,221,33,54,146,225,180,105,17,147,179,134,138,140,15,78,61,211,85,103,9,54,92,27,92,67,182,27,118,51,199,244,13,236,234,143,63,42,187,132,11,233,5,84,180,249,225,217,196,251,159,103,147,29,68,26,175,127,193,202,98,181,51,54,232,98,139,215,185,147,115,162,3,44,16,103,194,155,107,20,107,216,141,139,249,101,52,136,234,145,211,248,138,99,222,99,140,123,187,123,41,73,90,44,46,242,198,159,202,227,169,105,9,170,201,66,209,113,192,244,165,172,2,129,220,150,31,237,230,48,109,176,214,60,104,131,190,108,127,35,214,52,233,185,237,224,253,169,41,153,239,234,110,63,84,95,148,254,24,197,145,222,178,247,104,99,127,37,39,71,180,176,130,34,253,240,92,18,75,240,110,85,50,195,246,58,3,163,14,91,64,184,57,147,196,58,54,191,127,12,161,249,32,253,238,67,240,31,128,29,205,107,167,5,78,159,23,123,158,219,40,243,220,108,4,52,202,250,116,38,255,34,111,39,252,243,29,67,2,107,222,253,54,185,7,75,34,138,177,166,197,13,244,203,27,43,146,25,36,23,222,193,147,177,78,163,237,223,178,190,172,3,206,196,22,204,70,31,26,176,15,121,223,86,43,80,205,45,148,186,235,64,215,0,84,253,27,89,249,253,194,119,234,59,42,254,160,116,80,67,124,192,176,244,200,167,67,114,177,31,51,217,212,108,10,186,50,41,160,225,192,31,135,190,12,154,139,54,18,226,160,189,9,137,19,49,25,203,148,0,123,195,99,200,228,253,230,14,134,31,29,70,121,35,14,177,60,55,76,180,89,156,228,83,12,54,159,67,3,19,125,6,79,199,25,133,95,198,100,25,78,172,214,153,97,164,188,231,169,199,145,206,124,24,41,101,188,169,122,31,163,102,183,26,43,86,56,198,128,181,159,194,134,102,61,201,111,216,230,64,118,27,198,252,141,158,195,5,229,150,254,177,158,195,125,100,193,121,192,165,62,224,57,87,24,108,62,135,182,234,57,239,227,189,231,57,75,152,74,241,206,246,241,154,7,120,211,58,22,179,242,157,58,15,125,179,224,22,67,234,244,168,15,180,207,199,204,234,192,31,133,45,250,208,74,208,86,64,97,5,165,171,166,212,40,251,123,3,34,52,98,151,76,162,45,173,8,236,124,11,150,3,117,59,176,202,233,188,92,211,183,13,237,228,144,55,122,204,112,101,134,159,236,27,37,19,54,253,99,93,176,213,26,40,46,237,160,172,85,48,99,87,105,88,206,226,28,108,188,185,220,204,224,48,107,160,77,234,244,55,75,105,12,127,173,188,172,170,53,145,21,213,58,137,184,169,60,119,180,81,134,43,156,18,190,70,255,14,43,80,134,95,99,247,227,76,20,168,206,42,124,81,86,249,229,28,197,156,151,31,29,141,166,8,5,155,135,115,137,198,19,217,78,83,19,45,106,133,101,20,85,213,84,196,172,75,229,125,205,104,170,168,60,219,218,192,237,117,155,197,96,30,218,112,201,38,15,88,112,44,135,190,132,242,249,227,84,37,151,48,63,143,46,27,51,195,57,58,87,228,74,97,255,131,185,159,62,176,3,237,47,203,34,147,147,43,211,63,94,24,187,236,44,222,99,253,178,32,51,41,193,1,111,141,162,31,38,198,15,182,206,26,97,197,78,203,41,128,53,95,40,64,255,85,54,166,62,248,92,147,81,186,162,227,207,51,118,41,170,240,163,187,89,243,146,145,52,204,153,182,152,76,146,169,65,166,175,78,203,89,248,70,122,138,2,87,138,68,119,107,79,117,98,48,249,15,61,23,25,253,199,215,54,190,84,106,171,105,75,90,114,128,242,89,181,146,172,63,209,173,165,81,155,117,168,244,206,174,67,44,236,237,164,69,96,101,252,250,10,240,57,53,243,8,243,150,84,54,136,64,59,77,215,196,92,128,233,191,238,3,70,119,66,107,27,230,173,182,16,59,115,43,113,186,34,54,215,128,122,195,80,151,87,106,75,175,181,171,231,170,110,162,160,173,219,108,3,178,48,218,233,131,234,192,31,100,103,174,74,65,39,158,186,248,223,72,86,201,226,142,156,169,189,41,34,133,206,85,160,164,239,15,207,164,184,44,207,3,243,110,209,211,11,224,144,54,69,167,95,206,186,173,7,103,157,15,4,31,61,40,158,77,203,3,188,77,242,49,240,31,41,36,183,215,232,106,239,231,211,241,243,116,231,86,209,151,94,37,240,27,183,55,17,29,174,226,94,37,201,47,226,126,249,250,237,13,28,205,51,92,103,138,209,255,242,165,222,27,152,154,103,184,206,20,163,255,213,171,194,55,240,52,77,112,149,37,78,254,75,247,143,111,224,135,83,191,202,12,167,253,197,27,205,55,176,51,210,191,202,16,167,222,179,178,108,186,171,195,14,68,13,126,230,61,28,142,14,7,157,244,172,69,168,108,87,207,231,199,70,155,243,149,51,5,65,55,252,155,0,97,104,142,63,142,189,219,244,124,105,249,191,99,155,215,192,101,246,239,159,239,234,243,241,238,55,225,198,67,132,143,3,147,140,127,97,97,103,151,27,164,203,73,244,240,80,172,4,220,225,202,21,109,76,255,114,174,236,26,125,47,159,216,121,225,124,9,107,62,176,150,189,204,159,27,162,244,114,137,210,19,234,37,106,244,40,187,42,59,152,150,188,85,152,175,244,243,61,139,68,186,82,76,151,71,21,121,60,212,234,164,107,27,42,148,129,46,154,176,239,94,182,161,166,96,45,140,193,179,119,187,93,210,156,9,133,164,231,243,75,39,168,82,110,242,233,235,150,134,41,109,12,58,99,175,48,111,155,227,35,61,125,219,152,164,129,55,1,125,41,61,209,165,142,45,69,49,71,240,247,218,146,50,160,117,42,65,238,27,161,117,205,15,171,49,186,12,21,152,69,111,52,146,110,56,10,98,122,99,247,245,37,205,80,135,248,156,90,192,4,92,45,64,226,22,157,0,188,201,96,223,85,200,12,117,85,27,19,104,15,49,97,19,40,178,135,158,237,47,244,240,102,10,6,86,73,245,247,244,57,232,43,198,199,19,121,147,54,185,144,115,233,94,117,108,209,142,225,164,12,207,217,69,126,240,237,27,255,46,193,168,57,116,58,1,155,168,78,135,224,225,120,176,215,72,89,91,221,176,12,40,199,161,230,218,72,199,113,202,206,141,182,96,39,239,158,195,122,153,181,111,223,190,35,250,133,138,229,0,90,105,196,250,242,151,164,164,67,110,246,29,43,125,219,161,223,117,27,57,11,135,12,44,93,180,102,181,179,206,230,112,14,114,229,48,209,218,78,9,125,234,159,58,66,79,190,143,185,151,241,9,160,168,77,159,47,99,122,231,41,120,0,96,71,234,176,185,175,113,107,234,227,160,100,90,197,140,136,221,247,39,165,169,171,119,173,185,7,188,89,232,181,236,140,19,34,133,105,191,206,31,46,29,36,191,103,28,131,151,190,37,252,253,120,221,45,161,237,156,193,225,104,247,30,119,35,112,71,48,174,232,119,98,100,12,95,196,200,16,65,22,11,236,206,72,203,54,173,240,21,108,143,99,179,136,151,209,169,101,149,0,208,169,15,215,34,25,141,149,25,162,117,188,159,164,57,164,251,136,236,9,119,174,58,45,192,253,112,157,245,255,5,99,157,41,226,200,56,0,0 };
    +const uint8_t CSS_STYLE_GZIP[3424] PROGMEM = { 31,139,8,0,160,250,217,97,2,255,213,27,219,110,235,184,241,87,212,4,1,98,172,164,234,110,91,194,46,250,216,183,2,221,151,22,197,246,128,150,168,72,136,44,185,146,124,146,172,161,127,239,144,212,133,55,197,78,114,22,69,143,79,18,155,154,25,206,157,195,33,109,167,77,221,163,178,198,237,229,212,116,101,95,54,117,220,226,10,245,229,119,156,188,148,89,95,196,219,253,67,114,68,237,83,89,199,158,115,122,77,14,205,171,213,149,191,151,245,83,124,104,218,12,183,22,140,12,118,218,84,231,99,109,142,127,187,11,67,118,29,231,33,201,171,6,245,113,133,243,30,192,80,155,93,142,101,109,21,184,124,42,122,2,64,105,82,66,45,202,202,115,23,71,211,44,5,202,154,151,216,49,130,211,43,253,105,159,14,232,209,115,2,211,221,111,77,119,23,154,142,29,110,146,19,202,50,224,198,34,19,48,22,167,145,150,78,65,135,152,4,192,106,223,55,199,56,160,67,240,153,113,25,82,38,128,243,166,141,239,243,60,31,254,114,196,89,137,30,23,8,215,115,194,211,235,230,98,195,71,188,8,49,9,185,133,135,131,6,107,187,119,214,177,162,208,225,177,208,235,248,32,242,25,146,4,191,223,61,12,131,221,225,148,24,233,208,98,244,60,235,154,113,126,168,80,250,172,135,48,138,246,194,116,28,59,201,168,121,143,104,25,48,158,218,230,92,103,214,40,125,20,69,131,221,159,219,255,156,155,178,195,151,5,32,190,119,209,33,221,167,201,108,116,170,201,123,55,66,206,46,52,124,48,79,215,84,101,54,216,248,136,91,84,101,2,174,135,211,116,235,202,184,222,22,225,200,225,113,79,184,199,109,11,206,215,10,232,126,176,223,101,7,5,125,191,115,14,123,30,253,5,247,168,59,21,168,234,37,244,96,31,98,5,61,245,113,40,204,222,157,107,240,213,23,105,242,220,77,3,39,151,177,113,116,56,56,57,143,13,246,106,27,113,98,28,109,177,231,201,168,153,31,6,142,48,49,170,202,223,81,91,214,34,242,54,72,125,69,223,169,227,239,189,3,143,156,161,246,89,64,12,130,96,23,110,101,68,54,202,35,86,232,128,171,139,54,158,147,151,162,236,177,213,157,80,138,227,186,121,105,209,73,10,82,219,195,199,41,208,98,219,133,79,134,29,144,95,46,252,78,122,252,218,91,32,213,83,29,167,184,6,155,114,209,149,228,144,115,172,23,230,133,91,199,73,42,200,63,115,62,176,125,41,86,33,180,146,172,236,78,21,122,139,203,154,194,30,170,38,125,214,177,8,126,211,151,41,170,198,169,15,168,195,4,33,81,115,91,223,156,98,203,118,67,224,85,13,130,253,126,47,49,225,146,80,101,10,179,200,76,99,122,219,67,118,227,217,56,181,152,62,78,94,64,87,244,93,76,227,208,34,159,71,124,155,78,2,50,156,249,240,154,227,47,223,163,204,21,65,91,156,105,32,51,127,155,110,83,17,242,169,197,184,214,192,238,15,169,23,237,68,216,166,69,245,147,142,133,12,35,55,12,68,224,55,92,65,96,104,128,241,62,139,2,137,223,211,185,61,85,58,202,251,124,231,131,112,74,158,12,156,49,227,205,139,17,27,223,5,15,154,172,58,231,71,9,154,36,72,101,25,26,205,200,86,2,159,164,233,241,81,156,151,109,215,91,105,81,86,217,12,206,15,78,168,116,89,113,6,187,169,241,76,125,121,63,45,116,129,29,205,255,182,192,71,255,210,200,75,161,111,251,243,63,2,81,128,177,36,24,207,131,7,121,115,110,165,113,223,177,5,234,57,184,176,12,178,23,201,119,229,171,204,34,209,79,135,191,227,90,122,16,70,34,117,26,137,18,76,20,138,228,235,82,81,193,54,32,82,41,212,119,158,68,189,210,176,176,119,37,229,188,224,74,17,145,22,19,170,85,172,190,40,219,108,132,93,81,24,152,131,129,117,34,156,44,22,33,7,203,71,46,66,81,205,53,121,222,225,222,58,188,89,130,39,104,70,59,193,117,118,146,103,44,24,139,143,152,218,81,145,142,187,149,88,93,48,56,79,50,87,198,69,90,94,36,16,224,60,206,212,15,139,232,126,96,175,136,196,57,166,169,31,22,41,5,254,154,80,139,255,154,218,81,145,78,232,137,200,156,139,153,43,227,34,129,200,89,19,137,143,6,115,101,92,162,181,95,19,138,139,26,83,63,44,82,218,138,142,215,107,133,234,87,68,218,69,171,34,85,43,250,145,98,147,167,182,15,215,132,146,67,208,124,231,217,173,126,164,196,171,249,222,195,91,213,47,69,183,185,254,72,245,174,161,232,143,213,133,150,46,80,45,225,56,242,236,240,97,56,52,217,219,8,10,149,245,242,212,181,73,101,33,20,54,66,217,3,43,30,251,156,163,99,89,189,197,119,127,59,225,218,248,21,213,221,157,217,193,111,240,212,182,204,167,162,201,35,53,164,186,244,166,185,147,187,67,225,154,133,103,22,190,89,4,102,17,154,69,52,177,78,74,28,71,170,99,236,176,5,190,120,78,124,199,1,18,156,96,65,43,115,110,123,73,133,123,40,226,104,149,67,234,61,168,156,0,106,40,60,14,207,183,35,13,102,184,134,234,243,168,42,162,191,134,23,112,120,158,173,97,214,215,76,233,236,40,110,120,225,45,180,83,113,117,168,33,69,141,4,212,80,69,141,100,84,103,181,114,17,212,29,42,138,12,108,79,213,16,85,174,40,189,175,200,228,173,176,58,12,39,193,41,6,52,110,25,239,93,140,112,118,24,80,92,52,100,207,53,142,58,57,114,82,60,28,206,224,51,245,69,91,124,79,149,191,171,110,223,125,97,47,173,47,175,71,218,49,74,73,53,126,209,238,67,147,30,42,212,46,111,218,99,76,223,65,229,142,255,241,24,128,6,141,249,243,63,233,231,225,254,8,133,224,95,49,2,46,180,236,14,247,80,44,254,218,163,254,220,45,125,142,178,46,32,200,122,46,106,237,45,68,237,200,154,105,143,226,75,27,1,98,121,62,55,216,62,55,194,202,76,58,52,216,103,43,63,87,21,51,61,95,193,172,52,80,206,22,105,1,112,40,75,71,224,125,180,19,65,161,51,95,88,167,133,190,159,159,16,46,47,124,11,166,103,59,178,139,178,71,27,138,150,119,19,230,229,146,248,212,55,39,131,51,238,156,233,35,65,114,167,237,165,113,143,93,242,26,150,58,61,70,57,204,98,218,109,243,50,189,61,91,105,126,33,0,192,64,124,119,55,111,244,122,116,168,112,146,86,24,181,32,109,95,48,42,109,83,233,246,43,89,198,59,89,121,68,79,56,38,182,71,100,67,4,62,9,180,31,11,112,151,71,199,116,30,232,127,219,221,152,203,8,81,47,29,219,72,158,28,78,106,103,141,168,178,134,197,194,112,12,34,227,244,163,80,9,55,166,195,193,40,207,183,28,128,167,3,240,56,0,255,26,64,112,13,32,18,0,38,14,166,30,208,126,54,112,236,195,222,29,157,251,38,89,235,3,238,137,79,143,86,48,206,213,101,105,224,61,204,217,192,225,98,182,109,32,222,240,99,16,102,248,105,179,96,86,229,69,84,50,33,96,16,118,29,85,215,22,17,193,186,69,215,26,25,181,121,107,228,154,88,150,100,60,210,238,137,139,50,203,112,157,76,189,192,7,94,76,224,55,174,251,130,109,9,31,189,205,69,17,112,239,136,2,202,56,190,6,199,186,134,20,104,144,220,157,138,132,38,51,120,212,12,106,155,67,153,153,217,99,20,150,96,45,244,198,85,192,228,6,242,38,133,148,169,196,156,206,229,56,58,23,53,140,198,88,133,138,108,182,11,51,8,201,190,16,226,85,102,184,248,248,103,223,224,170,31,181,137,68,71,50,156,54,45,162,114,214,80,182,177,193,185,87,188,234,44,193,134,105,131,105,200,118,195,110,225,152,188,129,173,255,241,71,101,151,80,147,94,64,69,155,31,158,77,188,255,121,54,217,65,164,177,34,25,172,204,151,68,83,31,47,182,88,49,60,59,39,58,192,2,113,238,89,15,142,96,141,91,118,62,191,76,6,145,61,114,30,95,113,204,123,140,241,96,119,47,101,159,22,218,74,192,248,83,121,60,53,109,143,234,94,83,153,28,48,121,73,171,64,32,30,71,76,118,115,168,54,232,145,4,104,131,188,108,127,195,23,62,233,185,237,224,253,169,41,169,239,170,110,63,150,104,132,254,20,197,209,114,84,241,110,117,177,154,165,35,82,143,65,109,127,120,46,123,139,243,119,89,86,195,246,58,3,163,14,91,64,184,57,247,137,117,108,126,255,24,66,243,65,250,221,135,224,63,0,59,25,220,78,11,156,62,107,155,165,219,40,243,220,108,2,52,202,250,116,238,255,213,191,157,240,207,119,20,9,236,123,247,219,236,48,52,173,72,230,155,151,59,208,47,235,199,144,3,20,189,83,239,224,201,84,185,145,142,99,89,95,214,1,23,98,26,179,145,135,6,108,95,222,183,213,10,84,115,11,165,238,58,208,53,0,89,255,70,86,126,191,176,13,254,142,136,63,42,29,212,16,31,48,44,70,226,177,146,184,71,136,169,108,114,126,5,93,153,4,208,112,224,143,67,94,6,201,78,27,1,113,212,222,140,196,136,152,148,101,66,128,190,97,117,172,201,26,213,29,12,63,58,148,242,134,31,162,153,111,156,104,163,157,228,83,12,54,159,67,3,19,125,6,79,197,153,132,215,99,178,227,65,174,126,167,134,17,50,161,39,31,204,58,203,177,172,144,3,231,122,126,138,154,221,106,172,88,225,20,3,214,126,14,27,146,7,5,191,161,219,5,209,109,40,243,55,122,14,19,148,89,250,199,122,14,243,17,141,243,128,75,125,192,115,174,48,216,124,14,109,213,115,222,199,123,207,115,116,152,82,57,79,183,255,138,7,120,243,202,22,211,130,158,56,15,121,163,113,139,233,200,157,248,64,251,124,204,172,14,252,145,219,217,143,29,8,101,5,228,214,84,178,142,10,253,181,191,55,32,66,195,55,215,4,218,194,138,64,15,198,96,57,144,55,8,171,156,46,11,56,121,219,144,6,80,255,70,78,39,174,204,240,147,125,163,100,92,27,96,170,20,182,74,223,197,245,181,39,250,172,166,153,154,81,227,114,22,231,96,227,205,229,102,6,199,89,3,101,82,103,184,89,74,99,252,107,229,101,85,173,137,44,169,214,73,248,109,230,185,35,253,53,92,225,180,103,107,244,239,176,2,101,248,53,118,63,206,68,129,234,172,194,23,105,149,215,231,40,234,188,236,196,105,50,69,200,217,60,148,138,54,107,167,168,137,148,185,220,50,138,170,106,46,98,214,165,242,190,102,52,89,84,150,109,109,122,85,229,26,141,24,204,67,90,48,217,236,1,26,199,114,200,139,43,168,63,78,85,112,9,243,243,232,162,49,51,156,163,115,213,95,41,245,127,48,247,243,7,122,18,254,101,89,68,114,98,101,250,199,11,99,151,157,197,90,179,95,22,100,33,197,57,224,173,81,244,195,196,248,193,214,89,35,44,217,73,159,2,104,59,134,0,12,95,101,99,110,159,47,53,25,161,203,59,254,50,99,151,162,10,63,186,155,53,47,153,72,195,156,105,139,251,89,50,57,200,212,213,73,159,133,111,164,39,41,112,165,72,116,183,246,92,39,6,179,255,144,227,148,201,127,124,101,227,75,164,182,26,216,52,67,201,1,202,167,213,74,178,254,68,181,150,66,109,209,161,212,77,187,14,161,217,219,9,139,192,202,248,245,21,224,115,106,102,17,230,233,84,54,138,64,122,79,215,196,212,192,12,95,247,1,163,59,161,181,13,243,86,89,136,157,165,185,56,223,45,91,106,64,181,133,168,202,43,52,170,215,26,216,75,85,55,83,80,214,109,186,1,209,140,118,234,160,60,240,7,217,153,169,146,211,137,39,47,254,55,146,149,178,184,35,102,106,111,142,72,174,151,21,72,233,251,195,51,73,46,203,242,192,178,91,244,212,2,56,36,109,210,249,151,179,110,235,209,89,151,115,196,71,15,138,103,211,242,200,37,223,228,99,224,63,82,72,102,175,201,213,222,207,167,211,231,249,178,174,164,47,181,74,96,87,117,111,34,58,222,225,189,74,146,221,224,253,242,189,221,27,56,90,102,184,206,20,165,255,229,219,192,55,48,181,204,112,157,41,74,255,171,119,140,111,224,105,158,224,42,75,140,252,151,46,46,223,192,15,163,126,149,25,70,251,139,87,161,111,96,103,162,127,149,33,70,125,160,101,217,124,197,135,30,145,26,236,20,124,60,46,29,143,62,201,233,11,87,217,174,158,216,39,243,61,252,47,156,50,112,186,97,223,137,8,67,115,250,113,236,221,102,96,75,203,255,29,219,172,6,46,179,127,255,124,87,159,143,119,191,113,119,32,34,124,28,153,164,252,115,11,59,61,22,17,238,52,145,227,68,190,18,112,199,155,90,164,49,253,203,185,178,107,244,189,124,162,39,136,203,221,45,241,158,131,207,125,141,100,145,121,122,184,244,72,201,53,21,169,77,52,8,19,144,243,238,170,236,128,147,254,173,194,108,241,95,46,99,136,39,59,100,197,148,145,167,147,175,78,184,219,33,67,25,232,162,200,255,238,181,29,98,29,218,213,24,157,125,183,219,37,205,185,39,144,228,16,95,119,204,42,164,43,159,188,110,233,161,146,94,161,51,181,15,243,182,57,62,146,35,186,141,217,55,240,38,32,47,169,77,170,107,226,18,20,115,2,127,175,83,41,2,90,167,18,228,190,17,90,213,252,184,64,163,203,88,148,89,228,110,100,223,141,167,67,84,111,244,238,191,160,25,226,16,159,83,11,152,128,169,5,72,220,162,19,128,55,41,236,187,10,89,160,174,106,99,6,29,32,76,236,30,234,238,177,141,251,11,57,207,153,131,129,22,87,195,61,121,14,250,138,241,241,212,191,9,251,94,72,195,100,251,58,117,109,167,8,147,134,151,132,35,62,248,246,141,125,47,97,210,28,58,157,128,77,84,167,99,240,48,60,216,126,164,180,211,110,88,6,84,232,80,134,109,132,19,58,105,51,71,186,178,179,119,47,97,173,103,237,219,183,239,136,124,57,67,31,64,43,189,89,95,252,6,153,112,18,78,191,128,166,238,68,212,91,115,19,103,225,152,148,133,43,219,180,156,86,217,28,143,70,174,156,47,90,219,57,199,207,45,85,135,107,211,15,49,243,50,54,1,212,185,233,243,252,133,49,150,149,71,0,122,238,14,251,253,26,183,166,58,14,74,198,203,55,205,134,238,251,147,212,231,85,27,217,204,3,222,44,244,90,118,198,9,245,133,105,191,46,31,46,29,36,191,103,28,131,151,190,37,236,253,116,39,46,33,29,158,209,225,72,67,31,119,19,112,215,99,92,145,239,215,136,24,62,143,145,161,30,89,52,176,59,35,45,219,180,194,87,176,61,134,77,35,94,68,39,150,149,2,64,165,62,94,176,164,52,86,102,136,214,241,126,18,230,16,110,54,210,39,204,185,234,180,0,247,195,117,54,252,23,184,125,141,214,215,57,0,0 };
    
    From f5dd757240b83ac5ea312aabc3dfb6337253fbf0 Mon Sep 17 00:00:00 2001
    From: Ian Gray 
    Date: Sat, 8 Jan 2022 21:25:10 +0000
    Subject: [PATCH 2/3] Add support for wide panels.
    
    Allows for panels to be displayed in single column mode, regardless of screen width.
    For more information, see updates to README.md
    ---
     README.md               | 19 ++++++++++++++++++-
     data/js/controls.js     |  3 ++-
     data/js/controls.min.js |  2 +-
     src/ESPUI.cpp           | 10 ++++++++++
     src/ESPUI.h             |  4 ++++
     src/dataControlsJS.h    |  4 ++--
     6 files changed, 37 insertions(+), 5 deletions(-)
    
    diff --git a/README.md b/README.md
    index 823ae76..40d53f9 100644
    --- a/README.md
    +++ b/README.md
    @@ -34,7 +34,7 @@ The Library runs fine on any kind of **ESP8266** and **ESP32** (NodeMCU Boards,
     - Graph Widget (Persist save graph in local storage #10)
     - Inline CSS styles by @iangray001
     - Separators by @iangray001
    -- Grouped controls by @iangray001
    +- Grouped and wide controls by @iangray001
     
     ## Further Roadmap
     
    @@ -431,6 +431,23 @@ and buttons.
     
     If you group too many elements it might throw the layout of the rest of the UI out of line. Consider adding separators to correct this.
     
    +### Advanced: Wide controls
    +
    +Controls can be set to be displayed "wide" with the function:
    +
    +```
    + ESPUI.setPanelWide(controlid, true);
    +```
    +
    +*Important!* This function should be called _before_ `ESPUI.begin` or results will be unreliable.
    +
    +Setting a control to wide tells ESPUI to lay out that control as if there was only a single column, even on wide displays. 
    +This can be applied to every element to force a single column layout, or to individual elements to customise the display.
    +
    +![Wide controls](docs/ui_widecontrols.png)
    +
    +Note that this will have no effect on small screens.
    +
     # Notes for Development
     
     If you want to work on the HTML/CSS/JS files, do make changes in the _data_
    diff --git a/data/js/controls.js b/data/js/controls.js
    index 3a57493..19f0a19 100644
    --- a/data/js/controls.js
    +++ b/data/js/controls.js
    @@ -662,6 +662,7 @@ var rangeSlider = function (isDiscrete) {
     var addToHTML = function(data) {
       panelStyle = data.hasOwnProperty('panelStyle') ? " style='" + data.panelStyle + "' " : "";
       elementStyle = data.hasOwnProperty('elementStyle') ? " style='" + data.elementStyle + "' " : "";
    +  panelwide = data.hasOwnProperty('wide') ? "wide" :  "";
     
       if(!data.hasOwnProperty('parentControl') || $("#tab" + data.parentControl).length > 0) {
         //We add the control with its own panel
    @@ -683,7 +684,7 @@ var addToHTML = function(data) {
           case UI_GRAPH:
           case UI_GAUGE:
           case UI_ACCEL:
    -        html = "
    " + data.label + "

    " + elementHTML(data.type, data.id, data.value, elementStyle) + "
    "; diff --git a/data/js/controls.min.js b/data/js/controls.min.js index 1c0f96a..08cd597 100644 --- a/data/js/controls.min.js +++ b/data/js/controls.min.js @@ -48,7 +48,7 @@ function buttonclick(number,isdown){if(isdown)websock.send("bdown:"+number);else function padclick(type,number,isdown){switch(type){case CENTER:if(isdown)websock.send("pcdown:"+number);else websock.send("pcup:"+number);break;case UP:if(isdown)websock.send("pfdown:"+number);else websock.send("pfup:"+number);break;case DOWN:if(isdown)websock.send("pbdown:"+number);else websock.send("pbup:"+number);break;case LEFT:if(isdown)websock.send("pldown:"+number);else websock.send("plup:"+number);break;case RIGHT:if(isdown)websock.send("prdown:"+number);else websock.send("prup:"+number);break;}} function switcher(number,state){if(state==null){if($("#s"+number).is(":checked")){websock.send("sactive:"+number);$("#sl"+number).addClass("checked");}else{websock.send("sinactive:"+number);$("#sl"+number).removeClass("checked");}}else if(state==1){$("#sl"+number).addClass("checked");$("#sl"+number).prop("checked",true);}else if(state==0){$("#sl"+number).removeClass("checked");$("#sl"+number).prop("checked",false);}} var rangeSlider=function(isDiscrete){var range=$(".range-slider__range");var slidercb=function(){sliderchange($(this).attr("id").replace(/^\D+/g,""));};range.on({input:function(){$(this).next().html(this.value)}});range.each(function(){$(this).next().html(this.value);if($(this).attr("callbackSet")!="true"){if(!isDiscrete){$(this).on({input:slidercb});}else{$(this).on({change:slidercb});} -$(this).attr("callbackSet","true");}});};var addToHTML=function(data){panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"' ":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"' ":"";if(!data.hasOwnProperty('parentControl')||$("#tab"+data.parentControl).length>0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    "+data.label+"

    "+ elementHTML(data.type,data.id,data.value,elementStyle)+ "
    ";break;case UI_SEPARATOR:html="
    "+ diff --git a/src/ESPUI.cpp b/src/ESPUI.cpp index 3fd67fe..a462ef0 100644 --- a/src/ESPUI.cpp +++ b/src/ESPUI.cpp @@ -825,6 +825,14 @@ void ESPUIClass::setElementStyle(uint16_t id, String style, int clientId) } } +void ESPUIClass::setPanelWide(uint16_t id, bool wide) { + Control* control = getControl(id); + if (control) + { + control->wide = wide; + } +} + void ESPUIClass::updateControl(uint16_t id, int clientId) { Control* control = getControl(id); @@ -1038,6 +1046,8 @@ Control* ESPUIClass::prepareJSONChunk(AsyncWebSocketClient* client, Control* con item["panelStyle"] = String(control->panelStyle); if (control->elementStyle != 0) item["elementStyle"] = String(control->elementStyle); + if (control->wide == true) + item["wide"] = true; if (control->parentControl != Control::noParent) { diff --git a/src/ESPUI.h b/src/ESPUI.h index 946b71c..b16c4c2 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -139,6 +139,7 @@ public: String value; ControlColor color; bool visible; + bool wide; uint16_t parentControl; String panelStyle; String elementStyle; @@ -154,6 +155,7 @@ public: value(value), color(color), visible(visible), + wide(false), parentControl(parentControl), next(nullptr) { @@ -289,6 +291,8 @@ public: void setPanelStyle(uint16_t id, String style, int clientId = -1); void setElementStyle(uint16_t id, String style, int clientId = -1); + void setPanelWide(uint16_t id, bool wide); + // Variables const char* ui_title = "ESPUI"; // Store UI Title and Header Name Control* controls = nullptr; diff --git a/src/dataControlsJS.h b/src/dataControlsJS.h index fc06d73..bbaebe4 100644 --- a/src/dataControlsJS.h +++ b/src/dataControlsJS.h @@ -49,7 +49,7 @@ function buttonclick(number,isdown){if(isdown)websock.send("bdown:"+number);else function padclick(type,number,isdown){switch(type){case CENTER:if(isdown)websock.send("pcdown:"+number);else websock.send("pcup:"+number);break;case UP:if(isdown)websock.send("pfdown:"+number);else websock.send("pfup:"+number);break;case DOWN:if(isdown)websock.send("pbdown:"+number);else websock.send("pbup:"+number);break;case LEFT:if(isdown)websock.send("pldown:"+number);else websock.send("plup:"+number);break;case RIGHT:if(isdown)websock.send("prdown:"+number);else websock.send("prup:"+number);break;}} function switcher(number,state){if(state==null){if($("#s"+number).is(":checked")){websock.send("sactive:"+number);$("#sl"+number).addClass("checked");}else{websock.send("sinactive:"+number);$("#sl"+number).removeClass("checked");}}else if(state==1){$("#sl"+number).addClass("checked");$("#sl"+number).prop("checked",true);}else if(state==0){$("#sl"+number).removeClass("checked");$("#sl"+number).prop("checked",false);}} var rangeSlider=function(isDiscrete){var range=$(".range-slider__range");var slidercb=function(){sliderchange($(this).attr("id").replace(/^\D+/g,""));};range.on({input:function(){$(this).next().html(this.value)}});range.each(function(){$(this).next().html(this.value);if($(this).attr("callbackSet")!="true"){if(!isDiscrete){$(this).on({input:slidercb});}else{$(this).on({change:slidercb});} -$(this).attr("callbackSet","true");}});};var addToHTML=function(data){panelStyle=data.hasOwnProperty('panelStyle')?" style='"+data.panelStyle+"' ":"";elementStyle=data.hasOwnProperty('elementStyle')?" style='"+data.elementStyle+"' ":"";if(!data.hasOwnProperty('parentControl')||$("#tab"+data.parentControl).length>0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    0){var parent=data.hasOwnProperty('parentControl')?$("#tab"+data.parentControl):$("#row");var html="";switch(data.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:html="
    "+data.label+"

    "+ elementHTML(data.type,data.id,data.value,elementStyle)+ "
    ";break;case UI_SEPARATOR:html="
    "+ @@ -86,4 +86,4 @@ value+"
    ";case UI_NUMBER:return"
    ";default:return"";}}
     )=====";
     
    -const uint8_t JS_CONTROLS_GZIP[3743] PROGMEM = { 31,139,8,0,160,250,217,97,2,255,197,91,91,119,218,72,18,126,247,175,144,149,57,65,44,132,75,110,147,128,229,28,130,73,194,14,49,94,27,79,230,108,38,235,35,68,99,116,44,36,141,36,124,25,135,255,190,213,213,23,117,11,129,25,156,157,125,137,81,169,186,250,235,170,234,238,186,40,110,24,36,169,113,222,191,232,31,247,71,253,206,224,226,227,121,223,126,222,104,180,93,241,226,180,55,24,118,142,128,214,20,180,147,163,206,168,119,49,252,240,225,172,55,178,155,42,111,239,183,81,239,248,136,201,104,42,244,81,127,212,27,216,10,225,4,36,230,228,33,41,155,164,127,209,165,148,231,58,83,151,113,61,207,184,222,159,143,70,195,99,251,133,206,199,169,205,198,139,140,115,208,121,15,32,94,234,140,140,216,108,188,204,248,206,190,244,71,221,79,189,83,251,149,206,42,233,205,198,43,133,123,208,63,2,218,235,28,47,163,54,27,175,51,206,227,243,207,239,129,246,179,206,201,169,205,198,207,138,186,64,143,96,144,147,243,145,253,70,231,86,222,52,27,111,178,17,31,79,59,39,159,236,183,156,208,57,58,98,148,139,147,97,255,152,178,242,23,221,65,175,115,202,153,155,141,183,202,140,157,247,118,51,103,16,70,83,12,114,214,27,244,186,32,45,103,19,65,110,42,86,25,158,140,250,84,255,57,179,8,114,83,49,203,231,62,16,114,86,65,90,83,177,201,231,206,111,118,51,103,15,164,53,85,83,140,122,39,118,51,111,9,36,54,21,59,124,236,156,127,236,217,205,156,29,56,181,169,152,161,211,237,82,223,200,153,128,83,155,111,84,197,156,116,78,59,163,33,152,241,109,94,55,242,141,242,74,238,132,163,225,151,99,185,15,6,189,15,35,233,239,167,253,143,159,70,210,171,187,189,227,17,56,137,80,72,247,98,116,126,250,175,243,97,255,172,39,69,117,47,122,159,123,167,157,65,182,175,186,23,39,61,24,117,218,255,21,134,62,151,196,47,189,81,231,236,228,83,103,160,136,191,56,59,63,254,48,24,126,209,230,232,118,78,79,135,35,185,11,186,23,157,65,255,223,157,83,48,205,107,73,58,234,156,254,34,61,186,123,113,60,60,238,217,207,95,189,106,95,59,177,113,25,59,209,236,200,73,29,59,32,55,70,39,142,157,59,171,140,111,102,78,210,113,93,226,219,83,199,79,8,146,18,223,155,144,184,27,6,169,23,44,194,69,194,95,77,23,129,155,122,97,96,184,161,31,198,93,223,73,18,11,127,246,39,229,123,254,195,62,94,204,199,36,150,244,118,114,227,165,238,76,225,115,18,162,234,172,21,147,116,17,7,38,252,243,199,34,244,18,98,182,57,11,87,161,96,32,115,18,59,254,68,190,206,244,41,56,34,146,146,56,246,174,73,44,153,50,253,10,166,27,146,58,73,52,115,252,84,50,73,125,11,158,100,17,76,253,240,70,145,195,212,47,222,187,78,28,135,217,120,97,10,241,218,241,189,63,157,216,11,36,3,181,132,120,57,113,226,43,179,61,33,83,103,225,167,130,104,182,151,203,61,170,249,27,50,78,66,247,170,173,252,6,51,4,196,77,201,36,111,133,152,252,177,32,73,58,140,61,18,164,14,37,157,144,120,238,37,9,252,178,202,247,203,61,201,153,56,215,228,163,112,0,120,229,135,174,227,159,165,97,236,92,146,90,66,210,126,74,230,150,73,146,104,225,161,159,36,102,245,159,103,195,227,90,146,194,42,46,189,233,157,37,221,167,92,110,43,130,99,152,63,140,21,217,30,88,24,61,8,102,156,160,187,105,115,93,22,206,149,9,111,123,83,75,14,221,183,131,133,239,151,239,51,89,8,42,114,226,132,100,92,229,54,211,97,54,229,87,111,242,13,64,50,242,215,111,121,188,78,156,130,10,126,178,38,161,187,152,131,230,202,53,103,50,177,204,127,152,229,90,56,157,194,166,248,201,50,159,196,225,13,60,207,210,185,111,153,102,185,205,77,81,115,253,16,230,6,167,102,82,84,209,176,235,206,192,10,139,164,7,190,17,195,12,107,204,71,165,75,94,152,35,38,243,240,154,176,205,100,226,46,121,118,25,19,18,152,229,21,86,192,169,241,197,100,82,192,197,64,35,10,163,110,28,135,6,71,64,65,62,125,242,230,245,139,87,237,130,81,217,210,53,106,96,221,187,190,231,94,181,184,230,170,75,109,209,51,39,152,248,228,87,47,241,198,158,239,165,119,93,32,92,130,130,238,193,142,251,121,5,60,125,186,47,116,94,155,121,147,9,9,202,247,210,32,116,3,100,254,202,141,36,217,97,229,189,107,248,49,240,146,148,4,112,188,152,215,114,78,23,231,52,171,197,88,170,168,117,116,172,27,47,152,132,55,53,234,144,116,150,90,20,198,233,190,109,154,223,191,23,191,121,211,88,247,230,229,203,23,210,190,120,158,126,33,227,51,248,77,82,203,188,73,90,245,186,89,201,15,156,133,73,26,56,115,82,49,91,171,47,169,212,138,89,191,1,149,183,151,4,240,238,44,156,203,216,19,14,27,6,97,68,2,91,104,214,34,215,41,61,170,131,36,244,9,140,191,4,145,140,211,160,124,91,248,220,58,223,76,201,45,224,147,182,206,246,76,230,255,105,188,32,237,101,59,131,134,187,105,27,108,200,8,34,243,123,76,147,70,40,109,131,52,74,40,146,192,238,64,234,59,232,98,15,73,160,236,147,220,97,4,47,106,19,60,139,232,91,98,75,191,29,135,147,59,164,185,240,68,98,112,54,113,31,82,246,90,122,23,17,126,35,234,65,127,171,224,12,162,164,212,25,39,129,115,93,68,6,160,176,53,82,245,21,248,60,78,147,191,206,225,72,205,95,240,133,124,224,71,72,167,162,227,208,79,106,211,48,238,57,0,158,248,132,46,207,62,196,179,30,110,178,91,166,186,123,202,222,202,93,29,156,185,92,93,182,21,53,91,114,20,216,160,220,30,199,196,185,106,11,77,100,153,75,235,255,3,128,165,89,173,252,62,139,137,31,58,19,43,207,141,9,85,75,26,61,245,82,159,48,141,250,206,152,248,104,162,185,227,5,159,136,3,250,21,22,202,24,242,242,48,13,106,137,39,150,147,200,199,44,233,144,36,22,243,203,71,12,158,149,151,60,232,109,9,119,192,163,211,39,101,216,218,163,240,211,232,243,192,98,190,171,131,96,73,219,202,160,251,252,40,186,184,113,26,152,21,100,131,251,31,47,141,52,92,184,51,60,198,91,217,126,42,223,147,90,20,19,170,243,35,22,255,80,85,46,210,148,30,5,112,201,88,92,68,149,158,20,96,149,42,74,33,193,100,23,25,252,220,95,178,27,75,95,155,72,30,31,94,29,219,173,112,225,8,177,140,221,241,17,96,78,44,205,135,165,222,233,239,173,148,23,77,119,214,93,228,76,216,162,207,79,170,187,234,174,72,134,170,59,132,232,63,30,34,77,168,30,15,82,147,178,2,51,126,60,76,76,245,30,143,83,23,179,2,116,252,120,160,52,91,125,60,78,77,202,10,76,247,241,48,89,178,252,120,160,57,57,27,119,55,150,123,30,222,124,49,141,15,207,240,206,179,246,87,238,200,21,177,163,206,251,85,153,250,165,236,68,16,68,65,46,113,224,123,135,7,142,17,6,115,144,68,22,145,93,2,30,182,14,169,209,138,89,46,25,179,152,76,237,18,149,160,208,75,135,252,1,143,153,138,121,80,119,14,15,234,32,178,240,182,151,115,78,188,107,195,155,224,84,154,176,131,58,188,161,99,233,56,27,4,212,116,1,240,52,38,147,46,123,182,32,55,12,163,22,53,211,178,140,49,141,101,58,145,199,102,118,128,123,234,249,16,200,88,210,108,52,132,199,244,235,39,43,157,121,9,224,73,83,8,207,233,194,204,178,109,219,16,37,210,117,63,75,195,103,236,44,133,84,23,157,201,68,186,89,85,29,128,94,230,0,199,142,226,112,30,65,56,57,114,198,70,26,26,108,32,253,101,5,88,93,48,32,181,1,159,124,199,98,156,125,186,158,26,99,130,17,22,60,150,193,218,62,137,169,136,153,147,82,153,198,36,36,137,17,132,169,65,110,33,137,48,90,191,255,142,129,114,129,207,21,184,20,43,149,73,243,67,212,7,35,186,44,42,97,176,25,137,170,247,73,2,1,135,155,114,27,232,172,109,246,152,25,45,140,48,225,161,118,99,63,205,202,158,176,221,158,89,50,208,5,236,146,160,50,143,160,47,4,133,77,70,40,247,161,160,97,80,1,132,131,58,147,121,104,174,174,232,115,127,219,229,120,147,162,165,84,76,195,11,162,69,202,76,192,151,149,120,127,66,242,87,190,23,171,68,87,152,123,129,169,95,155,43,88,58,191,253,93,88,156,219,7,176,208,10,229,223,4,6,82,217,232,1,52,88,28,126,248,36,147,5,148,175,220,119,190,217,43,149,25,113,144,183,1,1,156,116,248,226,236,250,210,90,29,91,53,145,150,157,253,186,243,228,234,217,45,220,180,137,253,217,73,103,181,56,92,128,91,211,164,21,36,194,138,105,193,103,228,205,225,87,189,217,104,52,138,144,214,162,69,50,179,238,111,91,105,82,189,107,101,218,128,93,152,43,91,237,130,92,193,173,148,219,91,5,10,251,250,237,7,207,39,106,214,212,124,162,198,90,102,239,101,201,21,83,226,135,47,170,141,133,190,220,214,86,58,41,152,69,170,161,91,150,119,112,135,19,83,3,160,225,77,112,18,135,17,28,154,119,86,137,167,76,103,233,157,79,74,101,118,205,169,130,132,3,195,107,238,193,234,136,98,72,50,232,222,16,83,195,125,209,48,223,53,90,205,191,6,45,121,52,54,22,50,176,32,224,130,22,228,44,109,135,131,92,5,101,213,4,103,54,149,202,210,223,7,148,39,131,84,22,92,133,138,48,0,182,179,101,117,73,187,192,82,146,82,140,80,200,109,250,131,176,229,68,237,100,92,150,30,175,92,205,143,133,182,34,108,23,112,60,205,86,73,89,22,153,181,89,91,171,35,89,154,79,129,92,58,139,75,242,131,22,149,151,181,203,154,216,177,199,232,162,209,33,234,104,88,165,179,204,243,224,42,8,111,2,131,86,192,104,52,135,33,152,41,206,207,229,158,128,76,223,31,218,90,147,251,233,83,249,230,64,175,154,177,27,90,212,134,242,27,120,173,26,34,39,32,190,166,4,117,88,129,6,178,1,229,28,84,219,214,14,20,72,105,24,24,189,202,207,142,153,103,178,227,197,251,109,207,120,135,75,60,102,237,44,65,201,122,87,130,34,59,85,130,192,90,83,226,73,118,162,202,109,129,36,43,232,114,30,179,162,180,243,120,185,13,158,203,162,20,93,184,132,12,187,0,173,160,85,97,74,124,28,216,38,68,107,113,44,247,104,218,130,249,218,51,126,70,95,224,19,36,36,132,214,3,149,116,132,231,33,95,27,223,248,149,162,39,38,72,195,116,134,81,3,90,183,230,55,99,33,39,203,7,148,58,243,156,36,137,115,73,108,165,150,168,182,68,24,62,214,148,224,233,10,243,75,144,103,139,59,128,211,113,167,102,221,165,4,115,130,196,199,153,91,102,5,254,98,187,128,115,171,179,48,210,134,89,240,76,223,52,77,176,197,44,244,240,221,48,7,59,155,55,77,146,110,51,137,72,141,11,167,160,201,236,198,25,156,241,22,115,176,163,122,147,81,248,89,190,209,48,91,76,164,86,34,217,235,170,151,76,224,164,195,150,24,255,169,139,29,83,154,34,141,110,58,35,199,178,136,138,167,147,229,17,122,248,84,115,19,242,78,131,210,100,96,69,148,214,58,36,145,251,48,148,200,213,176,104,135,255,122,193,211,45,4,79,215,9,166,53,170,245,162,183,80,95,52,94,39,154,150,19,215,139,246,183,16,237,175,19,141,21,192,245,178,227,45,100,199,5,178,181,54,169,8,164,185,225,19,72,14,8,58,26,254,178,121,255,28,158,209,197,51,239,246,224,4,111,193,72,247,138,118,234,100,43,83,248,185,3,226,175,137,50,117,254,216,82,154,130,66,136,222,183,20,146,188,224,65,89,122,255,59,19,135,242,140,108,45,205,44,130,222,4,35,207,19,193,53,159,189,23,245,199,156,236,198,170,236,53,176,30,16,47,202,146,236,99,14,165,192,152,117,21,189,228,200,75,220,152,164,188,222,133,76,246,218,251,77,249,30,199,29,219,202,61,167,221,51,250,205,5,225,11,93,64,228,59,46,177,234,255,249,253,168,82,191,172,154,120,149,177,162,39,22,115,177,74,209,90,189,57,181,43,145,82,120,24,185,92,242,146,233,186,43,119,221,192,54,58,160,10,208,117,124,127,236,184,87,103,4,98,190,125,219,164,86,49,217,71,3,170,122,196,160,12,173,80,196,82,248,155,202,194,116,161,241,236,173,159,183,202,103,109,47,151,162,11,44,243,238,76,207,152,128,223,103,1,159,253,96,4,249,206,52,48,86,164,69,187,92,180,88,161,117,187,150,105,182,213,16,218,222,34,52,95,145,169,190,150,82,169,250,214,192,83,234,83,165,242,247,239,242,102,45,168,114,213,124,18,92,166,179,195,134,86,239,218,70,238,187,77,98,179,142,54,107,184,131,143,108,238,134,235,77,80,45,77,82,26,120,107,91,111,185,102,192,238,205,84,172,23,21,183,86,89,158,195,150,34,203,239,74,238,128,150,169,168,246,55,92,122,160,216,165,244,38,164,31,209,45,230,65,66,3,227,137,145,178,15,4,104,89,183,56,10,198,74,254,236,149,104,13,176,18,175,121,80,7,210,193,44,174,211,218,47,119,10,89,56,66,133,86,87,139,44,85,45,131,195,58,49,118,8,114,197,171,172,113,188,203,10,19,246,197,17,138,20,75,165,141,13,152,109,195,42,116,36,203,61,189,92,78,113,136,141,191,85,45,54,95,111,223,77,67,242,60,87,134,103,39,4,138,128,209,5,3,11,34,48,233,216,252,195,191,131,4,148,135,90,133,75,69,232,83,219,221,123,82,165,168,45,3,255,125,118,19,59,17,85,167,108,17,81,57,135,102,190,123,47,102,97,97,41,206,131,189,250,117,51,241,142,21,141,77,128,83,137,101,217,144,170,129,247,39,109,71,152,106,119,171,136,147,93,133,104,114,9,146,241,41,48,229,62,22,64,217,26,41,206,228,97,133,240,190,144,89,177,68,241,176,105,190,147,151,49,28,137,101,214,76,219,99,190,203,71,121,1,167,225,149,130,21,8,187,132,131,198,225,109,137,205,45,166,14,131,46,93,148,152,138,126,120,198,150,135,145,21,118,97,54,204,45,252,249,160,142,203,82,214,189,114,92,137,245,7,142,196,201,63,122,129,109,191,240,25,96,173,171,200,108,164,118,239,13,221,72,20,156,169,24,169,144,149,91,9,87,77,63,68,96,45,195,167,79,222,190,126,213,104,103,141,199,135,102,103,237,238,109,1,228,184,53,12,241,206,24,240,211,128,109,33,232,204,26,2,127,103,4,216,76,223,22,129,206,172,33,24,111,68,80,103,238,96,241,122,19,115,166,119,38,160,202,28,103,234,197,243,210,26,148,188,147,190,37,76,206,93,12,212,21,64,135,191,80,140,204,237,41,68,112,99,117,151,179,59,88,248,184,178,23,213,144,87,219,149,250,9,192,246,40,50,151,140,185,7,171,105,192,95,231,214,46,53,27,13,165,73,202,15,26,92,141,30,34,21,77,200,99,108,216,96,120,8,23,114,160,68,253,16,195,147,86,92,84,185,184,66,44,145,45,130,199,108,120,129,183,198,16,141,95,181,87,78,51,19,151,138,213,26,222,242,101,139,101,9,70,209,218,224,160,197,64,87,240,240,20,128,233,10,44,83,87,96,41,241,205,174,208,88,145,39,223,142,46,64,163,20,139,10,177,240,192,74,94,124,88,113,249,11,64,68,137,134,67,201,38,214,138,59,133,83,179,32,78,204,60,245,46,23,49,65,153,188,125,199,63,148,128,23,174,195,59,230,21,25,155,40,84,124,128,177,170,104,140,8,185,232,47,253,193,192,120,223,51,58,6,146,141,77,202,198,233,89,177,253,127,96,120,22,154,114,88,248,96,212,233,199,224,176,179,230,17,211,45,153,24,83,184,197,238,246,213,13,233,208,182,36,137,195,57,173,230,50,144,72,146,32,15,85,238,49,228,83,82,123,236,170,139,64,179,69,178,194,69,74,155,226,146,57,66,45,22,252,55,136,255,2,191,111,104,3,4,55,0,0 };
    +const uint8_t JS_CONTROLS_GZIP[3761] PROGMEM = { 31,139,8,0,198,0,218,97,2,255,197,91,91,119,218,72,18,126,247,175,144,149,57,65,172,9,151,220,38,1,203,57,4,147,132,29,98,188,54,158,204,217,76,214,71,136,198,232,88,72,26,73,24,123,28,254,251,86,87,95,212,45,4,102,112,118,246,37,134,234,234,234,175,171,170,187,235,66,220,48,72,82,227,162,119,217,59,233,13,123,237,254,229,199,139,158,253,188,94,111,185,98,224,172,219,31,180,143,129,214,16,180,211,227,246,176,123,57,248,240,225,188,59,180,27,42,111,247,183,97,247,228,152,201,104,40,244,97,111,216,237,219,10,225,20,36,230,228,33,41,91,164,119,217,161,148,231,58,83,135,113,61,207,184,222,95,12,135,131,19,251,133,206,199,169,141,250,139,140,179,223,126,15,32,94,234,140,140,216,168,191,204,248,206,191,244,134,157,79,221,51,251,149,206,42,233,141,250,43,133,187,223,59,6,218,235,28,47,163,54,234,175,51,206,147,139,207,239,129,246,179,206,201,169,141,250,207,138,186,64,143,96,144,211,139,161,253,70,231,86,70,26,245,55,217,140,143,103,237,211,79,246,91,78,104,31,31,51,202,229,233,160,119,66,89,249,64,167,223,109,159,113,230,70,253,173,178,98,251,189,221,200,25,132,209,20,131,156,119,251,221,14,72,203,217,68,144,27,138,85,6,167,195,30,213,127,206,44,130,220,80,204,242,185,7,132,156,85,144,214,80,108,242,185,253,155,221,200,217,3,105,13,213,20,195,238,169,221,200,91,2,137,13,197,14,31,219,23,31,187,118,35,103,7,78,109,40,102,104,119,58,212,55,114,38,224,212,198,27,85,49,167,237,179,246,112,0,102,124,155,215,141,28,81,134,228,73,56,30,124,57,145,231,160,223,253,48,148,254,126,214,251,248,105,40,189,186,211,61,25,130,147,8,133,116,46,135,23,103,255,186,24,244,206,187,82,84,231,178,251,185,123,214,238,103,231,170,115,121,218,133,89,103,189,95,97,234,115,73,252,210,29,182,207,79,63,181,251,138,248,203,243,139,147,15,253,193,23,109,141,78,251,236,108,48,148,167,160,115,217,238,247,254,221,62,3,211,188,150,164,227,246,217,47,210,163,59,151,39,131,147,174,253,252,213,171,214,141,19,27,87,177,19,77,143,157,212,177,3,178,48,218,113,236,220,89,101,28,153,58,73,219,117,137,111,79,28,63,33,72,74,124,111,76,226,78,24,164,94,48,15,231,9,31,154,204,3,55,245,194,192,112,67,63,140,59,190,147,36,22,126,236,141,203,247,252,131,125,50,159,141,72,44,233,173,100,225,165,238,84,225,115,18,162,234,172,25,147,116,30,7,38,252,243,199,60,244,18,98,182,56,11,87,161,96,32,51,18,59,254,88,14,103,250,20,28,17,73,73,28,123,55,36,150,76,153,126,5,211,130,164,78,18,77,29,63,149,76,82,223,130,39,153,7,19,63,92,40,114,152,250,197,184,235,196,113,152,205,23,166,16,195,142,239,253,233,196,94,32,25,168,37,196,224,216,137,175,205,214,152,76,156,185,159,10,162,217,90,46,247,168,230,23,100,148,132,238,117,75,249,12,102,8,136,155,146,113,222,10,49,249,99,78,146,116,16,123,36,72,29,74,58,37,241,204,75,18,248,100,149,239,151,123,146,51,113,110,200,71,225,0,48,228,135,174,227,159,167,97,236,92,145,106,66,210,94,74,102,150,73,146,104,238,161,159,36,102,229,159,231,131,147,106,146,194,46,174,188,201,157,37,221,167,92,110,41,130,99,88,63,140,21,217,30,88,24,61,8,86,28,163,187,105,107,93,21,174,149,9,111,121,19,75,78,221,183,131,185,239,151,239,51,89,8,42,114,226,132,100,92,229,22,211,97,182,228,87,111,252,13,64,50,242,215,111,121,188,78,156,130,10,126,178,198,161,59,159,129,230,202,85,103,60,182,204,127,152,229,106,56,153,192,161,248,201,50,159,196,225,2,190,79,211,153,111,153,102,185,197,77,81,117,253,16,214,6,167,102,82,84,209,112,234,206,193,10,243,164,11,190,17,195,10,107,204,71,165,75,94,88,35,38,179,240,134,176,195,100,226,41,121,118,21,19,18,152,229,21,86,192,169,241,197,100,92,192,197,64,35,10,163,102,156,132,6,71,64,65,62,125,242,230,245,139,87,173,130,89,217,214,53,106,96,221,187,190,231,94,55,185,230,42,75,109,211,83,39,24,251,228,87,47,241,70,158,239,165,119,29,32,92,129,130,238,193,142,251,121,5,60,125,186,47,116,94,157,122,227,49,9,202,247,210,32,244,0,100,254,202,141,36,217,97,231,221,27,248,208,247,146,148,4,112,189,152,55,114,77,23,215,52,43,197,88,42,168,117,116,172,133,23,140,195,69,149,58,36,93,165,26,133,113,186,111,155,230,247,239,197,35,111,234,235,70,94,190,124,33,237,139,247,233,23,50,58,135,207,36,181,204,69,210,172,213,204,131,252,196,105,152,164,129,51,35,7,102,115,117,144,74,61,48,107,11,80,121,107,73,0,239,206,194,185,140,61,225,176,97,16,70,36,176,133,102,45,114,147,210,171,58,72,66,159,192,252,43,16,201,56,13,202,183,133,207,173,243,205,148,220,2,62,105,235,236,204,100,254,159,198,115,210,90,182,50,104,120,154,182,193,134,140,32,50,127,198,52,105,132,210,54,72,163,132,34,9,236,13,164,190,131,46,246,144,4,202,62,206,93,70,48,80,29,227,93,68,71,137,45,253,118,20,142,239,144,230,194,55,18,131,179,137,247,144,178,87,211,187,136,240,23,81,15,250,155,5,119,16,37,165,206,40,9,156,155,34,50,0,133,163,145,170,67,224,243,184,76,254,57,135,43,53,255,192,23,242,129,31,33,157,138,142,67,63,169,78,194,184,235,0,120,226,19,186,61,251,8,239,122,120,201,110,153,234,238,41,123,51,247,116,112,230,114,101,217,82,212,108,201,89,96,131,114,107,20,19,231,186,37,52,145,101,46,205,255,15,0,150,102,53,243,231,44,38,126,232,140,173,60,55,38,84,77,105,244,212,75,125,194,52,234,59,35,226,163,137,102,142,23,124,34,14,232,87,88,40,99,200,203,195,52,168,41,190,177,156,68,126,205,146,14,73,98,49,191,252,138,193,179,50,200,131,222,166,112,7,188,58,125,82,134,163,61,12,63,13,63,247,45,230,187,58,8,150,180,173,76,186,207,207,162,155,27,165,129,121,128,108,240,254,227,163,145,134,115,119,138,215,120,51,59,79,229,123,82,141,98,66,117,126,204,226,31,170,202,121,154,210,171,0,30,25,139,139,168,208,155,2,172,82,65,41,36,24,239,34,131,223,251,75,246,98,233,123,19,201,227,195,187,99,167,21,30,28,33,150,177,59,62,2,204,137,165,249,176,212,59,253,188,149,242,162,201,206,186,139,156,49,219,244,197,105,101,87,221,21,201,80,117,135,16,253,199,67,164,9,213,227,65,106,82,86,96,198,143,135,137,169,222,227,113,234,98,86,128,142,30,15,148,102,171,143,199,169,73,89,129,233,62,30,38,75,150,31,15,52,39,103,227,233,198,114,207,195,135,47,166,241,225,57,190,121,214,254,202,27,185,34,118,216,126,191,42,83,127,148,157,8,130,40,200,37,14,125,239,232,208,49,194,96,6,146,200,60,178,75,192,195,246,33,53,122,96,150,75,198,52,38,19,187,68,37,40,244,210,17,255,130,215,204,129,121,88,115,142,14,107,32,178,240,181,151,107,142,189,27,195,27,227,82,154,176,195,26,140,208,185,116,158,13,2,170,186,0,248,54,34,227,14,251,110,65,110,24,70,77,106,166,101,25,99,26,203,116,34,143,173,236,0,247,196,243,33,144,177,164,217,104,8,143,233,215,79,86,58,245,18,192,147,166,16,158,211,141,153,101,219,182,33,74,164,251,126,150,134,207,216,93,10,169,46,58,147,137,116,179,162,58,0,125,204,1,142,29,197,225,44,130,112,114,232,140,140,52,52,216,68,250,201,10,176,186,96,64,106,3,62,249,142,197,56,251,116,63,85,198,4,51,44,248,90,6,107,251,36,166,34,166,78,74,101,26,227,144,36,70,16,166,6,185,133,36,194,104,254,254,59,6,202,5,62,87,224,82,172,84,38,205,15,81,31,204,232,176,168,132,193,102,36,170,222,39,9,4,28,110,202,109,160,179,182,216,215,204,104,97,132,9,15,181,27,251,104,30,236,9,219,237,153,37,3,93,192,46,9,42,243,8,58,32,40,108,49,66,185,143,4,13,131,10,32,28,214,152,204,35,115,117,71,159,123,219,110,199,27,23,109,229,192,52,188,32,154,167,204,4,124,91,137,247,39,36,127,229,123,177,75,116,133,153,23,152,250,179,185,130,165,253,219,223,133,197,185,125,0,11,173,80,254,77,96,32,149,141,30,64,131,197,225,135,111,50,89,64,249,202,125,231,155,189,82,153,17,23,121,11,16,192,77,135,3,231,55,87,214,234,220,138,137,180,236,238,215,157,39,87,207,110,226,161,77,236,207,78,58,173,198,225,28,220,154,38,173,32,17,118,76,11,62,67,111,6,159,106,141,122,189,94,132,180,26,205,147,169,117,127,219,76,147,202,93,51,211,6,156,194,92,217,106,23,228,10,110,165,220,222,44,80,216,215,111,63,120,61,81,179,166,230,19,53,214,50,27,151,37,87,76,137,31,126,168,54,22,250,114,71,91,233,164,96,22,169,134,110,89,222,193,29,78,44,13,128,6,139,224,52,14,35,184,52,239,172,18,79,153,206,211,59,159,148,202,236,153,83,5,9,7,134,97,238,193,234,140,98,72,50,232,222,16,83,195,123,81,55,223,213,155,141,191,6,45,121,52,54,22,50,176,32,224,146,22,228,44,237,132,131,92,5,101,197,4,103,54,149,202,210,223,7,148,39,131,84,22,60,133,138,48,0,182,179,101,117,73,187,192,82,146,82,140,80,200,109,250,131,176,229,68,237,100,92,150,30,175,60,205,143,133,182,34,108,23,112,60,205,86,73,89,22,153,181,89,155,171,51,89,154,79,129,92,57,243,43,242,131,54,149,151,181,203,158,216,181,199,232,162,209,33,234,104,88,165,179,204,139,224,58,8,23,129,65,43,96,52,154,195,16,204,20,247,231,114,79,64,166,227,71,182,214,228,126,250,84,142,28,234,85,51,246,66,139,218,80,254,0,175,85,67,228,4,196,215,148,160,78,43,208,64,54,161,156,131,106,219,218,133,2,41,13,3,163,87,249,217,53,243,76,118,188,120,191,237,25,239,112,137,175,89,59,75,80,178,222,149,160,200,78,149,32,176,214,148,248,38,59,81,229,150,64,146,21,116,57,143,121,160,180,243,120,185,13,190,151,69,41,186,112,11,25,118,1,90,65,171,194,148,248,56,176,77,136,214,226,88,238,209,180,5,243,181,103,252,142,190,196,111,144,144,16,90,15,84,210,17,158,135,124,173,127,227,79,138,158,152,32,13,211,25,70,13,104,221,154,191,140,133,156,44,31,80,234,204,51,146,36,206,21,177,149,90,162,218,18,97,248,88,83,130,167,43,204,47,65,158,45,222,0,78,199,147,154,117,151,18,204,9,18,31,87,110,154,7,240,23,219,5,156,91,93,133,145,54,172,130,119,250,166,101,130,45,86,161,151,239,134,53,216,221,188,105,145,116,155,69,68,106,92,184,4,77,102,55,174,224,140,182,88,131,93,213,155,140,194,239,242,141,134,217,98,33,181,18,201,134,43,94,50,134,155,14,91,98,252,163,46,118,68,105,138,52,122,232,140,28,203,60,42,94,78,150,71,232,229,83,201,45,200,59,13,74,147,129,21,81,154,235,144,68,238,195,80,34,87,195,162,93,254,235,5,79,182,16,60,89,39,152,214,168,214,139,222,66,125,209,104,157,104,90,78,92,47,218,223,66,180,191,78,52,86,0,215,203,142,183,144,29,23,200,214,218,164,34,144,230,134,79,32,57,32,232,104,248,201,230,253,115,248,142,46,158,121,183,7,55,120,19,102,186,215,180,83,39,91,153,194,207,29,16,127,67,148,165,243,215,150,210,20,20,66,244,190,165,144,228,5,15,202,210,251,223,153,56,148,103,100,123,105,100,17,244,38,24,121,158,8,158,249,108,92,212,31,115,178,235,171,178,215,192,122,64,188,40,75,178,31,115,40,5,198,172,171,232,37,199,94,226,198,36,229,245,46,100,178,215,190,111,202,239,113,220,145,173,188,115,218,59,163,191,92,16,190,208,13,68,190,227,18,171,246,159,223,143,15,106,87,21,19,159,50,86,244,196,98,46,86,41,154,171,47,167,246,36,82,10,15,35,151,75,94,50,93,247,228,174,155,216,66,7,84,1,186,142,239,143,28,247,250,156,64,204,183,111,155,212,42,38,251,209,128,170,30,49,41,67,43,20,177,20,254,166,178,48,93,104,60,123,235,215,173,240,85,91,203,165,232,2,203,188,59,211,51,38,224,247,89,192,103,63,24,65,190,51,13,140,21,105,209,46,23,45,30,208,186,93,211,52,91,106,8,109,111,17,154,175,200,84,135,165,84,92,104,1,155,47,22,73,71,168,40,250,23,249,169,186,215,108,71,169,103,149,202,223,191,203,151,184,160,42,86,245,73,112,149,78,143,234,90,125,108,27,185,239,54,137,205,58,224,172,65,15,62,181,185,123,174,55,77,181,180,74,105,248,173,109,213,229,154,7,187,55,95,177,190,84,220,138,101,121,17,219,138,44,215,43,185,6,90,242,64,245,23,195,165,23,144,93,74,23,33,253,209,221,124,22,36,130,131,154,145,50,56,241,216,72,217,207,11,104,81,184,56,134,198,62,192,244,149,104,44,176,2,177,121,88,3,210,225,52,174,209,202,49,119,41,89,118,66,245,86,86,75,52,21,45,255,195,42,51,246,23,114,165,175,172,237,188,203,126,19,246,123,37,20,41,54,78,219,34,176,218,134,93,232,72,150,123,122,177,157,226,16,215,198,86,149,220,124,181,126,55,13,201,215,64,153,158,221,47,40,2,102,23,76,44,136,223,164,155,243,159,13,30,38,160,60,212,42,60,73,66,159,218,221,176,39,85,138,218,50,240,223,103,139,216,137,168,58,101,131,137,202,57,50,243,189,127,177,10,11,106,113,29,236,244,175,91,137,247,187,104,100,3,156,74,36,204,166,84,12,124,125,105,51,195,84,123,99,69,156,236,33,69,147,75,144,140,79,129,41,79,181,0,202,246,72,113,38,15,43,132,119,149,204,3,75,148,30,27,230,59,249,148,195,5,89,102,173,184,61,230,187,124,150,23,112,26,62,72,88,191,176,75,56,105,20,222,150,216,218,98,233,48,232,208,77,137,165,232,207,214,216,246,48,46,195,30,206,134,181,133,63,31,214,112,91,202,190,87,46,47,177,255,192,145,56,249,79,102,224,216,207,125,6,88,235,73,50,27,169,189,127,67,55,18,5,103,42,70,42,100,229,86,194,93,211,159,49,176,134,227,211,39,111,95,191,170,183,178,182,229,67,171,179,102,249,182,0,114,220,26,134,120,103,12,248,195,130,109,33,232,204,26,2,127,103,4,216,138,223,22,129,206,172,33,24,109,68,80,99,238,96,241,106,21,115,166,119,38,160,202,28,103,226,197,179,210,26,148,188,15,191,37,76,206,93,12,212,21,64,7,191,80,140,204,237,41,68,112,99,245,148,179,23,89,248,184,114,22,213,128,89,59,149,250,13,192,206,40,50,151,140,153,7,187,169,195,95,231,214,46,53,234,117,165,197,202,47,26,220,141,30,96,21,45,200,35,116,56,96,120,9,23,114,160,68,253,18,195,155,86,60,84,185,40,67,108,145,109,130,71,124,248,128,55,71,16,203,95,183,86,110,51,19,183,138,181,30,222,48,102,155,101,233,73,209,222,224,162,197,48,89,240,240,4,130,233,10,44,83,83,96,41,209,206,174,208,88,137,40,223,204,46,64,163,148,154,10,177,240,48,75,62,124,88,175,249,11,64,68,129,135,67,201,22,214,74,67,133,75,179,144,78,172,60,241,174,230,49,65,153,188,249,199,127,102,1,3,174,195,251,237,7,50,54,81,168,248,5,230,170,162,49,62,228,162,191,244,250,125,227,125,215,104,27,72,54,54,41,27,151,103,165,250,255,129,225,89,160,202,97,225,23,163,70,127,74,14,39,107,22,49,221,146,177,49,129,87,236,110,95,61,144,14,109,106,146,56,156,209,90,48,3,137,36,9,242,72,229,30,65,54,38,181,199,158,186,8,52,91,36,43,156,167,180,165,46,153,35,212,98,193,127,162,248,47,48,50,219,133,66,55,0,0 };
    
    From f8462bcd485434edc5a2cc60f7465238728e859c Mon Sep 17 00:00:00 2001
    From: Ian Gray 
    Date: Sat, 8 Jan 2022 21:31:19 +0000
    Subject: [PATCH 3/3] Documentation typos
    
    ---
     README.md                |  10 +++++-----
     docs/ui_widecontrols.png | Bin 0 -> 22441 bytes
     2 files changed, 5 insertions(+), 5 deletions(-)
     create mode 100644 docs/ui_widecontrols.png
    
    diff --git a/README.md b/README.md
    index 40d53f9..7babab0 100644
    --- a/README.md
    +++ b/README.md
    @@ -405,8 +405,8 @@ Note: The images in this example are formed by setting a Label to contain an `3%5B%~){2D-X<(u_~q_4IUg+q)U)Zri&kef$`x
    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 literal 0 HcmV?d00001