iobroker.eos-admin 7.9.67 → 7.9.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adminWww/assets/bootstrap-COulQZax-v54.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v55.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v56.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v57.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v58.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v59.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v60.js +1 -2
- package/adminWww/assets/bootstrap-COulQZax-v61.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v67.js +1 -317
- package/adminWww/assets/bootstrap-COulQZax-v68.js +1 -0
- package/adminWww/assets/bootstrap-COulQZax-v69.js +317 -0
- package/adminWww/assets/bootstrap-COulQZax.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v55.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v56.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v57.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v58.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v59.js +1 -1
- package/adminWww/assets/index-CQZugZ1z-v60.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v61.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v67.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v68.js +1 -0
- package/adminWww/assets/index-CQZugZ1z-v69.js +2 -0
- package/adminWww/assets/index-CQZugZ1z.js +1 -1
- package/adminWww/css/eos-branding.css +3 -114
- package/adminWww/index.html +11 -10
- package/adminWww/js/eos-branding.js +114 -157
- package/adminWww/js/eos-toolbar-ghost-cleanup.js +102 -0
- package/io-package.json +5 -5
- package/package.json +1 -1
- package/tools/nexowatt-validate-package.cjs +15 -17
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export * from "./bootstrap-COulQZax-v60.js";
|
|
1
|
+
export * from "./bootstrap-COulQZax-v69.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-COulQZax-v60.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-COulQZax-v61.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-COulQZax-v67.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./bootstrap-COulQZax-v69.js","./DefaultPropsProvider-BiXBMQYQ.js","./_commonjsHelpers-CE1G-McA.js","./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js","./emotion-serialize.esm-Q4o_CgeF.js","./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BywLg1Xe.js","./iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js","./ace-DEUjyTIn.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-LFZoiUTt.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-CpA7pnS5.js","./iobroker_admin__loadShare__leaflet__loadShare__-CNUAG3AH.js","./ext-language_tools-ylAoucDh.js","./iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-CwjnV48g.js","./iobroker_admin__loadShare__react_mf_2_dom__loadShare__-CVeAXnkk.js","./preload-helper-BDBacUwf.js","./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js","./sdk-C-e-e2gd.js","./extends-CF3RwP-h.js","./assertThisInitialized-B0aQ9eG_.js","./useTheme-Bl-M1DYp.js","./createTheme-DFX8CY6F.js","./blue-CagzI6CQ.js","./index-DcK0RDrH.js","./ThemeProvider-BOFFjWAF.js","./emotion-cache.browser.esm-BgJfNZJN.js","./setYear-3ufv5yRD.js","./en-US-DBFJNIH6.js","./bootstrap-D57bMhRi.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-COulQZax-v69.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./index-CQZugZ1z-
|
|
1
|
+
import "./index-CQZugZ1z-v69.js";
|
|
@@ -3817,33 +3817,9 @@ html.eos-route-adapters .MuiModal-root [role="listbox"] {
|
|
|
3817
3817
|
}
|
|
3818
3818
|
|
|
3819
3819
|
|
|
3820
|
-
/* === NexoWatt EOS v7.9.
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
html.eos-app .eos-native-drawer-header,
|
|
3824
|
-
html.eos-app .eos-native-drawer-header > div:first-child {
|
|
3825
|
-
display: none !important;
|
|
3826
|
-
visibility: hidden !important;
|
|
3827
|
-
opacity: 0 !important;
|
|
3828
|
-
pointer-events: none !important;
|
|
3829
|
-
width: 0 !important;
|
|
3830
|
-
min-width: 0 !important;
|
|
3831
|
-
max-width: 0 !important;
|
|
3832
|
-
height: 0 !important;
|
|
3833
|
-
min-height: 0 !important;
|
|
3834
|
-
max-height: 0 !important;
|
|
3835
|
-
margin: 0 !important;
|
|
3836
|
-
padding: 0 !important;
|
|
3837
|
-
overflow: hidden !important;
|
|
3838
|
-
flex: 0 0 0 !important;
|
|
3839
|
-
border: 0 !important;
|
|
3840
|
-
box-shadow: none !important;
|
|
3841
|
-
background: transparent !important;
|
|
3842
|
-
}
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
/* === NexoWatt EOS v7.9.64: final native drawer header guard ============== */
|
|
3846
|
-
html.eos-app .eos-native-drawer-header-hidden {
|
|
3820
|
+
/* === NexoWatt EOS v7.9.69: exact v57 header baseline + narrow fallback === */
|
|
3821
|
+
html.eos-app .eos-small-top-left-native-tab-hidden,
|
|
3822
|
+
html.eos-app [aria-hidden="true"].eos-small-top-left-native-tab-hidden {
|
|
3847
3823
|
display: none !important;
|
|
3848
3824
|
visibility: hidden !important;
|
|
3849
3825
|
opacity: 0 !important;
|
|
@@ -3860,91 +3836,4 @@ html.eos-app .eos-native-drawer-header-hidden {
|
|
|
3860
3836
|
flex: 0 0 0 !important;
|
|
3861
3837
|
border: 0 !important;
|
|
3862
3838
|
box-shadow: none !important;
|
|
3863
|
-
background: transparent !important;
|
|
3864
|
-
}
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
/* === NexoWatt EOS v7.9.65: native desktop drawer-header hard remove ======
|
|
3868
|
-
The upstream drawer identity block contains a /#easy link plus the chevron
|
|
3869
|
-
button. It is redundant in the EOS horizontal shell and caused the small
|
|
3870
|
-
floating NexoWatt tab above the real header. Target the actual structure,
|
|
3871
|
-
not only a class that JavaScript may assign too late. */
|
|
3872
|
-
body:has(#app-paper) .MuiDrawer-paper > *:has(a[href="/#easy"]):has(button),
|
|
3873
|
-
body:has(#app-paper) .MuiDrawer-paper > *:has(a[href$="#easy"]):has(.MuiIconButton-root),
|
|
3874
|
-
body:has(#app-paper) .MuiSwipeableDrawer-paper > *:has(a[href="/#easy"]):has(button),
|
|
3875
|
-
html.eos-app [data-eos-native-drawer-header-hidden="true"] {
|
|
3876
|
-
display: none !important;
|
|
3877
|
-
visibility: hidden !important;
|
|
3878
|
-
opacity: 0 !important;
|
|
3879
|
-
pointer-events: none !important;
|
|
3880
|
-
width: 0 !important;
|
|
3881
|
-
min-width: 0 !important;
|
|
3882
|
-
max-width: 0 !important;
|
|
3883
|
-
height: 0 !important;
|
|
3884
|
-
min-height: 0 !important;
|
|
3885
|
-
max-height: 0 !important;
|
|
3886
|
-
margin: 0 !important;
|
|
3887
|
-
padding: 0 !important;
|
|
3888
|
-
overflow: hidden !important;
|
|
3889
|
-
flex: 0 0 0 !important;
|
|
3890
|
-
border: 0 !important;
|
|
3891
|
-
box-shadow: none !important;
|
|
3892
|
-
background: transparent !important;
|
|
3893
|
-
}
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
/* === NexoWatt EOS v7.9.67: restore primary brand, remove only ghost tab ===
|
|
3897
|
-
Keep the large NexoWatt EOS / Energy Operation System card. Hide only the
|
|
3898
|
-
short native NexoWatt+arrow block that is redundant in the EOS shell. */
|
|
3899
|
-
html.eos-app .eos-top-toolbar > .eos-brand-badge,
|
|
3900
|
-
html.eos-app .eos-top-toolbar > .eos-primary-brand,
|
|
3901
|
-
html.eos-app [data-eos-primary-brand="true"] {
|
|
3902
|
-
display: grid !important;
|
|
3903
|
-
visibility: visible !important;
|
|
3904
|
-
opacity: 1 !important;
|
|
3905
|
-
pointer-events: auto !important;
|
|
3906
|
-
overflow: visible !important;
|
|
3907
|
-
flex: 0 0 auto !important;
|
|
3908
|
-
}
|
|
3909
|
-
|
|
3910
|
-
html.eos-app .eos-native-top-left-ghost-hidden,
|
|
3911
|
-
html.eos-app [data-eos-native-top-left-ghost="true"] {
|
|
3912
|
-
display: none !important;
|
|
3913
|
-
visibility: hidden !important;
|
|
3914
|
-
opacity: 0 !important;
|
|
3915
|
-
pointer-events: none !important;
|
|
3916
|
-
width: 0 !important;
|
|
3917
|
-
min-width: 0 !important;
|
|
3918
|
-
max-width: 0 !important;
|
|
3919
|
-
height: 0 !important;
|
|
3920
|
-
min-height: 0 !important;
|
|
3921
|
-
max-height: 0 !important;
|
|
3922
|
-
margin: 0 !important;
|
|
3923
|
-
padding: 0 !important;
|
|
3924
|
-
overflow: hidden !important;
|
|
3925
|
-
flex: 0 0 0 !important;
|
|
3926
|
-
border: 0 !important;
|
|
3927
|
-
box-shadow: none !important;
|
|
3928
|
-
}
|
|
3929
|
-
|
|
3930
|
-
@media (min-width: 901px) {
|
|
3931
|
-
/* Exact upstream Drawer.getHeader fingerprint. This rule never targets the
|
|
3932
|
-
primary .eos-brand-badge in the AppBar. */
|
|
3933
|
-
html.eos-app .MuiDrawer-paper > *:not(.MuiList-root):has(a[href*="#easy"]):has(button),
|
|
3934
|
-
html.eos-app .MuiSwipeableDrawer-paper > *:not(.MuiList-root):has(a[href*="#easy"]):has(.MuiIconButton-root) {
|
|
3935
|
-
display: none !important;
|
|
3936
|
-
visibility: hidden !important;
|
|
3937
|
-
opacity: 0 !important;
|
|
3938
|
-
pointer-events: none !important;
|
|
3939
|
-
width: 0 !important;
|
|
3940
|
-
min-width: 0 !important;
|
|
3941
|
-
max-width: 0 !important;
|
|
3942
|
-
height: 0 !important;
|
|
3943
|
-
min-height: 0 !important;
|
|
3944
|
-
max-height: 0 !important;
|
|
3945
|
-
margin: 0 !important;
|
|
3946
|
-
padding: 0 !important;
|
|
3947
|
-
overflow: hidden !important;
|
|
3948
|
-
flex: 0 0 0 !important;
|
|
3949
|
-
}
|
|
3950
3839
|
}
|
package/adminWww/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
translate="no"
|
|
5
5
|
>
|
|
6
6
|
<head>
|
|
7
|
-
<script src="./js/eos-console-quiet.js?v=
|
|
8
|
-
<script type="module" src="./assets/hostInit-v61.js?v=
|
|
7
|
+
<script src="./js/eos-console-quiet.js?v=69"></script>
|
|
8
|
+
<script type="module" src="./assets/hostInit-v61.js?v=69"></script>
|
|
9
9
|
|
|
10
10
|
<meta charset="utf-8" />
|
|
11
11
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
rel="stylesheet"
|
|
36
36
|
href="css/leaflet.css"
|
|
37
37
|
/>
|
|
38
|
-
<link rel="stylesheet" href="./css/eos-branding.css?v=
|
|
38
|
+
<link rel="stylesheet" href="./css/eos-branding.css?v=69" />
|
|
39
39
|
<link
|
|
40
40
|
rel="manifest"
|
|
41
41
|
href="manifest.json"
|
|
@@ -155,15 +155,16 @@
|
|
|
155
155
|
false,
|
|
156
156
|
);
|
|
157
157
|
</script>
|
|
158
|
-
<script type="module" crossorigin src="./assets/index-CQZugZ1z-
|
|
158
|
+
<script type="module" crossorigin src="./assets/index-CQZugZ1z-v69.js?v=69"></script>
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
|
|
160
160
|
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
|
|
161
|
-
<script defer src="./js/eos-branding.js?v=
|
|
162
|
-
<script defer src="./js/eos-
|
|
163
|
-
<script defer src="./js/eos-
|
|
164
|
-
<script defer src="./js/eos-
|
|
165
|
-
<script defer src="./js/eos-
|
|
166
|
-
<script defer src="./js/eos-
|
|
161
|
+
<script defer src="./js/eos-branding.js?v=69"></script>
|
|
162
|
+
<script defer src="./js/eos-toolbar-ghost-cleanup.js?v=69"></script>
|
|
163
|
+
<script defer src="./js/eos-adapter-surface-cleanup.js?v=69"></script>
|
|
164
|
+
<script defer src="./js/eos-security-ui.js?v=69"></script>
|
|
165
|
+
<script defer src="./js/eos-role-ui.js?v=69"></script>
|
|
166
|
+
<script defer src="./js/eos-assistant.js?v=69"></script>
|
|
167
|
+
<script defer src="./js/eos-objects-state-tools.js?v=69"></script>
|
|
167
168
|
</head>
|
|
168
169
|
<body>
|
|
169
170
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
window.NEXOWATT_EOS_UI_VERSION = '
|
|
4
|
+
window.NEXOWATT_EOS_UI_VERSION = 'v69-v57-header-baseline-restore';
|
|
5
5
|
|
|
6
6
|
const BRAND = 'NexoWatt EOS';
|
|
7
7
|
const EOS_MEANING = 'Energy Operation System';
|
|
@@ -771,29 +771,14 @@
|
|
|
771
771
|
document.querySelectorAll('.eos-brand-badge').forEach(existing => {
|
|
772
772
|
if (!toolbar.contains(existing)) existing.remove();
|
|
773
773
|
});
|
|
774
|
-
|
|
775
|
-
let badge = toolbar.querySelector(':scope > .eos-brand-badge') || toolbar.querySelector('.eos-brand-badge');
|
|
774
|
+
let badge = toolbar.querySelector('.eos-brand-badge');
|
|
776
775
|
if (!badge) {
|
|
777
776
|
badge = document.createElement('span');
|
|
778
|
-
badge.className = 'eos-brand-badge eos-system-brand
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
// Never use a nested button as insertBefore reference. App.renderToolbar()
|
|
782
|
-
// can omit the desktop MenuIcon, in which case querySelector('button')
|
|
783
|
-
// points into a child wrapper and insertBefore throws a NotFoundError.
|
|
784
|
-
if (badge.parentElement !== toolbar || toolbar.firstElementChild !== badge) {
|
|
785
|
-
toolbar.insertBefore(badge, toolbar.firstElementChild || null);
|
|
777
|
+
badge.className = 'eos-brand-badge eos-system-brand';
|
|
778
|
+
const firstButton = toolbar.querySelector('button');
|
|
779
|
+
toolbar.insertBefore(badge, firstButton || toolbar.firstChild || null);
|
|
786
780
|
}
|
|
787
|
-
|
|
788
|
-
badge.classList.add('eos-system-brand', 'eos-primary-brand');
|
|
789
|
-
badge.dataset.eosPrimaryBrand = 'true';
|
|
790
|
-
badge.removeAttribute('hidden');
|
|
791
|
-
badge.removeAttribute('aria-hidden');
|
|
792
|
-
badge.removeAttribute('inert');
|
|
793
|
-
badge.style.removeProperty('display');
|
|
794
|
-
badge.style.removeProperty('visibility');
|
|
795
|
-
badge.style.removeProperty('opacity');
|
|
796
|
-
badge.style.removeProperty('pointer-events');
|
|
781
|
+
badge.classList.add('eos-system-brand');
|
|
797
782
|
badge.innerHTML = `
|
|
798
783
|
<span class="eos-brand-badge-mark"><img class="eos-brand-badge-logo" src="${LOGO}" alt="${BRAND}" /></span>
|
|
799
784
|
<span class="eos-brand-badge-copy"><strong>${BRAND}</strong><small>${EOS_MEANING}</small></span>
|
|
@@ -801,81 +786,6 @@
|
|
|
801
786
|
`;
|
|
802
787
|
};
|
|
803
788
|
|
|
804
|
-
const hideNativeTopLeftGhost = element => safe(() => {
|
|
805
|
-
if (!element) return;
|
|
806
|
-
if (
|
|
807
|
-
element.matches?.('.eos-brand-badge, .eos-primary-brand') ||
|
|
808
|
-
element.closest?.('.eos-brand-badge, .eos-primary-brand') ||
|
|
809
|
-
element.querySelector?.('.eos-brand-badge, .eos-primary-brand')
|
|
810
|
-
) return;
|
|
811
|
-
|
|
812
|
-
const text = normalize(element.textContent || '');
|
|
813
|
-
// The wanted primary card contains the full product name and subtitle.
|
|
814
|
-
// The unwanted native tab contains only the short NexoWatt identity.
|
|
815
|
-
if (/energy operation system|nexowatt eos/.test(text)) return;
|
|
816
|
-
|
|
817
|
-
element.classList.add('eos-native-top-left-ghost-hidden');
|
|
818
|
-
element.dataset.eosNativeTopLeftGhost = 'true';
|
|
819
|
-
element.setAttribute('aria-hidden', 'true');
|
|
820
|
-
element.setAttribute('inert', '');
|
|
821
|
-
element.querySelectorAll?.('button, a, [role="button"], input, select, textarea').forEach(control => {
|
|
822
|
-
control.setAttribute('tabindex', '-1');
|
|
823
|
-
control.setAttribute('aria-hidden', 'true');
|
|
824
|
-
});
|
|
825
|
-
if (element.style) {
|
|
826
|
-
for (const name of [
|
|
827
|
-
'display', 'visibility', 'opacity', 'pointer-events',
|
|
828
|
-
'width', 'min-width', 'max-width', 'height', 'min-height', 'max-height',
|
|
829
|
-
'margin', 'padding', 'overflow', 'flex', 'border', 'box-shadow',
|
|
830
|
-
]) {
|
|
831
|
-
const value = name === 'display' ? 'none'
|
|
832
|
-
: name === 'visibility' ? 'hidden'
|
|
833
|
-
: name === 'opacity' ? '0'
|
|
834
|
-
: name === 'pointer-events' ? 'none'
|
|
835
|
-
: name === 'overflow' ? 'hidden'
|
|
836
|
-
: name === 'flex' ? '0 0 0'
|
|
837
|
-
: name === 'border' || name === 'box-shadow' ? 'none'
|
|
838
|
-
: '0';
|
|
839
|
-
element.style.setProperty(name, value, 'important');
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
});
|
|
843
|
-
|
|
844
|
-
const removeNativeTopLeftGhost = () => safe(() => {
|
|
845
|
-
if (!window.matchMedia('(min-width: 901px)').matches) return;
|
|
846
|
-
|
|
847
|
-
// Source 1: upstream Drawer.getHeader() identity + chevron block.
|
|
848
|
-
document.querySelectorAll('.MuiDrawer-paper, .MuiSwipeableDrawer-paper').forEach(drawer => {
|
|
849
|
-
Array.from(drawer.children || []).forEach(child => {
|
|
850
|
-
if (!child?.querySelector) return;
|
|
851
|
-
const text = normalize(child.textContent || '');
|
|
852
|
-
const hasIdentity = !!child.querySelector('a[href*="#easy"], img, .MuiAvatar-root') || /nexowatt|iobroker/.test(text);
|
|
853
|
-
const hasToggle = !!child.querySelector('button, .MuiIconButton-root, [role="button"]');
|
|
854
|
-
const isNavigationList = child.classList?.contains('MuiList-root') || !!child.querySelector('.MuiListItemButton-root');
|
|
855
|
-
if (hasIdentity && hasToggle && !isNavigationList) hideNativeTopLeftGhost(child);
|
|
856
|
-
});
|
|
857
|
-
});
|
|
858
|
-
|
|
859
|
-
// Source 2: stale native compact identity rendered as a small top-left
|
|
860
|
-
// AppBar child. Use geometry + short label, and explicitly protect the
|
|
861
|
-
// large primary EOS badge.
|
|
862
|
-
document.querySelectorAll('.MuiAppBar-root .MuiToolbar-root > *, .eos-top-toolbar > *').forEach(child => {
|
|
863
|
-
if (!child?.querySelector || child.matches?.('.eos-brand-badge, .eos-primary-brand')) return;
|
|
864
|
-
if (child.querySelector('.eos-brand-badge, .eos-primary-brand')) return;
|
|
865
|
-
const text = normalize(child.textContent || '');
|
|
866
|
-
const hasShortIdentity = text === 'nexowatt' || text === 'iobroker' || /^nexowatt\s*$/.test(text);
|
|
867
|
-
const hasEasyLink = !!child.querySelector('a[href*="#easy"]');
|
|
868
|
-
const hasToggle = !!child.querySelector('button, .MuiIconButton-root, svg');
|
|
869
|
-
const rect = child.getBoundingClientRect?.();
|
|
870
|
-
const isTopLeft = rect && rect.top < 105 && rect.left < 220 && rect.width < 230 && rect.height < 100;
|
|
871
|
-
if (isTopLeft && (hasShortIdentity || hasEasyLink) && hasToggle) hideNativeTopLeftGhost(child);
|
|
872
|
-
});
|
|
873
|
-
|
|
874
|
-
// Restore/verify the correct large EOS identity after cleanup.
|
|
875
|
-
const toolbar = document.querySelector('#root > .MuiPaper-root > .MuiAppBar-root .MuiToolbar-root, header .MuiToolbar-root, .MuiAppBar-root .MuiToolbar-root');
|
|
876
|
-
if (toolbar) ensureBrandBadge(toolbar);
|
|
877
|
-
});
|
|
878
|
-
|
|
879
789
|
const ensureLogoutButton = () => {
|
|
880
790
|
// v14: the custom EOS logout button remains disabled/removed.
|
|
881
791
|
// The visible native logout menu item is hidden too because it caused broken redirects.
|
|
@@ -910,39 +820,6 @@
|
|
|
910
820
|
});
|
|
911
821
|
});
|
|
912
822
|
|
|
913
|
-
const hideNativeDrawerHeaderElement = header => safe(() => {
|
|
914
|
-
if (!header || header.closest?.('.eos-brand-badge, .eos-top-toolbar')) return;
|
|
915
|
-
header.classList.add(
|
|
916
|
-
'eos-native-drawer-header',
|
|
917
|
-
'eos-nav-toggle-shell',
|
|
918
|
-
'eos-native-drawer-header-hidden',
|
|
919
|
-
);
|
|
920
|
-
header.dataset.eosNativeDrawerHeaderHidden = 'true';
|
|
921
|
-
header.setAttribute('aria-hidden', 'true');
|
|
922
|
-
header.setAttribute('inert', '');
|
|
923
|
-
header.querySelectorAll('button, a, [role="button"], input, select, textarea').forEach(control => {
|
|
924
|
-
control.setAttribute('tabindex', '-1');
|
|
925
|
-
control.setAttribute('aria-hidden', 'true');
|
|
926
|
-
});
|
|
927
|
-
if (header.style) {
|
|
928
|
-
header.style.setProperty('display', 'none', 'important');
|
|
929
|
-
header.style.setProperty('visibility', 'hidden', 'important');
|
|
930
|
-
header.style.setProperty('opacity', '0', 'important');
|
|
931
|
-
header.style.setProperty('pointer-events', 'none', 'important');
|
|
932
|
-
header.style.setProperty('width', '0', 'important');
|
|
933
|
-
header.style.setProperty('height', '0', 'important');
|
|
934
|
-
header.style.setProperty('overflow', 'hidden', 'important');
|
|
935
|
-
header.style.setProperty('margin', '0', 'important');
|
|
936
|
-
header.style.setProperty('padding', '0', 'important');
|
|
937
|
-
}
|
|
938
|
-
});
|
|
939
|
-
|
|
940
|
-
const getDirectDrawerChild = (drawer, node) => {
|
|
941
|
-
let current = node;
|
|
942
|
-
while (current?.parentElement && current.parentElement !== drawer) current = current.parentElement;
|
|
943
|
-
return current?.parentElement === drawer ? current : null;
|
|
944
|
-
};
|
|
945
|
-
|
|
946
823
|
const patchDrawerHeader = drawer => safe(() => {
|
|
947
824
|
if (!drawer) return;
|
|
948
825
|
drawer.classList.add('eos-drawer');
|
|
@@ -950,27 +827,50 @@
|
|
|
950
827
|
|
|
951
828
|
const directChildren = Array.from(drawer.children).filter(el => el.nodeType === 1);
|
|
952
829
|
const isListLike = el => el.classList?.contains('MuiList-root') || el.querySelector?.('.MuiListItemButton-root');
|
|
953
|
-
|
|
954
|
-
// Exact upstream Drawer.getHeader() fingerprint: its identity link points to /#easy
|
|
955
|
-
// and the same direct drawer child contains the native chevron IconButton.
|
|
956
|
-
const easyLink = drawer.querySelector('a[href="/#easy"], a[href$="#easy"], a[href*="/#easy"]');
|
|
957
|
-
let header = getDirectDrawerChild(drawer, easyLink);
|
|
958
|
-
|
|
959
|
-
if (!header || !header.querySelector?.('button, .MuiIconButton-root, [role="button"]')) {
|
|
960
|
-
header = drawer.querySelector(':scope > .eos-native-drawer-header');
|
|
961
|
-
}
|
|
830
|
+
let header = drawer.querySelector(':scope > .eos-native-drawer-header');
|
|
962
831
|
if (!header) {
|
|
963
|
-
header = directChildren.find(el =>
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
832
|
+
header = directChildren.find(el => !isListLike(el) && el.querySelector && el.querySelector('button') && (el.querySelector('img') || el.querySelector('.MuiAvatar-root') || el.querySelector('a')))
|
|
833
|
+
|| directChildren.find(el => !isListLike(el) && el.querySelector && (el.querySelector('button') || el.querySelector('img') || el.querySelector('.MuiAvatar-root')));
|
|
834
|
+
}
|
|
835
|
+
if (header) {
|
|
836
|
+
header.classList.add('eos-native-drawer-header', 'eos-nav-toggle-shell');
|
|
837
|
+
const toggleButton = header.querySelector('button, .MuiIconButton-root, [role="button"]');
|
|
838
|
+
if (toggleButton && !toggleButton.dataset.eosNavCompactToggle) {
|
|
839
|
+
toggleButton.dataset.eosNavCompactToggle = 'true';
|
|
840
|
+
toggleButton.classList.add('eos-nav-compact-toggle');
|
|
841
|
+
toggleButton.setAttribute('title', 'Navigation kompakt/normal umschalten');
|
|
842
|
+
toggleButton.setAttribute('aria-label', 'Navigation kompakt/normal umschalten');
|
|
843
|
+
const toggleCompact = event => {
|
|
844
|
+
event.preventDefault();
|
|
845
|
+
event.stopPropagation();
|
|
846
|
+
if (event.stopImmediatePropagation) event.stopImmediatePropagation();
|
|
847
|
+
const compact = !document.documentElement.classList.contains('eos-nav-compact');
|
|
848
|
+
document.documentElement.classList.toggle('eos-nav-compact', compact);
|
|
849
|
+
safe(() => localStorage.setItem('nexowatt:eosNavCompact', compact ? '1' : '0'));
|
|
850
|
+
toggleButton.setAttribute('aria-pressed', compact ? 'true' : 'false');
|
|
851
|
+
};
|
|
852
|
+
toggleButton.addEventListener('click', toggleCompact, true);
|
|
853
|
+
toggleButton.addEventListener('keydown', event => {
|
|
854
|
+
if (event.key === 'Enter' || event.key === ' ') toggleCompact(event);
|
|
855
|
+
}, true);
|
|
856
|
+
}
|
|
857
|
+
header.querySelectorAll('a,img,.MuiAvatar-root,.MuiAvatar-img,.eos-native-title').forEach(el => {
|
|
858
|
+
if (!el.closest?.('button')) el.classList.add('eos-nav-toggle-decor-hidden');
|
|
970
859
|
});
|
|
860
|
+
const img = header.querySelector('img');
|
|
861
|
+
if (img) patchImage(img);
|
|
862
|
+
const avatarImg = header.querySelector('.MuiAvatar-img');
|
|
863
|
+
if (avatarImg) patchImage(avatarImg);
|
|
864
|
+
const logoArea = header.querySelector('a')?.parentElement || header.firstElementChild || header;
|
|
865
|
+
if (logoArea && !logoArea.querySelector('.eos-native-title')) {
|
|
866
|
+
const title = document.createElement('span');
|
|
867
|
+
title.className = 'eos-native-title';
|
|
868
|
+
title.innerHTML = `<strong>${BRAND}</strong><small>${EOS_MEANING}</small>`;
|
|
869
|
+
const link = logoArea.querySelector('a');
|
|
870
|
+
if (link && link.nextSibling) logoArea.insertBefore(title, link.nextSibling);
|
|
871
|
+
else logoArea.appendChild(title);
|
|
872
|
+
}
|
|
971
873
|
}
|
|
972
|
-
if (header) hideNativeDrawerHeaderElement(header);
|
|
973
|
-
|
|
974
874
|
const list = drawer.querySelector('.MuiList-root');
|
|
975
875
|
if (list) {
|
|
976
876
|
list.classList.add('eos-scroll-nav');
|
|
@@ -978,15 +878,72 @@
|
|
|
978
878
|
}
|
|
979
879
|
});
|
|
980
880
|
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
881
|
+
|
|
882
|
+
const removeSmallTopLeftNativeNexoWattTab = () => safe(() => {
|
|
883
|
+
if (!window.matchMedia?.('(min-width: 901px)').matches) return;
|
|
884
|
+
|
|
885
|
+
const primary = document.querySelector('.eos-brand-badge, .eos-primary-brand');
|
|
886
|
+
const isPrimary = element => !!element && (
|
|
887
|
+
element === primary ||
|
|
888
|
+
element.matches?.('.eos-brand-badge, .eos-primary-brand') ||
|
|
889
|
+
element.closest?.('.eos-brand-badge, .eos-primary-brand') ||
|
|
890
|
+
element.querySelector?.('.eos-brand-badge, .eos-primary-brand')
|
|
891
|
+
);
|
|
892
|
+
const hasShortNexoWattIdentity = element => {
|
|
893
|
+
if (!element || isPrimary(element)) return false;
|
|
894
|
+
const text = normalize(element.textContent || '');
|
|
895
|
+
if (/energy operation system|nexowatt eos/.test(text)) return false;
|
|
896
|
+
const image = element.querySelector?.('img, .MuiAvatar-img, .MuiAvatar-root');
|
|
897
|
+
const imageText = normalize(`${image?.getAttribute?.('alt') || ''} ${image?.getAttribute?.('src') || ''}`);
|
|
898
|
+
return /nexowatt/.test(text) || /nexowatt/.test(imageText);
|
|
899
|
+
};
|
|
900
|
+
const hide = element => {
|
|
901
|
+
if (!element || isPrimary(element)) return;
|
|
902
|
+
element.classList.add('eos-small-top-left-native-tab-hidden');
|
|
903
|
+
element.setAttribute('aria-hidden', 'true');
|
|
904
|
+
element.setAttribute('inert', '');
|
|
905
|
+
element.querySelectorAll?.('button, a, [role="button"]').forEach(control => {
|
|
906
|
+
control.setAttribute('tabindex', '-1');
|
|
907
|
+
control.setAttribute('aria-hidden', 'true');
|
|
989
908
|
});
|
|
909
|
+
if (element.style) {
|
|
910
|
+
for (const [name, value] of Object.entries({
|
|
911
|
+
display: 'none', visibility: 'hidden', opacity: '0', pointerEvents: 'none',
|
|
912
|
+
width: '0', minWidth: '0', maxWidth: '0', height: '0', minHeight: '0', maxHeight: '0',
|
|
913
|
+
margin: '0', padding: '0', overflow: 'hidden', flex: '0 0 0', border: '0', boxShadow: 'none',
|
|
914
|
+
})) element.style.setProperty(name.replace(/[A-Z]/g, char => `-${char.toLowerCase()}`), value, 'important');
|
|
915
|
+
}
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
const inspect = seed => {
|
|
919
|
+
if (!seed || isPrimary(seed)) return;
|
|
920
|
+
let element = seed.nodeType === 1 ? seed : seed.parentElement;
|
|
921
|
+
let best = null;
|
|
922
|
+
while (element && element !== document.body && element !== document.documentElement) {
|
|
923
|
+
if (isPrimary(element)) return;
|
|
924
|
+
const rect = element.getBoundingClientRect?.();
|
|
925
|
+
if (rect && rect.top >= -4 && rect.top <= 52 && rect.left >= -4 && rect.left <= 185 &&
|
|
926
|
+
rect.width >= 45 && rect.width <= 190 && rect.height >= 16 && rect.height <= 58 &&
|
|
927
|
+
hasShortNexoWattIdentity(element)) {
|
|
928
|
+
best = element;
|
|
929
|
+
}
|
|
930
|
+
if (rect && (rect.width > 220 || rect.height > 75 || rect.left > 200 || rect.top > 70)) break;
|
|
931
|
+
element = element.parentElement;
|
|
932
|
+
}
|
|
933
|
+
if (best) hide(best);
|
|
934
|
+
};
|
|
935
|
+
|
|
936
|
+
// Known native locations plus a coordinate fallback matching the compact tab.
|
|
937
|
+
document.querySelectorAll([
|
|
938
|
+
'.MuiDrawer-paper a[href*="#easy"]',
|
|
939
|
+
'.MuiSwipeableDrawer-paper a[href*="#easy"]',
|
|
940
|
+
'.MuiAppBar-root a[href*="#easy"]',
|
|
941
|
+
'.MuiToolbar-root a[href*="#easy"]',
|
|
942
|
+
'img[alt*="NexoWatt" i]',
|
|
943
|
+
'img[src*="nexowatt" i]',
|
|
944
|
+
].join(',')).forEach(inspect);
|
|
945
|
+
[[8, 18], [45, 22], [90, 22], [135, 22], [80, 36]].forEach(([x, y]) => {
|
|
946
|
+
document.elementsFromPoint?.(x, y).forEach(inspect);
|
|
990
947
|
});
|
|
991
948
|
});
|
|
992
949
|
|
|
@@ -1005,8 +962,8 @@
|
|
|
1005
962
|
toolbar.classList.add('eos-top-toolbar');
|
|
1006
963
|
ensureBrandBadge(toolbar);
|
|
1007
964
|
}
|
|
1008
|
-
|
|
1009
|
-
|
|
965
|
+
document.querySelectorAll('.MuiDrawer-paper, .MuiSwipeableDrawer-paper').forEach(patchDrawerHeader);
|
|
966
|
+
removeSmallTopLeftNativeNexoWattTab();
|
|
1010
967
|
hideNativeLogoutNav();
|
|
1011
968
|
releaseNotificationControls();
|
|
1012
969
|
ensurePopupCompatibility();
|