iobroker.eos-admin 7.9.68 → 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 -1
- package/adminWww/assets/bootstrap-COulQZax-v55.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v56.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v57.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v58.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v59.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v60.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v61.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v67.js +1 -1
- package/adminWww/assets/bootstrap-COulQZax-v68.js +1 -317
- package/adminWww/assets/bootstrap-COulQZax-v69.js +317 -0
- package/adminWww/assets/bootstrap-COulQZax.js +1 -1
- 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 -1
- package/adminWww/assets/index-CQZugZ1z-v68.js +1 -2
- package/adminWww/assets/index-CQZugZ1z-v69.js +2 -0
- package/adminWww/assets/index-CQZugZ1z.js +1 -1
- package/adminWww/css/eos-branding.css +3 -141
- package/adminWww/index.html +11 -10
- package/adminWww/js/eos-branding.js +114 -172
- 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 +14 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./bootstrap-COulQZax-
|
|
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 +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-v68.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,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,11 +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 {
|
|
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 {
|
|
3825
3823
|
display: none !important;
|
|
3826
3824
|
visibility: hidden !important;
|
|
3827
3825
|
opacity: 0 !important;
|
|
@@ -3838,140 +3836,4 @@ html.eos-app .eos-native-drawer-header > div:first-child {
|
|
|
3838
3836
|
flex: 0 0 0 !important;
|
|
3839
3837
|
border: 0 !important;
|
|
3840
3838
|
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 {
|
|
3847
|
-
display: none !important;
|
|
3848
|
-
visibility: hidden !important;
|
|
3849
|
-
opacity: 0 !important;
|
|
3850
|
-
pointer-events: none !important;
|
|
3851
|
-
width: 0 !important;
|
|
3852
|
-
min-width: 0 !important;
|
|
3853
|
-
max-width: 0 !important;
|
|
3854
|
-
height: 0 !important;
|
|
3855
|
-
min-height: 0 !important;
|
|
3856
|
-
max-height: 0 !important;
|
|
3857
|
-
margin: 0 !important;
|
|
3858
|
-
padding: 0 !important;
|
|
3859
|
-
overflow: hidden !important;
|
|
3860
|
-
flex: 0 0 0 !important;
|
|
3861
|
-
border: 0 !important;
|
|
3862
|
-
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
|
-
}
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
/* === NexoWatt EOS v7.9.68: exact native desktop toolbar ghost removal ===
|
|
3954
|
-
The unwanted pill consists of two independent App.renderToolbar siblings:
|
|
3955
|
-
the native MenuIcon button and the compact /#easy identity block. The large
|
|
3956
|
-
.eos-primary-brand is deliberately excluded and remains visible. */
|
|
3957
|
-
@media (min-width: 901px) {
|
|
3958
|
-
html.eos-app .eos-top-toolbar > button:has(svg[data-testid="MenuIcon"]),
|
|
3959
|
-
html.eos-app .eos-top-toolbar > .MuiIconButton-root:has(svg[data-testid="MenuIcon"]),
|
|
3960
|
-
html.eos-app .eos-top-toolbar > *:not(.eos-brand-badge):not(.eos-primary-brand):has(a[href="/#easy"]),
|
|
3961
|
-
html.eos-app .eos-top-toolbar > *:not(.eos-brand-badge):not(.eos-primary-brand):has(a[href$="#easy"]) {
|
|
3962
|
-
display: none !important;
|
|
3963
|
-
visibility: hidden !important;
|
|
3964
|
-
opacity: 0 !important;
|
|
3965
|
-
pointer-events: none !important;
|
|
3966
|
-
width: 0 !important;
|
|
3967
|
-
min-width: 0 !important;
|
|
3968
|
-
max-width: 0 !important;
|
|
3969
|
-
height: 0 !important;
|
|
3970
|
-
min-height: 0 !important;
|
|
3971
|
-
max-height: 0 !important;
|
|
3972
|
-
flex: 0 0 0 !important;
|
|
3973
|
-
margin: 0 !important;
|
|
3974
|
-
padding: 0 !important;
|
|
3975
|
-
overflow: hidden !important;
|
|
3976
|
-
}
|
|
3977
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,96 +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
|
-
// Exact source of the unwanted pill in App.renderToolbar(): two sibling
|
|
848
|
-
// controls are visually combined by the EOS header CSS. Remove them
|
|
849
|
-
// independently; never touch the primary .eos-brand-badge.
|
|
850
|
-
const toolbar = document.querySelector(
|
|
851
|
-
'#root > .MuiPaper-root > .MuiAppBar-root .MuiToolbar-root, header .MuiToolbar-root, .MuiAppBar-root .MuiToolbar-root',
|
|
852
|
-
);
|
|
853
|
-
if (toolbar) {
|
|
854
|
-
Array.from(toolbar.children || []).forEach(child => {
|
|
855
|
-
if (!child?.querySelector) return;
|
|
856
|
-
if (
|
|
857
|
-
child.matches?.('.eos-brand-badge, .eos-primary-brand') ||
|
|
858
|
-
child.querySelector?.('.eos-brand-badge, .eos-primary-brand')
|
|
859
|
-
) return;
|
|
860
|
-
|
|
861
|
-
// Native compact identity block: contains /#easy and the short
|
|
862
|
-
// NexoWatt image. It is a separate sibling from the menu button.
|
|
863
|
-
if (child.querySelector('a[href="/#easy"], a[href$="#easy"], a[href*="/#easy"]')) {
|
|
864
|
-
hideNativeTopLeftGhost(child);
|
|
865
|
-
return;
|
|
866
|
-
}
|
|
867
|
-
|
|
868
|
-
// Native desktop MenuIcon button. MUI exposes data-testid in
|
|
869
|
-
// normal builds; the SVG path check is a fallback for stripped builds.
|
|
870
|
-
const menuIcon = child.querySelector('svg[data-testid="MenuIcon"]');
|
|
871
|
-
const menuPath = child.querySelector('svg path')?.getAttribute?.('d') || '';
|
|
872
|
-
const isMenuPath = /M3\s*18h18v-?2H3v2|M3\s*6h18v2H3z/.test(menuPath.replace(/,/g, ' '));
|
|
873
|
-
if ((child.matches('button, .MuiIconButton-root') || child.querySelector('button, .MuiIconButton-root')) && (menuIcon || isMenuPath)) {
|
|
874
|
-
hideNativeTopLeftGhost(child);
|
|
875
|
-
}
|
|
876
|
-
});
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
// Compatibility fallback for an old cached Drawer.getHeader() DOM.
|
|
880
|
-
document.querySelectorAll('.MuiDrawer-paper, .MuiSwipeableDrawer-paper').forEach(drawer => {
|
|
881
|
-
Array.from(drawer.children || []).forEach(child => {
|
|
882
|
-
if (!child?.querySelector) return;
|
|
883
|
-
const hasEasyLink = !!child.querySelector('a[href="/#easy"], a[href$="#easy"], a[href*="/#easy"]');
|
|
884
|
-
const hasChevron = !!child.querySelector('svg[data-testid="ChevronLeftIcon"], svg[data-testid="ChevronRightIcon"]');
|
|
885
|
-
const isNavigationList = child.classList?.contains('MuiList-root') || !!child.querySelector('.MuiListItemButton-root');
|
|
886
|
-
if (hasEasyLink && hasChevron && !isNavigationList) hideNativeTopLeftGhost(child);
|
|
887
|
-
});
|
|
888
|
-
});
|
|
889
|
-
|
|
890
|
-
// Restore/verify the wanted large EOS identity after cleanup.
|
|
891
|
-
if (toolbar) ensureBrandBadge(toolbar);
|
|
892
|
-
});
|
|
893
|
-
|
|
894
789
|
const ensureLogoutButton = () => {
|
|
895
790
|
// v14: the custom EOS logout button remains disabled/removed.
|
|
896
791
|
// The visible native logout menu item is hidden too because it caused broken redirects.
|
|
@@ -925,39 +820,6 @@
|
|
|
925
820
|
});
|
|
926
821
|
});
|
|
927
822
|
|
|
928
|
-
const hideNativeDrawerHeaderElement = header => safe(() => {
|
|
929
|
-
if (!header || header.closest?.('.eos-brand-badge, .eos-top-toolbar')) return;
|
|
930
|
-
header.classList.add(
|
|
931
|
-
'eos-native-drawer-header',
|
|
932
|
-
'eos-nav-toggle-shell',
|
|
933
|
-
'eos-native-drawer-header-hidden',
|
|
934
|
-
);
|
|
935
|
-
header.dataset.eosNativeDrawerHeaderHidden = 'true';
|
|
936
|
-
header.setAttribute('aria-hidden', 'true');
|
|
937
|
-
header.setAttribute('inert', '');
|
|
938
|
-
header.querySelectorAll('button, a, [role="button"], input, select, textarea').forEach(control => {
|
|
939
|
-
control.setAttribute('tabindex', '-1');
|
|
940
|
-
control.setAttribute('aria-hidden', 'true');
|
|
941
|
-
});
|
|
942
|
-
if (header.style) {
|
|
943
|
-
header.style.setProperty('display', 'none', 'important');
|
|
944
|
-
header.style.setProperty('visibility', 'hidden', 'important');
|
|
945
|
-
header.style.setProperty('opacity', '0', 'important');
|
|
946
|
-
header.style.setProperty('pointer-events', 'none', 'important');
|
|
947
|
-
header.style.setProperty('width', '0', 'important');
|
|
948
|
-
header.style.setProperty('height', '0', 'important');
|
|
949
|
-
header.style.setProperty('overflow', 'hidden', 'important');
|
|
950
|
-
header.style.setProperty('margin', '0', 'important');
|
|
951
|
-
header.style.setProperty('padding', '0', 'important');
|
|
952
|
-
}
|
|
953
|
-
});
|
|
954
|
-
|
|
955
|
-
const getDirectDrawerChild = (drawer, node) => {
|
|
956
|
-
let current = node;
|
|
957
|
-
while (current?.parentElement && current.parentElement !== drawer) current = current.parentElement;
|
|
958
|
-
return current?.parentElement === drawer ? current : null;
|
|
959
|
-
};
|
|
960
|
-
|
|
961
823
|
const patchDrawerHeader = drawer => safe(() => {
|
|
962
824
|
if (!drawer) return;
|
|
963
825
|
drawer.classList.add('eos-drawer');
|
|
@@ -965,27 +827,50 @@
|
|
|
965
827
|
|
|
966
828
|
const directChildren = Array.from(drawer.children).filter(el => el.nodeType === 1);
|
|
967
829
|
const isListLike = el => el.classList?.contains('MuiList-root') || el.querySelector?.('.MuiListItemButton-root');
|
|
968
|
-
|
|
969
|
-
// Exact upstream Drawer.getHeader() fingerprint: its identity link points to /#easy
|
|
970
|
-
// and the same direct drawer child contains the native chevron IconButton.
|
|
971
|
-
const easyLink = drawer.querySelector('a[href="/#easy"], a[href$="#easy"], a[href*="/#easy"]');
|
|
972
|
-
let header = getDirectDrawerChild(drawer, easyLink);
|
|
973
|
-
|
|
974
|
-
if (!header || !header.querySelector?.('button, .MuiIconButton-root, [role="button"]')) {
|
|
975
|
-
header = drawer.querySelector(':scope > .eos-native-drawer-header');
|
|
976
|
-
}
|
|
830
|
+
let header = drawer.querySelector(':scope > .eos-native-drawer-header');
|
|
977
831
|
if (!header) {
|
|
978
|
-
header = directChildren.find(el =>
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
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');
|
|
985
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
|
+
}
|
|
986
873
|
}
|
|
987
|
-
if (header) hideNativeDrawerHeaderElement(header);
|
|
988
|
-
|
|
989
874
|
const list = drawer.querySelector('.MuiList-root');
|
|
990
875
|
if (list) {
|
|
991
876
|
list.classList.add('eos-scroll-nav');
|
|
@@ -993,15 +878,72 @@
|
|
|
993
878
|
}
|
|
994
879
|
});
|
|
995
880
|
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
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');
|
|
1004
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);
|
|
1005
947
|
});
|
|
1006
948
|
});
|
|
1007
949
|
|
|
@@ -1020,8 +962,8 @@
|
|
|
1020
962
|
toolbar.classList.add('eos-top-toolbar');
|
|
1021
963
|
ensureBrandBadge(toolbar);
|
|
1022
964
|
}
|
|
1023
|
-
|
|
1024
|
-
|
|
965
|
+
document.querySelectorAll('.MuiDrawer-paper, .MuiSwipeableDrawer-paper').forEach(patchDrawerHeader);
|
|
966
|
+
removeSmallTopLeftNativeNexoWattTab();
|
|
1025
967
|
hideNativeLogoutNav();
|
|
1026
968
|
releaseNotificationControls();
|
|
1027
969
|
ensurePopupCompatibility();
|