From 01b0a7d53e41ff16d25530de44a2e672f02983d0 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Tue, 21 Dec 2021 21:58:56 +0100 Subject: [PATCH] ver4 --- data_svelte/build/bundle.css | 2 +- data_svelte/build/bundle.js | 2 +- data_svelte/lile.json | 7 + include/WebSocket.h | 10 +- src/Init.cpp | 4 +- src/Web.cpp | 780 +++++++++++++++++------------------ src/WebServer.cpp | 26 +- src/WebSocket.cpp | 86 ++-- src/main.cpp | 10 +- 9 files changed, 477 insertions(+), 450 deletions(-) create mode 100644 data_svelte/lile.json diff --git a/data_svelte/build/bundle.css b/data_svelte/build/bundle.css index 79c09fae..5c5c667a 100644 --- a/data_svelte/build/bundle.css +++ b/data_svelte/build/bundle.css @@ -11,4 +11,4 @@ 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}legend{padding:0}progress{vertical-align:baseline}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))}.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}.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}.gap-4{gap:1rem}.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-400{--tw-bg-opacity:1;background-color:rgba(248, 113, 113, var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgba(99, 102, 241, 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 + 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 index 4cb6b284..d9f1c682 100644 --- a/data_svelte/build/bundle.js +++ b/data_svelte/build/bundle.js @@ -1,2 +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(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 x(t,e,n){null==n?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function v(t){return""===t?null:+t}function _(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function k(t,e){t.value=null==e?"":e}function S(t,e){for(let n=0;n{Y.delete(t),r&&(n&&t.d(1),r())})),t.o(e)}}function U(t,e,n){const r=t.$$.props[e];void 0!==r&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function V(t){t&&t.c()}function X(t,n,o,a){const{fragment:i,on_mount:c,on_destroy:l,after_update:u}=t.$$;i&&i.m(n,o),a||q((()=>{const n=c.map(e).filter(s);l?l.push(...n):r(n),t.$$.on_mount=[]})),u.forEach(q)}function tt(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 et(e,s,o,a,i,c,l,u=[-1]){const d=E;P(e);const f=e.$$={fragment:null,ctx:null,props:c,update:t,not_equal:i,bound:n(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(d?d.$$.context:s.context||[]),callbacks:n(),dirty:u,skip_bound:!1,root:s.target||d.$$.root};l&&l(f.root);let g=!1;if(f.ctx=o?o(e,s.props||{},((t,n,...r)=>{const s=r.length?r[0]:n;return f.ctx&&i(f.ctx[t],f.ctx[t]=s)&&(!f.skip_bound&&f.bound[t]&&f.bound[t](s),g&&function(t,e){-1===t.$$.dirty[0]&&(H.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 rt=[];function st(e,n=t){let r;const s=new Set;function a(t){if(o(e,t)&&(e=t,r)){const t=!rt.length;for(const t of s)t[1](),rt.push(t,e);if(t){for(let t=0;t{s.delete(c),0===s.size&&(r(),r=null)}}}}function ot(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 at(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 lt,ut,dt={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=dt.getDeafault(),n=n=>t&&t(pt(e));function r(t){t&&(e=t),window.onhashchange=window.onpopstate=ut=null,e!==dt.OFF&&dt.run(e,(t=>window.onpopstate=n),(t=>window.onhashchange=n))&&n()}return{mode:t=>r(t),get:t=>pt(e),go(t,r){(function(t,e,n){let r=t=>history[n?"replaceState":"pushState"]({},"",t);dt.run(t,(t=>r(e)),(t=>r(`#${e}`)),(t=>ut=e))})(e,t,r),n()},start(e){t=e,r()},stop(){t=null,r(dt.OFF)}}}();function pt(t){let e=lt,n=lt=dt.run(t,(t=>window.location.pathname+window.location.search),(t=>String(window.location.hash.slice(1)||"/")),(t=>ut||"/")),r=n.match(/^([^?#]+)(?:\?([^#]+))?(?:\#(.+))?$/);return{url:n,from:e,path:r[1]||"",query:ct(r[2]||""),hash:r[3]||""}}function gt(t){let e=A("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=st({}),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=ot(`${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,i=function(t,e){t=ot(t,!0),e=ot(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&&i&&s.redirect&&(!s.exact||s.exact&&i.exact)){await j();let t=at(e,s.parent&&s.parent.pattern,s.redirect);return ht.goto(t,!0)}if(s.meta=i&&{from:o,url:n,query:a,match:i.part,pattern:s.pattern,breadcrumbs:s.parent&&s.parent.meta&&s.parent.meta.breadcrumbs.slice()||[],params:i.params,subscribe:r.subscribe},s.breadcrumb&&s.meta&&s.meta.breadcrumbs.push({name:s.breadcrumb,path:i.part}),r.set(s.meta),!i||s.fallback||!(!s.exact||s.exact&&i.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(),i&&!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=at("/",t.parent&&t.parent.pattern,t.redirect);ht.goto(e,!0)}else t.show()}))}}};return o="tinro",a=s,N().$$.context.set(o,a),O((()=>s.register())),s.router.un=ht.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 mt(){return A("tinro").meta}var ht=function(){let{subscribe:t}=st(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:$t,meta:mt,useHashNavigation:t=>ft.mode(t?dt.HASH:dt.HISTORY),mode:{hash:()=>ft.mode(dt.HASH),history:()=>ft.mode(dt.HISTORY),memory:()=>ft.mode(dt.MEMORY)}}}();function $t(){return A("tinro").meta.params}const wt=t=>({params:2&t,meta:4&t}),bt=t=>({params:t[1],meta:t[2]});function yt(t){let e;const n=t[9].default,r=a(n,t,t[8],bt);return{c(){r&&r.c()},m(t,n){r&&r.m(t,n),e=!0},p(t,s){r&&r.p&&(!e||262&s)&&l(r,n,t,t[8],e?c(n,t[8],s,wt):u(t[8]),bt)},i(t){e||(Q(r,t),e=!0)},o(t){G(r,t),e=!1},d(t){r&&r.d(t)}}}function xt(t){let e,n,r=t[0]&&yt(t);return{c(){r&&r.c(),e=b()},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&&Q(r,1)):(r=yt(t),r.c(),Q(r,1),r.m(e.parentNode,e)):r&&(K(),G(r,1,1,(()=>{r=null})),Z())},i(t){n||(Q(r),n=!0)},o(t){G(r),n=!1},d(t){r&&r.d(t),t&&p(e)}}}function vt(t,e,n){let{$$slots:r={},$$scope:s}=e,{path:o="/*"}=e,{fallback:a=!1}=e,{redirect:i=!1}=e,{firstmatch:c=!1}=e,{breadcrumb:l=null}=e,u=!1,d={},f={};const p=gt({fallback:a,onShow(){n(0,u=!0)},onHide(){n(0,u=!1)},onMeta(t){n(2,f=t),n(1,d=f.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,i=t.redirect),"firstmatch"in t&&n(6,c=t.firstmatch),"breadcrumb"in t&&n(7,l=t.breadcrumb),"$$scope"in t&&n(8,s=t.$$scope)},t.$$.update=()=>{232&t.$$.dirty&&p.update({path:o,redirect:i,firstmatch:c,breadcrumb:l})},[u,d,f,o,a,i,c,l,s,r]}class _t extends nt{constructor(t){super(),et(this,t,vt,xt,o,{path:3,fallback:4,redirect:5,firstmatch:6,breadcrumb:7})}}function kt(t){let e,n,r,s,o;const i=t[2].default,g=a(i,t,t[1],null);return{c(){e=m("div"),n=m("h1"),r=$(t[0]),s=w(),g&&g.c(),x(n,"class","card-header"),x(e,"class","card")},m(t,a){f(t,e,a),d(e,n),d(n,r),d(e,s),g&&g.m(e,null),o=!0},p(t,[e]){(!o||1&e)&&_(r,t[0]),g&&g.p&&(!o||2&e)&&l(g,i,t,t[1],o?c(i,t[1],e,null):u(t[1]),null)},i(t){o||(Q(g,t),o=!0)},o(t){G(g,t),o=!1},d(t){t&&p(e),g&&g.d(t)}}}function St(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 Et extends nt{constructor(t){super(),et(this,t,St,kt,o,{title:0})}}function Pt(t){let e,n,s,o;return{c(){e=m("input"),x(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),x(e,"step","0.1"),x(e,"type","number")},m(n,r){f(n,e,r),k(e,t[0].status),s||(o=[y(e,"change",t[2]),y(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")&&x(e,"class",n),1&r&&v(e.value)!==t[0].status&&k(e,t[0].status)},d(t){t&&p(e),s=!1,r(o)}}}function Nt(t){let e,n,s,o;return{c(){e=m("input"),x(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),x(e,"type","text")},m(n,r){f(n,e,r),k(e,t[0].status),s||(o=[y(e,"change",t[4]),y(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")&&x(e,"class",n),1&r&&e.value!==t[0].status&&k(e,t[0].status)},d(t){t&&p(e),s=!1,r(o)}}}function Ot(t){let e,n,s,o;return{c(){e=m("input"),x(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),x(e,"type","date")},m(n,r){f(n,e,r),k(e,t[0].status),s||(o=[y(e,"change",t[6]),y(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")&&x(e,"class",n),1&r&&k(e,t[0].status)},d(t){t&&p(e),s=!1,r(o)}}}function At(t){let e,n,s,o;return{c(){e=m("input"),x(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),x(e,"type","time")},m(n,r){f(n,e,r),k(e,t[0].status),s||(o=[y(e,"change",t[8]),y(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")&&x(e,"class",n),1&r&&k(e,t[0].status)},d(t){t&&p(e),s=!1,r(o)}}}function Ht(e){let n,r,s,o,a,i,c,l,u,g=(e[0].descr?e[0].descr:"")+"",h="number"==e[0].type&&Pt(e),b="text"==e[0].type&&Nt(e),y="date"==e[0].type&&Ot(e),v="time"==e[0].type&&At(e);return{c(){n=m("div"),r=m("div"),s=m("label"),o=$(g),a=w(),i=m("div"),h&&h.c(),c=w(),b&&b.c(),l=w(),y&&y.c(),u=w(),v&&v.c(),x(s,"class","widget-descr-style"),x(r,"class","widget-descr-width"),x(i,"class","widget-width"),x(n,"class","card-items-psn")},m(t,e){f(t,n,e),d(n,r),d(r,s),d(s,o),d(n,a),d(n,i),h&&h.m(i,null),d(i,c),b&&b.m(i,null),d(i,l),y&&y.m(i,null),d(i,u),v&&v.m(i,null)},p(t,[e]){1&e&&g!==(g=(t[0].descr?t[0].descr:"")+"")&&_(o,g),"number"==t[0].type?h?h.p(t,e):(h=Pt(t),h.c(),h.m(i,c)):h&&(h.d(1),h=null),"text"==t[0].type?b?b.p(t,e):(b=Nt(t),b.c(),b.m(i,l)):b&&(b.d(1),b=null),"date"==t[0].type?y?y.p(t,e):(y=Ot(t),y.c(),y.m(i,u)):y&&(y.d(1),y=null),"time"==t[0].type?v?v.p(t,e):(v=At(t),v.c(),v.m(i,null)):v&&(v.d(1),v=null)},i:t,o:t,d(t){t&&p(n),h&&h.d(),b&&b.d(),y&&y.d(),v&&v.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=v(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 Ct extends nt{constructor(t){super(),et(this,t,Tt,Ht,o,{widget:0,wsPushProp:1})}}function Lt(e){let n,s,o,a,i,c,l,u,g,h,b,v,S,E,P,N,O,A,H=(e[0].descr?e[0].descr:"")+"";return{c(){n=m("div"),s=m("div"),o=m("label"),a=$(H),i=w(),c=m("div"),l=m("label"),u=m("div"),g=m("input"),b=w(),v=m("div"),S=w(),E=m("div"),x(o,"class","widget-descr-style"),x(s,"class","widget-descr-width"),x(g,"id",h=e[0].topic),x(g,"type","checkbox"),x(g,"class","sr-only"),x(v,"class","block bg-gray-600 w-10 h-6 rounded-full"),x(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"),x(u,"class","relative"),x(l,"for",N=e[0].topic),x(l,"class","items-center cursor-pointer"),x(c,"class","widget-width"),x(n,"class","card-items-psn")},m(t,r){f(t,n,r),d(n,s),d(s,o),d(o,a),d(n,i),d(n,c),d(c,l),d(l,u),d(u,g),k(g,e[0].status),d(u,b),d(u,v),d(u,S),d(u,E),O||(A=[y(g,"change",e[2]),y(g,"change",e[3])],O=!0)},p(t,[e]){1&e&&H!==(H=(t[0].descr?t[0].descr:"")+"")&&_(a,H),1&e&&h!==(h=t[0].topic)&&x(g,"id",h),1&e&&k(g,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")&&x(E,"class",P),1&e&&N!==(N=t[0].topic)&&x(l,"for",N)},i:t,o:t,d(t){t&&p(n),O=!1,r(A)}}}function Mt(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 zt extends nt{constructor(t){super(),et(this,t,Mt,Lt,o,{widget:0,wsPushProp:1})}}function Rt(e){let n,r,s,o,a,i,c,l,u,g,h,b,y=(e[0].descr?e[0].descr:"")+"",v=(e[0].status?e[0].status:"")+"",k=(e[0].after?e[0].after:"")+"";return{c(){n=m("div"),r=m("div"),s=m("label"),o=$(y),a=w(),i=m("div"),c=m("label"),l=$(v),u=w(),g=m("label"),h=$(" "),b=$(k),x(s,"class","widget-descr-style"),x(r,"class","widget-descr-width"),x(c,"class","widget-anydata-style"),x(g,"class","widget-anydata-style"),x(i,"class","widget-width"),x(n,"class","card-items-psn")},m(t,e){f(t,n,e),d(n,r),d(r,s),d(s,o),d(n,a),d(n,i),d(i,c),d(c,l),d(i,u),d(i,g),d(g,h),d(g,b)},p(t,[e]){1&e&&y!==(y=(t[0].descr?t[0].descr:"")+"")&&_(o,y),1&e&&v!==(v=(t[0].status?t[0].status:"")+"")&&_(l,v),1&e&&k!==(k=(t[0].after?t[0].after:"")+"")&&_(b,k)},i:t,o:t,d(t){t&&p(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 nt{constructor(t){super(),et(this,t,jt,Rt,o,{widget:0})}}function It(t,e,n){const r=t.slice();return r[31]=e[n],r}function Wt(t,e,n){const r=t.slice();return r[34]=e[n],r[36]=n,r}function Ft(t,e,n){const r=t.slice();return r[37]=e[n],r[36]=n,r}function Jt(t,e,n){const r=t.slice();return r[39]=e[n],r[40]=e,r[36]=n,r}function Bt(t,e,n){const r=t.slice();return r[31]=e[n],r}function Yt(t){let e,n,r,s,o=t[31].name+"";return{c(){e=m("option"),n=$(o),r=w(),e.__value=s=t[31],e.value=e.__value},m(t,s){f(t,e,s),d(e,n),d(e,r)},p(t,r){8&r[0]&&o!==(o=t[31].name+"")&&_(n,o),8&r[0]&&s!==(s=t[31])&&(e.__value=s,e.value=e.__value)},d(t){t&&p(e)}}}function Dt(t){let e,n,r,s,o="input"===t[39].widget&&Kt(t),a="toggle"===t[39].widget&&Zt(t),i="anydata"===t[39].widget&&Qt(t);return{c(){o&&o.c(),e=w(),a&&a.c(),n=w(),i&&i.c(),r=b()},m(t,c){o&&o.m(t,c),f(t,e,c),a&&a.m(t,c),f(t,n,c),i&&i.m(t,c),f(t,r,c),s=!0},p(t,s){"input"===t[39].widget?o?(o.p(t,s),1&s[0]&&Q(o,1)):(o=Kt(t),o.c(),Q(o,1),o.m(e.parentNode,e)):o&&(K(),G(o,1,1,(()=>{o=null})),Z()),"toggle"===t[39].widget?a?(a.p(t,s),1&s[0]&&Q(a,1)):(a=Zt(t),a.c(),Q(a,1),a.m(n.parentNode,n)):a&&(K(),G(a,1,1,(()=>{a=null})),Z()),"anydata"===t[39].widget?i?(i.p(t,s),1&s[0]&&Q(i,1)):(i=Qt(t),i.c(),Q(i,1),i.m(r.parentNode,r)):i&&(K(),G(i,1,1,(()=>{i=null})),Z())},i(t){s||(Q(o),Q(a),Q(i),s=!0)},o(t){G(o),G(a),G(i),s=!1},d(t){o&&o.d(t),t&&p(e),a&&a.d(t),t&&p(n),i&&i.d(t),t&&p(r)}}}function Kt(t){let e,n,r;function s(e){t[13](e,t[39])}let o={widget:t[39],wsPushProp:t[12]};return void 0!==t[39].status&&(o.value=t[39].status),e=new Ct({props:o}),T.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){X(e,t,n),r=!0},p(r,s){t=r;const o={};1&s[0]&&(o.widget=t[39]),!n&&1&s[0]&&(n=!0,o.value=t[39].status,I((()=>n=!1))),e.$set(o)},i(t){r||(Q(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){tt(e,t)}}}function Zt(t){let e,n,r;function s(e){t[15](e,t[39])}let o={widget:t[39],wsPushProp:t[14]};return void 0!==t[39].status&&(o.value=t[39].status),e=new zt({props:o}),T.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){X(e,t,n),r=!0},p(r,s){t=r;const o={};1&s[0]&&(o.widget=t[39]),!n&&1&s[0]&&(n=!0,o.value=t[39].status,I((()=>n=!1))),e.$set(o)},i(t){r||(Q(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){tt(e,t)}}}function Qt(t){let e,n,r;function s(e){t[16](e,t[39])}let o={widget:t[39]};return void 0!==t[39].status&&(o.value=t[39].status),e=new qt({props:o}),T.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){X(e,t,n),r=!0},p(r,s){t=r;const o={};1&s[0]&&(o.widget=t[39]),!n&&1&s[0]&&(n=!0,o.value=t[39].status,I((()=>n=!1))),e.$set(o)},i(t){r||(Q(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){tt(e,t)}}}function Gt(t){let e,n,r=t[39].page===t[37].page&&Dt(t);return{c(){r&&r.c(),e=b()},m(t,s){r&&r.m(t,s),f(t,e,s),n=!0},p(t,n){t[39].page===t[37].page?r?(r.p(t,n),17&n[0]&&Q(r,1)):(r=Dt(t),r.c(),Q(r,1),r.m(e.parentNode,e)):r&&(K(),G(r,1,1,(()=>{r=null})),Z())},i(t){n||(Q(r),n=!0)},o(t){G(r),n=!1},d(t){r&&r.d(t),t&&p(e)}}}function Ut(t){let e,n,r=t[0],s=[];for(let e=0;eG(s[t],1,1,(()=>{s[t]=null}));return{c(){for(let t=0;tG(a[t],1,1,(()=>{a[t]=null}));return r=new Et({props:{title:"Редактор JSON",$$slots:{default:[Xt]},$$scope:{ctx:t}}}),{c(){e=m("div");for(let t=0;tНазвание устройства \n IP адрес \n Идентификатор \n Состояние',r=w(),s=m("tbody");for(let t=0;t",P=w(),N=m("ul"),O=m("li"),A=m("a"),A.textContent="Управление",H=w(),T=m("li"),C=m("a"),C.textContent="Конфигуратор",L=w(),M=m("li"),z=m("a"),z.textContent="Подключение",R=w(),j=m("li"),I=m("a"),I.textContent="Утилиты",W=w(),F=m("li"),J=m("a"),J.textContent="Лог",B=w(),Y=m("li"),D=m("a"),D.textContent="Устройства",K=w(),Z=m("li"),U=m("a"),U.textContent="О проекте",et=w(),nt=m("ul"),rt=m("div"),V(st.$$.fragment),ot=w(),V(at.$$.fragment),it=w(),V(ct.$$.fragment),lt=w(),V(ut.$$.fragment),dt=w(),V(ft.$$.fragment),pt=w(),V(gt.$$.fragment),mt=w(),V(ht.$$.fragment),void 0===t[2]&&q((()=>t[10].call(a))),x(o,"class","px-15 py-2"),x(u,"stroke","none"),x(u,"d","M0 0h24v24H0z"),x($,"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"),x(l,"class",b="h-8 w-8 "+(!0===t[1]?"text-green-500":"text-red-500")),x(l,"width","24"),x(l,"height","24"),x(l,"viewBox","0 0 24 24"),x(l,"stroke-width","2"),x(l,"stroke","currentColor"),x(l,"fill","none"),x(l,"stroke-linecap","round"),x(l,"stroke-linejoin","round"),x(c,"class","px-10 py-1"),x(s,"class","flex justify-end content-center"),x(n,"class","fixed m-0 h-10 w-full bg-gray-100 shadow-md"),x(_,"id","menu__toggle"),x(_,"type","checkbox"),x(E,"class","menu__btn"),x(E,"for","menu__toggle"),x(A,"class","menu__item"),x(A,"href","/"),x(C,"class","menu__item"),x(C,"href","/config"),x(z,"class","menu__item"),x(z,"href","/connection"),x(I,"class","menu__item"),x(I,"href","/utilities"),x(J,"class","menu__item"),x(J,"href","/log"),x(D,"class","menu__item"),x(D,"href","/list"),x(U,"class","menu__item"),x(U,"href","/about"),x(N,"class","menu__box"),x(rt,"class","bg-cover bg-gray-50 pt-8 px-4"),x(nt,"class","menu__main")},m(r,p){f(r,e,p),d(e,n),d(n,s),d(s,o),d(o,a);for(let t=0;t{n.ws===t&&(n.status=e,n.status?console.log("[i]","status online:",n.ip):console.log("[i]","status offline:",n.ip))})),n(3,i)}function f(t){let e=p(t);"error"===e?console.log("[e]","device list wrong"):(o[t]=new WebSocket("ws://"+e+"/ws"),console.log("[i]","started connecting to",e))}function p(t){let e="error";return i.forEach((n=>{t===n.ws&&(e=n.ip)})),e}function g(t){o[t]?(o[t].addEventListener("open",(function(e){console.log("[i]","completed connecting to",p(t)),d(t,!0)})),o[t].addEventListener("message",(function(t){let e=t.data.toString();e.includes("/core/")&&(e=e.replace("/core/",""),b(e))})),o[t].addEventListener("close",(e=>{console.log("[e]","connection closed with",p(t)),d(t,!1),f(t)})),o[t].addEventListener("error",(function(e){console.log("[e]","connectio error with",p(t)),d(t,!1),f(t)}))):console.log("[e]","socket not exist")}function m(t,e,n){let r=e+" "+n;console.log("[i]","send to ws msg:",r),$(t,r)}function h(){setTimeout(h,1e4),c||i.forEach((t=>{!function(t){let e=!1;return i.forEach((n=>{t===n.ws&&(e=n.status)})),e}(t.ws)?(f(t.ws),g(t.ws)):$(t.ws,"")})),c=!1}function $(t,e){o[t]&&1===o[t].readyState?(o[t].send(e),console.log("[i]",t,"msg send success:",e)):console.log("[e]",t,"msg not send",e)}function w(){n(4,l=[]);Array.from(new Set(Array.from(r,(({page:t})=>t)))).forEach((function(t,e,r){n(4,l=[...l,JSON.parse(JSON.stringify({page:t}))])})),l.sort((function(t,e){return t.pagee.page?1:0}))}const b=t=>{u.length>Number(10)&&n(5,u=u.slice(0));const e=(new Date).getTime();n(5,u=[...u,{time:e,msg:t}]),u.sort((function(t,e){return t.time>e.time?-1:t.time{console.log("[i]","mounted"),function(){let t=0;i.forEach((e=>{e.ws=t,f(t),g(t),t++})),n(3,i)}(),h(),w()}));return[r,a,s,i,l,u,m,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(){n(0,r=JSON.parse(document.getElementById("text1").value)),w()},y,function(){s=function(t){const e=t.querySelector(":checked")||t.options[0];return e&&e.__value}(this),n(2,s),n(3,i)},()=>y(),(t,e,n)=>m(t,e,n),function(e,s){t.$$.not_equal(s.status,e)&&(s.status=e,n(0,r))},(t,e,n)=>m(t,e,n),function(e,s){t.$$.not_equal(s.status,e)&&(s.status=e,n(0,r))},function(e,s){t.$$.not_equal(s.status,e)&&(s.status=e,n(0,r))}]}return new class extends nt{constructor(t){super(),et(this,t,ue,le,o,{},null,[-1,-1])}}({target:document.body,props:{name:"world"}})}(); +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 i(t,e,n,r){if(t){const s=l(t,e,n,r);return t[0](s)}}function l(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{Y.delete(t),r&&(n&&t.d(1),r())})),t.o(e)}}function U(t,e,n){const r=t.$$.props[e];void 0!==r&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function V(t){t&&t.c()}function tt(t,n,o,a){const{fragment:i,on_mount:l,on_destroy:c,after_update:u}=t.$$;i&&i.m(n,o),a||I((()=>{const n=l.map(e).filter(s);c?c.push(...n):r(n),t.$$.on_mount=[]})),u.forEach(I)}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,i,l,c,u=[-1]){const d=P;N(e);const p=e.$$={fragment:null,ctx:null,props:l,update:t,not_equal:i,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&&i(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]&&(T.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(l),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 it(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 lt(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,i=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&&i&&s.redirect&&(!s.exact||s.exact&&i.exact)){await z();let t=it(e,s.parent&&s.parent.pattern,s.redirect);return $t.goto(t,!0)}if(s.meta=i&&{from:o,url:n,query:a,match:i.part,pattern:s.pattern,breadcrumbs:s.parent&&s.parent.meta&&s.parent.meta.breadcrumbs.slice()||[],params:i.params,subscribe:r.subscribe},s.breadcrumb&&s.meta&&s.meta.breadcrumbs.push({name:s.breadcrumb,path:i.part}),r.set(s.meta),!i||s.fallback||!(!s.exact||s.exact&&i.exact)||s.parent&&s.parent.firstmatch&&s.parent.matched?s.hide():(t.onMeta(s.meta),s.parent&&(s.parent.matched=!0),s.show()),await z(),i&&!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=it("/",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&<(n,"target",!1,"_self"),s=n&<(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=i(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||(X(r,t),e=!0)},o(t){G(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&&X(r,1)):(r=xt(t),r.c(),X(r,1),r.m(e.parentNode,e)):r&&(Z(),G(r,1,1,(()=>{r=null})),Q())},i(t){n||(X(r),n=!0)},o(t){G(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:i=!1}=e,{firstmatch:l=!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,i=t.redirect),"firstmatch"in t&&n(6,l=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:i,firstmatch:l,breadcrumb:c})},[u,d,p,o,a,i,l,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,l=i(a,t,t[1],null);return{c(){e=h("div"),n=h("h1"),r=b(t[0]),s=w(),l&&l.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),l&&l.m(e,null),o=!0},p(t,[e]){(!o||1&e)&&k(r,t[0]),l&&l.p&&(!o||2&e)&&u(l,a,t,t[1],o?c(a,t[1],e,null):d(t[1]),null)},i(t){o||(X(l,t),o=!0)},o(t){G(l,t),o=!1},d(t){t&&g(e),l&&l.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 Tt(e){let n,r,s,o,a,i,l,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(),i=h("div"),m&&m.c(),l=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(i,"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,i),m&&m.m(i,null),p(i,l),$&&$.m(i,null),p(i,c),y&&y.m(i,null),p(i,u),x&&x.m(i,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(i,l)):m&&(m.d(1),m=null),"text"==t[0].type?$?$.p(t,e):($=Ot(t),$.c(),$.m(i,c)):$&&($.d(1),$=null),"date"==t[0].type?y?y.p(t,e):(y=At(t),y.c(),y.m(i,u)):y&&(y.d(1),y=null),"time"==t[0].type?x?x.p(t,e):(x=Ht(t),x.c(),x.m(i,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 Ct(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,Ct,Tt,o,{widget:0,wsPushProp:1})}}function Mt(e){let n,s,o,a,i,l,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),i=w(),l=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(l,"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,i),p(n,l),p(l,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 jt(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 qt extends rt{constructor(t){super(),nt(this,t,jt,Mt,o,{widget:0,wsPushProp:1})}}function Rt(e){let n,r,s,o,a,i,l,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(),i=h("div"),l=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(l,"class","widget-anydata-style"),v(d,"class","widget-anydata-style"),v(i,"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,i),p(i,l),p(l,c),p(i,u),p(i,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 zt(t,e,n){let{widget:r}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget)},[r]}class It extends rt{constructor(t){super(),nt(this,t,zt,Rt,o,{widget:0})}}function Ft(t,e,n){const r=t.slice();return r[45]=e[n],r}function Jt(t,e,n){const r=t.slice();return r[48]=e[n],r[50]=n,r}function Wt(t,e,n){const r=t.slice();return r[51]=e[n],r}function Bt(t,e,n){const r=t.slice();return r[54]=e[n],r[50]=n,r}function Dt(t,e,n){const r=t.slice();return r[56]=e[n],r[57]=e,r[50]=n,r}function Yt(t,e,n){const r=t.slice();return r[45]=e[n],r}function Kt(t){let e,n,r,s,o=t[45].name+"";return{c(){e=h("option"),n=b(o),r=w(),e.__value=s=t[45],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[45].name+"")&&k(n,o),64&r[0]&&s!==(s=t[45])&&(e.__value=s,e.value=e.__value)},d(t){t&&g(e)}}}function Zt(t){let e,n,r,s,o="input"===t[56].widget&&Qt(t),a="toggle"===t[56].widget&&Xt(t),i="anydata"===t[56].widget&&Gt(t);return{c(){o&&o.c(),e=w(),a&&a.c(),n=w(),i&&i.c(),r=y()},m(t,l){o&&o.m(t,l),f(t,e,l),a&&a.m(t,l),f(t,n,l),i&&i.m(t,l),f(t,r,l),s=!0},p(t,s){"input"===t[56].widget?o?(o.p(t,s),2&s[0]&&X(o,1)):(o=Qt(t),o.c(),X(o,1),o.m(e.parentNode,e)):o&&(Z(),G(o,1,1,(()=>{o=null})),Q()),"toggle"===t[56].widget?a?(a.p(t,s),2&s[0]&&X(a,1)):(a=Xt(t),a.c(),X(a,1),a.m(n.parentNode,n)):a&&(Z(),G(a,1,1,(()=>{a=null})),Q()),"anydata"===t[56].widget?i?(i.p(t,s),2&s[0]&&X(i,1)):(i=Gt(t),i.c(),X(i,1),i.m(r.parentNode,r)):i&&(Z(),G(i,1,1,(()=>{i=null})),Q())},i(t){s||(X(o),X(a),X(i),s=!0)},o(t){G(o),G(a),G(i),s=!1},d(t){o&&o.d(t),t&&g(e),a&&a.d(t),t&&g(n),i&&i.d(t),t&&g(r)}}}function Qt(t){let e,n,r;function s(e){t[17](e,t[56])}let o={widget:t[56],wsPushProp:t[16]};return void 0!==t[56].status&&(o.value=t[56].status),e=new Lt({props:o}),C.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[56]),!n&&2&s[0]&&(n=!0,o.value=t[56].status,F((()=>n=!1))),e.$set(o)},i(t){r||(X(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Xt(t){let e,n,r;function s(e){t[19](e,t[56])}let o={widget:t[56],wsPushProp:t[18]};return void 0!==t[56].status&&(o.value=t[56].status),e=new qt({props:o}),C.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[56]),!n&&2&s[0]&&(n=!0,o.value=t[56].status,F((()=>n=!1))),e.$set(o)},i(t){r||(X(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Gt(t){let e,n,r;function s(e){t[20](e,t[56])}let o={widget:t[56]};return void 0!==t[56].status&&(o.value=t[56].status),e=new It({props:o}),C.push((()=>U(e,"value",s))),{c(){V(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[56]),!n&&2&s[0]&&(n=!0,o.value=t[56].status,F((()=>n=!1))),e.$set(o)},i(t){r||(X(e.$$.fragment,t),r=!0)},o(t){G(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Ut(t){let e,n,r=t[56].page===t[54].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[56].page===t[54].page?r?(r.p(t,n),6&n[0]&&X(r,1)):(r=Zt(t),r.c(),X(r,1),r.m(e.parentNode,e)):r&&(Z(),G(r,1,1,(()=>{r=null})),Q())},i(t){n||(X(r),n=!0)},o(t){G(r),n=!1},d(t){r&&r.d(t),t&&g(e)}}}function Vt(t){let e,n,r=t[1],s=[];for(let e=0;eG(s[t],1,1,(()=>{s[t]=null}));return{c(){for(let t=0;tG(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(),T=h("li"),C=h("a"),C.textContent="Конфигуратор",L=w(),M=h("li"),j=h("a"),j.textContent="Подключение",q=w(),R=h("li"),z=h("a"),z.textContent="Утилиты",F=w(),J=h("li"),W=h("a"),W.textContent="Лог",B=w(),D=h("li"),Y=h("a"),Y.textContent="Устройства",K=w(),Z=h("li"),Q=h("a"),Q.textContent="О проекте",U=w(),nt=h("ul"),rt=h("div"),V(st.$$.fragment),ot=w(),V(at.$$.fragment),it=w(),V(lt.$$.fragment),ct=w(),V(ut.$$.fragment),dt=w(),V(pt.$$.fragment),ft=w(),V(gt.$$.fragment),mt=w(),V(ht.$$.fragment),void 0===t[5]&&I((()=>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(l,"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(C,"class","menu__item"),v(C,"href","/config"),v(j,"class","menu__item"),v(j,"href","/connection"),v(z,"class","menu__item"),v(z,"href","/utilities"),v(W,"class","menu__item"),v(W,"href","/log"),v(Y,"class","menu__item"),v(Y,"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(30,r=t))),$t.mode.hash();let s=document.location.hostname,o=!1,i=[],l=[];i=[{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,$={},b=[];function w(){let t=0;m.forEach((e=>{e.ws=t,e.status||(x(t),_(t)),t++})),n(6,m),n(4,f=g.status)}function y(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 x(t){let e=v(t);"error"===e?console.log("[e]","device list wrong"):(p[t]=new WebSocket("ws://"+e+"/ws"),console.log("[i]",e,"started connecting..."))}function v(t){let e="error";return m.forEach((n=>{t===n.ws&&(e=n.ip)})),e}function _(t){if(p[t]){let e=v(t);console.log("[i]",e,"web socket events added"),p[t].addEventListener("open",(function(n){console.log("[i]",e,"completed connecting"),y(t,!0),T()})),p[t].addEventListener("message",(function(t){let e=t.data.toString();console.log("[i]","data:",e),e.includes("[log]")?(e=e.replace("[log]",""),N(e)):e.includes("[config]")&&(console.log("[i]","config data:",e),e=e.replace("[config]",""),e=JSON.parse(e),d.push(e),n(3,d))})),p[t].addEventListener("close",(n=>{console.log("[e]",e,"connection closed"),y(t,!1)})),p[t].addEventListener("error",(function(n){console.log("[e]",e,"connection error"),y(t,!1)}))}else console.log("[e]","socket not exist")}function k(t,e,n){let r=e+" "+n;console.log("[i]","send to ws msg:",r),E(t,r)}function S(){setTimeout(S,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)?(x(t.ws),_(t.ws)):E(t.ws,"tst")})),h=!1}function E(t,e){p[t]&&1===p[t].readyState?(p[t].send(e),console.log("[i]",v(t),"msg send success",e)):console.log("[e]",v(t),"msg not send",e)}function P(){n(2,l=[]);Array.from(new Set(Array.from(i,(({page:t})=>t)))).forEach((function(t,e,r){n(2,l=[...l,JSON.parse(JSON.stringify({page:t}))])})),l.sort((function(t,e){return t.pagee.page?1:0}))}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),T()}));const N=t=>{b.length>Number(10)&&n(8,b=b.slice(0));const e=(new Date).getTime();n(8,b=[...b,{time:e,msg:t}]),b.sort((function(t,e){return t.time>e.time?-1:t.time{console.log("[i]","mounted"),w(),S(),n(4,f=g.status),O(),P()}));return[o,i,l,d,f,g,m,$,b,k,function(){n(1,i=JSON.parse(document.getElementById("text1").value)),P()},O,H,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)},()=>O(),(t,e,n)=>k(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,i))},(t,e,n)=>k(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,i))},function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,i))},()=>function(t,e,n){console.log("[i]","request for edit file");var r=new XMLHttpRequest,s=new FormData;s.append("data",new Blob([e],{type:"text/json"}),"/"+n),r.open("POST","http://"+t+"/edit"),r.onload=function(){},r.send(s)}("192.168.88.235","data data data data","file.json"),function(){$.name=this.value,n(7,$)},function(){$.ip=this.value,n(7,$)},function(){$.id=this.value,n(7,$)},()=>(n(0,o=!o),H())]}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/lile.json b/data_svelte/lile.json new file mode 100644 index 00000000..5f0dfdf2 --- /dev/null +++ b/data_svelte/lile.json @@ -0,0 +1,7 @@ +{ + "type": "binary", + "subtype": "button-out", + "id": "btn1", + "gpio": 1, + "inv": false +} \ No newline at end of file diff --git a/include/WebSocket.h b/include/WebSocket.h index 34da91ed..2016caaf 100644 --- a/include/WebSocket.h +++ b/include/WebSocket.h @@ -2,8 +2,10 @@ #include "Class/TCircularBuffer.h" #include "Global.h" void wsInit(); -void wsSendSetup(); -void wsSendSetupBuffer(); void wsPublishData(String topic, String data); -void sendDataWs(); -void loopWsExecute(); + +// void wsSendSetup(); +// void wsSendSetupBuffer(); +// +// void sendDataWs(); +// void loopWsExecute(); diff --git a/src/Init.cpp b/src/Init.cpp index 3c9b2055..2aed131e 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -75,8 +75,8 @@ void deviceInit() { } savedFromWeb = false; - //publishWidgets(); - //publishState(); + // publishWidgets(); + // publishState(); } void loadScenario() { diff --git a/src/Web.cpp b/src/Web.cpp index 2a72b51e..9899ee30 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -1,4 +1,5 @@ #include "Web.h" + #include "BufferExecute.h" #include "Class/NotAsync.h" #include "Global.h" @@ -18,396 +19,395 @@ bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) { } void web_init() { -// server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) { -// //==============================set.device.json==================================================================================================== -// if (request->hasArg(F("addItem"))) { -// addItem2(request->getParam("addItem")->value().toInt()); -// request->redirect("/?set.device"); -// } -// -// if (request->hasArg(F("addPreset"))) { -// addPreset2(request->getParam(F("addPreset"))->value().toInt()); -// -// jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); -// -// request->redirect(F("/?set.device")); -// } -// -// if (request->hasArg(F("delChoosingItems"))) { -// jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); -// myNotAsyncActions->make(do_delChoosingItems); -// request->send(200); -// } -// -// if (request->hasArg(F("delAllItems"))) { -// delAllItems(); -//#ifdef EnableLogging -// cleanLogAndData(); -//#endif -// jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); -// request->redirect(F("/?set.device")); -// } -// -// if (request->hasArg(F("saveItems"))) { -// myNotAsyncActions->make(do_deviceInit); -// savedFromWeb = true; -// request->send(200); -// } -// -// if (request->hasArg(F("scen"))) { -// bool value = request->getParam(F("scen"))->value().toInt(); -// jsonWriteBool(configSetupJson, F("scen"), value); -// saveConfig(); -// loadScenario(); -// request->send(200); -// } -// -// if (request->hasArg(F("sceninit"))) { -// loadScenario(); -// request->send(200); -// } -// -// if (request->hasArg(F("MqttIn"))) { -// bool value = request->getParam(F("MqttIn"))->value().toInt(); -// jsonWriteBool(configSetupJson, "MqttIn", value); -// saveConfig(); -// mqtt.subscribe((mqttPrefix + "/+/+/event").c_str()); -// mqtt.subscribe((mqttPrefix + "/+/+/info").c_str()); -// request->send(200); -// } -// -// if (request->hasArg(F("MqttOut"))) { -// bool value = request->getParam(F("MqttOut"))->value().toInt(); -// jsonWriteBool(configSetupJson, F("MqttOut"), value); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("scenMqtt"))) { -// myNotAsyncActions->make(do_sendScenMQTT); -// request->send(200); -// } -// -// if (request->hasArg(F("cleanlog"))) { -//#ifdef EnableLogging -// cleanLogAndData(); -//#endif -// request->send(200); -// } -// -// //==============================wifi settings============================================= -// if (request->hasArg(F("devname"))) { -// jsonWriteStr(configSetupJson, F("name"), request->getParam(F("devname"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("routerssid"))) { -// jsonWriteStr(configSetupJson, F("routerssid"), request->getParam(F("routerssid"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("routerpass"))) { -// jsonWriteStr(configSetupJson, F("routerpass"), request->getParam(F("routerpass"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("apssid"))) { -// jsonWriteStr(configSetupJson, F("apssid"), request->getParam(F("apssid"))->value()); -// saveConfig(); -// request->send(200, "text/text", "OK"); -// } -// -// if (request->hasArg(F("appass"))) { -// jsonWriteStr(configSetupJson, F("appass"), request->getParam(F("appass"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("weblogin"))) { -// jsonWriteStr(configSetupJson, F("weblogin"), request->getParam(F("weblogin"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("webpass"))) { -// jsonWriteStr(configSetupJson, F("webpass"), request->getParam(F("webpass"))->value()); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("timezone"))) { -// String timezoneStr = request->getParam(F("timezone"))->value(); -// jsonWriteStr(configSetupJson, F("timezone"), timezoneStr); -// saveConfig(); -// timeNow->setTimezone(timezoneStr.toInt()); -// request->send(200); -// } -// -// if (request->hasArg(F("ntp"))) { -// String ntpStr = request->getParam(F("ntp"))->value(); -// jsonWriteStr(configSetupJson, F("ntp"), ntpStr); -// saveConfig(); -// timeNow->setNtpPool(ntpStr); -// request->send(200); -// } -// -// if (request->hasArg(F("blink"))) { -// bool value = request->getParam(F("blink"))->value().toInt(); -// jsonWriteBool(configSetupJson, F("blink"), value); -// saveConfig(); -// request->send(200); -// } -// -// if (request->hasArg(F("reqReset"))) { -// String tmp = "{}"; -// jsonWriteStr(tmp, "title", F("Вы действительно хотите перезагрузить устройство?Идет перезагрузка устройства')\">Перезагрузить")); -// jsonWriteStr(tmp, "class", "pop-up"); -// request->send(200, "text/html", tmp); -// } -// -// if (request->hasArg(F("reset"))) { -// ESP.restart(); -// request->send(200); -// } -// -// //==============================mqtt settings============================================= -// //primary -// if (request->hasArg(F("mqttServer"))) { -// jsonWriteStr(configSetupJson, F("mqttServer"), request->getParam(F("mqttServer"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPort"))) { -// int port = (request->getParam(F("mqttPort"))->value()).toInt(); -// jsonWriteInt(configSetupJson, F("mqttPort"), port); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPrefix"))) { -// jsonWriteStr(configSetupJson, F("mqttPrefix"), request->getParam(F("mqttPrefix"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttUser"))) { -// jsonWriteStr(configSetupJson, F("mqttUser"), request->getParam(F("mqttUser"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPass"))) { -// jsonWriteStr(configSetupJson, F("mqttPass"), request->getParam(F("mqttPass"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// //secondary -// if (request->hasArg(F("mqttServer2"))) { -// jsonWriteStr(configSetupJson, F("mqttServer2"), request->getParam(F("mqttServer2"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPort2"))) { -// int port = (request->getParam(F("mqttPort2"))->value()).toInt(); -// jsonWriteInt(configSetupJson, F("mqttPort2"), port); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPrefix2"))) { -// jsonWriteStr(configSetupJson, F("mqttPrefix2"), request->getParam(F("mqttPrefix2"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttUser2"))) { -// jsonWriteStr(configSetupJson, F("mqttUser2"), request->getParam(F("mqttUser2"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// if (request->hasArg(F("mqttPass2"))) { -// jsonWriteStr(configSetupJson, F("mqttPass2"), request->getParam(F("mqttPass2"))->value()); -// saveConfig(); -// myNotAsyncActions->make(do_MQTTPARAMSCHANGED); -// request->send(200); -// } -// -// if (request->hasArg("mqttsend")) { -// //myNotAsyncActions->make(do_MQTTUDP); -// request->send(200); -// } -// -// if (request->hasArg("mqttcheck")) { -// String buf = "" + getStateStr(); -// -// String payload = "{}"; -// jsonWriteStr(payload, "title", buf); -// jsonWriteStr(payload, "class", "pop-up"); -// -// request->send(200, "text/html", payload); -// } -// -// //==============================telegram settings============================================= -// if (request->hasArg("telegramApi")) { -// jsonWriteStr(configSetupJson, "telegramApi", request->getParam("telegramApi")->value()); -// saveConfig(); -// request->send(200); -// } -// if (request->hasArg("autos")) { -// bool value = request->getParam("autos")->value().toInt(); -// jsonWriteBool(configSetupJson, "autos", value); -// saveConfig(); -// request->send(200); -// } -// if (request->hasArg("chatId")) { -// jsonWriteStr(configSetupJson, "chatId", request->getParam("chatId")->value()); -// saveConfig(); -// request->send(200); -// } -// if (request->hasArg("telegonof")) { -// bool value = request->getParam("telegonof")->value().toInt(); -// jsonWriteBool(configSetupJson, "telegonof", value); -// saveConfig(); -// request->send(200); -// } -// if (request->hasArg("teleginput")) { -// bool value = request->getParam("teleginput")->value().toInt(); -// jsonWriteBool(configSetupJson, "teleginput", value); -// saveConfig(); -// request->send(200); -// } -// -// //==============================utilities settings============================================= -// if (request->hasArg("i2c")) { -// myNotAsyncActions->make(do_BUSSCAN); -// request->redirect("/?set.utilities"); -// } -// if (request->hasArg("uart")) { -// bool value = request->getParam("uart")->value().toInt(); -// jsonWriteBool(configSetupJson, "uart", value); -// saveConfig(); -//#ifdef EnableUart -// uartInit(); -//#endif -// request->send(200); -// } -// if (request->hasArg("uartEvents")) { -// bool value = request->getParam("uartEvents")->value().toInt(); -// jsonWriteBool(configSetupJson, "uartEvents", value); -// saveConfig(); -// request->send(200); -// } -// if (request->hasArg("uartS")) { -// jsonWriteStr(configSetupJson, "uartS", request->getParam("uartS")->value()); -// saveConfig(); -//#ifdef EnableUart -// uartInit(); -//#endif -// request->send(200); -// } -// if (request->hasArg("uartTX")) { -// jsonWriteStr(configSetupJson, "uartTX", request->getParam("uartTX")->value()); -// saveConfig(); -//#ifdef EnableUart -// uartInit(); -//#endif -// request->send(200); -// } -// if (request->hasArg("uartRX")) { -// jsonWriteStr(configSetupJson, "uartRX", request->getParam("uartRX")->value()); -// saveConfig(); -//#ifdef EnableUart -// uartInit(); -//#endif -// request->send(200); -// } -// -// //==============================developer settings============================================= -// if (request->hasArg("serverip")) { -// jsonWriteStr(configSetupJson, "serverip", request->getParam("serverip")->value()); -// saveConfig(); -// serverIP = jsonReadStr(configSetupJson, "serverip"); -// request->send(200); -// } -// //set?order=button_1 -// if (request->hasArg("order")) { -// String order = request->getParam("order")->value(); -// order.replace("_", " "); -// loopCmdAdd(order + ","); -// request->send(200, "text/html", order); -// } -// -// if (request->hasArg("grafmax")) { -// int value = request->getParam("grafmax")->value().toInt(); -// jsonWriteInt(configSetupJson, "grafmax", value); -// saveConfig(); -// request->send(200); -// } -// -// //gate mode -// -// if (request->hasArg("gateAuto")) { -// bool value = request->getParam("gateAuto")->value().toInt(); -// jsonWriteBool(configSetupJson, "gateAuto", value); -// saveConfig(); -// request->send(200); -// } -// -// }); -// -// //server.on("/del", HTTP_GET, [](AsyncWebServerRequest* request) { -// // if (request->hasArg("file") && request->hasArg("line")) { -// // String fileName = request->getParam("file")->value(); -// // Serial.println(fileName); -// // int line = request->getParam("line")->value().toInt(); -// // Serial.println(line); -// // myNotAsyncActions->make(do_delChoosingItems); -// // request->redirect(F("/?set.device")); -// // } -// //}); -// -// server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) { -// myNotAsyncActions->make(do_GETLASTVERSION); -// SerialPrint("I", "Update", "firmware version: " + String(lastVersion)); -// -// String msg = ""; -// -// if (USE_OTA) { -// if (lastVersion == FIRMWARE_VERSION) { -// msg = F("Актуальная версия прошивки уже установлена."); -// } else if (lastVersion > FIRMWARE_VERSION) { -// msg = F("Новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить"); -// } else if (lastVersion == -1) { -// msg = F("Cервер не найден. Попробуйте повторить позже..."); -// } else if (lastVersion == -2) { -// msg = F("Устройство не подключено к роутеру!"); -// } else if (lastVersion < FIRMWARE_VERSION) { -// msg = F("Ошибка версии. Попробуйте повторить позже..."); -// } -// } else { -// msg = F("Обновление невозможно, память устройства 1 мб"); -// } -// -// String tmp = "{}"; -// jsonWriteStr(tmp, "title", "" + msg); -// jsonWriteStr(tmp, "class", "pop-up"); -// request->send(200, "text/html", tmp); -// }); -// -// /* -// * Upgrade -// */ -// server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) { -// myNotAsyncActions->make(do_UPGRADE); -// request->send(200, "text/html"); -// }); + server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) { + //==============================set.device.json==================================================================================================== + if (request->hasArg(F("addItem"))) { + addItem2(request->getParam("addItem")->value().toInt()); + request->redirect("/?set.device"); + } + + if (request->hasArg(F("addPreset"))) { + addPreset2(request->getParam(F("addPreset"))->value().toInt()); + + jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); + + request->redirect(F("/?set.device")); + } + + if (request->hasArg(F("delChoosingItems"))) { + jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); + myNotAsyncActions->make(do_delChoosingItems); + request->send(200); + } + + if (request->hasArg(F("delAllItems"))) { + delAllItems(); +#ifdef EnableLogging + cleanLogAndData(); +#endif + jsonWriteStr(configSetupJson, F("warning1"), F("

Требуется перезагрузка

")); + request->redirect(F("/?set.device")); + } + + if (request->hasArg(F("saveItems"))) { + myNotAsyncActions->make(do_deviceInit); + savedFromWeb = true; + request->send(200); + } + + if (request->hasArg(F("scen"))) { + bool value = request->getParam(F("scen"))->value().toInt(); + jsonWriteBool(configSetupJson, F("scen"), value); + saveConfig(); + loadScenario(); + request->send(200); + } + + if (request->hasArg(F("sceninit"))) { + loadScenario(); + request->send(200); + } + + if (request->hasArg(F("MqttIn"))) { + bool value = request->getParam(F("MqttIn"))->value().toInt(); + jsonWriteBool(configSetupJson, "MqttIn", value); + saveConfig(); + mqtt.subscribe((mqttPrefix + "/+/+/event").c_str()); + mqtt.subscribe((mqttPrefix + "/+/+/info").c_str()); + request->send(200); + } + + if (request->hasArg(F("MqttOut"))) { + bool value = request->getParam(F("MqttOut"))->value().toInt(); + jsonWriteBool(configSetupJson, F("MqttOut"), value); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("scenMqtt"))) { + myNotAsyncActions->make(do_sendScenMQTT); + request->send(200); + } + + if (request->hasArg(F("cleanlog"))) { +#ifdef EnableLogging + cleanLogAndData(); +#endif + request->send(200); + } + + //==============================wifi settings============================================= + if (request->hasArg(F("devname"))) { + jsonWriteStr(configSetupJson, F("name"), request->getParam(F("devname"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("routerssid"))) { + jsonWriteStr(configSetupJson, F("routerssid"), request->getParam(F("routerssid"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("routerpass"))) { + jsonWriteStr(configSetupJson, F("routerpass"), request->getParam(F("routerpass"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("apssid"))) { + jsonWriteStr(configSetupJson, F("apssid"), request->getParam(F("apssid"))->value()); + saveConfig(); + request->send(200, "text/text", "OK"); + } + + if (request->hasArg(F("appass"))) { + jsonWriteStr(configSetupJson, F("appass"), request->getParam(F("appass"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("weblogin"))) { + jsonWriteStr(configSetupJson, F("weblogin"), request->getParam(F("weblogin"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("webpass"))) { + jsonWriteStr(configSetupJson, F("webpass"), request->getParam(F("webpass"))->value()); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("timezone"))) { + String timezoneStr = request->getParam(F("timezone"))->value(); + jsonWriteStr(configSetupJson, F("timezone"), timezoneStr); + saveConfig(); + timeNow->setTimezone(timezoneStr.toInt()); + request->send(200); + } + + if (request->hasArg(F("ntp"))) { + String ntpStr = request->getParam(F("ntp"))->value(); + jsonWriteStr(configSetupJson, F("ntp"), ntpStr); + saveConfig(); + timeNow->setNtpPool(ntpStr); + request->send(200); + } + + if (request->hasArg(F("blink"))) { + bool value = request->getParam(F("blink"))->value().toInt(); + jsonWriteBool(configSetupJson, F("blink"), value); + saveConfig(); + request->send(200); + } + + if (request->hasArg(F("reqReset"))) { + String tmp = "{}"; + jsonWriteStr(tmp, "title", F("Вы действительно хотите перезагрузить устройство?Идет перезагрузка устройства')\">Перезагрузить")); + jsonWriteStr(tmp, "class", "pop-up"); + request->send(200, "text/html", tmp); + } + + if (request->hasArg(F("reset"))) { + ESP.restart(); + request->send(200); + } + + //==============================mqtt settings============================================= + // primary + if (request->hasArg(F("mqttServer"))) { + jsonWriteStr(configSetupJson, F("mqttServer"), request->getParam(F("mqttServer"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPort"))) { + int port = (request->getParam(F("mqttPort"))->value()).toInt(); + jsonWriteInt(configSetupJson, F("mqttPort"), port); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPrefix"))) { + jsonWriteStr(configSetupJson, F("mqttPrefix"), request->getParam(F("mqttPrefix"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttUser"))) { + jsonWriteStr(configSetupJson, F("mqttUser"), request->getParam(F("mqttUser"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPass"))) { + jsonWriteStr(configSetupJson, F("mqttPass"), request->getParam(F("mqttPass"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + // secondary + if (request->hasArg(F("mqttServer2"))) { + jsonWriteStr(configSetupJson, F("mqttServer2"), request->getParam(F("mqttServer2"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPort2"))) { + int port = (request->getParam(F("mqttPort2"))->value()).toInt(); + jsonWriteInt(configSetupJson, F("mqttPort2"), port); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPrefix2"))) { + jsonWriteStr(configSetupJson, F("mqttPrefix2"), request->getParam(F("mqttPrefix2"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttUser2"))) { + jsonWriteStr(configSetupJson, F("mqttUser2"), request->getParam(F("mqttUser2"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + if (request->hasArg(F("mqttPass2"))) { + jsonWriteStr(configSetupJson, F("mqttPass2"), request->getParam(F("mqttPass2"))->value()); + saveConfig(); + myNotAsyncActions->make(do_MQTTPARAMSCHANGED); + request->send(200); + } + + if (request->hasArg("mqttsend")) { + // myNotAsyncActions->make(do_MQTTUDP); + request->send(200); + } + + if (request->hasArg("mqttcheck")) { + String buf = "" + getStateStr(); + + String payload = "{}"; + jsonWriteStr(payload, "title", buf); + jsonWriteStr(payload, "class", "pop-up"); + + request->send(200, "text/html", payload); + } + + //==============================telegram settings============================================= + if (request->hasArg("telegramApi")) { + jsonWriteStr(configSetupJson, "telegramApi", request->getParam("telegramApi")->value()); + saveConfig(); + request->send(200); + } + if (request->hasArg("autos")) { + bool value = request->getParam("autos")->value().toInt(); + jsonWriteBool(configSetupJson, "autos", value); + saveConfig(); + request->send(200); + } + if (request->hasArg("chatId")) { + jsonWriteStr(configSetupJson, "chatId", request->getParam("chatId")->value()); + saveConfig(); + request->send(200); + } + if (request->hasArg("telegonof")) { + bool value = request->getParam("telegonof")->value().toInt(); + jsonWriteBool(configSetupJson, "telegonof", value); + saveConfig(); + request->send(200); + } + if (request->hasArg("teleginput")) { + bool value = request->getParam("teleginput")->value().toInt(); + jsonWriteBool(configSetupJson, "teleginput", value); + saveConfig(); + request->send(200); + } + + //==============================utilities settings============================================= + if (request->hasArg("i2c")) { + myNotAsyncActions->make(do_BUSSCAN); + request->redirect("/?set.utilities"); + } + if (request->hasArg("uart")) { + bool value = request->getParam("uart")->value().toInt(); + jsonWriteBool(configSetupJson, "uart", value); + saveConfig(); +#ifdef EnableUart + uartInit(); +#endif + request->send(200); + } + if (request->hasArg("uartEvents")) { + bool value = request->getParam("uartEvents")->value().toInt(); + jsonWriteBool(configSetupJson, "uartEvents", value); + saveConfig(); + request->send(200); + } + if (request->hasArg("uartS")) { + jsonWriteStr(configSetupJson, "uartS", request->getParam("uartS")->value()); + saveConfig(); +#ifdef EnableUart + uartInit(); +#endif + request->send(200); + } + if (request->hasArg("uartTX")) { + jsonWriteStr(configSetupJson, "uartTX", request->getParam("uartTX")->value()); + saveConfig(); +#ifdef EnableUart + uartInit(); +#endif + request->send(200); + } + if (request->hasArg("uartRX")) { + jsonWriteStr(configSetupJson, "uartRX", request->getParam("uartRX")->value()); + saveConfig(); +#ifdef EnableUart + uartInit(); +#endif + request->send(200); + } + + //==============================developer settings============================================= + if (request->hasArg("serverip")) { + jsonWriteStr(configSetupJson, "serverip", request->getParam("serverip")->value()); + saveConfig(); + serverIP = jsonReadStr(configSetupJson, "serverip"); + request->send(200); + } + // set?order=button_1 + if (request->hasArg("order")) { + String order = request->getParam("order")->value(); + order.replace("_", " "); + loopCmdAdd(order + ","); + request->send(200, "text/html", order); + } + + if (request->hasArg("grafmax")) { + int value = request->getParam("grafmax")->value().toInt(); + jsonWriteInt(configSetupJson, "grafmax", value); + saveConfig(); + request->send(200); + } + + // gate mode + + if (request->hasArg("gateAuto")) { + bool value = request->getParam("gateAuto")->value().toInt(); + jsonWriteBool(configSetupJson, "gateAuto", value); + saveConfig(); + request->send(200); + } + }); + + // server.on("/del", HTTP_GET, [](AsyncWebServerRequest* request) { + // if (request->hasArg("file") && request->hasArg("line")) { + // String fileName = request->getParam("file")->value(); + // Serial.println(fileName); + // int line = request->getParam("line")->value().toInt(); + // Serial.println(line); + // myNotAsyncActions->make(do_delChoosingItems); + // request->redirect(F("/?set.device")); + // } + // }); + + server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) { + myNotAsyncActions->make(do_GETLASTVERSION); + SerialPrint("I", "Update", "firmware version: " + String(lastVersion)); + + String msg = ""; + + if (USE_OTA) { + if (lastVersion == FIRMWARE_VERSION) { + msg = F("Актуальная версия прошивки уже установлена."); + } else if (lastVersion > FIRMWARE_VERSION) { + msg = F("Новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить"); + } else if (lastVersion == -1) { + msg = F("Cервер не найден. Попробуйте повторить позже..."); + } else if (lastVersion == -2) { + msg = F("Устройство не подключено к роутеру!"); + } else if (lastVersion < FIRMWARE_VERSION) { + msg = F("Ошибка версии. Попробуйте повторить позже..."); + } + } else { + msg = F("Обновление невозможно, память устройства 1 мб"); + } + + String tmp = "{}"; + jsonWriteStr(tmp, "title", "" + msg); + jsonWriteStr(tmp, "class", "pop-up"); + request->send(200, "text/html", tmp); + }); + + /* + * Upgrade + */ + server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) { + myNotAsyncActions->make(do_UPGRADE); + request->send(200, "text/html"); + }); SerialPrint("I", F("Web"), F("WebAdmin Init")); } diff --git a/src/WebServer.cpp b/src/WebServer.cpp index 0263892d..ddb2f680 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -11,7 +11,6 @@ AsyncWebSocket ws("/ws"); AsyncEventSource events("/events"); void HttpServerinit() { - String login = jsonReadStr(configSetupJson, "weblogin"); String pass = jsonReadStr(configSetupJson, "webpass"); #ifdef ESP32 @@ -20,6 +19,12 @@ void HttpServerinit() { server.addHandler(new FSEditor(login, pass)); #endif + //#ifdef CORS_DEBUG + DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Origin"), F("*")); + DefaultHeaders::Instance().addHeader(F("Access-Control-Allow-Headers"), F("content-type")); + //#endif + + // server.sendHeader("Access-Control-Allow-Origin", "*"); server.serveStatic("/css/", FileFS, "/css/").setCacheControl("max-age=600"); server.serveStatic("/js/", FileFS, "/js/").setCacheControl("max-age=600"); server.serveStatic("/favicon.ico", FileFS, "/favicon.ico").setCacheControl("max-age=600"); @@ -32,9 +37,17 @@ void HttpServerinit() { server.serveStatic("/", FileFS, "/").setDefaultFile("index.htm").setAuthentication(login.c_str(), pass.c_str()); #endif + //server.onNotFound([](AsyncWebServerRequest *request) { + // SerialPrint("[E]", "WebServer", "not found:\n" + getRequestInfo(request)); + // request->send(404); + //}); + server.onNotFound([](AsyncWebServerRequest *request) { - SerialPrint("[E]", "WebServer", "not found:\n" + getRequestInfo(request)); - request->send(404); + if (request->method() == HTTP_OPTIONS) { + request->send(200); + } else { + request->send(404); + } }); server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) { @@ -47,6 +60,11 @@ void HttpServerinit() { } }); + server.on("/file.json", HTTP_GET, [](AsyncWebServerRequest *request) { + String file = readFile("file.json", 1024); + request->send(200, "application/json", file); + }); + // динамические данные server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "application/json", configLiveJson); @@ -117,7 +135,7 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp if (msg.startsWith("/config")) { // myNotAsyncActions->make(do_webSocketSendSetup); - wsSetupFlag = true; + // wsSetupFlag = true; } if (info->opcode == WS_TEXT) { diff --git a/src/WebSocket.cpp b/src/WebSocket.cpp index 70bb8480..b88f3324 100644 --- a/src/WebSocket.cpp +++ b/src/WebSocket.cpp @@ -6,58 +6,58 @@ #include "Global.h" void wsInit() { - myWsBuffer = new TCircularBuffer; - // myNotAsyncActions->add( - // do_webSocketSendSetup, [&](void*) { - // delay(100); - // wsSendSetup(); - // }, - // nullptr); + // myWsBuffer = new TCircularBuffer; + // myNotAsyncActions->add( + // do_webSocketSendSetup, [&](void*) { + // delay(100); + // wsSendSetup(); + // }, + // nullptr); } void wsPublishData(String topic, String data) { if (ws.enabled()) { - // if (ws.availableForWriteAll()) { - data = "[" + topic + "]" + data; - ws.textAll(data); - //} + if (ws.availableForWriteAll()) { + data = "[" + topic + "]" + data; + ws.textAll(data); + } } } //отправка setup массива в sockets способом через буфер string, рабочий способ но буфер стринг - плохой метод -// void wsSendSetup3() { -// File file = seekFile("/setup.json"); -// DynamicJsonDocument doc(2048); -// int i = 0; -// file.find("["); -// SerialPrint("I", F("WS"), F("start send config")); -// do { -// i++; -// deserializeJson(doc, file); -// wsBuf += doc.as() + "\n"; -// } while (file.findUntil(",", "]")); -// SerialPrint("I", F("WS"), F("completed send config")); -//} +void wsSendSetup3() { + File file = seekFile("/setup.json"); + DynamicJsonDocument doc(2048); + int i = 0; + file.find("["); + SerialPrint("I", F("WS"), F("start send config")); + do { + i++; + deserializeJson(doc, file); + wsBuf += doc.as() + "\n"; + } while (file.findUntil(",", "]")); + SerialPrint("I", F("WS"), F("completed send config")); +} -// void loopWsExecute3() { -// static int attampts = wsAttempts; -// if (wsBuf.length()) { -// if (attampts > 0) { -// if (ws.availableForWriteAll()) { -// String tmp = selectToMarker(wsBuf, "\n"); -// wsPublishData("config", tmp); -// wsBuf = deleteBeforeDelimiter(wsBuf, "\n"); -// attampts = wsAttempts; -// } else { -// attampts--; -// SerialPrint("I", F("WS"), String(attampts)); -// } -// } else { -// SerialPrint("I", F("WS"), F("socket fatal error")); -// attampts = wsAttempts; -// } -// } -// } +void loopWsExecute3() { + static int attampts = wsAttempts; + if (wsBuf.length()) { + if (attampts > 0) { + if (ws.availableForWriteAll()) { + String tmp = selectToMarker(wsBuf, "\n"); + wsPublishData("config", tmp); + wsBuf = deleteBeforeDelimiter(wsBuf, "\n"); + attampts = wsAttempts; + } else { + attampts--; + SerialPrint("I", F("WS"), String(attampts)); + } + } else { + SerialPrint("I", F("WS"), F("socket fatal error")); + attampts = wsAttempts; + } + } +} //отправка setup массива в sockets способом через кольцевой буфер char // void wsSendSetup() { diff --git a/src/main.cpp b/src/main.cpp index b9652bfe..b3e38a21 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -113,12 +113,12 @@ void loop() { testLoop(); - if (wsSetupFlag) { - wsSetupFlag = false; - wsSendSetup(); - } + // if (wsSetupFlag) { + // wsSetupFlag = false; + // wsSendSetup(); + //} - loopWsExecute(); + // loopWsExecute(); #ifdef OTA_UPDATES_ENABLED ArduinoOTA.handle();