From 756363397bf7843b45981c9d0791d6506c7cc103 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Fri, 24 Dec 2021 00:44:11 +0100 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20=D1=81=D1=82=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=20=D0=BC=D0=B0=D1=81=D1=81=D0=B8=D0=B2=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=BE=D0=BA=D0=B5=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/build/bundle.css | 14 + data_svelte/build/bundle.js | 2 + data_svelte/config.json | 559 +++++++++++++++++++++++++++++++++++ data_svelte/favicon.png | Bin 0 -> 3127 bytes data_svelte/index.html | 17 ++ data_svelte/settings.json | 11 + include/StandWebServer.h | 1 + include/Web.h | 21 ++ include/main.h | 1 + src/StandWebServer.cpp | 10 + src/Web.cpp | 25 ++ src/main.cpp | 4 + 12 files changed, 665 insertions(+) create mode 100644 data_svelte/build/bundle.css create mode 100644 data_svelte/build/bundle.js create mode 100644 data_svelte/config.json create mode 100644 data_svelte/favicon.png create mode 100644 data_svelte/index.html create mode 100644 data_svelte/settings.json create mode 100644 include/Web.h create mode 100644 src/Web.cpp diff --git a/data_svelte/build/bundle.css b/data_svelte/build/bundle.css new file mode 100644 index 00000000..5c5c667a --- /dev/null +++ b/data_svelte/build/bundle.css @@ -0,0 +1,14 @@ +*,::before,::after{box-sizing:border-box}html{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui, + -apple-system, /* Firefox supports this but not yet `system-ui` */ + 'Segoe UI', + Roboto, + Helvetica, + Arial, + sans-serif, + 'Apple Color Emoji', + 'Segoe UI Emoji'}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace, + SFMono-Regular, + Consolas, + 'Liberation Mono', + Menlo, + monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type='button']{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,::before,::after{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.cards-grid{display:grid;grid-template-columns:repeat(1, minmax(0, 1fr));justify-items:center;gap:1rem}@media(min-width: 640px){.cards-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media(min-width: 1024px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1280px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1536px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}.cards-grid-inline{display:grid;grid-template-columns:repeat(1, minmax(0, 1fr));justify-items:center}.card{width:100%;border-radius:0.5rem;--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity));padding:0.5rem;--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}@media(min-width: 640px){.card{padding:0.5rem}}@media(min-width: 768px){.card{padding:0.5rem}}@media(min-width: 1024px){.card{padding:0.5rem;--tw-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}}@media(min-width: 1280px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}.card-header{padding-bottom:1rem;text-align:center;font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.card-items-psn{margin-bottom:1rem;display:flex;height:2rem;align-items:center}.widget-descr-width{width:66.666667%}.widget-descr-style{padding-right:1rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.widget-width{display:flex;width:33.333333%;justify-content:flex-end}.widget-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-radius:0.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.widget-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.widget-input{padding-top:0.25rem;padding-bottom:0.25rem;padding-right:1rem;text-align:right;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.widget-input:focus{outline:2px solid transparent;outline-offset:2px}.json-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-radius:0.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.json-input:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.json-input{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.json-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.json-input{padding-top:0.25rem;padding-bottom:0.25rem;padding-right:1rem;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.json-input:focus{outline:2px solid transparent;outline-offset:2px}.widget-anydata-style{text-align:center;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.table-head-element{width:25%;overflow-wrap:break-word;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));text-align:center;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.table-body-element{width:25%;overflow-wrap:break-word;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));text-align:center}.table-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.table-input:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.table-input{--tw-bg-opacity:1;background-color:rgba(243, 244, 246, var(--tw-bg-opacity))}.table-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.table-input{text-align:center;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.table-input:focus{outline:2px solid transparent;outline-offset:2px}.long-button{margin-top:1rem;display:flex;height:2rem;width:100%;align-content:center;justify-content:center;overflow-wrap:break-word;border-radius:0.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgba(219, 234, 254, var(--tw-bg-opacity))}.long-button:hover{--tw-bg-opacity:1;background-color:rgba(191, 219, 254, var(--tw-bg-opacity))}.long-button{font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-1{top:0.25rem}.left-1{left:0.25rem}.m-0{margin:0px}.mt-4{margin-top:1rem}.mb-4{margin-bottom:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.w-4{width:1rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-1\/4{width:25%}.w-full{width:100%}.table-fixed{table-layout:fixed}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}@-webkit-keyframes ping{75%,100%{transform:scale(2);opacity:0}}@keyframes ping{75%,100%{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr))}.content-center{align-content:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-4{gap:1rem}.break-words{overflow-wrap:break-word}.rounded{border-radius:0.25rem}.rounded-lg{border-radius:0.5rem}.rounded-full{border-radius:9999px}.border-2{border-width:2px}.border{border-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgba(239, 68, 68, var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249, 250, 251, var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243, 244, 246, var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(75, 85, 99, var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(254, 226, 226, var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgba(248, 113, 113, var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgba(209, 250, 229, var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgba(219, 234, 254, var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgba(99, 102, 241, var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgba(191, 219, 254, var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgba(67, 56, 202, var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-cover{background-size:cover}.p-2{padding:0.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.pt-8{padding-top:2rem}.pr-4{padding-right:1rem}.text-center{text-align:center}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.leading-tight{line-height:1.25}.text-black{--tw-text-opacity:1;color:rgba(0, 0, 0, var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239, 68, 68, var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgba(16, 185, 129, var(--tw-text-opacity))}*,::before,::after{--tw-shadow:0 0 #0000}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,::before,::after{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus\:ring-indigo-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(129, 140, 248, var(--tw-ring-opacity))}.transition{transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}#menu__toggle{opacity:0}#menu__toggle:checked~.menu__btn>span{transform:rotate(45deg)}#menu__toggle:checked~.menu__btn>span::before{top:0;transform:rotate(0)}#menu__toggle:checked~.menu__btn>span::after{top:0;transform:rotate(90deg)}#menu__toggle:checked~.menu__box{visibility:visible;left:0}#menu__toggle:checked~.menu__main{margin-left:150px;transition-duration:0.25s}.menu__btn{display:flex;align-items:center;position:fixed;z-index:1;top:10px;left:20px;width:20px;height:20px;cursor:pointer}.menu__btn>span,.menu__btn>span::before,.menu__btn>span::after{display:block;position:absolute;width:100%;height:2px;background-color:#616161;transition-duration:0.25s}.menu__btn>span::before{content:"";top:-8px}.menu__btn>span::after{content:"";top:8px}.menu__box{display:block;position:fixed;visibility:hidden;top:0;left:-100%;width:150px;height:100%;margin:0;padding:80px 0;list-style:none;background-color:#eceff1;box-shadow:1px 0px 6px rgba(0, 0, 0, 0.2);transition-duration:0.25s}.menu__item{display:block;padding:12px 24px;color:rgba(51, 51, 51, 0.788);font-family:"Roboto", sans-serif;font-size:15px;font-weight:600;text-decoration:none;transition-duration:0.25s}.menu__item:hover{background-color:#cfd8dc}.upper__bar{background-color:rgba(51, 51, 51, 0.144);height:70px;position:fixed;z-index:-1;top:0px;left:0;width:100%;margin:0;padding:0;box-shadow:1px 0px 3px rgba(0, 0, 0, 0.2)}input[type="date"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="time"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{margin-left:7px;margin-right:-6px;width:30px;height:30px;opacity:1}input:checked~.dot{transform:translateX(100%)}@media(min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.sm\:p-2{padding:0.5rem}}@media(min-width: 768px){.md\:p-2{padding:0.5rem}}@media(min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.lg\:p-2{padding:0.5rem}}@media(min-width: 1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.\32xl\:px-8{padding-left:2rem;padding-right:2rem}.\32xl\:py-4{padding-top:1rem;padding-bottom:1rem}} \ No newline at end of file diff --git a/data_svelte/build/bundle.js b/data_svelte/build/bundle.js new file mode 100644 index 00000000..ab6ec331 --- /dev/null +++ b/data_svelte/build/bundle.js @@ -0,0 +1,2 @@ +var app=function(){"use strict";function t(){}function e(t){return t()}function n(){return Object.create(null)}function r(t){t.forEach(e)}function s(t){return"function"==typeof t}function o(t,e){return t!=t?e==e:t!==e||t&&"object"==typeof t||"function"==typeof t}function a(e,n,r){e.$$.on_destroy.push(function(e,...n){if(null==e)return t;const r=e.subscribe(...n);return r.unsubscribe?()=>r.unsubscribe():r}(n,r))}function l(t,e,n,r){if(t){const s=i(t,e,n,r);return t[0](s)}}function i(t,e,n,r){return t[1]&&r?function(t,e){for(const n in e)t[n]=e[n];return t}(n.ctx.slice(),t[1](r(e))):n.ctx}function c(t,e,n,r){if(t[2]&&r){const s=t[2](r(n));if(void 0===e.dirty)return s;if("object"==typeof s){const t=[],n=Math.max(e.dirty.length,s.length);for(let r=0;r32){const e=[],n=t.ctx.length/32;for(let t=0;tt.removeEventListener(e,n,r)}function v(t,e,n){null==n?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function _(t){return""===t?null:+t}function k(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function S(t,e){t.value=null==e?"":e}function E(t,e){for(let n=0;n{K.delete(t),r&&(n&&t.d(1),r())})),t.o(e)}}function V(t,e,n){const r=t.$$.props[e];void 0!==r&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function X(t){t&&t.c()}function tt(t,n,o,a){const{fragment:l,on_mount:i,on_destroy:c,after_update:u}=t.$$;l&&l.m(n,o),a||q((()=>{const n=i.map(e).filter(s);c?c.push(...n):r(n),t.$$.on_mount=[]})),u.forEach(q)}function et(t,e){const n=t.$$;null!==n.fragment&&(r(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function nt(e,s,o,a,l,i,c,u=[-1]){const d=P;N(e);const p=e.$$={fragment:null,ctx:null,props:i,update:t,not_equal:l,bound:n(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(s.context||(d?d.$$.context:[])),callbacks:n(),dirty:u,skip_bound:!1,root:s.target||d.$$.root};c&&c(p.root);let f=!1;if(p.ctx=o?o(e,s.props||{},((t,n,...r)=>{const s=r.length?r[0]:n;return p.ctx&&l(p.ctx[t],p.ctx[t]=s)&&(!p.skip_bound&&p.bound[t]&&p.bound[t](s),f&&function(t,e){-1===t.$$.dirty[0]&&(C.push(t),R(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}$set(t){var e;this.$$set&&(e=t,0!==Object.keys(e).length)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const st=[];function ot(e,n=t){let r;const s=new Set;function a(t){if(o(e,t)&&(e=t,r)){const t=!st.length;for(const t of s)t[1](),st.push(t,e);if(t){for(let t=0;t{s.delete(i),0===s.size&&(r(),r=null)}}}}function at(t,e=!1){return(t=t.slice(t.startsWith("/#")?2:0,t.endsWith("/*")?-2:void 0)).startsWith("/")||(t="/"+t),"/"===t&&(t=""),e&&!t.endsWith("/")&&(t+="/"),t}function lt(t,e,n){if(""===n)return t;if("/"===n[0])return n;let r=t=>t.split("/").filter((t=>""!==t)),s=r(t);return"/"+(e?r(e):[]).map(((t,e)=>s[e])).join("/")+"/"+n}function it(t,e,n,r){let s=[e,"data-"+e].reduce(((e,r)=>{let s=t.getAttribute(r);return n&&t.removeAttribute(r),null===s?e:s}),!1);return!r&&""===s||(s||r||!1)}function ct(t){let e=t.split("&").map((t=>t.split("="))).reduce(((t,e)=>{let n=e[0];if(!n)return t;let r=!(e.length>1)||e[e.length-1];return"string"==typeof r&&r.includes(",")&&(r=r.split(",")),void 0===t[n]?t[n]=[r]:t[n].push(r),t}),{});return Object.entries(e).reduce(((t,e)=>(t[e[0]]=e[1].length>1?e[1]:e[1][0],t)),{})}var ut,dt,pt={HISTORY:1,HASH:2,MEMORY:3,OFF:4,run:function(t,e,n,r){return 1===t?e&&e():2===t?n&&n():r&&r()},getDeafault:function(){return window&&"srcdoc"!==window.location.pathname?1:3}},ft=function(){let t,e=pt.getDeafault(),n=n=>t&&t(gt(e));function r(t){t&&(e=t),window.onhashchange=window.onpopstate=dt=null,e!==pt.OFF&&pt.run(e,(t=>window.onpopstate=n),(t=>window.onhashchange=n))&&n()}return{mode:t=>r(t),get:t=>gt(e),go(t,r){(function(t,e,n){let r=t=>history[n?"replaceState":"pushState"]({},"",t);pt.run(t,(t=>r(e)),(t=>r(`#${e}`)),(t=>dt=e))})(e,t,r),n()},start(e){t=e,r()},stop(){t=null,r(pt.OFF)}}}();function gt(t){let e=ut,n=ut=pt.run(t,(t=>window.location.pathname+window.location.search),(t=>String(window.location.hash.slice(1)||"/")),(t=>dt||"/")),r=n.match(/^([^?#]+)(?:\?([^#]+))?(?:\#(.+))?$/);return{url:n,from:e,path:r[1]||"",query:ct(r[2]||""),hash:r[3]||""}}function mt(t){let e=H("tinro");e&&(e.exact||e.fallback)&&function(t){throw new Error("[Tinro] "+t)}(`${t.fallback?"":``} can't be inside ${e.fallback?"":` with exact path`}`);let n=t.fallback?"fallbacks":"childs",r=ot({}),s={router:{},exact:!1,pattern:null,meta:{},parent:e,fallback:t.fallback,redirect:!1,firstmatch:!1,breadcrumb:null,matched:!1,childs:new Set,activeChilds:new Set,fallbacks:new Set,update(t){s.exact=!t.path.endsWith("/*"),s.pattern=at(`${s.parent&&s.parent.pattern||""}${t.path}`),s.redirect=t.redirect,s.firstmatch=t.firstmatch,s.breadcrumb=t.breadcrumb,s.match()},register:()=>{if(s.parent)return s.parent[n].add(s),()=>{s.parent[n].delete(s),s.router.un&&s.router.un()}},show:()=>{t.onShow(),!s.fallback&&s.parent&&s.parent.activeChilds.add(s)},hide:()=>{t.onHide(),!s.fallback&&s.parent&&s.parent.activeChilds.delete(s)},match:async()=>{s.matched=!1;let{path:e,url:n,from:o,query:a}=s.router,l=function(t,e){t=at(t,!0),e=at(e,!0);let n=[],r={},s=!0,o=t.split("/").map((t=>t.startsWith(":")?(n.push(t.slice(1)),"([^\\/]+)"):t)).join("\\/"),a=e.match(new RegExp(`^${o}$`));return a||(s=!1,a=e.match(new RegExp(`^${o}`))),a?(n.forEach(((t,e)=>r[t]=a[e+1])),{exact:s,params:r,part:a[0].slice(0,-1)}):null}(s.pattern,e);if(!s.fallback&&l&&s.redirect&&(!s.exact||s.exact&&l.exact)){await j();let t=lt(e,s.parent&&s.parent.pattern,s.redirect);return $t.goto(t,!0)}if(s.meta=l&&{from:o,url:n,query:a,match:l.part,pattern:s.pattern,breadcrumbs:s.parent&&s.parent.meta&&s.parent.meta.breadcrumbs.slice()||[],params:l.params,subscribe:r.subscribe},s.breadcrumb&&s.meta&&s.meta.breadcrumbs.push({name:s.breadcrumb,path:l.part}),r.set(s.meta),!l||s.fallback||!(!s.exact||s.exact&&l.exact)||s.parent&&s.parent.firstmatch&&s.parent.matched?s.hide():(t.onMeta(s.meta),s.parent&&(s.parent.matched=!0),s.show()),await j(),l&&!s.fallback&&(s.childs.size>0&&0==s.activeChilds.size||0==s.childs.size&&s.fallbacks.size>0)){let t=s;for(;0==t.fallbacks.size;)if(t=t.parent,!t)return;t&&t.fallbacks.forEach((t=>{if(t.redirect){let e=lt("/",t.parent&&t.parent.pattern,t.redirect);$t.goto(e,!0)}else t.show()}))}}};return o="tinro",a=s,O().$$.context.set(o,a),A((()=>s.register())),s.router.un=$t.subscribe((t=>{s.router.path=t.path,s.router.url=t.url,s.router.query=t.query,s.router.from=t.from,null!==s.pattern&&s.match()})),s;var o,a}function ht(){return H("tinro").meta}var $t=function(){let{subscribe:t}=ot(ft.get(),(t=>{ft.start(t);let e=function(t){let e=e=>{let n=e.target.closest("a[href]"),r=n&&it(n,"target",!1,"_self"),s=n&&it(n,"tinro-ignore"),o=e.ctrlKey||e.metaKey||e.altKey||e.shiftKey;if("_self"==r&&!s&&!o&&n){let r=n.getAttribute("href").replace(/^\/#/,"");/^\/\/|^[a-zA-Z]+:/.test(r)||(e.preventDefault(),t(r.startsWith("/")?r:n.href.replace(window.location.origin,"")))}};return addEventListener("click",e),()=>removeEventListener("click",e)}(ft.go);return()=>{ft.stop(),e()}}));return{subscribe:t,goto:ft.go,params:bt,meta:ht,useHashNavigation:t=>ft.mode(t?pt.HASH:pt.HISTORY),mode:{hash:()=>ft.mode(pt.HASH),history:()=>ft.mode(pt.HISTORY),memory:()=>ft.mode(pt.MEMORY)}}}();function bt(){return H("tinro").meta.params}const wt=t=>({params:2&t,meta:4&t}),yt=t=>({params:t[1],meta:t[2]});function xt(t){let e;const n=t[9].default,r=l(n,t,t[8],yt);return{c(){r&&r.c()},m(t,n){r&&r.m(t,n),e=!0},p(t,s){r&&r.p&&(!e||262&s)&&u(r,n,t,t[8],e?c(n,t[8],s,wt):d(t[8]),yt)},i(t){e||(G(r,t),e=!0)},o(t){U(r,t),e=!1},d(t){r&&r.d(t)}}}function vt(t){let e,n,r=t[0]&&xt(t);return{c(){r&&r.c(),e=y()},m(t,s){r&&r.m(t,s),f(t,e,s),n=!0},p(t,[n]){t[0]?r?(r.p(t,n),1&n&&G(r,1)):(r=xt(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(Z(),U(r,1,1,(()=>{r=null})),Q())},i(t){n||(G(r),n=!0)},o(t){U(r),n=!1},d(t){r&&r.d(t),t&&g(e)}}}function _t(t,e,n){let{$$slots:r={},$$scope:s}=e,{path:o="/*"}=e,{fallback:a=!1}=e,{redirect:l=!1}=e,{firstmatch:i=!1}=e,{breadcrumb:c=null}=e,u=!1,d={},p={};const f=mt({fallback:a,onShow(){n(0,u=!0)},onHide(){n(0,u=!1)},onMeta(t){n(2,p=t),n(1,d=p.params)}});return t.$$set=t=>{"path"in t&&n(3,o=t.path),"fallback"in t&&n(4,a=t.fallback),"redirect"in t&&n(5,l=t.redirect),"firstmatch"in t&&n(6,i=t.firstmatch),"breadcrumb"in t&&n(7,c=t.breadcrumb),"$$scope"in t&&n(8,s=t.$$scope)},t.$$.update=()=>{232&t.$$.dirty&&f.update({path:o,redirect:l,firstmatch:i,breadcrumb:c})},[u,d,p,o,a,l,i,c,s,r]}class kt extends rt{constructor(t){super(),nt(this,t,_t,vt,o,{path:3,fallback:4,redirect:5,firstmatch:6,breadcrumb:7})}}function St(t){let e,n,r,s,o;const a=t[2].default,i=l(a,t,t[1],null);return{c(){e=h("div"),n=h("h1"),r=b(t[0]),s=w(),i&&i.c(),v(n,"class","card-header"),v(e,"class","card")},m(t,a){f(t,e,a),p(e,n),p(n,r),p(e,s),i&&i.m(e,null),o=!0},p(t,[e]){(!o||1&e)&&k(r,t[0]),i&&i.p&&(!o||2&e)&&u(i,a,t,t[1],o?c(a,t[1],e,null):d(t[1]),null)},i(t){o||(G(i,t),o=!0)},o(t){U(i,t),o=!1},d(t){t&&g(e),i&&i.d(t)}}}function Et(t,e,n){let{$$slots:r={},$$scope:s}=e,{title:o}=e;return t.$$set=t=>{"title"in t&&n(0,o=t.title),"$$scope"in t&&n(1,s=t.$$scope)},[o,s,r]}class Pt extends rt{constructor(t){super(),nt(this,t,Et,St,o,{title:0})}}function Nt(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"step","0.1"),v(e,"type","number")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[2]),x(e,"input",t[3])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&_(e.value)!==t[0].status&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ot(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","text")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[4]),x(e,"input",t[5])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&e.value!==t[0].status&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function At(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","date")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[6]),x(e,"input",t[7])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ht(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","time")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[8]),x(e,"input",t[9])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ct(e){let n,r,s,o,a,l,i,c,u,d=(e[0].descr?e[0].descr:"")+"",m="number"==e[0].type&&Nt(e),$="text"==e[0].type&&Ot(e),y="date"==e[0].type&&At(e),x="time"==e[0].type&&Ht(e);return{c(){n=h("div"),r=h("div"),s=h("label"),o=b(d),a=w(),l=h("div"),m&&m.c(),i=w(),$&&$.c(),c=w(),y&&y.c(),u=w(),x&&x.c(),v(s,"class","widget-descr-style"),v(r,"class","widget-descr-width"),v(l,"class","widget-width"),v(n,"class","card-items-psn")},m(t,e){f(t,n,e),p(n,r),p(r,s),p(s,o),p(n,a),p(n,l),m&&m.m(l,null),p(l,i),$&&$.m(l,null),p(l,c),y&&y.m(l,null),p(l,u),x&&x.m(l,null)},p(t,[e]){1&e&&d!==(d=(t[0].descr?t[0].descr:"")+"")&&k(o,d),"number"==t[0].type?m?m.p(t,e):(m=Nt(t),m.c(),m.m(l,i)):m&&(m.d(1),m=null),"text"==t[0].type?$?$.p(t,e):($=Ot(t),$.c(),$.m(l,c)):$&&($.d(1),$=null),"date"==t[0].type?y?y.p(t,e):(y=At(t),y.c(),y.m(l,u)):y&&(y.d(1),y=null),"time"==t[0].type?x?x.p(t,e):(x=Ht(t),x.c(),x.m(l,null)):x&&(x.d(1),x=null)},i:t,o:t,d(t){t&&g(n),m&&m.d(),$&&$.d(),y&&y.d(),x&&x.d()}}}function Tt(t,e,n){let{widget:r}=e,{wsPushProp:s=((t,e,n)=>{})}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget),"wsPushProp"in t&&n(1,s=t.wsPushProp)},[r,s,()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=_(this.value),n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)}]}class Lt extends rt{constructor(t){super(),nt(this,t,Tt,Ct,o,{widget:0,wsPushProp:1})}}function Mt(e){let n,s,o,a,l,i,c,u,d,m,$,y,_,E,P,N,O,A,H=(e[0].descr?e[0].descr:"")+"";return{c(){n=h("div"),s=h("div"),o=h("label"),a=b(H),l=w(),i=h("div"),c=h("label"),u=h("div"),d=h("input"),$=w(),y=h("div"),_=w(),E=h("div"),v(o,"class","widget-descr-style"),v(s,"class","widget-descr-width"),v(d,"id",m=e[0].topic),v(d,"type","checkbox"),v(d,"class","sr-only"),v(y,"class","block bg-gray-600 w-10 h-6 rounded-full"),v(E,"class",P="dot "+(1==e[0].send?"bg-red-400":"bg-white")+" absolute left-1 top-1 w-4 h-4 rounded-full transition"),v(u,"class","relative"),v(c,"for",N=e[0].topic),v(c,"class","items-center cursor-pointer"),v(i,"class","widget-width"),v(n,"class","card-items-psn")},m(t,r){f(t,n,r),p(n,s),p(s,o),p(o,a),p(n,l),p(n,i),p(i,c),p(c,u),p(u,d),S(d,e[0].status),p(u,$),p(u,y),p(u,_),p(u,E),O||(A=[x(d,"change",e[2]),x(d,"change",e[3])],O=!0)},p(t,[e]){1&e&&H!==(H=(t[0].descr?t[0].descr:"")+"")&&k(a,H),1&e&&m!==(m=t[0].topic)&&v(d,"id",m),1&e&&S(d,t[0].status),1&e&&P!==(P="dot "+(1==t[0].send?"bg-red-400":"bg-white")+" absolute left-1 top-1 w-4 h-4 rounded-full transition")&&v(E,"class",P),1&e&&N!==(N=t[0].topic)&&v(c,"for",N)},i:t,o:t,d(t){t&&g(n),O=!1,r(A)}}}function zt(t,e,n){let{widget:r}=e,{wsPushProp:s=((t,e,n)=>{})}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget),"wsPushProp"in t&&n(1,s=t.wsPushProp)},[r,s,()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)}]}class It extends rt{constructor(t){super(),nt(this,t,zt,Mt,o,{widget:0,wsPushProp:1})}}function Rt(e){let n,r,s,o,a,l,i,c,u,d,m,$,y=(e[0].descr?e[0].descr:"")+"",x=(e[0].status?e[0].status:"")+"",_=(e[0].after?e[0].after:"")+"";return{c(){n=h("div"),r=h("div"),s=h("label"),o=b(y),a=w(),l=h("div"),i=h("label"),c=b(x),u=w(),d=h("label"),m=b(" "),$=b(_),v(s,"class","widget-descr-style"),v(r,"class","widget-descr-width"),v(i,"class","widget-anydata-style"),v(d,"class","widget-anydata-style"),v(l,"class","widget-width"),v(n,"class","card-items-psn")},m(t,e){f(t,n,e),p(n,r),p(r,s),p(s,o),p(n,a),p(n,l),p(l,i),p(i,c),p(l,u),p(l,d),p(d,m),p(d,$)},p(t,[e]){1&e&&y!==(y=(t[0].descr?t[0].descr:"")+"")&&k(o,y),1&e&&x!==(x=(t[0].status?t[0].status:"")+"")&&k(c,x),1&e&&_!==(_=(t[0].after?t[0].after:"")+"")&&k($,_)},i:t,o:t,d(t){t&&g(n)}}}function jt(t,e,n){let{widget:r}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget)},[r]}class qt extends rt{constructor(t){super(),nt(this,t,jt,Rt,o,{widget:0})}}function Wt(t,e,n){const r=t.slice();return r[44]=e[n],r}function Ft(t,e,n){const r=t.slice();return r[47]=e[n],r[49]=n,r}function Jt(t,e,n){const r=t.slice();return r[50]=e[n],r}function Bt(t,e,n){const r=t.slice();return r[53]=e[n],r[49]=n,r}function Yt(t,e,n){const r=t.slice();return r[55]=e[n],r[56]=e,r[49]=n,r}function Kt(t,e,n){const r=t.slice();return r[44]=e[n],r}function Dt(t){let e,n,r,s,o=t[44].name+"";return{c(){e=h("option"),n=b(o),r=w(),e.__value=s=t[44],e.value=e.__value},m(t,s){f(t,e,s),p(e,n),p(e,r)},p(t,r){64&r[0]&&o!==(o=t[44].name+"")&&k(n,o),64&r[0]&&s!==(s=t[44])&&(e.__value=s,e.value=e.__value)},d(t){t&&g(e)}}}function Zt(t){let e,n,r,s,o="input"===t[55].widget&&Qt(t),a="toggle"===t[55].widget&&Gt(t),l="anydata"===t[55].widget&&Ut(t);return{c(){o&&o.c(),e=w(),a&&a.c(),n=w(),l&&l.c(),r=y()},m(t,i){o&&o.m(t,i),f(t,e,i),a&&a.m(t,i),f(t,n,i),l&&l.m(t,i),f(t,r,i),s=!0},p(t,s){"input"===t[55].widget?o?(o.p(t,s),2&s[0]&&G(o,1)):(o=Qt(t),o.c(),G(o,1),o.m(e.parentNode,e)):o&&(Z(),U(o,1,1,(()=>{o=null})),Q()),"toggle"===t[55].widget?a?(a.p(t,s),2&s[0]&&G(a,1)):(a=Gt(t),a.c(),G(a,1),a.m(n.parentNode,n)):a&&(Z(),U(a,1,1,(()=>{a=null})),Q()),"anydata"===t[55].widget?l?(l.p(t,s),2&s[0]&&G(l,1)):(l=Ut(t),l.c(),G(l,1),l.m(r.parentNode,r)):l&&(Z(),U(l,1,1,(()=>{l=null})),Q())},i(t){s||(G(o),G(a),G(l),s=!0)},o(t){U(o),U(a),U(l),s=!1},d(t){o&&o.d(t),t&&g(e),a&&a.d(t),t&&g(n),l&&l.d(t),t&&g(r)}}}function Qt(t){let e,n,r;function s(e){t[17](e,t[55])}let o={widget:t[55],wsPushProp:t[16]};return void 0!==t[55].status&&(o.value=t[55].status),e=new Lt({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Gt(t){let e,n,r;function s(e){t[19](e,t[55])}let o={widget:t[55],wsPushProp:t[18]};return void 0!==t[55].status&&(o.value=t[55].status),e=new It({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Ut(t){let e,n,r;function s(e){t[20](e,t[55])}let o={widget:t[55]};return void 0!==t[55].status&&(o.value=t[55].status),e=new qt({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Vt(t){let e,n,r=t[55].page===t[53].page&&Zt(t);return{c(){r&&r.c(),e=y()},m(t,s){r&&r.m(t,s),f(t,e,s),n=!0},p(t,n){t[55].page===t[53].page?r?(r.p(t,n),6&n[0]&&G(r,1)):(r=Zt(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(Z(),U(r,1,1,(()=>{r=null})),Q())},i(t){n||(G(r),n=!0)},o(t){U(r),n=!1},d(t){r&&r.d(t),t&&g(e)}}}function Xt(t){let e,n,r=t[1],s=[];for(let e=0;eU(s[t],1,1,(()=>{s[t]=null}));return{c(){for(let t=0;tU(a[t],1,1,(()=>{a[t]=null}));return r=new Pt({props:{title:"Редактор JSON",$$slots:{default:[ee]},$$scope:{ctx:t}}}),{c(){e=h("div");for(let t=0;tТип \n Подтип \n Id \n 4',r=w(),s=h("tbody");for(let t=0;tНазвание устройства \n IP адрес \n Идентификатор \n Состояние',r=w(),s=h("tbody");for(let t=0;t",P=w(),N=h("ul"),O=h("li"),A=h("a"),A.textContent="Управление",H=w(),C=h("li"),T=h("a"),T.textContent="Конфигуратор",L=w(),M=h("li"),z=h("a"),z.textContent="Подключение",I=w(),R=h("li"),j=h("a"),j.textContent="Утилиты",W=w(),F=h("li"),J=h("a"),J.textContent="Лог",B=w(),Y=h("li"),K=h("a"),K.textContent="Устройства",D=w(),Z=h("li"),Q=h("a"),Q.textContent="О проекте",V=w(),nt=h("ul"),rt=h("div"),X(st.$$.fragment),ot=w(),X(at.$$.fragment),lt=w(),X(it.$$.fragment),ct=w(),X(ut.$$.fragment),dt=w(),X(pt.$$.fragment),ft=w(),X(gt.$$.fragment),mt=w(),X(ht.$$.fragment),void 0===t[5]&&q((()=>t[14].call(a))),v(o,"class","px-15 py-2"),v(u,"stroke","none"),v(u,"d","M0 0h24v24H0z"),v(d,"d","M7 18a4.6 4.4 0 0 1 0 -9h0a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-12"),v(c,"class",b="h-8 w-8 "+(!0===t[4]?"text-green-500":"text-red-500")),v(c,"width","24"),v(c,"height","24"),v(c,"viewBox","0 0 24 24"),v(c,"stroke-width","2"),v(c,"stroke","currentColor"),v(c,"fill","none"),v(c,"stroke-linecap","round"),v(c,"stroke-linejoin","round"),v(i,"class","px-10 py-1"),v(s,"class","flex justify-end content-center"),v(n,"class","fixed m-0 h-10 w-full bg-gray-100 shadow-md"),v(_,"id","menu__toggle"),v(_,"type","checkbox"),v(S,"class","menu__btn"),v(S,"for","menu__toggle"),v(A,"class","menu__item"),v(A,"href","/"),v(T,"class","menu__item"),v(T,"href","/config"),v(z,"class","menu__item"),v(z,"href","/connection"),v(j,"class","menu__item"),v(j,"href","/utilities"),v(J,"class","menu__item"),v(J,"href","/log"),v(K,"class","menu__item"),v(K,"href","/list"),v(Q,"class","menu__item"),v(Q,"href","/about"),v(N,"class","menu__box"),v(rt,"class","bg-cover bg-gray-50 pt-8 px-4"),v(nt,"class","menu__main")},m(r,g){f(r,e,g),p(e,n),p(n,s),p(s,o),p(o,a);for(let t=0;tn(29,r=t))),$t.mode.hash();let s=document.location.hostname,o=!1,l=[],i=[];l=[{widget:"input",type:"date",status:"2021-10-17",page:"Inputs",order:"4",descr:"Switch on boiler date",topic:"/prefix/00000-00004/date1",ws:0},{widget:"input",type:"time",status:"12:00",page:"Inputs",order:"1",descr:"Switch on boiler time",topic:"/prefix/00000-00001/time",ws:0},{widget:"input",type:"number",status:"30.5",after:"°С",page:"Inputs",order:"2",descr:"Boiler temperature",topic:"/prefix/00000-00002/temp",ws:0},{widget:"input",type:"text",status:"Hello",page:"Inputs",order:"3",descr:"Message to be send",topic:"/prefix/00000-00003/text",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn1",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn2",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn3",ws:0},{widget:"anydata",status:30.5,after:"°С",page:"Any data",order:"3",descr:"Temperature",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:1032,after:"mm",page:"Any data",order:"3",descr:"Pressure",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:50,after:"%",page:"Any data",order:"3",descr:"Level",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:"opened",page:"Any data",order:"3",descr:"Status",topic:"/prefix/00000-00003/tmp10",ws:0}];let c,u,d=[],p=[],f=!1,g={},m=[],h=!0,$={};function b(){let t=0;m.forEach((e=>{e.ws=t,e.status||(y(t),v(t)),t++})),n(6,m),n(4,f=g.status)}function w(t,e){m.forEach((n=>{n.ws===t&&(n.status=e,n.status?console.log("[i]",n.ip,"status online"):console.log("[i]",n.ip,"status offline"))})),n(6,m),n(4,f=g.status)}function y(t){let e=x(t);"error"===e?console.log("[e]","device list wrong"):(p[t]=new WebSocket("ws://"+e+"/ws"),console.log("[i]",e,"started connecting..."))}function x(t){let e="error";return m.forEach((n=>{t===n.ws&&(e=n.ip)})),e}function v(t){if(p[t]){let e=x(t);console.log("[i]",e,"web socket events added"),p[t].addEventListener("open",(function(n){console.log("[i]",e,"completed connecting"),w(t,!0),O()})),p[t].addEventListener("message",(function(t){let e=t.data.toString();console.log("[i]","data:",e)})),p[t].addEventListener("close",(n=>{console.log("[e]",e,"connection closed"),w(t,!1)})),p[t].addEventListener("error",(function(n){console.log("[e]",e,"connection error"),w(t,!1)}))}else console.log("[e]","socket not exist")}function _(t,e,n){let r=e+" "+n;console.log("[i]","send to ws msg:",r),S(t,r)}function k(){setTimeout(k,1e4),console.log("[i]","----timer tick----"),h||m.forEach((t=>{!function(t){let e=!1;return m.forEach((n=>{t===n.ws&&(e=n.status)})),e}(t.ws)?(y(t.ws),v(t.ws)):S(t.ws,"tst")})),h=!1}function S(t,e){p[t]&&1===p[t].readyState?(p[t].send(e),console.log("[i]",x(t),"msg send success",e)):console.log("[e]",x(t),"msg not send",e)}function E(){n(2,i=[]);Array.from(new Set(Array.from(l,(({page:t})=>t)))).forEach((function(t,e,r){n(2,i=[...i,JSON.parse(JSON.stringify({page:t}))])})),i.sort((function(t,e){return t.pagee.page?1:0}))}function P(){n(4,f=g.status),c=g.ws,console.log("[i]","user selected device:",g.name),g.ip===s&&console.log("[i]","user selected original device",g.name)}function N(){o||(void 0!==$.name&&void 0!==$.ip&&void 0!==$.id?(n(7,$.status=!1,$),m.push($),n(6,m),n(7,$={}),b(),console.log("[i]","selected device:",g)):console.log("[e]","wrong data"))}function O(){void 0!==c&&S(c,u)}m=[{name:"Устройство 1",id:"987654321",ip:"192.168.88.235",status:!1}],$t.subscribe((function(){n(3,d=[]),u=r.path.toString(),console.log("[i]","user on page:",u),O()}));A((async()=>{console.log("[i]","mounted"),b(),k(),n(4,f=g.status),P(),E()}));return[o,l,i,d,f,g,m,$,[],_,function(){n(1,l=JSON.parse(document.getElementById("text1").value)),E()},P,N,t=>{try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){return t}return t=(t=t.replace(/&/g,"&").replace(//g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(t){return t}))},function(){g=function(t){const e=t.querySelector(":checked")||t.options[0];return e&&e.__value}(this),n(5,g),n(6,m)},()=>P(),(t,e,n)=>_(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},(t,e,n)=>_(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},function(){$.name=this.value,n(7,$)},function(){$.ip=this.value,n(7,$)},function(){$.id=this.value,n(7,$)},()=>(n(0,o=!o),N())]}return new class extends rt{constructor(t){super(),nt(this,t,me,ge,o,{},null,[-1,-1])}}({target:document.body,props:{name:"world"}})}(); +//# sourceMappingURL=bundle.js.map diff --git a/data_svelte/config.json b/data_svelte/config.json new file mode 100644 index 00000000..efa38a10 --- /dev/null +++ b/data_svelte/config.json @@ -0,0 +1,559 @@ +[ + { + "type": "binary", + "subtype": "button-out", + "id": "btn1", + "gpio": 1, + "inv": false + }, + { + "type": "sensor1", + "subtype": "bme280", + "units": "temp", + "id": "tmp1", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor2", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor3", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor4", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor5", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor6", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor7", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor8", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor9", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor10", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor11", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor12", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor13", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor14", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor15", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor16", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor17", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor18", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor19", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor20", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor21", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor22", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor23", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor24", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor25", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor26", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor27", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor28", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor29", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor30", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor31", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor32", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor33", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor34", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor35", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor36", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor37", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor38", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor39", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor40", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor41", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor42", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor43", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor44", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor45", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor46", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor47", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor48", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor49", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor50", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor51", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor52", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor53", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor54", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + }, + { + "type": "sensor55", + "subtype": "bme280", + "units": "temp", + "id": "tmp2", + "addr": "0x48", + "int": 10, + "c": 1, + "s": 0 + } +] \ No newline at end of file diff --git a/data_svelte/favicon.png b/data_svelte/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6f5eb5a2f1f1c882d265cf479de25caa925645 GIT binary patch literal 3127 zcmV-749N3|P)i z7)}s4L53SJCkR}iVi00SFk;`MXX*#X*kkwKs@nFGS}c;=?XFjU|G$3t^5sjIVS2G+ zw)WGF83CpoGXhLGW(1gW%uV|X7>1P6VhCX=Ux)Lb!*DZ%@I3!{Gsf7d?gtIQ%nQiK z3%(LUSkBji;C5Rfgd6$VsF@H`Pk@xtY6t<>FNR-pD}=C~$?)9pdm3XZ36N5PNWYjb z$xd$yNQR9N!dfj-Vd@BwQo^FIIWPPmT&sZyQ$v81(sCBV=PGy{0wltEjB%~h157*t zvbe_!{=I_783x!0t1-r#-d{Y?ae$Q4N_Nd^Ui^@y(%)Gjou6y<3^XJdu{rmUf-Me?)zZ>9OR&6U5H*cK; z$gUlB{g0O4gN0sLSO|Of?hU(l?;h(jA3uH!Z{EBKuV23ouU@^Y6#%v+QG;>e*E}%?wlu-NT4DG zs)z)7WbLr)vGAu(ohrKc^em@OpO&f~6_>E61n_e0_V3@{U3^O;j{`^mNCJUj_>;7v zsMs6Hu3g7+@v+lSo;=yTYFqq}jZmQ-BK8K{C4kqi_i*jBaQE(Au0607V-zKeT;EPg zX(`vrn=L+e74+-Tqeok@_`tDa$G9I|$nTU5H*2V8@y()n*zqM?J1G!-1aX;CfDC9B zTnJ#j_%*n8Qb1)re*Bno7g0RG{Eb;IK14irJYJp$5Z6ac9~b_P?+5t~95~SRG$g?1 znFJ7p$xV&GZ18m~79TGRdfsc-BcX$9yXTR*n)mPD@1~O(_?cT$ZvFPucRmGlq&se0 zKrcUf^k}4hM*biEJOWKzz!qQe;CB_ZtSOO9Owg#lZAc=s65^rb{fZe(TYu_rk!wKkEf}RIt=#Om( zR8mN`DM<^xj~59euMMspBolVN zAPTr8sSDI104orIAdmL$uOXn*6hga1G+0WD0E?UtabxC#VC~vf3|10|phW;yQ3CY8 z2CM=)ErF;xq-YJ5G|um}>*1#E+O_Mu|Nr#qQ&G1P-NMq@f?@*XUcSbV?tX=)ilM-Q zBZP|!Bpv0V;#ojKcpc7$=eqO;#Uy~#?^kNI{vSZfLx&DEt~LTmaKWXcx=joubklI<*Aw z>LtMaQ7DR<1I2LkWvwyu#Rwn~;ezT}_g(@5l3h?W%-a86Y-t#O1PubP+z<%?V5D(U zy57A6{h+{?kOZp7&WKZR+=sznMJ}+Dnpo=C_0%R_x_t~J5T?E_{+))l5v1%52>)d-`iiZyx|5!%M2Fb2dU zW3~MwwpEH9Rhue+k$UIOoo($Ds!NbOyMR36fRHu;*15(YcA7siIZk#%JWz>P!qX1?IUojG&nKR>^gArBt2 zit(ETyZ=@V&7mv_Fi4bABcnwP+jzQuHcfU&BrAV91u-rFvEi7y-KnWsvHH=d2 zgAk(GKm_S8RcTJ>2N3~&Hbwp{Z3NF_Xeh}g4Eke)V&dY{W(3&b1j9t4yK_aYJisZZ{1rcU5- z;eD>K;ndPq&B-8yA_S0F!4ThA&{1{x)H<#?k9a#6Pc6L?V^s0``ynL&D;p(!Nmx`Y zFkHex{4p!Ggm^@DlehW}iHHVi}~u=$&N? z(NEBLQ#UxxAkdW>X9LnqUr#t4Lu0=9L8&o>JsqTtT5|%gb3QA~hr0pED71+iFFr)dZ=Q=E6ng{NE{Z~0)C?deO#?Aj zSDQ$z#TeC2T^|=}6GBo-&$;E{HL3!q3Z-szuf)O=G#zDjin4SSP%o%6+2IT#sLjQa ziyxFFz~LMjWY+_a5H!U6%a<=b7QVP^ z*90a62;bVq{?@)P6^DWd^Yilq4|YTV2Nw!Yu;a1lPI-sxR)rf@Fe5DhDP7FH zZZ%4S*1C30P;|O+jB!1;m|rXT90Sm5*RBbQN`PKu+hDD*S^yE(CdtSfg=z>u$cIj> z + + + + + + Svelte app + + + + + + + + + + diff --git a/data_svelte/settings.json b/data_svelte/settings.json new file mode 100644 index 00000000..0f8b460a --- /dev/null +++ b/data_svelte/settings.json @@ -0,0 +1,11 @@ +{ + "name": "IoTmanager", + "apssid": "IoTmanager", + "appass": "", + "routerssid": "rise", + "routerpass": "hostel3333", + "timezone": 1, + "ntp": "pool.ntp.org", + "weblogin": "admin", + "webpass": "admin" +} \ No newline at end of file diff --git a/include/StandWebServer.h b/include/StandWebServer.h index 66c32c77..4f8faadd 100644 --- a/include/StandWebServer.h +++ b/include/StandWebServer.h @@ -1,5 +1,6 @@ #pragma once #include "Global.h" +#include "Web.h" #ifdef STANDARD_WEB_SERVER extern void standWebServerInit(); diff --git a/include/Web.h b/include/Web.h new file mode 100644 index 00000000..d33a9786 --- /dev/null +++ b/include/Web.h @@ -0,0 +1,21 @@ +#pragma once +#include "Global.h" + +class StreamJsonArray; + +class StreamJsonArray { + public: + StreamJsonArray(); + ~StreamJsonArray(); + + void sendFile(String path, uint8_t num); + + void loop(); + + private: + File file; + String _path; + uint8_t _num; +}; + +extern StreamJsonArray* myStreamJsonArray; \ No newline at end of file diff --git a/include/main.h b/include/main.h index 14eccd4f..dcadd716 100644 --- a/include/main.h +++ b/include/main.h @@ -5,3 +5,4 @@ #include "Utils/WiFiUtils.h" #include "AsyncWebServer.h" #include "StandWebServer.h" +#include "Web.h" diff --git a/src/StandWebServer.cpp b/src/StandWebServer.cpp index 28c89257..bec4cbf9 100644 --- a/src/StandWebServer.cpp +++ b/src/StandWebServer.cpp @@ -205,6 +205,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) case WStype_TEXT: { Serial.printf("[%u] get Text: %s\n", num, payload); + String payloadStr; + payloadStr.reserve(length + 1); + for (size_t i = 0; i < length; i++) { + payloadStr += (char)payload[i]; + } + + if (payloadStr.startsWith("/config")) { + if (myStreamJsonArray) myStreamJsonArray->sendFile("/config.json", num); + } + // send message to client // standWebSocket.sendTXT(num, "message here"); diff --git a/src/Web.cpp b/src/Web.cpp new file mode 100644 index 00000000..2665fbb2 --- /dev/null +++ b/src/Web.cpp @@ -0,0 +1,25 @@ +#include "Web.h" + +StreamJsonArray::StreamJsonArray() {} + +StreamJsonArray::~StreamJsonArray() {} + +void StreamJsonArray::sendFile(String path, uint8_t num) { + _path = path; + _num = num; + file = seekFile(path); + // file.find("["); +} + +void StreamJsonArray::loop() { + // if (ws.availableForWriteAll()) { + if (file.available()) { + String jsonArrayElement = file.readStringUntil('}') + "}"; + // Serial.println(jsonArrayElement); + standWebSocket.sendTXT(_num, jsonArrayElement); + // ws.textAll(jsonArrayElement); + } + //} +} + +StreamJsonArray* myStreamJsonArray; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index b1aac595..2b70598a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,6 +31,8 @@ void setup() { //подключаемся к роутеру routerConnect(); + myStreamJsonArray = new StreamJsonArray; + //выводим остаток оперативной памяти после старта // 22.12.21 пустой код без wifi остаток = 50.28 kB // 22.12.21 запустил wifi остаток = 48.59 kB @@ -49,6 +51,8 @@ void loop() { //обновление задач таскера ts.update(); + if (myStreamJsonArray) myStreamJsonArray->loop(); + #ifdef STANDARD_WEB_SERVER HTTP.handleClient(); #endif