iobroker.eos-admin 7.10.7 → 7.10.8
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/NEXOWATT_EOS_BUILD_INFO.json +19 -18
- package/NEXOWATT_EOS_PREBUILT_MANIFEST.json +23 -22
- package/adminWww/css/nexowatt-native-shell.css +332 -0
- package/adminWww/index.html +14 -14
- package/adminWww/js/eos-role-bootstrap.js +4 -3
- package/adminWww/js/eos-role-ui.js +11 -8
- package/adminWww/js/nexowatt-native-shell.js +104 -2
- package/adminWww/static/js/{nexowatt-stable-v7107.js → nexowatt-stable-v7108.js} +2 -2
- package/io-package.json +5 -5
- package/package.json +7 -5
- package/tools/nexowatt-installer-ems-selftest.cjs +1 -1
- package/tools/nexowatt-role-security-selftest.cjs +4 -4
- package/tools/nexowatt-stable-v7103-selftest.cjs +2 -2
- package/tools/nexowatt-user-area-selftest.cjs +1 -1
- package/tools/nexowatt-v7108-ui-foundation-selftest.cjs +64 -0
- package/tools/nexowatt-validate-package.cjs +1 -1
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.10.
|
|
2
|
+
"version": "7.10.8",
|
|
3
3
|
"channel": "stable-latest",
|
|
4
|
-
"baseFrontend": "validated v84 runtime with
|
|
4
|
+
"baseFrontend": "validated v84 runtime with modern Services, Datapoints and System Logs surfaces",
|
|
5
5
|
"runtimeEntry": "v84",
|
|
6
|
-
"releaseType": "stable-
|
|
7
|
-
"release": "stable-
|
|
8
|
-
"label": "v7-10-
|
|
6
|
+
"releaseType": "stable-ui-foundation",
|
|
7
|
+
"release": "stable-ui-foundation",
|
|
8
|
+
"label": "v7-10-8",
|
|
9
9
|
"notes": [
|
|
10
|
-
"Administrator
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
10
|
+
"Administrator, Installer and End User role behavior from 7.10.7 remains unchanged.",
|
|
11
|
+
"Services, Datapoints and System Logs use modern NexoWatt EOS presentation layers.",
|
|
12
|
+
"Structure is hidden and direct tab-enums navigation is redirected for every role.",
|
|
13
|
+
"Installer service rows expand and remain operable without opening Basic Settings."
|
|
14
14
|
],
|
|
15
15
|
"changes": [
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
16
|
+
"Restricted the Basic Settings click guard to the actual top-header system settings control.",
|
|
17
|
+
"Added modern route headers and technical surface styling for Services, Datapoints and System Logs.",
|
|
18
|
+
"Added log severity accents without changing native log behavior.",
|
|
19
|
+
"Removed Structure from the native and role-filtered navigation for all roles.",
|
|
20
|
+
"Raised release and browser cache identity to 7.10.8 / 7108."
|
|
20
21
|
],
|
|
21
|
-
"brandingCacheVersion":
|
|
22
|
-
"shellCacheVersion":
|
|
23
|
-
"nativeShellVersion":
|
|
24
|
-
"shellCacheTag": "
|
|
25
|
-
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-
|
|
22
|
+
"brandingCacheVersion": 7108,
|
|
23
|
+
"shellCacheVersion": 7108,
|
|
24
|
+
"nativeShellVersion": 7108,
|
|
25
|
+
"shellCacheTag": "7108",
|
|
26
|
+
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-8.json",
|
|
26
27
|
"autoUpdateCacheVersion": 7103,
|
|
27
28
|
"autoUpdateCacheTag": "7103"
|
|
28
29
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": 1,
|
|
3
3
|
"package": "iobroker.eos-admin",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.8",
|
|
5
5
|
"algorithm": "sha256",
|
|
6
|
-
"fileCount":
|
|
6
|
+
"fileCount": 1392,
|
|
7
7
|
"trackedRoots": [
|
|
8
8
|
"src",
|
|
9
9
|
"build",
|
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
"adminWww/css/images/marker-icon.png": "574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437",
|
|
528
528
|
"adminWww/css/images/marker-shadow.png": "264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da",
|
|
529
529
|
"adminWww/css/leaflet.css": "7a30116fa3852c0ff7e556bb2e80b0dc89c5bca8e725bbe3948af1746ca55103",
|
|
530
|
-
"adminWww/css/nexowatt-native-shell.css": "
|
|
530
|
+
"adminWww/css/nexowatt-native-shell.css": "4583af99c9d87b8ff860f9026b715a6c2a7517234bde55153e97eff6223f2b7f",
|
|
531
531
|
"adminWww/favicon.ico": "3a357e949ab04b9f7bb1539764419ade50d1b4fc7caa51b8f33202a3f57a1f74",
|
|
532
532
|
"adminWww/img/admin.png": "7f93d65d9e1d795bf127e1af31d88d7468ccb70b026f98351d0abbc3f3bd4df6",
|
|
533
533
|
"adminWww/img/admin.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
|
|
@@ -552,7 +552,7 @@
|
|
|
552
552
|
"adminWww/img/le.png": "ef5ebb7112926f646e781a326b639f56888fafe0891b9b000178091b4f8ed9dd",
|
|
553
553
|
"adminWww/img/logo.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
|
|
554
554
|
"adminWww/img/no-image.svg": "25fc382f4ad3a36f8a637cd966b9107368e1f11906d706102ad5f37db6f57f34",
|
|
555
|
-
"adminWww/index.html": "
|
|
555
|
+
"adminWww/index.html": "cdc67a669d04bc6e548c29e4a222695ef712710a8f01a31cbd01cf3f483c51a6",
|
|
556
556
|
"adminWww/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
|
|
557
557
|
"adminWww/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
|
|
558
558
|
"adminWww/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
|
|
@@ -563,11 +563,11 @@
|
|
|
563
563
|
"adminWww/js/eos-manual-write-policy.js": "3c93487146b4fd5f681aa45a6bb137d9a91c3fa145ebfa94ec5ccb6b15498e8b",
|
|
564
564
|
"adminWww/js/eos-native-security.js": "33098b98164623fc133314658bca2f622d19971795dd8bd3c90aca68598aab90",
|
|
565
565
|
"adminWww/js/eos-policy-client.js": "5ffd32270307137fbec69a9b9bea57ca1d2e27ede987ce1eb37ff1df6677d8d2",
|
|
566
|
-
"adminWww/js/eos-role-bootstrap.js": "
|
|
567
|
-
"adminWww/js/eos-role-ui.js": "
|
|
566
|
+
"adminWww/js/eos-role-bootstrap.js": "97a4f53e4041f1a2d6581b8490659c57cdd3649662f86188d1e07dcc75508cea",
|
|
567
|
+
"adminWww/js/eos-role-ui.js": "8d340d48d92c80f71d7c520fd295c40d8e7056505a32d897bf1690ed625a5191",
|
|
568
568
|
"adminWww/js/license.js": "13798e577c82d7a5549b07a244b8b8453ef43e53fc7789f565c35b56e6654007",
|
|
569
569
|
"adminWww/js/listHeader.js": "ed336a68a64e16a062d1af2269428fd20a08a4b695f17635f55a18bc1ef693a4",
|
|
570
|
-
"adminWww/js/nexowatt-native-shell.js": "
|
|
570
|
+
"adminWww/js/nexowatt-native-shell.js": "8348747f19e56cb840b482152c55eb6a479411f71a764bfc11293ba1a1ca5596",
|
|
571
571
|
"adminWww/js/tableEditor.js": "5508044619fec70071895d0ae3ab6ff75dd03bd936e7b133f98d098d4245ec20",
|
|
572
572
|
"adminWww/js/translate.js": "264442c0f42a10148057125532bf55b7672c4cc051c28e7cbb922984a558f8d3",
|
|
573
573
|
"adminWww/js/treeTable.js": "8abde0b7880a89f6f927a87bb041945dea1502f51bc9870d8ba0be9d3dd9eed8",
|
|
@@ -747,7 +747,7 @@
|
|
|
747
747
|
"adminWww/static/js/html.js": "159b7192459d73d92761dab8c4d48e138e94e4d8e7bf99004bac257e403a0c3b",
|
|
748
748
|
"adminWww/static/js/javascript.js": "6287a6b820c8707a0cd7b9e4545bcb023a8b9228569cfd21be6635d1409aabf4",
|
|
749
749
|
"adminWww/static/js/nexowatt-stable-login.js": "ff0c6d4dc2086f3ab4be8ef455e5891a2ccb5f534bddfacbef2f5cd6ce65489e",
|
|
750
|
-
"adminWww/static/js/nexowatt-stable-
|
|
750
|
+
"adminWww/static/js/nexowatt-stable-v7108.js": "0e34e89d3a42c4b000dde42302c61f902d281e7965dfa1b6cafa74e2230f6885",
|
|
751
751
|
"adminWww/static/js/worker-css.js": "83c767cacd6b190e2f083b139cb3f124d1b560afbd7a6dbb74bf5539aa4cadee",
|
|
752
752
|
"adminWww/static/js/worker-html.js": "661d2448443c0089fba31d2829d77761a5fc042035c38433eff0e20707f17457",
|
|
753
753
|
"adminWww/static/js/worker-javascript.js": "73fcf007e2d19eacba8f365719ee92d14345505b03f9cf66e6338aef02fccd21",
|
|
@@ -817,7 +817,7 @@
|
|
|
817
817
|
"src-admin/public/css/images/marker-icon.png": "574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437",
|
|
818
818
|
"src-admin/public/css/images/marker-shadow.png": "264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da",
|
|
819
819
|
"src-admin/public/css/leaflet.css": "7a30116fa3852c0ff7e556bb2e80b0dc89c5bca8e725bbe3948af1746ca55103",
|
|
820
|
-
"src-admin/public/css/nexowatt-native-shell.css": "
|
|
820
|
+
"src-admin/public/css/nexowatt-native-shell.css": "4583af99c9d87b8ff860f9026b715a6c2a7517234bde55153e97eff6223f2b7f",
|
|
821
821
|
"src-admin/public/favicon.ico": "3a357e949ab04b9f7bb1539764419ade50d1b4fc7caa51b8f33202a3f57a1f74",
|
|
822
822
|
"src-admin/public/img/admin.png": "f4c004482fa2623bea6f7e83df40fdda2e07334f61d5ae27eb0aba186c10ca97",
|
|
823
823
|
"src-admin/public/img/admin.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
|
|
@@ -850,11 +850,11 @@
|
|
|
850
850
|
"src-admin/public/js/eos-manual-write-policy.js": "3c93487146b4fd5f681aa45a6bb137d9a91c3fa145ebfa94ec5ccb6b15498e8b",
|
|
851
851
|
"src-admin/public/js/eos-native-security.js": "33098b98164623fc133314658bca2f622d19971795dd8bd3c90aca68598aab90",
|
|
852
852
|
"src-admin/public/js/eos-policy-client.js": "5ffd32270307137fbec69a9b9bea57ca1d2e27ede987ce1eb37ff1df6677d8d2",
|
|
853
|
-
"src-admin/public/js/eos-role-bootstrap.js": "
|
|
854
|
-
"src-admin/public/js/eos-role-ui.js": "
|
|
853
|
+
"src-admin/public/js/eos-role-bootstrap.js": "97a4f53e4041f1a2d6581b8490659c57cdd3649662f86188d1e07dcc75508cea",
|
|
854
|
+
"src-admin/public/js/eos-role-ui.js": "8d340d48d92c80f71d7c520fd295c40d8e7056505a32d897bf1690ed625a5191",
|
|
855
855
|
"src-admin/public/js/license.js": "13798e577c82d7a5549b07a244b8b8453ef43e53fc7789f565c35b56e6654007",
|
|
856
856
|
"src-admin/public/js/listHeader.js": "ed336a68a64e16a062d1af2269428fd20a08a4b695f17635f55a18bc1ef693a4",
|
|
857
|
-
"src-admin/public/js/nexowatt-native-shell.js": "
|
|
857
|
+
"src-admin/public/js/nexowatt-native-shell.js": "8348747f19e56cb840b482152c55eb6a479411f71a764bfc11293ba1a1ca5596",
|
|
858
858
|
"src-admin/public/js/tableEditor.js": "5508044619fec70071895d0ae3ab6ff75dd03bd936e7b133f98d098d4245ec20",
|
|
859
859
|
"src-admin/public/js/translate.js": "264442c0f42a10148057125532bf55b7672c4cc051c28e7cbb922984a558f8d3",
|
|
860
860
|
"src-admin/public/js/treeTable.js": "8abde0b7880a89f6f927a87bb041945dea1502f51bc9870d8ba0be9d3dd9eed8",
|
|
@@ -975,7 +975,7 @@
|
|
|
975
975
|
"src-admin/public/manifest.json": "15244d5d50f08420fc5d4793e5699e99c7b900b6908cfbc00a7182f4d4db55bd",
|
|
976
976
|
"src-admin/public/robots.txt": "90d24bc3bf698ac1e173739502298ccca72adf1f564fab05f484b8c48d1cadd2",
|
|
977
977
|
"src-admin/public/static/js/nexowatt-stable-login.js": "ff0c6d4dc2086f3ab4be8ef455e5891a2ccb5f534bddfacbef2f5cd6ce65489e",
|
|
978
|
-
"src-admin/public/static/js/nexowatt-stable-
|
|
978
|
+
"src-admin/public/static/js/nexowatt-stable-v7108.js": "0e34e89d3a42c4b000dde42302c61f902d281e7965dfa1b6cafa74e2230f6885",
|
|
979
979
|
"src-admin/src/App.tsx": "8ab367389c604d5face72cc71da49b08021ffa2e566db4d32df9ad98f9fe762a",
|
|
980
980
|
"src-admin/src/Workers/AdaptersWorker.tsx": "3a2cdeb8010598c901df0e3cffcdae913e62e7ac7c84fcadf15cb7f961dc6ed9",
|
|
981
981
|
"src-admin/src/Workers/GenericWorker.tsx": "3b3c6e7856602477c54d1dc085aa23b5cfcac7784cc73710b00622ac04ed5a97",
|
|
@@ -1191,7 +1191,7 @@
|
|
|
1191
1191
|
"src-admin/src/components/CustomPopper.tsx": "07f924ece634d54f1bc5c3d41ffb2702ea89d289c28d98221a5617eaba7cae3d",
|
|
1192
1192
|
"src-admin/src/components/CustomSelectButton.tsx": "1547393f97fba81b13331a3df4457509f239735bad9d17713eeecd48acd420db",
|
|
1193
1193
|
"src-admin/src/components/DragWrapper.tsx": "c417b1cc7786398c1d467d98db10d49e5b81d28ba9a6b0a55f6d9f5b6ad9a035",
|
|
1194
|
-
"src-admin/src/components/Drawer.tsx": "
|
|
1194
|
+
"src-admin/src/components/Drawer.tsx": "5b1bdd38516cce1b84e22e82b4f32da61ce8853c8930da586db413dad6e0a25d",
|
|
1195
1195
|
"src-admin/src/components/DrawerItem.tsx": "41a011ccfb84258b7e113d0ff2c8f3f12f12cc555eb34e5decd474c71f70453a",
|
|
1196
1196
|
"src-admin/src/components/EasyModeCard.tsx": "403e8f47532cf469f42f91a7c40c8f9d9c09f66cc4486177ac49fc5aa230b80c",
|
|
1197
1197
|
"src-admin/src/components/Editor.tsx": "47bc1dd26ab86317d7f65560b10e9611b138be8b0f13c90d78166debcd2ed4ee",
|
|
@@ -1323,7 +1323,7 @@
|
|
|
1323
1323
|
"src-admin/src/tabs/Objects.tsx": "2b87a8a7e771e10e1cce49019c4be62578f10096eee5abd17d2685f5f41cc67c",
|
|
1324
1324
|
"src-admin/src/tabs/Users.tsx": "45ed37e57b66f7e23eb465aef9ad9db55613b40bf44530ab81d6206806de102d",
|
|
1325
1325
|
"src-admin/src/types.d.ts": "3cfac48af5f8416b55b89c0daca78499dbbd402c0b44cc661112b76953ba3344",
|
|
1326
|
-
"src-admin/src/version.json": "
|
|
1326
|
+
"src-admin/src/version.json": "afda0053e179042668b57354a0ad6539455c7cd22c7b44967f9fb94301a86e20",
|
|
1327
1327
|
"src/i18n/de.json": "85d4ecfedf15d78984922b05377063b808ae8c5a75944af323e72a2c3a483d50",
|
|
1328
1328
|
"src/i18n/en.json": "6a0156a1b026903821d395ef2ceef845e90531f323a218f97f5abefaabb46a23",
|
|
1329
1329
|
"src/i18n/es.json": "54369f8044dfa222779849d2f158eb100188a43816d6c42a64575122cb528a30",
|
|
@@ -1375,7 +1375,7 @@
|
|
|
1375
1375
|
"tools/nexowatt-generate-eos-admin-repo-entry.cjs": "a8b55d6001b0ed6d97221448b194748945f2e8382cdaf0b11ea91c63fb517139",
|
|
1376
1376
|
"tools/nexowatt-generate-repo-entry.cjs": "4e98acc7db74546bd942cfa36d57015673c6f1514758494753e7339068f7eb68",
|
|
1377
1377
|
"tools/nexowatt-import-integrity-selftest.cjs": "f46951126a237a6010c3c0949c25e2415ebe9af568d29411d10691951cb3ed87",
|
|
1378
|
-
"tools/nexowatt-installer-ems-selftest.cjs": "
|
|
1378
|
+
"tools/nexowatt-installer-ems-selftest.cjs": "eb0ee98500f180e17f5ec591afd7543518f48390776a2d160fd9ddac255ebc41",
|
|
1379
1379
|
"tools/nexowatt-internal-reserve-selftest.cjs": "f027a2272a4277d65167d68d4ca4428cd0c28a6c6c2b610eda575abd3f2bc90a",
|
|
1380
1380
|
"tools/nexowatt-login-layout-selftest.cjs": "7d4baae82f1d53fc14446b8ef80aaffa39b0b3529821599f4a6e2c27fbc7a7f2",
|
|
1381
1381
|
"tools/nexowatt-manual-write-policy-selftest.cjs": "a41057610972d681120bf35e0321029facc08b098c79da9b131980f80bd3fdce",
|
|
@@ -1392,21 +1392,22 @@
|
|
|
1392
1392
|
"tools/nexowatt-publish-channel-selftest.cjs": "c4efd1104ebe471ce1dc63195f322cffe760af295bf60f13b9766491acd0280e",
|
|
1393
1393
|
"tools/nexowatt-release-defaults-selftest.cjs": "3e3c96ca774200461978c546d1a937cbae18d7f11497ed84dda639c2358f6e16",
|
|
1394
1394
|
"tools/nexowatt-repair-eos-admin-update.cjs": "f28c1999b0f75139e582770ad649d17d11f9e909ac49d13c31be5fa5b36253e3",
|
|
1395
|
-
"tools/nexowatt-role-access-selftest.cjs": "
|
|
1396
|
-
"tools/nexowatt-role-security-selftest.cjs": "
|
|
1395
|
+
"tools/nexowatt-role-access-selftest.cjs": "37ee2410a23a80f676ad4c8763480f1c12414e852ff4072fe381b04b7c245184",
|
|
1396
|
+
"tools/nexowatt-role-security-selftest.cjs": "336153b5c14d4ec5770c403c547cebf5e2520258ee4f20643b67e1e6be22322b",
|
|
1397
1397
|
"tools/nexowatt-runtime-cleanup-selftest.cjs": "f317b09aa0c51ffe7e1b5eaf10c52c886804ec6e8084967cd88e4ebece6ecfb5",
|
|
1398
|
-
"tools/nexowatt-stability-check.cjs": "
|
|
1398
|
+
"tools/nexowatt-stability-check.cjs": "3d35e4540c836a7f20d98cb69ea9b87e9526b99b604b75e598483de1fc3ef97a",
|
|
1399
1399
|
"tools/nexowatt-stable-v7101-selftest.cjs": "817d09861ef29c52a67f64ec5b8f4ad4654ce7e6486eded786bb16f3c773eaf8",
|
|
1400
1400
|
"tools/nexowatt-stable-v7102-selftest.cjs": "75baab5f8069569ad4896e5018f3c5ccbbda2c2297aca5c5146bce94f9cf795d",
|
|
1401
|
-
"tools/nexowatt-stable-v7103-selftest.cjs": "
|
|
1401
|
+
"tools/nexowatt-stable-v7103-selftest.cjs": "1dcb71929ad1274466d748a5b46afef2eca7ced9b434c867ba77e5802bdf1a89",
|
|
1402
1402
|
"tools/nexowatt-stable-v94-selftest.cjs": "5226881b3ad8918c67921ffb37716490f053ec88e7c0f24827a5eda7c75d4019",
|
|
1403
1403
|
"tools/nexowatt-stable-v95-selftest.cjs": "0b15fcd329eb2994e64c407ab04eaafab7c38c4688136c197bf9601e1c35ee07",
|
|
1404
1404
|
"tools/nexowatt-stable-v97-selftest.cjs": "4f50ad6e53b8de7eb045d56657cccd846883eacd8a877d51240d78153ba53d80",
|
|
1405
1405
|
"tools/nexowatt-sync-release-version.cjs": "2478d714533ece21a275071ef6e5467f73c2fa33d0a63d76f408dc048a86c6f6",
|
|
1406
1406
|
"tools/nexowatt-ui-overview-runtime-selftest.cjs": "83255e5d3c9a548013f6e9a74706644d15d98450d0bfa2eb3da83c740d8618ea",
|
|
1407
1407
|
"tools/nexowatt-update-selftest.cjs": "c38c454135f98de683de8fa15fc4b9032063823f0f55fcfc8b675f551fd342f5",
|
|
1408
|
-
"tools/nexowatt-user-area-selftest.cjs": "
|
|
1409
|
-
"tools/nexowatt-
|
|
1408
|
+
"tools/nexowatt-user-area-selftest.cjs": "eb66de5932128d12b489bace4a53af8cb756033f069c873d605d2f6ed9ad7b82",
|
|
1409
|
+
"tools/nexowatt-v7108-ui-foundation-selftest.cjs": "6085c14a03185a6b84e34e6b65a30a0b92595a6d62c68ca46fb1d03ffc15781c",
|
|
1410
|
+
"tools/nexowatt-validate-package.cjs": "6ebef1a4c77dea4c72d832288533f31bd9a001b8b799f4825ca547747ac929f8",
|
|
1410
1411
|
"tools/nexowatt-value-column-selftest.cjs": "29d0a9bbea05a87dcf8ee09c86cc81acb6c59e1e34801890768f5e342083871a",
|
|
1411
1412
|
"tools/nexowatt-version-sync-selftest.cjs": "65d7c8634b6d5581f337365e13a1a9432c7d47dbf5aebc237886730c32ba5e94",
|
|
1412
1413
|
"tsconfig.build.json": "d3a31263975a13de77b97af9ff246d89931f3abb594047be2739cf11378b97f5",
|
|
@@ -1550,3 +1550,335 @@ html.eos-app.eos-route-intro #app-paper {
|
|
|
1550
1550
|
html.eos-route-intro .eos-native-intro-grid { position: relative !important; width:100% !important; padding-bottom:72px !important; overflow:visible !important; }
|
|
1551
1551
|
html.eos-route-intro .eos-overview-edit-controls { position:absolute !important; right:16px !important; bottom:16px !important; z-index:3 !important; padding:6px !important; border:1px solid rgba(0,229,138,.24) !important; border-radius:16px !important; background:rgba(3,23,34,.94) !important; }
|
|
1552
1552
|
html.eos-route-intro .eos-overview-edit-controls .MuiFab-root { position:static !important; inset:auto !important; margin:0 !important; }
|
|
1553
|
+
|
|
1554
|
+
|
|
1555
|
+
|
|
1556
|
+
|
|
1557
|
+
/* NexoWatt EOS 7.10.8 – modern core operating surfaces.
|
|
1558
|
+
These rules are presentation-only: native ioBroker/EOS event handlers,
|
|
1559
|
+
accordions, state editors and virtualized tables remain authoritative. */
|
|
1560
|
+
|
|
1561
|
+
/* Structure is intentionally unavailable in this EOS foundation release. */
|
|
1562
|
+
html.eos-app [data-eos-tab="tab-enums"],
|
|
1563
|
+
html.eos-app a[href="#tab-enums"],
|
|
1564
|
+
html.eos-app a[href="#/tab-enums"],
|
|
1565
|
+
html.eos-app .nexowatt-native-nav-item:has(a[href*="tab-enums"]) {
|
|
1566
|
+
display: none !important;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.eos-technical-surface-header {
|
|
1570
|
+
position: sticky;
|
|
1571
|
+
top: 0;
|
|
1572
|
+
z-index: 80;
|
|
1573
|
+
box-sizing: border-box;
|
|
1574
|
+
min-height: 104px;
|
|
1575
|
+
display: grid;
|
|
1576
|
+
grid-template-columns: 58px minmax(0, 1fr) auto;
|
|
1577
|
+
align-items: center;
|
|
1578
|
+
gap: 16px;
|
|
1579
|
+
margin: 12px 14px 14px;
|
|
1580
|
+
padding: 16px 20px;
|
|
1581
|
+
color: #effcff;
|
|
1582
|
+
border: 1px solid rgba(0, 229, 138, .25);
|
|
1583
|
+
border-radius: 19px;
|
|
1584
|
+
background:
|
|
1585
|
+
radial-gradient(circle at 4% 20%, rgba(0, 229, 138, .16), transparent 31%),
|
|
1586
|
+
radial-gradient(circle at 92% 20%, rgba(69, 213, 255, .10), transparent 30%),
|
|
1587
|
+
linear-gradient(135deg, rgba(7, 31, 45, .97), rgba(3, 15, 27, .97));
|
|
1588
|
+
box-shadow: 0 15px 34px rgba(0, 0, 0, .28), inset 0 1px 0 rgba(255, 255, 255, .045);
|
|
1589
|
+
backdrop-filter: blur(16px) saturate(120%);
|
|
1590
|
+
}
|
|
1591
|
+
.eos-technical-surface-icon {
|
|
1592
|
+
width: 54px;
|
|
1593
|
+
height: 54px;
|
|
1594
|
+
display: grid;
|
|
1595
|
+
place-items: center;
|
|
1596
|
+
color: #061923;
|
|
1597
|
+
border: 1px solid rgba(255, 255, 255, .22);
|
|
1598
|
+
border-radius: 17px;
|
|
1599
|
+
background: linear-gradient(135deg, #00e58a, #45d5ff);
|
|
1600
|
+
box-shadow: 0 12px 25px rgba(0, 229, 138, .16), inset 0 1px 0 rgba(255,255,255,.28);
|
|
1601
|
+
}
|
|
1602
|
+
.eos-technical-surface-icon svg {
|
|
1603
|
+
width: 28px;
|
|
1604
|
+
height: 28px;
|
|
1605
|
+
fill: none;
|
|
1606
|
+
stroke: currentColor;
|
|
1607
|
+
stroke-width: 1.9;
|
|
1608
|
+
stroke-linecap: round;
|
|
1609
|
+
stroke-linejoin: round;
|
|
1610
|
+
}
|
|
1611
|
+
.eos-technical-surface-copy { min-width: 0; }
|
|
1612
|
+
.eos-technical-surface-copy > span {
|
|
1613
|
+
display: block;
|
|
1614
|
+
margin-bottom: 3px;
|
|
1615
|
+
color: #55eeb0;
|
|
1616
|
+
font-size: 10px;
|
|
1617
|
+
font-weight: 950;
|
|
1618
|
+
letter-spacing: .18em;
|
|
1619
|
+
}
|
|
1620
|
+
.eos-technical-surface-copy h1 {
|
|
1621
|
+
margin: 0;
|
|
1622
|
+
color: #f2fbff;
|
|
1623
|
+
font-size: clamp(23px, 2.2vw, 32px);
|
|
1624
|
+
line-height: 1.12;
|
|
1625
|
+
}
|
|
1626
|
+
.eos-technical-surface-copy p {
|
|
1627
|
+
margin: 6px 0 0;
|
|
1628
|
+
max-width: 780px;
|
|
1629
|
+
color: #9dbbc8;
|
|
1630
|
+
font-size: 13px;
|
|
1631
|
+
line-height: 1.45;
|
|
1632
|
+
}
|
|
1633
|
+
.eos-technical-surface-meta {
|
|
1634
|
+
min-width: 150px;
|
|
1635
|
+
display: grid;
|
|
1636
|
+
grid-template-columns: 10px 1fr;
|
|
1637
|
+
align-items: center;
|
|
1638
|
+
gap: 1px 8px;
|
|
1639
|
+
padding: 10px 13px;
|
|
1640
|
+
border: 1px solid rgba(133, 193, 218, .17);
|
|
1641
|
+
border-radius: 13px;
|
|
1642
|
+
background: rgba(3, 17, 28, .66);
|
|
1643
|
+
}
|
|
1644
|
+
.eos-technical-surface-meta i {
|
|
1645
|
+
grid-row: 1 / span 2;
|
|
1646
|
+
width: 9px;
|
|
1647
|
+
height: 9px;
|
|
1648
|
+
border-radius: 50%;
|
|
1649
|
+
background: #00e58a;
|
|
1650
|
+
box-shadow: 0 0 12px rgba(0,229,138,.8);
|
|
1651
|
+
}
|
|
1652
|
+
.eos-technical-surface-meta strong { color: #eafaff; font-size: 12px; }
|
|
1653
|
+
.eos-technical-surface-meta small { color: #83a8b8; font-size: 10px; }
|
|
1654
|
+
|
|
1655
|
+
/* Shared technical toolbars. */
|
|
1656
|
+
html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root,
|
|
1657
|
+
html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] {
|
|
1658
|
+
min-height: 54px !important;
|
|
1659
|
+
margin: 0 14px 10px !important;
|
|
1660
|
+
padding: 7px 10px !important;
|
|
1661
|
+
gap: 7px !important;
|
|
1662
|
+
color: #eaf9ff !important;
|
|
1663
|
+
border: 1px solid rgba(133, 193, 218, .13) !important;
|
|
1664
|
+
border-radius: 15px !important;
|
|
1665
|
+
background: linear-gradient(180deg, rgba(9, 31, 47, .94), rgba(4, 18, 30, .95)) !important;
|
|
1666
|
+
box-shadow: 0 10px 24px rgba(0,0,0,.20), inset 0 1px 0 rgba(255,255,255,.035) !important;
|
|
1667
|
+
}
|
|
1668
|
+
html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiIconButton-root,
|
|
1669
|
+
html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] button {
|
|
1670
|
+
min-width: 38px;
|
|
1671
|
+
min-height: 38px;
|
|
1672
|
+
color: #dff8ff !important;
|
|
1673
|
+
border: 1px solid rgba(133, 193, 218, .12) !important;
|
|
1674
|
+
border-radius: 11px !important;
|
|
1675
|
+
background: rgba(255,255,255,.025) !important;
|
|
1676
|
+
}
|
|
1677
|
+
html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiIconButton-root:hover,
|
|
1678
|
+
html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] button:hover {
|
|
1679
|
+
color: #fff !important;
|
|
1680
|
+
border-color: rgba(0,229,138,.30) !important;
|
|
1681
|
+
background: rgba(0,229,138,.085) !important;
|
|
1682
|
+
}
|
|
1683
|
+
html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root .MuiInputBase-root,
|
|
1684
|
+
html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"] input {
|
|
1685
|
+
min-height: 38px !important;
|
|
1686
|
+
border-radius: 10px !important;
|
|
1687
|
+
background: rgba(2, 13, 23, .72) !important;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
/* Dienste & Instanzen – modern operating cards while preserving every native action. */
|
|
1691
|
+
html.eos-route-instances #app-paper .MuiAccordion-root {
|
|
1692
|
+
margin: 7px 14px !important;
|
|
1693
|
+
overflow: hidden !important;
|
|
1694
|
+
border: 1px solid rgba(133, 193, 218, .14) !important;
|
|
1695
|
+
border-radius: 14px !important;
|
|
1696
|
+
background: linear-gradient(180deg, rgba(10, 32, 48, .94), rgba(5, 20, 32, .95)) !important;
|
|
1697
|
+
box-shadow: 0 9px 22px rgba(0, 0, 0, .17) !important;
|
|
1698
|
+
}
|
|
1699
|
+
html.eos-route-instances #app-paper .MuiAccordion-root::before { display: none !important; }
|
|
1700
|
+
html.eos-route-instances #app-paper .MuiAccordionSummary-root {
|
|
1701
|
+
min-height: 52px !important;
|
|
1702
|
+
padding: 0 14px !important;
|
|
1703
|
+
transition: background .15s ease, border-color .15s ease !important;
|
|
1704
|
+
}
|
|
1705
|
+
html.eos-route-instances #app-paper .MuiAccordionSummary-root:hover {
|
|
1706
|
+
background: rgba(0, 229, 138, .045) !important;
|
|
1707
|
+
}
|
|
1708
|
+
html.eos-route-instances #app-paper .MuiAccordionSummary-root.Mui-expanded {
|
|
1709
|
+
min-height: 54px !important;
|
|
1710
|
+
background: linear-gradient(90deg, rgba(0,229,138,.08), rgba(69,213,255,.035)) !important;
|
|
1711
|
+
}
|
|
1712
|
+
html.eos-route-instances #app-paper .MuiAccordionDetails-root {
|
|
1713
|
+
padding: 15px 18px 18px !important;
|
|
1714
|
+
border-top: 1px solid rgba(133, 193, 218, .12) !important;
|
|
1715
|
+
background: rgba(2, 14, 24, .54) !important;
|
|
1716
|
+
}
|
|
1717
|
+
html.eos-route-instances #app-paper .eos-service-row {
|
|
1718
|
+
transition: filter .14s ease, box-shadow .14s ease, transform .14s ease !important;
|
|
1719
|
+
}
|
|
1720
|
+
html.eos-route-instances #app-paper .eos-service-row:hover {
|
|
1721
|
+
filter: brightness(1.07);
|
|
1722
|
+
}
|
|
1723
|
+
html.eos-route-instances #app-paper tr.eos-service-row > td {
|
|
1724
|
+
border-top: 1px solid rgba(133, 193, 218, .09) !important;
|
|
1725
|
+
border-bottom: 1px solid rgba(1, 8, 14, .35) !important;
|
|
1726
|
+
}
|
|
1727
|
+
html.eos-route-instances #app-paper tr.eos-service-row > td:first-child { border-radius: 10px 0 0 10px; }
|
|
1728
|
+
html.eos-route-instances #app-paper tr.eos-service-row > td:last-child { border-radius: 0 10px 10px 0; }
|
|
1729
|
+
html.eos-route-instances #app-paper .eos-service-row-expanded {
|
|
1730
|
+
box-shadow: inset 3px 0 0 rgba(0,229,138,.62) !important;
|
|
1731
|
+
}
|
|
1732
|
+
html.eos-route-instances #app-paper .MuiTableContainer-root,
|
|
1733
|
+
html.eos-route-instances #app-paper [role="grid"] {
|
|
1734
|
+
margin: 0 14px 14px !important;
|
|
1735
|
+
overflow: auto !important;
|
|
1736
|
+
border: 1px solid rgba(133, 193, 218, .12) !important;
|
|
1737
|
+
border-radius: 15px !important;
|
|
1738
|
+
background: rgba(2, 14, 24, .42) !important;
|
|
1739
|
+
}
|
|
1740
|
+
html.eos-route-instances #app-paper .MuiTableHead-root .MuiTableCell-root {
|
|
1741
|
+
position: sticky;
|
|
1742
|
+
top: 0;
|
|
1743
|
+
z-index: 4;
|
|
1744
|
+
background: rgba(7, 29, 43, .97) !important;
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
/* Datenpunkte – calm, readable technical tree/grid. */
|
|
1748
|
+
html.eos-route-objects #app-paper [role="grid"],
|
|
1749
|
+
html.eos-route-objects #app-paper [role="treegrid"],
|
|
1750
|
+
html.eos-route-objects #app-paper .MuiDataGrid-root,
|
|
1751
|
+
html.eos-route-objects #app-paper .ReactVirtualized__Grid {
|
|
1752
|
+
border-color: rgba(133, 193, 218, .15) !important;
|
|
1753
|
+
background: linear-gradient(180deg, rgba(5, 21, 34, .82), rgba(2, 13, 23, .90)) !important;
|
|
1754
|
+
}
|
|
1755
|
+
html.eos-route-objects #app-paper .MuiDataGrid-columnHeaders,
|
|
1756
|
+
html.eos-route-objects #app-paper [role="columnheader"],
|
|
1757
|
+
html.eos-route-objects #app-paper thead th {
|
|
1758
|
+
color: #e8f8ff !important;
|
|
1759
|
+
font-weight: 850 !important;
|
|
1760
|
+
background: linear-gradient(180deg, rgba(13, 42, 59, .97), rgba(6, 25, 39, .97)) !important;
|
|
1761
|
+
border-bottom-color: rgba(0, 229, 138, .20) !important;
|
|
1762
|
+
}
|
|
1763
|
+
html.eos-route-objects #app-paper .eos-datapoint-row,
|
|
1764
|
+
html.eos-route-objects #app-paper .MuiDataGrid-row,
|
|
1765
|
+
html.eos-route-objects #app-paper [role="row"] {
|
|
1766
|
+
transition: background .12s ease, box-shadow .12s ease !important;
|
|
1767
|
+
}
|
|
1768
|
+
html.eos-route-objects #app-paper .eos-datapoint-row:hover,
|
|
1769
|
+
html.eos-route-objects #app-paper .MuiDataGrid-row:hover,
|
|
1770
|
+
html.eos-route-objects #app-paper [role="row"]:hover {
|
|
1771
|
+
background: rgba(69, 213, 255, .045) !important;
|
|
1772
|
+
}
|
|
1773
|
+
html.eos-route-objects #app-paper .Mui-selected,
|
|
1774
|
+
html.eos-route-objects #app-paper [aria-selected="true"] {
|
|
1775
|
+
color: #f4ffff !important;
|
|
1776
|
+
background: linear-gradient(90deg, rgba(0, 229, 138, .19), rgba(69, 213, 255, .08)) !important;
|
|
1777
|
+
box-shadow: inset 3px 0 0 #00e58a !important;
|
|
1778
|
+
}
|
|
1779
|
+
html.eos-route-objects #app-paper .eos-object-value-cell {
|
|
1780
|
+
min-height: 30px !important;
|
|
1781
|
+
padding: 3px 7px !important;
|
|
1782
|
+
border: 1px solid transparent !important;
|
|
1783
|
+
border-radius: 8px !important;
|
|
1784
|
+
font-variant-numeric: tabular-nums;
|
|
1785
|
+
}
|
|
1786
|
+
html.eos-route-objects #app-paper .eos-object-value-cell[data-eos-object-writable="1"] {
|
|
1787
|
+
border-color: rgba(0,229,138,.12) !important;
|
|
1788
|
+
background: rgba(0,229,138,.035) !important;
|
|
1789
|
+
}
|
|
1790
|
+
html.eos-route-objects #app-paper input,
|
|
1791
|
+
html.eos-route-objects #app-paper .MuiSelect-select {
|
|
1792
|
+
border-radius: 9px !important;
|
|
1793
|
+
}
|
|
1794
|
+
html.eos-role-enduser.eos-route-objects #app-paper[data-eos-datapoints-readonly]::before {
|
|
1795
|
+
content: 'NUR LESEN';
|
|
1796
|
+
position: sticky;
|
|
1797
|
+
top: 112px;
|
|
1798
|
+
z-index: 75;
|
|
1799
|
+
float: right;
|
|
1800
|
+
margin: 0 24px -32px 0;
|
|
1801
|
+
padding: 6px 10px;
|
|
1802
|
+
color: #89b5c5;
|
|
1803
|
+
font-size: 9px;
|
|
1804
|
+
font-weight: 950;
|
|
1805
|
+
letter-spacing: .13em;
|
|
1806
|
+
border: 1px solid rgba(133,193,218,.18);
|
|
1807
|
+
border-radius: 999px;
|
|
1808
|
+
background: rgba(3,17,28,.88);
|
|
1809
|
+
pointer-events: none;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
/* Systemlogs – diagnostic stream with severity accenting. */
|
|
1813
|
+
html.eos-route-logs #app-paper .MuiTableContainer-root,
|
|
1814
|
+
html.eos-route-logs #app-paper [role="grid"] {
|
|
1815
|
+
margin: 0 14px 14px !important;
|
|
1816
|
+
overflow: auto !important;
|
|
1817
|
+
border: 1px solid rgba(133, 193, 218, .13) !important;
|
|
1818
|
+
border-radius: 15px !important;
|
|
1819
|
+
background: rgba(2, 13, 22, .72) !important;
|
|
1820
|
+
}
|
|
1821
|
+
html.eos-route-logs #app-paper .MuiTableHead-root .MuiTableCell-root,
|
|
1822
|
+
html.eos-route-logs #app-paper [role="columnheader"] {
|
|
1823
|
+
position: sticky;
|
|
1824
|
+
top: 0;
|
|
1825
|
+
z-index: 5;
|
|
1826
|
+
color: #e9f9ff !important;
|
|
1827
|
+
font-weight: 850 !important;
|
|
1828
|
+
background: rgba(7, 29, 43, .98) !important;
|
|
1829
|
+
border-bottom: 1px solid rgba(0,229,138,.18) !important;
|
|
1830
|
+
}
|
|
1831
|
+
html.eos-route-logs #app-paper .eos-log-row {
|
|
1832
|
+
box-shadow: inset 3px 0 0 rgba(133,193,218,.25) !important;
|
|
1833
|
+
transition: background .12s ease, filter .12s ease !important;
|
|
1834
|
+
}
|
|
1835
|
+
html.eos-route-logs #app-paper .eos-log-row:hover { filter: brightness(1.08); }
|
|
1836
|
+
html.eos-route-logs #app-paper .eos-log-row-error {
|
|
1837
|
+
background: rgba(255, 77, 103, .075) !important;
|
|
1838
|
+
box-shadow: inset 3px 0 0 #ff4d67 !important;
|
|
1839
|
+
}
|
|
1840
|
+
html.eos-route-logs #app-paper .eos-log-row-warn {
|
|
1841
|
+
background: rgba(255, 201, 51, .06) !important;
|
|
1842
|
+
box-shadow: inset 3px 0 0 #ffc933 !important;
|
|
1843
|
+
}
|
|
1844
|
+
html.eos-route-logs #app-paper .eos-log-row-info {
|
|
1845
|
+
box-shadow: inset 3px 0 0 rgba(69, 213, 255, .55) !important;
|
|
1846
|
+
}
|
|
1847
|
+
html.eos-route-logs #app-paper .eos-log-row-debug {
|
|
1848
|
+
opacity: .78;
|
|
1849
|
+
box-shadow: inset 3px 0 0 rgba(157, 181, 193, .35) !important;
|
|
1850
|
+
}
|
|
1851
|
+
html.eos-route-logs #app-paper .eos-log-row td,
|
|
1852
|
+
html.eos-route-logs #app-paper .eos-log-row [role="cell"] {
|
|
1853
|
+
font-variant-numeric: tabular-nums;
|
|
1854
|
+
border-bottom-color: rgba(133,193,218,.075) !important;
|
|
1855
|
+
}
|
|
1856
|
+
html.eos-route-logs #app-paper pre,
|
|
1857
|
+
html.eos-route-logs #app-paper code {
|
|
1858
|
+
color: #dff7ff;
|
|
1859
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
@media (max-width: 850px) {
|
|
1863
|
+
.eos-technical-surface-header {
|
|
1864
|
+
grid-template-columns: 46px minmax(0, 1fr);
|
|
1865
|
+
min-height: 92px;
|
|
1866
|
+
margin: 9px;
|
|
1867
|
+
padding: 14px;
|
|
1868
|
+
gap: 12px;
|
|
1869
|
+
border-radius: 16px;
|
|
1870
|
+
}
|
|
1871
|
+
.eos-technical-surface-icon { width: 44px; height: 44px; border-radius: 13px; }
|
|
1872
|
+
.eos-technical-surface-icon svg { width: 23px; height: 23px; }
|
|
1873
|
+
.eos-technical-surface-meta { grid-column: 1 / -1; min-width: 0; }
|
|
1874
|
+
html.eos-app #app-paper[data-eos-technical-surface] .MuiToolbar-root,
|
|
1875
|
+
html.eos-app #app-paper[data-eos-technical-surface] [role="toolbar"],
|
|
1876
|
+
html.eos-route-instances #app-paper .MuiAccordion-root,
|
|
1877
|
+
html.eos-route-instances #app-paper .MuiTableContainer-root,
|
|
1878
|
+
html.eos-route-instances #app-paper [role="grid"],
|
|
1879
|
+
html.eos-route-logs #app-paper .MuiTableContainer-root,
|
|
1880
|
+
html.eos-route-logs #app-paper [role="grid"] {
|
|
1881
|
+
margin-left: 9px !important;
|
|
1882
|
+
margin-right: 9px !important;
|
|
1883
|
+
}
|
|
1884
|
+
}
|
package/adminWww/index.html
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate" />
|
|
9
9
|
<meta http-equiv="Pragma" content="no-cache" />
|
|
10
10
|
<meta http-equiv="Expires" content="0" />
|
|
11
|
-
<script src="./js/eos-manual-write-policy.js?v=
|
|
11
|
+
<script src="./js/eos-manual-write-policy.js?v=7108"></script>
|
|
12
12
|
<script type="module" src="./assets/hostInit-v84.js?v=84"></script>
|
|
13
13
|
|
|
14
14
|
<meta charset="utf-8" />
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
rel="stylesheet"
|
|
37
37
|
href="css/leaflet.css"
|
|
38
38
|
/>
|
|
39
|
-
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=
|
|
40
|
-
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=
|
|
39
|
+
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=7108" />
|
|
40
|
+
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=7108" />
|
|
41
41
|
<link rel="stylesheet" href="./css/eos-auto-update.css?v=7103" />
|
|
42
42
|
<link
|
|
43
43
|
rel="manifest"
|
|
@@ -160,22 +160,22 @@
|
|
|
160
160
|
</script>
|
|
161
161
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
|
|
162
162
|
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
|
|
163
|
-
<script defer src="./js/eos-role-bootstrap.js?v=
|
|
164
|
-
<script defer src="./js/eos-policy-client.js?v=
|
|
165
|
-
<script defer src="./js/eos-branding-sanitizer.js?v=
|
|
166
|
-
<script defer src="./js/nexowatt-native-shell.js?v=
|
|
167
|
-
<script defer src="./js/eos-native-security.js?v=
|
|
168
|
-
<script defer src="./js/eos-basic-settings.js?v=
|
|
169
|
-
<script defer src="./js/eos-role-ui.js?v=
|
|
170
|
-
<script defer src="./js/eos-ems-overview.js?v=
|
|
163
|
+
<script defer src="./js/eos-role-bootstrap.js?v=7108" data-eos-entry="./assets/index-CQZugZ1z-v84.js?v=84"></script>
|
|
164
|
+
<script defer src="./js/eos-policy-client.js?v=7108"></script>
|
|
165
|
+
<script defer src="./js/eos-branding-sanitizer.js?v=7108"></script>
|
|
166
|
+
<script defer src="./js/nexowatt-native-shell.js?v=7108"></script>
|
|
167
|
+
<script defer src="./js/eos-native-security.js?v=7108"></script>
|
|
168
|
+
<script defer src="./js/eos-basic-settings.js?v=7108"></script>
|
|
169
|
+
<script defer src="./js/eos-role-ui.js?v=7108"></script>
|
|
170
|
+
<script defer src="./js/eos-ems-overview.js?v=7108"></script>
|
|
171
171
|
|
|
172
172
|
<script defer src="./js/eos-auto-update.js?v=7103"></script>
|
|
173
|
-
<script defer src="./js/eos-assistant.js?v=
|
|
173
|
+
<script defer src="./js/eos-assistant.js?v=7108"></script>
|
|
174
174
|
</head>
|
|
175
175
|
<body>
|
|
176
176
|
<noscript>Für NexoWatt EOS muss JavaScript aktiviert sein.</noscript>
|
|
177
177
|
<div id="root"></div>
|
|
178
|
-
<script defer src="static/js/nexowatt-stable-login.js?v=
|
|
179
|
-
<script defer src="static/js/nexowatt-stable-
|
|
178
|
+
<script defer src="static/js/nexowatt-stable-login.js?v=7108"></script>
|
|
179
|
+
<script defer src="static/js/nexowatt-stable-v7108.js?v=7108"></script>
|
|
180
180
|
</body>
|
|
181
181
|
</html>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v7108-modern-core-surfaces-rbac';
|
|
5
5
|
const script = document.currentScript || document.querySelector('script[src*="eos-role-bootstrap.js"]');
|
|
6
6
|
const entry = script?.dataset?.eosEntry || '';
|
|
7
7
|
let launched = false;
|
|
@@ -25,11 +25,12 @@
|
|
|
25
25
|
const isCustomerBackupTab = tab => /^(?:tab-)?(?:nexowatt-backup|eos-backup|nexowatt-sicherung)(?:-|$)/.test(normalize(tab));
|
|
26
26
|
const isReleasedEndUserTab = tab => /^(?:tab-)?(?:nexowatt-ui|nexowatt-cockpit|eos-cockpit|eos-dashboard|kunden-cockpit|endkunden-cockpit|lovelace|jarvis|vis|iqontrol|material)(?:-|$)/.test(normalize(tab));
|
|
27
27
|
const isOfficialReserveTab = tab => /^(?:tab-)?(?:admin|backitup)(?:-\d+)?$/.test(normalize(tab));
|
|
28
|
+
const isGloballyHiddenTab = tab => normalize(tab) === 'tab-enums';
|
|
28
29
|
const isInstallerDenied = tab => /(?:tab-users|tab-hosts|tab-files|tab-xterm|tab-xtrem|tab-system|users|hosts|files|console|terminal|security)/.test(normalize(tab)) || isOfficialReserveTab(tab);
|
|
29
|
-
const isAllowed = (role, route) => route !== 'easy' && (role === 'admin'
|
|
30
|
+
const isAllowed = (role, route) => route !== 'easy' && !isGloballyHiddenTab(route) && (role === 'admin'
|
|
30
31
|
|| (role === 'installer'
|
|
31
32
|
? route === 'tab-intro' || isCustomerBackupTab(route) || !isInstallerDenied(route)
|
|
32
|
-
: route === 'tab-intro' || route === 'tab-
|
|
33
|
+
: route === 'tab-intro' || route === 'tab-objects' || isCustomerBackupTab(route) || isReleasedEndUserTab(route)));
|
|
33
34
|
const defaultTab = () => 'tab-intro';
|
|
34
35
|
const currentRoute = () => {
|
|
35
36
|
const hash = decodeURIComponent(window.location.hash || '').toLowerCase();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v7108-modern-core-surfaces-rbac';
|
|
5
5
|
window.NEXOWATT_EOS_ROLE_UI_VERSION = VERSION;
|
|
6
6
|
|
|
7
7
|
const state = {
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
if (policy?.isInstaller || /installateur|installer|installation|inbetriebnahme|techniker|technician|integrator|partner/.test(raw)) return 'installer';
|
|
46
46
|
return 'enduser';
|
|
47
47
|
};
|
|
48
|
+
const isGloballyHiddenTab = tab => normalize(tab) === 'tab-enums';
|
|
48
49
|
const isOfficialAdminTab = tab => /^tab-admin(?:-\d+)?$/.test(normalize(tab));
|
|
49
50
|
const isOfficialBackupTab = tab => /^tab-backitup(?:-\d+)?$/.test(normalize(tab));
|
|
50
51
|
const isOfficialReserveTab = tab => isOfficialAdminTab(tab) || isOfficialBackupTab(tab);
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
const endUserDeniedByText = value => /(module|dienste|systemlogs|logs|zugange|rechte|benutzer|users|gruppen|groups|system hosts|system-hosts|hosts|dateien|files|konsole|console|terminal|xterm|adapter|instances?|instanzen|geraetesuche|discovery|systemschutz|security)/.test(normalize(value));
|
|
54
55
|
const isEndUserTab = (tab, label = '') => {
|
|
55
56
|
const clean = normalize(tab); const text = `${clean} ${normalize(label)}`;
|
|
56
|
-
if (clean === 'tab-intro' || clean === 'tab-
|
|
57
|
+
if (clean === 'tab-intro' || clean === 'tab-objects' || isCustomerBackupTab(clean)) return true;
|
|
57
58
|
if (/^tab-(nexowatt-ui|nexowatt-cockpit|eos-cockpit|eos-dashboard|kunden-cockpit|endkunden-cockpit|lovelace|jarvis|vis|iqontrol|material)(?:-|$)/.test(clean)) return true;
|
|
58
59
|
return !!clean && !endUserDeniedByText(text) && endUserAllowedByText(text);
|
|
59
60
|
};
|
|
@@ -64,7 +65,7 @@
|
|
|
64
65
|
return /(?:tab-users|tab-hosts|tab-files|tab-xterm|tab-xtrem|tab-system|users|benutzer|gruppen|groups|system-hosts|system hosts|hosts|dateien|files|konsole|console|terminal|xterm|systemschutz|security)/.test(text);
|
|
65
66
|
};
|
|
66
67
|
const isRouteAllowed = (role, route, label = '') => {
|
|
67
|
-
if (route === 'easy') return false;
|
|
68
|
+
if (route === 'easy' || isGloballyHiddenTab(route)) return false;
|
|
68
69
|
if (role === 'admin') return true;
|
|
69
70
|
if (isOfficialReserveTab(route)) return false;
|
|
70
71
|
if (role === 'installer') return route === 'tab-intro' || (route !== 'tab-users' && !isInstallerDenied(route, label));
|
|
@@ -136,6 +137,8 @@
|
|
|
136
137
|
return normalize(`${button?.getAttribute?.('aria-label') || ''} ${button?.getAttribute?.('title') || ''} ${testIds}`);
|
|
137
138
|
};
|
|
138
139
|
const isSystemSettingsButton = button => /buildicon|system settings|systemeinstellungen|systeeminstellingen/.test(toolbarButtonSignature(button));
|
|
140
|
+
const isHeaderSystemSettingsButton = button => button?.dataset?.eosSystemSettingsControl === '1'
|
|
141
|
+
&& !!button.closest?.('.eos-top-toolbar,.MuiAppBar-root .MuiToolbar-root');
|
|
139
142
|
const isExpertModeButton = button => button?.dataset?.eosExpertControl === '1' || /expert|experten/.test(toolbarButtonSignature(button));
|
|
140
143
|
const markAdminOnlyToolbarControls = () => safe(() => {
|
|
141
144
|
const toolbar = document.querySelector('.eos-top-toolbar,.MuiAppBar-root .MuiToolbar-root');
|
|
@@ -227,7 +230,6 @@
|
|
|
227
230
|
['Dienste', 'Instanzen starten, stoppen und diagnostizieren', 'tab-instances', 'services'],
|
|
228
231
|
['Module', 'Module installieren, aktualisieren und konfigurieren', 'tab-adapters', 'modules'],
|
|
229
232
|
['Datenpunkte', 'Messwerte prüfen und freigegebene Werte schreiben', 'tab-objects', 'datapoints'],
|
|
230
|
-
['Struktur', 'Räume und Funktionen für Smart Home zuordnen', 'tab-enums', 'structure'],
|
|
231
233
|
['Geräte', 'Geräteintegration und Inbetriebnahme öffnen', 'tab-devicemanager', 'devices'],
|
|
232
234
|
['Basis-Einstellungen', 'Standort, Sprache und Anlagenparameter', 'basic-settings', 'settings'],
|
|
233
235
|
...(backupTab ? [['NexoWatt Sicherung', 'Sicherung und Wiederherstellung des EOS-Systems', backupTab, 'backup']] : []),
|
|
@@ -237,7 +239,6 @@
|
|
|
237
239
|
return [
|
|
238
240
|
['EOS Cockpit', 'Energie, Laden und Gebäude bedienen', uiTab, 'eos'],
|
|
239
241
|
['Datenpunkte', 'Messwerte und Zustände ausschließlich lesen', 'tab-objects', 'datapoints'],
|
|
240
|
-
['Smart Home', 'Räume, Funktionen und freigegebene Geräte zuordnen', 'tab-enums', 'structure'],
|
|
241
242
|
...(backupTab ? [['NexoWatt Sicherung', 'Eigene Sicherungen ausführen und wiederherstellen', backupTab, 'backup']] : []),
|
|
242
243
|
];
|
|
243
244
|
};
|
|
@@ -559,7 +560,7 @@
|
|
|
559
560
|
const scrubInheritedUiAdminSession = () => safe(() => {
|
|
560
561
|
if (state.role !== 'enduser') return;
|
|
561
562
|
const user = String(state.policy?.user || state.policy?.userId || '').replace(/^system\.user\./, '') || state.role;
|
|
562
|
-
const key = `eosUiAdminSessionScrubbed:
|
|
563
|
+
const key = `eosUiAdminSessionScrubbed:v7108:${user}:${state.role}`;
|
|
563
564
|
if (sessionStorage.getItem(key) === '1') return;
|
|
564
565
|
sessionStorage.setItem(key, '1');
|
|
565
566
|
const frame = document.createElement('iframe');
|
|
@@ -689,7 +690,7 @@
|
|
|
689
690
|
if (clickedButton && isExpertModeButton(clickedButton)) {
|
|
690
691
|
event.preventDefault(); event.stopImmediatePropagation(); lockExpertMode(); return;
|
|
691
692
|
}
|
|
692
|
-
if (clickedButton &&
|
|
693
|
+
if (clickedButton && isHeaderSystemSettingsButton(clickedButton)) {
|
|
693
694
|
event.preventDefault(); event.stopImmediatePropagation();
|
|
694
695
|
if (state.role === 'installer') window.NEXOWATT_EOS_BASIC_SETTINGS?.open?.();
|
|
695
696
|
return;
|
|
@@ -701,7 +702,7 @@
|
|
|
701
702
|
const target = event.target?.closest?.('[data-eos-admin-only-control="1"],[data-eos-system-settings-control="1"],[data-eos-role-tab],a[href*="#tab-"],a[href*="#/tab-"]');
|
|
702
703
|
if (!target) return;
|
|
703
704
|
if (target.matches('[data-eos-admin-only-control="1"]')) { event.preventDefault(); event.stopImmediatePropagation(); return; }
|
|
704
|
-
if (target
|
|
705
|
+
if (isHeaderSystemSettingsButton(target) && state.role === 'installer') {
|
|
705
706
|
event.preventDefault(); event.stopImmediatePropagation(); window.NEXOWATT_EOS_BASIC_SETTINGS?.open?.(); return;
|
|
706
707
|
}
|
|
707
708
|
const roleTab = target.getAttribute('data-eos-role-tab');
|
|
@@ -722,6 +723,8 @@
|
|
|
722
723
|
getRole: () => state.role,
|
|
723
724
|
getPolicy: () => state.policy,
|
|
724
725
|
isRouteAllowed,
|
|
726
|
+
isGloballyHiddenTab,
|
|
727
|
+
isHeaderSystemSettingsButton,
|
|
725
728
|
defaultTab,
|
|
726
729
|
isOfficialReserveTab,
|
|
727
730
|
isCustomerBackupTab,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v7108-nexowatt-native-shell-modern-core-surfaces';
|
|
5
5
|
const previous = window.NEXOWATT_NATIVE_SHELL;
|
|
6
6
|
if (previous?.version === VERSION) return;
|
|
7
7
|
previous?.destroy?.();
|
|
@@ -25,7 +25,27 @@
|
|
|
25
25
|
const safe = fn => {
|
|
26
26
|
try { return fn(); } catch (_) { return undefined; }
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
const escapeHtml = value => String(value ?? '').replace(/[&<>"']/g, match => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[match] || match));
|
|
29
|
+
const TECHNICAL_SURFACES = Object.freeze({
|
|
30
|
+
instances: {
|
|
31
|
+
eyebrow: 'EOS SYSTEMDIENSTE',
|
|
32
|
+
title: 'Dienste & Instanzen',
|
|
33
|
+
text: 'Laufzeit, Status, Ressourcen und Konfiguration aller aktiven EOS-Dienste auf einen Blick.',
|
|
34
|
+
icon: '<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="4" y="4" width="16" height="6" rx="2"/><rect x="4" y="14" width="16" height="6" rx="2"/><path d="M8 7h.01M8 17h.01M12 7h5M12 17h5"/></svg>',
|
|
35
|
+
},
|
|
36
|
+
objects: {
|
|
37
|
+
eyebrow: 'EOS DATENEBENE',
|
|
38
|
+
title: 'Datenpunkte & Zustände',
|
|
39
|
+
text: 'Messwerte, Status und freigegebene Steuerwerte in einer klaren technischen Ansicht.',
|
|
40
|
+
icon: '<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="6" cy="12" r="2.5"/><circle cx="18" cy="6" r="2.5"/><circle cx="18" cy="18" r="2.5"/><path d="M8.3 10.9 15.7 7M8.3 13.1l7.4 3.9"/></svg>',
|
|
41
|
+
},
|
|
42
|
+
logs: {
|
|
43
|
+
eyebrow: 'EOS DIAGNOSE',
|
|
44
|
+
title: 'Systemlogs',
|
|
45
|
+
text: 'Live-Protokoll für Adapter, Dienste und Systemereignisse mit klarer Priorisierung.',
|
|
46
|
+
icon: '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 5h14M5 10h14M5 15h9M5 20h6"/><circle cx="18" cy="17" r="3"/><path d="m20.2 19.2 1.8 1.8"/></svg>',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
29
49
|
|
|
30
50
|
// Navigation labels and icons are rendered natively by Drawer.tsx.
|
|
31
51
|
// This runtime only positions the shell and never rewrites React content.
|
|
@@ -177,6 +197,85 @@
|
|
|
177
197
|
<div class="eos-overview-role" data-nexowatt-overview-role="${role}"><span class="eos-overview-status-dot"></span>${config.label}</div>`;
|
|
178
198
|
};
|
|
179
199
|
|
|
200
|
+
const roleLabel = () => {
|
|
201
|
+
const role = String(window.NEXOWATT_EOS_ACCESS_ROLE || 'unknown').toLowerCase();
|
|
202
|
+
if (role === 'admin') return 'Admin / Service';
|
|
203
|
+
if (role === 'installer' || role === 'installateur') return 'Installateur';
|
|
204
|
+
return 'Endkunde';
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const classifyTechnicalRows = (paper, surface) => {
|
|
208
|
+
if (!paper || !surface) return;
|
|
209
|
+
if (surface === 'instances') {
|
|
210
|
+
paper.querySelectorAll('.MuiAccordion-root,tbody tr,.MuiTableRow-root,[role="row"]').forEach(row => {
|
|
211
|
+
if (row.closest?.('.eos-technical-surface-header') || row.classList.contains('MuiTableHead-root')) return;
|
|
212
|
+
row.classList.add('eos-service-row');
|
|
213
|
+
const expanded = row.classList.contains('Mui-expanded') || !!row.querySelector?.('[aria-expanded="true"]');
|
|
214
|
+
row.classList.toggle('eos-service-row-expanded', expanded);
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (surface === 'objects') {
|
|
219
|
+
paper.querySelectorAll('[role="row"],.MuiTableRow-root,.MuiDataGrid-row').forEach(row => {
|
|
220
|
+
if (row.closest?.('.eos-technical-surface-header')) return;
|
|
221
|
+
row.classList.add('eos-datapoint-row');
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (surface === 'logs') {
|
|
226
|
+
paper.querySelectorAll('tbody tr,.MuiTableRow-root,[role="row"]').forEach(row => {
|
|
227
|
+
if (row.closest?.('.eos-technical-surface-header')) return;
|
|
228
|
+
const text = String(row.textContent || '').toLowerCase();
|
|
229
|
+
let level = 'info';
|
|
230
|
+
if (/\b(error|fatal|fehler|kritisch|critical)\b/.test(text)) level = 'error';
|
|
231
|
+
else if (/\b(warn|warning|warnung)\b/.test(text)) level = 'warn';
|
|
232
|
+
else if (/\b(debug|trace)\b/.test(text)) level = 'debug';
|
|
233
|
+
row.classList.remove('eos-log-row-error','eos-log-row-warn','eos-log-row-info','eos-log-row-debug');
|
|
234
|
+
row.classList.add('eos-log-row', `eos-log-row-${level}`);
|
|
235
|
+
row.dataset.eosLogLevel = level;
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
const ensureTechnicalSurface = () => {
|
|
241
|
+
const paper = document.getElementById('app-paper');
|
|
242
|
+
if (!paper || isLogin()) return;
|
|
243
|
+
const surface = routeKey(currentTab());
|
|
244
|
+
const config = TECHNICAL_SURFACES[surface];
|
|
245
|
+
const existing = document.getElementById('eos-technical-surface-header');
|
|
246
|
+
if (!config) {
|
|
247
|
+
existing?.remove();
|
|
248
|
+
paper.removeAttribute('data-eos-technical-surface');
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
paper.setAttribute('data-eos-technical-surface', surface);
|
|
252
|
+
let header = existing;
|
|
253
|
+
if (!header) {
|
|
254
|
+
header = document.createElement('section');
|
|
255
|
+
header.id = 'eos-technical-surface-header';
|
|
256
|
+
header.className = 'eos-technical-surface-header';
|
|
257
|
+
header.setAttribute('aria-live', 'polite');
|
|
258
|
+
paper.insertBefore(header, paper.firstChild || null);
|
|
259
|
+
}
|
|
260
|
+
if (header.dataset.eosSurface !== surface || header.dataset.eosRole !== roleLabel()) {
|
|
261
|
+
header.dataset.eosSurface = surface;
|
|
262
|
+
header.dataset.eosRole = roleLabel();
|
|
263
|
+
header.innerHTML = `
|
|
264
|
+
<div class="eos-technical-surface-icon">${config.icon}</div>
|
|
265
|
+
<div class="eos-technical-surface-copy">
|
|
266
|
+
<span>${escapeHtml(config.eyebrow)}</span>
|
|
267
|
+
<h1>${escapeHtml(config.title)}</h1>
|
|
268
|
+
<p>${escapeHtml(config.text)}</p>
|
|
269
|
+
</div>
|
|
270
|
+
<div class="eos-technical-surface-meta">
|
|
271
|
+
<i aria-hidden="true"></i>
|
|
272
|
+
<strong>${escapeHtml(roleLabel())}</strong>
|
|
273
|
+
<small>${surface === 'logs' ? 'Live-Diagnose' : surface === 'instances' ? 'Betriebsbereit' : 'Zentrale Datenansicht'}</small>
|
|
274
|
+
</div>`;
|
|
275
|
+
}
|
|
276
|
+
classifyTechnicalRows(paper, surface);
|
|
277
|
+
};
|
|
278
|
+
|
|
180
279
|
const apply = () => {
|
|
181
280
|
if (destroyed) return;
|
|
182
281
|
setShellClasses();
|
|
@@ -184,8 +283,10 @@
|
|
|
184
283
|
ensureBrand();
|
|
185
284
|
ensureNavigationContainer();
|
|
186
285
|
ensureModernOverview();
|
|
286
|
+
ensureTechnicalSurface();
|
|
187
287
|
} else {
|
|
188
288
|
document.getElementById('eos-native-overview-hero')?.remove();
|
|
289
|
+
document.getElementById('eos-technical-surface-header')?.remove();
|
|
189
290
|
}
|
|
190
291
|
};
|
|
191
292
|
|
|
@@ -231,6 +332,7 @@
|
|
|
231
332
|
unsubscribeDom = null;
|
|
232
333
|
if (retryTimer) clearTimeout(retryTimer);
|
|
233
334
|
retryTimer = 0;
|
|
335
|
+
document.getElementById('eos-technical-surface-header')?.remove();
|
|
234
336
|
},
|
|
235
337
|
};
|
|
236
338
|
})();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
|
-
const VERSION = '
|
|
3
|
+
const VERSION = 'v7108-scroll-standard-password';
|
|
4
4
|
const ensureScroll = () => {
|
|
5
5
|
const root = document.documentElement;
|
|
6
6
|
const paper = document.getElementById('app-paper');
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
const schedule=()=>{if(scheduled)return;scheduled=true;requestAnimationFrame(()=>{scheduled=false;apply();});};
|
|
24
24
|
const start=()=>{apply();new MutationObserver(schedule).observe(document.documentElement,{subtree:true,childList:true});window.addEventListener('hashchange',schedule);window.addEventListener('resize',schedule,{passive:true});};
|
|
25
25
|
document.readyState==='loading'?document.addEventListener('DOMContentLoaded',start,{once:true}):start();
|
|
26
|
-
window.
|
|
26
|
+
window.NEXOWATT_EOS_STABLE_V7108=Object.freeze({version:VERSION,refresh:apply,ensureScroll});
|
|
27
27
|
})();
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "eos-admin",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.8",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "NexoWatt EOS Admin",
|
|
7
7
|
"de": "NexoWatt EOS Admin",
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
"icon": "admin.svg",
|
|
365
365
|
"messagebox": true,
|
|
366
366
|
"enabled": true,
|
|
367
|
-
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
367
|
+
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.10.8/admin/admin.svg",
|
|
368
368
|
"keywords": [
|
|
369
369
|
"NexoWatt",
|
|
370
370
|
"EOS",
|
|
@@ -375,7 +375,7 @@
|
|
|
375
375
|
"licensed"
|
|
376
376
|
],
|
|
377
377
|
"compact": true,
|
|
378
|
-
"readme": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
378
|
+
"readme": "https://unpkg.com/iobroker.eos-admin@7.10.8/README.md",
|
|
379
379
|
"authors": [
|
|
380
380
|
"NexoWatt"
|
|
381
381
|
],
|
|
@@ -443,7 +443,7 @@
|
|
|
443
443
|
"nondeletable": false,
|
|
444
444
|
"allowAdapterUpdate": true,
|
|
445
445
|
"allowAdapterDelete": false,
|
|
446
|
-
"meta": "https://unpkg.com/iobroker.eos-admin@7.10.
|
|
446
|
+
"meta": "https://unpkg.com/iobroker.eos-admin@7.10.8/io-package.json",
|
|
447
447
|
"npmPackage": "iobroker.eos-admin",
|
|
448
448
|
"packetName": "iobroker.eos-admin",
|
|
449
449
|
"publisher": "NexoWatt"
|
|
@@ -1220,5 +1220,5 @@
|
|
|
1220
1220
|
}
|
|
1221
1221
|
}
|
|
1222
1222
|
},
|
|
1223
|
-
"version": "7.10.
|
|
1223
|
+
"version": "7.10.8"
|
|
1224
1224
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.eos-admin",
|
|
3
3
|
"description": "NexoWatt EOS Admin – repaired stable baseline with restart-safe automatic updates, native account passwords and persistent cockpit scrolling.",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.8",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"bluefox <dogafox@gmail.com>",
|
|
7
7
|
"apollon77",
|
|
@@ -143,7 +143,8 @@
|
|
|
143
143
|
"tools/nexowatt-role-security-selftest.cjs",
|
|
144
144
|
"SECURITY_ROLE_MATRIX_V7.10.7.md",
|
|
145
145
|
"tools/nexowatt-user-area-selftest.cjs",
|
|
146
|
-
"tools/nexowatt-installer-ems-selftest.cjs"
|
|
146
|
+
"tools/nexowatt-installer-ems-selftest.cjs",
|
|
147
|
+
"tools/nexowatt-v7108-ui-foundation-selftest.cjs"
|
|
147
148
|
],
|
|
148
149
|
"scripts": {
|
|
149
150
|
"npm": "npm i -f && cd src-admin && npm i -f",
|
|
@@ -178,7 +179,7 @@
|
|
|
178
179
|
"nexowatt:repo-entry": "node tools/nexowatt-generate-repo-entry.cjs",
|
|
179
180
|
"nexowatt:patch-repo": "node tools/nexowatt-patch-repo.cjs",
|
|
180
181
|
"nexowatt:repair-update": "node tools/nexowatt-repair-eos-admin-update.cjs",
|
|
181
|
-
"check:eos-stability": "node tools/nexowatt-stability-check.cjs && node tools/nexowatt-esm-syntax-selftest.cjs && node tools/nexowatt-backend-runtime-selftest.cjs && node tools/nexowatt-prebuilt-release-selftest.cjs && node tools/nexowatt-import-integrity-selftest.cjs && node tools/nexowatt-entrypoint-smoke-selftest.cjs && node tools/nexowatt-frontend-graph-check.cjs && node tools/nexowatt-policy-selftest.cjs && node tools/nexowatt-publish-channel-selftest.cjs && node tools/nexowatt-release-defaults-selftest.cjs && node tools/nexowatt-role-access-selftest.cjs && node tools/nexowatt-internal-reserve-selftest.cjs && node tools/nexowatt-modern-ui-selftest.cjs && node tools/nexowatt-login-layout-selftest.cjs && node tools/nexowatt-branding-selftest.cjs && node tools/nexowatt-default-port-selftest.cjs && node tools/nexowatt-module-popup-selftest.cjs && node tools/nexowatt-datapoint-selftest.cjs && node tools/nexowatt-update-selftest.cjs && node tools/nexowatt-datapoint-interaction-selftest.cjs && node tools/nexowatt-manual-write-policy-selftest.cjs && node tools/nexowatt-value-column-selftest.cjs && node tools/nexowatt-native-shell-selftest.cjs && node tools/nexowatt-assistant-separation-selftest.cjs && node tools/nexowatt-runtime-cleanup-selftest.cjs && node tools/nexowatt-version-sync-selftest.cjs && node tools/nexowatt-merge-update-selftest.cjs && node tools/nexowatt-password-write-selftest.cjs && node tools/nexowatt-account-password-flow-selftest.cjs && npm run check:eos-stable-v7103 && node tools/nexowatt-ems-overview-selftest.cjs && node tools/nexowatt-ui-overview-runtime-selftest.cjs && node tools/nexowatt-auto-update-selftest.cjs && node tools/nexowatt-auto-update-placement-selftest.cjs && node tools/nexowatt-role-security-selftest.cjs && node tools/nexowatt-user-area-selftest.cjs && node tools/nexowatt-installer-ems-selftest.cjs",
|
|
182
|
+
"check:eos-stability": "node tools/nexowatt-stability-check.cjs && node tools/nexowatt-esm-syntax-selftest.cjs && node tools/nexowatt-backend-runtime-selftest.cjs && node tools/nexowatt-prebuilt-release-selftest.cjs && node tools/nexowatt-import-integrity-selftest.cjs && node tools/nexowatt-entrypoint-smoke-selftest.cjs && node tools/nexowatt-frontend-graph-check.cjs && node tools/nexowatt-policy-selftest.cjs && node tools/nexowatt-publish-channel-selftest.cjs && node tools/nexowatt-release-defaults-selftest.cjs && node tools/nexowatt-role-access-selftest.cjs && node tools/nexowatt-internal-reserve-selftest.cjs && node tools/nexowatt-modern-ui-selftest.cjs && node tools/nexowatt-login-layout-selftest.cjs && node tools/nexowatt-branding-selftest.cjs && node tools/nexowatt-default-port-selftest.cjs && node tools/nexowatt-module-popup-selftest.cjs && node tools/nexowatt-datapoint-selftest.cjs && node tools/nexowatt-update-selftest.cjs && node tools/nexowatt-datapoint-interaction-selftest.cjs && node tools/nexowatt-manual-write-policy-selftest.cjs && node tools/nexowatt-value-column-selftest.cjs && node tools/nexowatt-native-shell-selftest.cjs && node tools/nexowatt-assistant-separation-selftest.cjs && node tools/nexowatt-runtime-cleanup-selftest.cjs && node tools/nexowatt-version-sync-selftest.cjs && node tools/nexowatt-merge-update-selftest.cjs && node tools/nexowatt-password-write-selftest.cjs && node tools/nexowatt-account-password-flow-selftest.cjs && npm run check:eos-stable-v7103 && node tools/nexowatt-ems-overview-selftest.cjs && node tools/nexowatt-ui-overview-runtime-selftest.cjs && node tools/nexowatt-auto-update-selftest.cjs && node tools/nexowatt-auto-update-placement-selftest.cjs && node tools/nexowatt-role-security-selftest.cjs && node tools/nexowatt-user-area-selftest.cjs && node tools/nexowatt-installer-ems-selftest.cjs && node tools/nexowatt-v7108-ui-foundation-selftest.cjs",
|
|
182
183
|
"nexowatt:patch-built-frontend": "node tools/nexowatt-patch-built-frontend.cjs",
|
|
183
184
|
"clean:eos-runtime": "node tools/nexowatt-clean-legacy-runtime.cjs",
|
|
184
185
|
"precheck:eos-package": "npm run sync:eos-version && npm run prepare:eos-release-defaults && npm run clean:eos-runtime",
|
|
@@ -208,7 +209,8 @@
|
|
|
208
209
|
"check:eos-stable-v7103": "node tools/nexowatt-stable-v7103-selftest.cjs",
|
|
209
210
|
"test:eos-auto-update-placement": "node tools/nexowatt-auto-update-placement-selftest.cjs",
|
|
210
211
|
"check:eos-role-security": "node tools/nexowatt-role-security-selftest.cjs",
|
|
211
|
-
"test:eos-installer-ems": "node tools/nexowatt-installer-ems-selftest.cjs"
|
|
212
|
+
"test:eos-installer-ems": "node tools/nexowatt-installer-ems-selftest.cjs",
|
|
213
|
+
"check:eos-v7108-ui": "node tools/nexowatt-v7108-ui-foundation-selftest.cjs"
|
|
212
214
|
},
|
|
213
215
|
"author": "NexoWatt",
|
|
214
216
|
"private": false,
|
|
@@ -219,7 +221,7 @@
|
|
|
219
221
|
},
|
|
220
222
|
"nexowattReleasePolicy": {
|
|
221
223
|
"distTag": "latest",
|
|
222
|
-
"purpose": "
|
|
224
|
+
"purpose": "stable NexoWatt EOS Admin 7.10.8 modern core surfaces and installer service controls"
|
|
223
225
|
},
|
|
224
226
|
"publisher": "NexoWatt"
|
|
225
227
|
}
|
|
@@ -15,7 +15,7 @@ const runtimeRole = read('adminWww/js/eos-role-ui.js');
|
|
|
15
15
|
const sourceWeb = read('src/lib/web.ts');
|
|
16
16
|
const runtimeWeb = read('build/lib/web.js');
|
|
17
17
|
|
|
18
|
-
assert.equal(pkg.version, '7.10.
|
|
18
|
+
assert.equal(pkg.version, '7.10.8', 'Installer EMS release must use npm version 7.10.8');
|
|
19
19
|
assert.equal(runtimeRole, sourceRole, 'built and source role runtimes must be identical');
|
|
20
20
|
|
|
21
21
|
for (const code of [sourceRole, runtimeRole]) {
|
|
@@ -32,9 +32,9 @@ const cleanupSource = read('tools/nexowatt-clean-legacy-runtime.cjs');
|
|
|
32
32
|
// visible header happened to contain "user". Only authenticated backend policy may define the role.
|
|
33
33
|
for (const html of [index, sourceIndex]) {
|
|
34
34
|
assert.doesNotMatch(html, /nexowatt-role-security\.js/i, 'legacy heuristic role guard is still loaded');
|
|
35
|
-
assert.match(html, /eos-role-bootstrap\.js\?v=
|
|
36
|
-
assert.match(html, /eos-policy-client\.js\?v=
|
|
37
|
-
assert.match(html, /eos-role-ui\.js\?v=
|
|
35
|
+
assert.match(html, /eos-role-bootstrap\.js\?v=7108/, 'authoritative role bootstrap cache tag is missing');
|
|
36
|
+
assert.match(html, /eos-policy-client\.js\?v=7108/, 'authoritative policy client cache tag is missing');
|
|
37
|
+
assert.match(html, /eos-role-ui\.js\?v=7108/, 'authoritative role UI cache tag is missing');
|
|
38
38
|
}
|
|
39
39
|
assert.equal(fs.existsSync(path.join(root, 'adminWww/nexowatt-role-security.js')), false, 'legacy runtime still exists');
|
|
40
40
|
assert.equal(fs.existsSync(path.join(root, 'build/lib/eosRoleSecurity.js')), false, 'legacy backend heuristic still exists');
|
|
@@ -143,7 +143,7 @@ assert.ok((io.instanceObjects || []).some(object => object?._id === 'info.uiTabs
|
|
|
143
143
|
assert.match(drawerSource, /backupAdapters\.has\(adapterName\) && instance\.enabled !== true/);
|
|
144
144
|
assert.match(builtDrawer, /o\.has\(A\)&&d\.enabled!==!0/);
|
|
145
145
|
|
|
146
|
-
// 7.10.
|
|
146
|
+
// 7.10.8 End User cleanup: system information is read-only and object actions disappear only for End User.
|
|
147
147
|
for (const code of [webSource, webBuilt]) {
|
|
148
148
|
assert.match(code, /nexowatt\/readonly\/system-info/, 'authenticated read-only system-info route is missing');
|
|
149
149
|
assert.match(code, /authenticationRequired/, 'read-only system-info route must require an authenticated session');
|
|
@@ -31,7 +31,7 @@ const autoUi = read('adminWww/js/eos-auto-update.js');
|
|
|
31
31
|
const autoCss = read('adminWww/css/eos-auto-update.css');
|
|
32
32
|
const autoTag = String(info.autoUpdateCacheTag || info.autoUpdateCacheVersion || info.shellCacheTag || info.shellCacheVersion);
|
|
33
33
|
|
|
34
|
-
must(pkg.version === '7.10.
|
|
34
|
+
must(pkg.version === '7.10.8' && io.version === '7.10.8' && io.common.version === '7.10.8' && info.version === '7.10.8', 'version drift');
|
|
35
35
|
must(io.native.eosRequireFirstLoginPassword === false && io.native.eosRequireFirstLoginPasswordChange === false, 'forced first password still enabled');
|
|
36
36
|
must(!index.includes('eos-account-management.js'), 'custom reset UI still loaded');
|
|
37
37
|
must(!boot.includes('installIntegratedFirstLogin(base);') && !boot.includes('showFirstLoginPassword(resolved, base);'), 'forced first-login UI still active');
|
|
@@ -49,7 +49,7 @@ must(!autoBackend.includes('extendForeignObjectAsync(this.instanceId'), 'runtime
|
|
|
49
49
|
must(web.includes('this.nexowattStableUpdateManager?.stop();'), 'auto-update manager is not stopped with the web server');
|
|
50
50
|
must(fs.existsSync(path.join(root, 'build/lib/eosRequestSecurity.js')), 'eosRequestSecurity runtime module missing');
|
|
51
51
|
|
|
52
|
-
// 7.10.4 placement acceptance remains mandatory in 7.10.
|
|
52
|
+
// 7.10.4 placement acceptance remains mandatory in 7.10.8: System Settings only.
|
|
53
53
|
must(index.includes(`eos-auto-update.js?v=${autoTag}`), 'auto-update JavaScript cache key missing');
|
|
54
54
|
must(index.includes(`eos-auto-update.css?v=${autoTag}`), 'auto-update CSS cache key missing');
|
|
55
55
|
must(autoUi.includes('[role="dialog"][aria-labelledby="system-settings-dialog-title"]'), 'System Settings selector missing');
|
|
@@ -13,7 +13,7 @@ const runtimeRole = read('adminWww/js/eos-role-ui.js');
|
|
|
13
13
|
const sourceMain = read('src/main.ts');
|
|
14
14
|
const builtMain = read('build/main.js');
|
|
15
15
|
|
|
16
|
-
assert.equal(pkg.version, '7.10.
|
|
16
|
+
assert.equal(pkg.version, '7.10.8', 'release must use a new npm version');
|
|
17
17
|
for (const web of [sourceWeb, builtWeb]) {
|
|
18
18
|
assert.match(web, /nexowatt\/readonly\/system-info/, 'read-only system information endpoint missing');
|
|
19
19
|
assert.match(web, /sendEosReadonlySystemInfo/, 'read-only system information handler missing');
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const assert = require('node:assert/strict');
|
|
5
|
+
const fs = require('node:fs');
|
|
6
|
+
const path = require('node:path');
|
|
7
|
+
|
|
8
|
+
const root = path.resolve(__dirname, '..');
|
|
9
|
+
const read = relative => fs.readFileSync(path.join(root, relative), 'utf8');
|
|
10
|
+
const json = relative => JSON.parse(read(relative));
|
|
11
|
+
|
|
12
|
+
const pkg = json('package.json');
|
|
13
|
+
const sourceRole = read('src-admin/public/js/eos-role-ui.js');
|
|
14
|
+
const runtimeRole = read('adminWww/js/eos-role-ui.js');
|
|
15
|
+
const sourceBoot = read('src-admin/public/js/eos-role-bootstrap.js');
|
|
16
|
+
const runtimeBoot = read('adminWww/js/eos-role-bootstrap.js');
|
|
17
|
+
const sourceShell = read('src-admin/public/js/nexowatt-native-shell.js');
|
|
18
|
+
const runtimeShell = read('adminWww/js/nexowatt-native-shell.js');
|
|
19
|
+
const sourceCss = read('src-admin/public/css/nexowatt-native-shell.css');
|
|
20
|
+
const runtimeCss = read('adminWww/css/nexowatt-native-shell.css');
|
|
21
|
+
const drawer = read('src-admin/src/components/Drawer.tsx');
|
|
22
|
+
const index = read('adminWww/index.html');
|
|
23
|
+
|
|
24
|
+
assert.equal(pkg.version, '7.10.8', 'UI foundation release must use npm version 7.10.8');
|
|
25
|
+
assert.equal(sourceRole, runtimeRole, 'role source/runtime drift');
|
|
26
|
+
assert.equal(sourceBoot, runtimeBoot, 'bootstrap source/runtime drift');
|
|
27
|
+
assert.equal(sourceShell, runtimeShell, 'shell source/runtime drift');
|
|
28
|
+
assert.equal(sourceCss, runtimeCss, 'shell CSS source/runtime drift');
|
|
29
|
+
|
|
30
|
+
for (const code of [sourceRole, runtimeRole]) {
|
|
31
|
+
assert.match(code, /const isGloballyHiddenTab = tab => normalize\(tab\) === 'tab-enums'/, 'global Structure hide missing');
|
|
32
|
+
assert.match(code, /if \(route === 'easy' \|\| isGloballyHiddenTab\(route\)\) return false;/, 'direct Structure route is not denied');
|
|
33
|
+
assert.match(code, /const isHeaderSystemSettingsButton = button =>/, 'header-only System Settings classifier missing');
|
|
34
|
+
assert.match(code, /clickedButton && isHeaderSystemSettingsButton\(clickedButton\)/, 'service-row wrench/arrow can still be intercepted');
|
|
35
|
+
assert.doesNotMatch(code, /clickedButton && isSystemSettingsButton\(clickedButton\)/, 'broad BuildIcon click interception remains');
|
|
36
|
+
assert.doesNotMatch(code, /\['Struktur'.*tab-enums/s, 'Structure remains in role action definitions');
|
|
37
|
+
}
|
|
38
|
+
for (const code of [sourceBoot, runtimeBoot]) {
|
|
39
|
+
assert.match(code, /!isGloballyHiddenTab\(route\)/, 'bootstrap does not deny Structure globally');
|
|
40
|
+
assert.doesNotMatch(code, /route === 'tab-enums'/, 'End User bootstrap still releases Structure');
|
|
41
|
+
}
|
|
42
|
+
for (const code of [sourceShell, runtimeShell]) {
|
|
43
|
+
assert.match(code, /Dienste & Instanzen/, 'modern Services surface missing');
|
|
44
|
+
assert.match(code, /Datenpunkte & Zustände/, 'modern Datapoints surface missing');
|
|
45
|
+
assert.match(code, /title: 'Systemlogs'/, 'modern System Logs surface missing');
|
|
46
|
+
assert.match(code, /ensureTechnicalSurface\(\)/, 'technical surface is not applied');
|
|
47
|
+
assert.match(code, /eos-log-row-error/, 'log severity decoration missing');
|
|
48
|
+
}
|
|
49
|
+
for (const css of [sourceCss, runtimeCss]) {
|
|
50
|
+
for (const marker of [
|
|
51
|
+
'.eos-technical-surface-header',
|
|
52
|
+
'html.eos-route-instances',
|
|
53
|
+
'html.eos-route-objects',
|
|
54
|
+
'html.eos-route-logs',
|
|
55
|
+
'.eos-log-row-error',
|
|
56
|
+
]) assert.ok(css.includes(marker), `missing modern CSS marker ${marker}`);
|
|
57
|
+
}
|
|
58
|
+
assert.doesNotMatch(drawer, /'tab-users',\s*'tab-enums'/, 'Structure is still part of readyToUse');
|
|
59
|
+
assert.match(drawer, /tab\.name !== 'tab-enums'/, 'Drawer does not hard-filter Structure');
|
|
60
|
+
assert.match(index, /nexowatt-native-shell\.css\?v=7108/, '7.10.8 CSS cache key missing');
|
|
61
|
+
assert.match(index, /eos-role-ui\.js\?v=7108/, '7.10.8 role cache key missing');
|
|
62
|
+
assert.match(index, /nexowatt-stable-v7108\.js\?v=7108/, '7.10.8 stable runtime missing');
|
|
63
|
+
|
|
64
|
+
console.log('[NexoWatt EOS v7108 UI foundation] OK (modern Services/Datapoints/Logs, Structure hidden, Installer service controls native)');
|
|
@@ -176,7 +176,7 @@ for (const file of [
|
|
|
176
176
|
'tools/nexowatt-ui-overview-runtime-selftest.cjs',
|
|
177
177
|
'adminWww/js/eos-ems-overview.js',
|
|
178
178
|
'adminWww/css/eos-ems-overview.css',
|
|
179
|
-
'adminWww/static/js/nexowatt-stable-
|
|
179
|
+
'adminWww/static/js/nexowatt-stable-v7108.js',
|
|
180
180
|
'src-admin/src/components/Intro/NexoWattEmsOverview.tsx',
|
|
181
181
|
'tools/nexowatt-publish-channel-guard.cjs',
|
|
182
182
|
'tools/nexowatt-publish-channel-selftest.cjs',
|