improve translations all around

Signed-off-by: si458 <simonsmith5521@gmail.com>

si458 committed Jan 5, 2025 at 21:37 UTC 0dd56d5708caa5c037b9e896d86149fbeced6321
6 files changed +8121 -8490
public/styles/style-bootstrap.css
+10 -3
@@ -247,7 +247,6 @@ body {
247 }
248
249 .nonenglish .topbar_td {
250 - width: 10px;
250 height: 24px;
251 cursor: pointer;
252 padding-left:16px;
@@ -2070,7 +2069,11 @@ nav .lbbuttonsel2 {
2069 #d2devNotes,
2070 #d2devEvent,
2071 #d2runcmd,
2073 -#d2devMessage {
2072 +#d2devMessage,
2073 +#d2smsText,
2074 +#d2emailSubject,
2075 +#d2emailText,
2076 +#broadcastMessage {
2077 background-color: #FFF9D3;
2078 }
2079
@@ -2080,7 +2083,11 @@ nav .lbbuttonsel2 {
2083 .night #d2devNotes,
2084 .night #d2devEvent,
2085 .night #d2runcmd,
2083 -.night #d2devMessage {
2086 +.night #d2devMessage,
2087 +.night #d2smsText,
2088 +.night #d2emailSubject,
2089 +.night #d2emailText,
2090 +.night #broadcastMessage {
2091 background-color: black;
2092 }
2093
translate/translate.json
+7751 -7995
@@ -30,7 +30,7 @@
30 "default3.handlebars->container->column_l->p3->3->1->0->1->1->p3filterevents",
31 "default3.handlebars->container->column_l->p3->3->1->0->1->1->p3limitdropdown",
32 "default3.handlebars->container->column_l->p31->3->1->0->3->1->p31filterevents",
33 - "default3.handlebars->container->column_l->p31->3->1->0->3->3->p31limitdropdown"
33 + "default3.handlebars->container->column_l->p31->3->1->0->3->1->p31limitdropdown"
34 ]
35 },
36 {
@@ -38,8 +38,8 @@
38 "en": " (",
39 "nl": " (",
40 "xloc": [
41 - "default.handlebars->47->1540",
42 - "default3.handlebars->35->1418"
41 + "default.handlebars->47->1541",
42 + "default3.handlebars->35->1526"
43 ]
44 },
45 {
@@ -68,10 +68,10 @@
68 "zh-cht": " + CIRA",
69 "uk": " + CIRA",
70 "xloc": [
71 - "default.handlebars->47->2207",
72 - "default.handlebars->47->2209",
73 - "default3.handlebars->35->2062",
74 - "default3.handlebars->35->2064"
71 + "default.handlebars->47->2211",
72 + "default.handlebars->47->2213",
73 + "default3.handlebars->35->2206",
74 + "default3.handlebars->35->2208"
75 ]
76 },
77 {
@@ -102,7 +102,7 @@
102 "xloc": [
103 "default-mobile.handlebars->11->59",
104 "default.handlebars->47->79",
105 - "default3.handlebars->35->78"
105 + "default3.handlebars->35->79"
106 ]
107 },
108 {
@@ -133,7 +133,7 @@
133 "xloc": [
134 "default-mobile.handlebars->11->57",
135 "default.handlebars->47->77",
136 - "default3.handlebars->35->76"
136 + "default3.handlebars->35->77"
137 ]
138 },
139 {
@@ -164,7 +164,7 @@
164 "xloc": [
165 "default-mobile.handlebars->11->55",
166 "default.handlebars->47->75",
167 - "default3.handlebars->35->74"
167 + "default3.handlebars->35->75"
168 ]
169 },
170 {
@@ -195,7 +195,7 @@
195 "xloc": [
196 "default-mobile.handlebars->11->60",
197 "default.handlebars->47->80",
198 - "default3.handlebars->35->79"
198 + "default3.handlebars->35->80"
199 ]
200 },
201 {
@@ -226,7 +226,7 @@
226 "xloc": [
227 "default-mobile.handlebars->11->58",
228 "default.handlebars->47->78",
229 - "default3.handlebars->35->77"
229 + "default3.handlebars->35->78"
230 ]
231 },
232 {
@@ -257,7 +257,7 @@
257 "xloc": [
258 "default-mobile.handlebars->11->56",
259 "default.handlebars->47->76",
260 - "default3.handlebars->35->75"
260 + "default3.handlebars->35->76"
261 ]
262 },
263 {
@@ -290,20 +290,8 @@
290 "default-mobile.handlebars->11->54",
291 "default.handlebars->47->73",
292 "default.handlebars->47->74",
293 - "default3.handlebars->35->72",
294 - "default3.handlebars->35->73"
295 - ]
296 - },
297 - {
298 - "en": " Add Device",
299 - "xloc": [
300 - "default3.handlebars->35->2689"
301 - ]
302 - },
303 - {
304 - "en": " Add Device Group",
305 - "xloc": [
306 - "default3.handlebars->35->2683"
293 + "default3.handlebars->35->73",
294 + "default3.handlebars->35->74"
295 ]
296 },
297 {
@@ -332,12 +320,6 @@
320 "zh-cht": " 新增用戶",
321 "uk": " Додати Користувача"
322 },
335 - {
336 - "en": " Add Users",
337 - "xloc": [
338 - "default3.handlebars->35->2678"
339 - ]
340 - },
323 {
324 "bs": " MeshCentral Router",
325 "ca": " Encaminador MeshCentral",
@@ -390,8 +372,8 @@
372 "zh-cht": " 可以使用密碼提示,但不建議使用。",
373 "uk": " Підказку для пароля можна використати, але не рекомендується.",
374 "xloc": [
393 - "default.handlebars->47->2083",
394 - "default3.handlebars->35->1912"
375 + "default.handlebars->47->2085",
376 + "default3.handlebars->35->2064"
377 ]
378 },
379 {
@@ -420,10 +402,10 @@
402 "zh-cht": " 用戶需要先登入到該伺服器一次,然後才能將其新增到裝置群。",
403 "uk": " Користувачам потрібно підключитися хоча б раз до цього серверу, щоб мати можливість бути доданими у групи пристроїв.",
404 "xloc": [
423 - "default.handlebars->47->2331",
424 - "default.handlebars->47->2913",
425 - "default3.handlebars->35->2162",
426 - "default3.handlebars->35->2705"
405 + "default.handlebars->47->2335",
406 + "default.handlebars->47->2917",
407 + "default3.handlebars->35->2331",
408 + "default3.handlebars->35->2910"
409 ]
410 },
411 {
@@ -504,7 +486,7 @@
486 "zh-cht": " 節點",
487 "uk": " вузол",
488 "xloc": [
507 - "default-mobile.handlebars->11->475"
489 + "default-mobile.handlebars->11->481"
490 ]
491 },
492 {
@@ -533,7 +515,7 @@
515 "zh-cht": " 節點",
516 "uk": " вузли",
517 "xloc": [
536 - "default-mobile.handlebars->11->476"
518 + "default-mobile.handlebars->11->482"
519 ]
520 },
521 {
@@ -562,8 +544,8 @@
544 "zh-cht": " TLS。",
545 "uk": " із TLS.",
546 "xloc": [
565 - "default.handlebars->47->270",
566 - "default3.handlebars->35->250"
547 + "default.handlebars->47->273",
548 + "default3.handlebars->35->270"
549 ]
550 },
551 {
@@ -592,8 +574,8 @@
574 "zh-cht": " 沒有TLS。",
575 "uk": " без TLS.",
576 "xloc": [
595 - "default.handlebars->47->271",
596 - "default3.handlebars->35->251"
577 + "default.handlebars->47->274",
578 + "default3.handlebars->35->271"
579 ]
580 },
581 {
@@ -994,7 +976,8 @@
976 "zh-cht": "(可選的)",
977 "uk": "(довільне)",
978 "xloc": [
997 - "default.handlebars->47->566"
979 + "default.handlebars->47->569",
980 + "default3.handlebars->35->566"
981 ]
982 },
983 {
@@ -1016,8 +999,8 @@
999 "ru": ")",
1000 "xloc": [
1001 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3createMeshLink1",
1019 - "default.handlebars->47->1541",
1020 - "default3.handlebars->35->1419"
1002 + "default.handlebars->47->1542",
1003 + "default3.handlebars->35->1527"
1004 ]
1005 },
1006 {
@@ -1046,10 +1029,10 @@
1029 "zh-cht": "* 8個字符,1個大寫,1個小寫,1個數字,1個非字母數字。",
1030 "uk": "* 8 символів, 1 велика літера, 1 маленька літера, 1 цифра, 1 спеціальний знак.",
1031 "xloc": [
1049 - "default.handlebars->47->2291",
1050 - "default.handlebars->47->528",
1051 - "default3.handlebars->35->2131",
1052 - "default3.handlebars->35->492"
1032 + "default.handlebars->47->2295",
1033 + "default.handlebars->47->531",
1034 + "default3.handlebars->35->2288",
1035 + "default3.handlebars->35->528"
1036 ]
1037 },
1038 {
@@ -1078,8 +1061,8 @@
1061 "zh-cht": "*對於BSD,首先運行“ pkg install wget sudo bash ”。",
1062 "uk": "* Для BSD, запустіть \\\"pkg install wget sudo bash\\\" спочатку.",
1063 "xloc": [
1081 - "default.handlebars->47->625",
1082 - "default3.handlebars->35->564"
1064 + "default.handlebars->47->628",
1065 + "default3.handlebars->35->625"
1066 ]
1067 },
1068 {
@@ -1156,22 +1139,22 @@
1139 "zh-chs": ",",
1140 "zh-cht": ",",
1141 "xloc": [
1159 - "default-mobile.handlebars->11->1012",
1160 - "default-mobile.handlebars->11->805",
1161 - "default-mobile.handlebars->11->807",
1162 - "default-mobile.handlebars->11->809",
1163 - "default.handlebars->47->1007",
1164 - "default.handlebars->47->1647",
1165 - "default.handlebars->47->1649",
1166 - "default.handlebars->47->1651",
1167 - "default.handlebars->47->2407",
1168 - "default.handlebars->47->2686",
1169 - "default3.handlebars->35->1510",
1170 - "default3.handlebars->35->1512",
1171 - "default3.handlebars->35->1514",
1172 - "default3.handlebars->35->2237",
1173 - "default3.handlebars->35->2503",
1174 - "default3.handlebars->35->944"
1142 + "default-mobile.handlebars->11->1018",
1143 + "default-mobile.handlebars->11->811",
1144 + "default-mobile.handlebars->11->813",
1145 + "default-mobile.handlebars->11->815",
1146 + "default.handlebars->47->1008",
1147 + "default.handlebars->47->1648",
1148 + "default.handlebars->47->1650",
1149 + "default.handlebars->47->1652",
1150 + "default.handlebars->47->2411",
1151 + "default.handlebars->47->2690",
1152 + "default3.handlebars->35->1005",
1153 + "default3.handlebars->35->1632",
1154 + "default3.handlebars->35->1634",
1155 + "default3.handlebars->35->1636",
1156 + "default3.handlebars->35->2407",
1157 + "default3.handlebars->35->2686"
1158 ]
1159 },
1160 {
@@ -1284,9 +1267,9 @@
1267 "zh-cht": ",只適用於Intel&reg; AMT",
1268 "uk": ", лише Intel&reg; AMT",
1269 "xloc": [
1287 - "default-mobile.handlebars->11->399",
1288 - "default.handlebars->47->356",
1289 - "default3.handlebars->35->328"
1270 + "default-mobile.handlebars->11->405",
1271 + "default.handlebars->47->359",
1272 + "default3.handlebars->35->356"
1273 ]
1274 },
1275 {
@@ -1315,8 +1298,8 @@
1298 "zh-cht": ", 本地設備",
1299 "uk": ", Локальні Пристрої",
1300 "xloc": [
1318 - "default.handlebars->47->358",
1319 - "default3.handlebars->35->330"
1301 + "default.handlebars->47->361",
1302 + "default3.handlebars->35->358"
1303 ]
1304 },
1305 {
@@ -1345,9 +1328,9 @@
1328 "zh-cht": ",MQTT在線",
1329 "uk": ", MQTT працює",
1330 "xloc": [
1348 - "default-mobile.handlebars->11->914",
1349 - "default.handlebars->47->1757",
1350 - "default3.handlebars->35->1618"
1331 + "default-mobile.handlebars->11->920",
1332 + "default.handlebars->47->1758",
1333 + "default3.handlebars->35->1740"
1334 ]
1335 },
1336 {
@@ -1376,10 +1359,10 @@
1359 "zh-cht": ", 不同意",
1360 "uk": ", Нема Погодження",
1361 "xloc": [
1379 - "default.handlebars->47->1102",
1380 - "default.handlebars->47->2249",
1381 - "default3.handlebars->35->1039",
1382 - "default3.handlebars->35->2104"
1362 + "default.handlebars->47->1103",
1363 + "default.handlebars->47->2253",
1364 + "default3.handlebars->35->1100",
1365 + "default3.handlebars->35->2248"
1366 ]
1367 },
1368 {
@@ -1408,10 +1391,10 @@
1391 "zh-cht": ",提示同意",
1392 "uk": ", Запит на погодження",
1393 "xloc": [
1411 - "default.handlebars->47->1103",
1412 - "default.handlebars->47->2250",
1413 - "default3.handlebars->35->1040",
1414 - "default3.handlebars->35->2105"
1394 + "default.handlebars->47->1104",
1395 + "default.handlebars->47->2254",
1396 + "default3.handlebars->35->1101",
1397 + "default3.handlebars->35->2249"
1398 ]
1399 },
1400 {
@@ -1439,8 +1422,8 @@
1422 "zh-chs": ", RDP",
1423 "zh-cht": ", RDP",
1424 "xloc": [
1442 - "default.handlebars->47->1402",
1443 - "default3.handlebars->35->1296"
1425 + "default.handlebars->47->1403",
1426 + "default3.handlebars->35->1390"
1427 ]
1428 },
1429 {
@@ -1469,10 +1452,10 @@
1452 "zh-cht": ", 每天重複",
1453 "uk": ", Повторюється щодня",
1454 "xloc": [
1472 - "default.handlebars->47->1099",
1473 - "default.handlebars->47->2246",
1474 - "default3.handlebars->35->1036",
1475 - "default3.handlebars->35->2101"
1455 + "default.handlebars->47->1100",
1456 + "default.handlebars->47->2250",
1457 + "default3.handlebars->35->1097",
1458 + "default3.handlebars->35->2245"
1459 ]
1460 },
1461 {
@@ -1501,10 +1484,10 @@
1484 "zh-cht": ", 每週重複一次",
1485 "uk": ", Повторюється щотижня",
1486 "xloc": [
1504 - "default.handlebars->47->1100",
1505 - "default.handlebars->47->2247",
1506 - "default3.handlebars->35->1037",
1507 - "default3.handlebars->35->2102"
1487 + "default.handlebars->47->1101",
1488 + "default.handlebars->47->2251",
1489 + "default3.handlebars->35->1098",
1490 + "default3.handlebars->35->2246"
1491 ]
1492 },
1493 {
@@ -1559,8 +1542,8 @@
1542 "zh-cht": ", 中繼設備",
1543 "uk": ", Пов'язані Пристрої",
1544 "xloc": [
1562 - "default.handlebars->47->357",
1563 - "default3.handlebars->35->329"
1545 + "default.handlebars->47->360",
1546 + "default3.handlebars->35->357"
1547 ]
1548 },
1549 {
@@ -1588,9 +1571,9 @@
1571 "zh-chs": ", SFTP",
1572 "zh-cht": ", SFTP",
1573 "xloc": [
1591 - "default-mobile.handlebars->11->699",
1592 - "default.handlebars->47->1524",
1593 - "default3.handlebars->35->1406"
1574 + "default-mobile.handlebars->11->705",
1575 + "default.handlebars->47->1525",
1576 + "default3.handlebars->35->1510"
1577 ]
1578 },
1579 {
@@ -1618,8 +1601,8 @@
1601 "zh-chs": ", SSH",
1602 "zh-cht": ", SSH",
1603 "xloc": [
1621 - "default.handlebars->47->1492",
1622 - "default3.handlebars->35->1376"
1604 + "default.handlebars->47->1493",
1605 + "default3.handlebars->35->1478"
1606 ]
1607 },
1608 {
@@ -1647,8 +1630,8 @@
1630 "zh-chs": ",软体KVM",
1631 "zh-cht": ",軟體KVM",
1632 "xloc": [
1650 - "default.handlebars->47->1385",
1651 - "default3.handlebars->35->1281",
1633 + "default.handlebars->47->1386",
1634 + "default3.handlebars->35->1373",
1635 "sharing.handlebars->11->12"
1636 ]
1637 },
@@ -1678,10 +1661,10 @@
1661 "zh-cht": ", 工具欄",
1662 "uk": ", Панель Засобів",
1663 "xloc": [
1681 - "default.handlebars->47->1104",
1682 - "default.handlebars->47->2251",
1683 - "default3.handlebars->35->1041",
1684 - "default3.handlebars->35->2106"
1664 + "default.handlebars->47->1105",
1665 + "default.handlebars->47->2255",
1666 + "default3.handlebars->35->1102",
1667 + "default3.handlebars->35->2250"
1668 ]
1669 },
1670 {
@@ -1736,10 +1719,10 @@
1719 "zh-cht": ", 僅查看桌面",
1720 "uk": ", Тільки перегляд стільниці",
1721 "xloc": [
1739 - "default.handlebars->47->1101",
1740 - "default.handlebars->47->2248",
1741 - "default3.handlebars->35->1038",
1742 - "default3.handlebars->35->2103"
1722 + "default.handlebars->47->1102",
1723 + "default.handlebars->47->2252",
1724 + "default3.handlebars->35->1099",
1725 + "default3.handlebars->35->2247"
1726 ]
1727 },
1728 {
@@ -1767,24 +1750,21 @@
1750 "zh-chs": ",WebRTC",
1751 "zh-cht": ",WebRTC",
1752 "xloc": [
1770 - "default-mobile.handlebars->11->640",
1771 - "default-mobile.handlebars->11->677",
1772 - "default-mobile.handlebars->11->700",
1773 - "default.handlebars->47->1401",
1774 - "default.handlebars->47->1493",
1775 - "default.handlebars->47->1525",
1776 - "default3.handlebars->35->1295",
1777 - "default3.handlebars->35->1377",
1778 - "default3.handlebars->35->1407",
1753 + "default-mobile.handlebars->11->646",
1754 + "default-mobile.handlebars->11->683",
1755 + "default-mobile.handlebars->11->706",
1756 + "default.handlebars->47->1402",
1757 + "default.handlebars->47->1494",
1758 + "default.handlebars->47->1526",
1759 + "default3.handlebars->35->1389",
1760 + "default3.handlebars->35->1479",
1761 + "default3.handlebars->35->1511",
1762 "sharing.handlebars->11->19",
1763 "sharing.handlebars->11->27",
1764 "sharing.handlebars->11->44",
1765 "xterm.handlebars->9->6"
1766 ]
1767 },
1785 - {
1786 - "en": ", click\n here to enable it."
1787 - },
1768 {
1769 "bs": ", kliknite ovdje da biste to omogućili.",
1770 "ca": ", feu clic aquí per activar-lo.",
@@ -2013,8 +1993,8 @@
1993 "zh-cht": ",{0}觀看",
1994 "uk": ", {0} стежень(ння)",
1995 "xloc": [
2016 - "default.handlebars->47->1396",
2017 - "default3.handlebars->35->1291",
1996 + "default.handlebars->47->1397",
1997 + "default3.handlebars->35->1384",
1998 "sharing.handlebars->11->13"
1999 ]
2000 },
@@ -2045,38 +2025,7 @@
2025 ]
2026 },
2027 {
2048 - "bs": "---",
2049 - "ca": "---",
2050 - "cs": "---",
2051 - "da": "---",
2052 - "de": "---",
2053 - "en": "---",
2054 - "es": "---",
2055 - "fi": "---",
2056 - "fr": "---",
2057 - "hi": "---",
2058 - "hu": "---",
2059 - "it": "---",
2060 - "ja": "---",
2061 - "ko": "---",
2062 - "nl": "---",
2063 - "pl": "---",
2064 - "pt": "---",
2065 - "pt-br": "---",
2066 - "ru": "---",
2067 - "sv": "---",
2068 - "tr": "---",
2069 - "zh-chs": "---",
2070 - "zh-cht": "---"
2071 - },
2072 - {
2073 - "en": "--}}",
2074 - "xloc": [
2075 - "default3.handlebars->container->column_l->p30->p30info",
2076 - "default3.handlebars->container->column_l->p51->p51info",
2077 - "default3.handlebars->container->topbar->1->1->EventsSubMenuSpan",
2078 - "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->5"
2079 - ]
2028 + "en": "--}}"
2029 },
2030 {
2031 "cs": ".",
@@ -2140,15 +2089,15 @@
2089 "zh-chs": "...",
2090 "zh-cht": "...",
2091 "xloc": [
2143 - "default-mobile.handlebars->11->350",
2144 - "default-mobile.handlebars->11->352",
2145 - "default-mobile.handlebars->11->706",
2146 - "default.handlebars->47->1539",
2147 - "default.handlebars->47->2473",
2148 - "default.handlebars->47->3150",
2149 - "default3.handlebars->35->1417",
2150 - "default3.handlebars->35->2297",
2151 - "default3.handlebars->35->2924",
2092 + "default-mobile.handlebars->11->356",
2093 + "default-mobile.handlebars->11->358",
2094 + "default-mobile.handlebars->11->712",
2095 + "default.handlebars->47->1540",
2096 + "default.handlebars->47->2477",
2097 + "default.handlebars->47->3154",
2098 + "default3.handlebars->35->1525",
2099 + "default3.handlebars->35->2473",
2100 + "default3.handlebars->35->3141",
2101 "sharing.handlebars->11->50"
2102 ]
2103 },
@@ -2334,8 +2283,8 @@
2283 "zh-cht": "1個活躍時段",
2284 "uk": "1 активна сесія",
2285 "xloc": [
2337 - "default.handlebars->47->3008",
2338 - "default3.handlebars->35->2799"
2286 + "default.handlebars->47->3012",
2287 + "default3.handlebars->35->3005"
2288 ]
2289 },
2290 {
@@ -2364,10 +2313,10 @@
2313 "zh-cht": "1個位元組",
2314 "uk": "1 байт",
2315 "xloc": [
2367 - "default-mobile.handlebars->11->1056",
2368 - "default-mobile.handlebars->11->362",
2369 - "default.handlebars->47->2497",
2370 - "default3.handlebars->35->2320",
2316 + "default-mobile.handlebars->11->1062",
2317 + "default-mobile.handlebars->11->368",
2318 + "default.handlebars->47->2501",
2319 + "default3.handlebars->35->2497",
2320 "download.handlebars->3->1",
2321 "download2.handlebars->5->1",
2322 "sharing.handlebars->11->101"
@@ -2428,8 +2377,8 @@
2377 "zh-cht": "1位聯絡文",
2378 "uk": "1 підключення",
2379 "xloc": [
2431 - "default.handlebars->47->1398",
2432 - "default3.handlebars->35->1293",
2380 + "default.handlebars->47->1399",
2381 + "default3.handlebars->35->1386",
2382 "sharing.handlebars->11->15"
2383 ]
2384 },
@@ -2459,12 +2408,12 @@
2408 "zh-cht": "1天",
2409 "uk": "1 день",
2410 "xloc": [
2462 - "default.handlebars->47->278",
2463 - "default.handlebars->47->557",
2464 - "default.handlebars->47->571",
2465 - "default3.handlebars->35->258",
2466 - "default3.handlebars->35->519",
2467 - "default3.handlebars->35->532"
2411 + "default.handlebars->47->281",
2412 + "default.handlebars->47->560",
2413 + "default.handlebars->47->574",
2414 + "default3.handlebars->35->278",
2415 + "default3.handlebars->35->557",
2416 + "default3.handlebars->35->571"
2417 ]
2418 },
2419 {
@@ -2493,8 +2442,8 @@
2442 "zh-cht": "1群",
2443 "uk": "1 група",
2444 "xloc": [
2496 - "default.handlebars->47->2963",
2497 - "default3.handlebars->35->2754"
2445 + "default.handlebars->47->2967",
2446 + "default3.handlebars->35->2960"
2447 ]
2448 },
2449 {
@@ -2523,12 +2472,12 @@
2472 "zh-cht": "1小時",
2473 "uk": "1 година",
2474 "xloc": [
2526 - "default.handlebars->47->276",
2527 - "default.handlebars->47->555",
2528 - "default.handlebars->47->569",
2529 - "default3.handlebars->35->256",
2530 - "default3.handlebars->35->517",
2531 - "default3.handlebars->35->530"
2475 + "default.handlebars->47->279",
2476 + "default.handlebars->47->558",
2477 + "default.handlebars->47->572",
2478 + "default3.handlebars->35->276",
2479 + "default3.handlebars->35->555",
2480 + "default3.handlebars->35->569"
2481 ]
2482 },
2483 {
@@ -2557,10 +2506,10 @@
2506 "zh-cht": "1分鐘",
2507 "uk": "1 хвилина",
2508 "xloc": [
2560 - "default.handlebars->47->1212",
2561 - "default.handlebars->47->2048",
2562 - "default3.handlebars->35->1136",
2563 - "default3.handlebars->35->1886"
2509 + "default.handlebars->47->1213",
2510 + "default.handlebars->47->2050",
2511 + "default3.handlebars->35->1208",
2512 + "default3.handlebars->35->2030"
2513 ]
2514 },
2515 {
@@ -2590,7 +2539,7 @@
2539 "uk": "1 хвилина до відключення",
2540 "xloc": [
2541 "default.handlebars->47->83",
2593 - "default3.handlebars->35->82"
2542 + "default3.handlebars->35->83"
2543 ]
2544 },
2545 {
@@ -2619,12 +2568,12 @@
2568 "zh-cht": "1個月",
2569 "uk": "1 місяць",
2570 "xloc": [
2622 - "default.handlebars->47->280",
2623 - "default.handlebars->47->559",
2624 - "default.handlebars->47->573",
2625 - "default3.handlebars->35->260",
2626 - "default3.handlebars->35->521",
2627 - "default3.handlebars->35->534"
2571 + "default.handlebars->47->283",
2572 + "default.handlebars->47->562",
2573 + "default.handlebars->47->576",
2574 + "default3.handlebars->35->280",
2575 + "default3.handlebars->35->559",
2576 + "default3.handlebars->35->573"
2577 ]
2578 },
2579 {
@@ -2653,8 +2602,8 @@
2602 "zh-cht": "有1個用戶沒有顯示,請使用搜尋框搜尋用戶...",
2603 "uk": "ще 1 користувача не показано, використовуйте поле пошуку для перегляду користувачів...",
2604 "xloc": [
2656 - "default.handlebars->47->2718",
2657 - "default3.handlebars->35->2533"
2605 + "default.handlebars->47->2722",
2606 + "default3.handlebars->35->2718"
2607 ]
2608 },
2609 {
@@ -2683,8 +2632,8 @@
2632 "zh-cht": "1個節點",
2633 "uk": "1 вузол",
2634 "xloc": [
2686 - "default.handlebars->47->686",
2687 - "default3.handlebars->35->644"
2635 + "default.handlebars->47->687",
2636 + "default3.handlebars->35->684"
2637 ]
2638 },
2639 {
@@ -2765,9 +2714,9 @@
2714 "zh-cht": "1秒",
2715 "uk": "1 секунда",
2716 "xloc": [
2768 - "default-mobile.handlebars->11->576",
2769 - "default.handlebars->47->1250",
2770 - "default3.handlebars->35->1173"
2717 + "default-mobile.handlebars->11->582",
2718 + "default.handlebars->47->1251",
2719 + "default3.handlebars->35->1246"
2720 ]
2721 },
2722 {
@@ -2797,7 +2746,7 @@
2746 "uk": "1 секунда до відключення",
2747 "xloc": [
2748 "default.handlebars->47->81",
2800 - "default3.handlebars->35->80"
2749 + "default3.handlebars->35->81"
2750 ]
2751 },
2752 {
@@ -2826,8 +2775,8 @@
2775 "zh-cht": "1 個選定的設備處於離線狀態。",
2776 "uk": "1 відібраний пристрій поза мережою.",
2777 "xloc": [
2829 - "default.handlebars->47->754",
2830 - "default3.handlebars->35->710"
2778 + "default.handlebars->47->755",
2779 + "default3.handlebars->35->752"
2780 ]
2781 },
2782 {
@@ -2856,8 +2805,8 @@
2805 "zh-cht": "1 個選定的設備在線。",
2806 "uk": "1 відібраний пристрій у мережі.",
2807 "xloc": [
2859 - "default.handlebars->47->752",
2860 - "default3.handlebars->35->708"
2808 + "default.handlebars->47->753",
2809 + "default3.handlebars->35->750"
2810 ]
2811 },
2812 {
@@ -2886,29 +2835,29 @@
2835 "zh-cht": "1節",
2836 "uk": "1 сесія",
2837 "xloc": [
2889 - "default-mobile.handlebars->11->416",
2890 - "default-mobile.handlebars->11->419",
2891 - "default-mobile.handlebars->11->423",
2892 - "default-mobile.handlebars->11->427",
2893 - "default-mobile.handlebars->11->431",
2894 - "default-mobile.handlebars->11->435",
2895 - "default-mobile.handlebars->11->439",
2896 - "default.handlebars->47->2722",
2897 - "default.handlebars->47->447",
2838 + "default-mobile.handlebars->11->422",
2839 + "default-mobile.handlebars->11->425",
2840 + "default-mobile.handlebars->11->429",
2841 + "default-mobile.handlebars->11->433",
2842 + "default-mobile.handlebars->11->437",
2843 + "default-mobile.handlebars->11->441",
2844 + "default-mobile.handlebars->11->445",
2845 + "default.handlebars->47->2726",
2846 "default.handlebars->47->450",
2899 - "default.handlebars->47->454",
2900 - "default.handlebars->47->458",
2901 - "default.handlebars->47->462",
2902 - "default.handlebars->47->466",
2903 - "default.handlebars->47->470",
2904 - "default3.handlebars->35->2537",
2905 - "default3.handlebars->35->419",
2906 - "default3.handlebars->35->422",
2907 - "default3.handlebars->35->426",
2908 - "default3.handlebars->35->430",
2909 - "default3.handlebars->35->434",
2910 - "default3.handlebars->35->438",
2911 - "default3.handlebars->35->442"
2847 + "default.handlebars->47->453",
2848 + "default.handlebars->47->457",
2849 + "default.handlebars->47->461",
2850 + "default.handlebars->47->465",
2851 + "default.handlebars->47->469",
2852 + "default.handlebars->47->473",
2853 + "default3.handlebars->35->2722",
2854 + "default3.handlebars->35->447",
2855 + "default3.handlebars->35->450",
2856 + "default3.handlebars->35->454",
2857 + "default3.handlebars->35->458",
2858 + "default3.handlebars->35->462",
2859 + "default3.handlebars->35->466",
2860 + "default3.handlebars->35->470"
2861 ]
2862 },
2863 {
@@ -2937,12 +2886,12 @@
2886 "zh-cht": "1週",
2887 "uk": "1 тиждень",
2888 "xloc": [
2940 - "default.handlebars->47->279",
2941 - "default.handlebars->47->558",
2942 - "default.handlebars->47->572",
2943 - "default3.handlebars->35->259",
2944 - "default3.handlebars->35->520",
2945 - "default3.handlebars->35->533"
2889 + "default.handlebars->47->282",
2890 + "default.handlebars->47->561",
2891 + "default.handlebars->47->575",
2892 + "default3.handlebars->35->279",
2893 + "default3.handlebars->35->558",
2894 + "default3.handlebars->35->572"
2895 ]
2896 },
2897 {
@@ -3120,10 +3069,10 @@
3069 "zh-cht": "10分鐘",
3070 "uk": "10 хвилин",
3071 "xloc": [
3123 - "default.handlebars->47->1214",
3124 - "default.handlebars->47->2050",
3125 - "default3.handlebars->35->1138",
3126 - "default3.handlebars->35->1888"
3072 + "default.handlebars->47->1215",
3073 + "default.handlebars->47->2052",
3074 + "default3.handlebars->35->1210",
3075 + "default3.handlebars->35->2032"
3076 ]
3077 },
3078 {
@@ -3152,9 +3101,9 @@
3101 "zh-cht": "10 秒",
3102 "uk": "10 секунд",
3103 "xloc": [
3155 - "default-mobile.handlebars->11->578",
3156 - "default.handlebars->47->1252",
3157 - "default3.handlebars->35->1175"
3104 + "default-mobile.handlebars->11->584",
3105 + "default.handlebars->47->1253",
3106 + "default3.handlebars->35->1248"
3107 ]
3108 },
3109 {
@@ -3277,9 +3226,6 @@
3226 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->9"
3227 ]
3228 },
3280 - {
3281 - "en": "1024×768"
3282 - },
3229 {
3230 "bs": "10x Brzina",
3231 "ca": "Velocitat 10x",
@@ -3335,10 +3281,10 @@
3281 "zh-cht": "12小時",
3282 "uk": "12 годин",
3283 "xloc": [
3338 - "default.handlebars->47->1222",
3339 - "default.handlebars->47->2058",
3340 - "default3.handlebars->35->1146",
3341 - "default3.handlebars->35->1896"
3284 + "default.handlebars->47->1223",
3285 + "default.handlebars->47->2060",
3286 + "default3.handlebars->35->1218",
3287 + "default3.handlebars->35->2040"
3288 ]
3289 },
3290 {
@@ -3428,9 +3374,6 @@
3374 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->11"
3375 ]
3376 },
3431 - {
3432 - "en": "1280×800"
3433 - },
3377 {
3378 "bs": "1440x900",
3379 "ca": "1440x900",
@@ -3462,9 +3405,6 @@
3405 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->13"
3406 ]
3407 },
3465 - {
3466 - "en": "1440×900"
3467 - },
3408 {
3409 "bs": "15 minuta",
3410 "ca": "15 minuts",
@@ -3491,10 +3431,10 @@
3431 "zh-cht": "15分鐘",
3432 "uk": "15 хвилин",
3433 "xloc": [
3494 - "default.handlebars->47->1215",
3495 - "default.handlebars->47->2051",
3496 - "default3.handlebars->35->1139",
3497 - "default3.handlebars->35->1889"
3434 + "default.handlebars->47->1216",
3435 + "default.handlebars->47->2053",
3436 + "default3.handlebars->35->1211",
3437 + "default3.handlebars->35->2033"
3438 ]
3439 },
3440 {
@@ -3523,10 +3463,10 @@
3463 "zh-cht": "16小時",
3464 "uk": "16 годин",
3465 "xloc": [
3526 - "default.handlebars->47->1223",
3527 - "default.handlebars->47->2059",
3528 - "default3.handlebars->35->1147",
3529 - "default3.handlebars->35->1897"
3466 + "default.handlebars->47->1224",
3467 + "default.handlebars->47->2061",
3468 + "default3.handlebars->35->1219",
3469 + "default3.handlebars->35->2041"
3470 ]
3471 },
3472 {
@@ -3560,9 +3500,6 @@
3500 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->15"
3501 ]
3502 },
3563 - {
3564 - "en": "1600×900"
3565 - },
3503 {
3504 "bs": "1680x1050",
3505 "ca": "1680x1050",
@@ -3594,9 +3531,6 @@
3531 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->17"
3532 ]
3533 },
3597 - {
3598 - "en": "1680×1050"
3599 - },
3534 {
3535 "bs": "1920x1080",
3536 "ca": "1920x1080",
@@ -3628,9 +3562,6 @@
3562 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->19"
3563 ]
3564 },
3631 - {
3632 - "en": "1920×1080"
3633 - },
3565 {
3566 "bs": "2 bajta po pikselu",
3567 "ca": "2 bytes per píxel",
@@ -3686,10 +3617,10 @@
3617 "zh-cht": "2天",
3618 "uk": "2 дні",
3619 "xloc": [
3689 - "default.handlebars->47->1225",
3690 - "default.handlebars->47->2061",
3691 - "default3.handlebars->35->1149",
3692 - "default3.handlebars->35->1899"
3620 + "default.handlebars->47->1226",
3621 + "default.handlebars->47->2063",
3622 + "default3.handlebars->35->1221",
3623 + "default3.handlebars->35->2043"
3624 ]
3625 },
3626 {
@@ -3718,10 +3649,10 @@
3649 "zh-cht": "2小時",
3650 "uk": "2 години",
3651 "xloc": [
3721 - "default.handlebars->47->1219",
3722 - "default.handlebars->47->2055",
3723 - "default3.handlebars->35->1143",
3724 - "default3.handlebars->35->1893"
3652 + "default.handlebars->47->1220",
3653 + "default.handlebars->47->2057",
3654 + "default3.handlebars->35->1215",
3655 + "default3.handlebars->35->2037"
3656 ]
3657 },
3658 {
@@ -3750,8 +3681,9 @@
3681 "zh-cht": "兩步登入啟用失敗。",
3682 "uk": "активація двофакторної автентифікації невдала.",
3683 "xloc": [
3753 - "default.handlebars->47->221",
3754 - "default3.handlebars->35->210"
3684 + "default-mobile.handlebars->11->76",
3685 + "default.handlebars->47->223",
3686 + "default3.handlebars->35->222"
3687 ]
3688 },
3689 {
@@ -3780,8 +3712,9 @@
3712 "zh-cht": "兩步登入啟用刪除失敗。",
3713 "uk": "видалення двофакторної автентифікації невдале.",
3714 "xloc": [
3783 - "default.handlebars->47->226",
3784 - "default3.handlebars->35->214"
3715 + "default-mobile.handlebars->11->81",
3716 + "default.handlebars->47->228",
3717 + "default3.handlebars->35->227"
3718 ]
3719 },
3720 {
@@ -3929,10 +3862,10 @@
3862 "zh-cht": "24小時",
3863 "uk": "24 години",
3864 "xloc": [
3932 - "default.handlebars->47->1224",
3933 - "default.handlebars->47->2060",
3934 - "default3.handlebars->35->1148",
3935 - "default3.handlebars->35->1898"
3865 + "default.handlebars->47->1225",
3866 + "default.handlebars->47->2062",
3867 + "default3.handlebars->35->1220",
3868 + "default3.handlebars->35->2042"
3869 ]
3870 },
3871 {
@@ -4018,8 +3951,8 @@
3951 "zh-cht": "2FA備份代碼已清除",
3952 "uk": "ДФА резервні коди очищено",
3953 "xloc": [
4021 - "default.handlebars->47->2610",
4022 - "default3.handlebars->35->2427"
3954 + "default.handlebars->47->2614",
3955 + "default3.handlebars->35->2610"
3956 ]
3957 },
3958 {
@@ -4050,7 +3983,7 @@
3983 "xloc": [
3984 "default-mobile.handlebars->11->63",
3985 "default.handlebars->47->208",
4053 - "default3.handlebars->35->198"
3986 + "default3.handlebars->35->207"
3987 ]
3988 },
3989 {
@@ -4079,8 +4012,8 @@
4012 "zh-cht": "第二個因素",
4013 "uk": "Двофакторний",
4014 "xloc": [
4082 - "default.handlebars->47->3187",
4083 - "default3.handlebars->35->2960"
4015 + "default.handlebars->47->3191",
4016 + "default3.handlebars->35->3178"
4017 ]
4018 },
4019 {
@@ -4109,10 +4042,10 @@
4042 "zh-cht": "啟用第二因素身份驗證",
4043 "uk": "Двофакторна автентифікація увімкнена",
4044 "xloc": [
4112 - "default.handlebars->47->2736",
4113 - "default.handlebars->47->2989",
4114 - "default3.handlebars->35->2551",
4115 - "default3.handlebars->35->2780"
4045 + "default.handlebars->47->2740",
4046 + "default.handlebars->47->2993",
4047 + "default3.handlebars->35->2736",
4048 + "default3.handlebars->35->2986"
4049 ]
4050 },
4051 {
@@ -4163,7 +4096,7 @@
4096 "ru": "3",
4097 "tr": "3",
4098 "xloc": [
4166 - "default-mobile.handlebars->11->733"
4099 + "default-mobile.handlebars->11->739"
4100 ]
4101 },
4102 {
@@ -4282,10 +4215,10 @@
4215 "zh-cht": "30分鐘",
4216 "uk": "30 хвилин",
4217 "xloc": [
4285 - "default.handlebars->47->1216",
4286 - "default.handlebars->47->2052",
4287 - "default3.handlebars->35->1140",
4288 - "default3.handlebars->35->1890"
4218 + "default.handlebars->47->1217",
4219 + "default.handlebars->47->2054",
4220 + "default3.handlebars->35->1212",
4221 + "default3.handlebars->35->2034"
4222 ]
4223 },
4224 {
@@ -4314,9 +4247,9 @@
4247 "zh-cht": "32 位",
4248 "uk": "32-біта",
4249 "xloc": [
4317 - "default-mobile.handlebars->11->744",
4318 - "default.handlebars->47->1604",
4319 - "default3.handlebars->35->1467"
4250 + "default-mobile.handlebars->11->750",
4251 + "default.handlebars->47->1605",
4252 + "default3.handlebars->35->1589"
4253 ]
4254 },
4255 {
@@ -4402,10 +4335,10 @@
4335 "zh-cht": "4天",
4336 "uk": "4 дні",
4337 "xloc": [
4405 - "default.handlebars->47->1226",
4406 - "default.handlebars->47->2062",
4407 - "default3.handlebars->35->1150",
4408 - "default3.handlebars->35->1900"
4338 + "default.handlebars->47->1227",
4339 + "default.handlebars->47->2064",
4340 + "default3.handlebars->35->1222",
4341 + "default3.handlebars->35->2044"
4342 ]
4343 },
4344 {
@@ -4434,10 +4367,10 @@
4367 "zh-cht": "4個小時",
4368 "uk": "4 години",
4369 "xloc": [
4437 - "default.handlebars->47->1220",
4438 - "default.handlebars->47->2056",
4439 - "default3.handlebars->35->1144",
4440 - "default3.handlebars->35->1894"
4370 + "default.handlebars->47->1221",
4371 + "default.handlebars->47->2058",
4372 + "default3.handlebars->35->1216",
4373 + "default3.handlebars->35->2038"
4374 ]
4375 },
4376 {
@@ -4583,10 +4516,10 @@
4516 "zh-cht": "45分鐘",
4517 "uk": "45 хвилин",
4518 "xloc": [
4586 - "default.handlebars->47->1217",
4587 - "default.handlebars->47->2053",
4588 - "default3.handlebars->35->1141",
4589 - "default3.handlebars->35->1891"
4519 + "default.handlebars->47->1218",
4520 + "default.handlebars->47->2055",
4521 + "default3.handlebars->35->1213",
4522 + "default3.handlebars->35->2035"
4523 ]
4524 },
4525 {
@@ -4644,10 +4577,10 @@
4577 "zh-cht": "5分鐘",
4578 "uk": "5 хвилин",
4579 "xloc": [
4647 - "default.handlebars->47->1213",
4648 - "default.handlebars->47->2049",
4649 - "default3.handlebars->35->1137",
4650 - "default3.handlebars->35->1887"
4580 + "default.handlebars->47->1214",
4581 + "default.handlebars->47->2051",
4582 + "default3.handlebars->35->1209",
4583 + "default3.handlebars->35->2031"
4584 ]
4585 },
4586 {
@@ -4676,9 +4609,9 @@
4609 "zh-cht": "5秒",
4610 "uk": "5 секунд",
4611 "xloc": [
4679 - "default-mobile.handlebars->11->577",
4680 - "default.handlebars->47->1251",
4681 - "default3.handlebars->35->1174"
4612 + "default-mobile.handlebars->11->583",
4613 + "default.handlebars->47->1252",
4614 + "default3.handlebars->35->1247"
4615 ]
4616 },
4617 {
@@ -4857,10 +4790,10 @@
4790 "zh-cht": "60分鐘",
4791 "uk": "60 хвилин",
4792 "xloc": [
4860 - "default.handlebars->47->1218",
4861 - "default.handlebars->47->2054",
4862 - "default3.handlebars->35->1142",
4863 - "default3.handlebars->35->1892"
4793 + "default.handlebars->47->1219",
4794 + "default.handlebars->47->2056",
4795 + "default3.handlebars->35->1214",
4796 + "default3.handlebars->35->2036"
4797 ]
4798 },
4799 {
@@ -4947,9 +4880,9 @@
4880 "zh-chs": "64 位",
4881 "zh-cht": "64 位",
4882 "xloc": [
4950 - "default-mobile.handlebars->11->746",
4951 - "default.handlebars->47->1606",
4952 - "default3.handlebars->35->1469"
4883 + "default-mobile.handlebars->11->752",
4884 + "default.handlebars->47->1607",
4885 + "default3.handlebars->35->1591"
4886 ]
4887 },
4888 {
@@ -4983,9 +4916,6 @@
4916 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->d7rdpkvm->3->d7rdpsize->7"
4917 ]
4918 },
4986 - {
4987 - "en": "640×480"
4988 - },
4919 {
4920 "bs": "64-bitna verzija macOS Mesh Agenta",
4921 "ca": "Versió de 64 bits de macOS Mesh Agent",
@@ -5116,8 +5046,8 @@
5046 "zh-cht": "7天電源狀態",
5047 "uk": "7-денний стан живлення",
5048 "xloc": [
5119 - "default.handlebars->47->1297",
5120 - "default3.handlebars->35->1208"
5049 + "default.handlebars->47->1298",
5050 + "default3.handlebars->35->1288"
5051 ]
5052 },
5053 {
@@ -5146,8 +5076,8 @@
5076 "zh-cht": "7天",
5077 "uk": "7 днів",
5078 "xloc": [
5149 - "default.handlebars->47->2063",
5150 - "default3.handlebars->35->1901"
5079 + "default.handlebars->47->2065",
5080 + "default3.handlebars->35->2045"
5081 ]
5082 },
5083 {
@@ -5237,14 +5167,14 @@
5167 "zh-cht": "8小時",
5168 "uk": "8 годин",
5169 "xloc": [
5240 - "default.handlebars->47->1221",
5241 - "default.handlebars->47->2057",
5242 - "default.handlebars->47->556",
5243 - "default.handlebars->47->570",
5244 - "default3.handlebars->35->1145",
5245 - "default3.handlebars->35->1895",
5246 - "default3.handlebars->35->518",
5247 - "default3.handlebars->35->531"
5170 + "default.handlebars->47->1222",
5171 + "default.handlebars->47->2059",
5172 + "default.handlebars->47->559",
5173 + "default.handlebars->47->573",
5174 + "default3.handlebars->35->1217",
5175 + "default3.handlebars->35->2039",
5176 + "default3.handlebars->35->556",
5177 + "default3.handlebars->35->570"
5178 ]
5179 },
5180 {
@@ -5364,35 +5294,6 @@
5294 "player.handlebars->3->50"
5295 ]
5296 },
5367 - {
5368 - "bs": "</table>",
5369 - "ca": "</taula>",
5370 - "cs": "</table>",
5371 - "da": "</table>",
5372 - "de": "</table>",
5373 - "en": "</table>",
5374 - "es": "</table>",
5375 - "fi": "</table>",
5376 - "fr": "</table>",
5377 - "hi": "</table>",
5378 - "hu": "<<",
5379 - "it": "</table>",
5380 - "ja": "</table>",
5381 - "ko": "</table>",
5382 - "nl": "</table>",
5383 - "pl": "</table>",
5384 - "pt": "</table>",
5385 - "pt-br": "</table>",
5386 - "ru": "</table>",
5387 - "sv": "</table>",
5388 - "tr": "</table>",
5389 - "zh-chs": "</table>",
5390 - "zh-cht": "</table>",
5391 - "xloc": [
5392 - "default.handlebars->47->645",
5393 - "default3.handlebars->35->584"
5394 - ]
5395 - },
5297 {
5298 "bs": "<<",
5299 "ca": "<<",
@@ -5421,289 +5322,6 @@
5322 "player.handlebars->p11->deskarea0->deskarea4->3"
5323 ]
5324 },
5424 - {
5425 - "bs": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardverski ključevi</a> se koriste kao sekundarna autentifikacija za prijavu.",
5426 - "ca": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Les claus de maquinari</a> s'utilitzen com a autenticació d'inici de sessió secundària.",
5427 - "cs": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardwarové klíče</a> jsou použity jako druhý faktor ověřování.",
5428 - "da": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardwarenøgler</a> bruges som sekundær login-godkendelse.",
5429 - "de": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardware-Schlüssel</a> werden für Zweifaktor-Anmeldung verwendet.",
5430 - "en": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardware keys</a> are used as secondary login authentication.",
5431 - "es": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Las claves de Hardware</a> son usadas como segundo factor de autenticación.",
5432 - "fi": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Laiteavaimia </a> käytetään toissijaisena kirjautumistunnistuksena.",
5433 - "fr": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Les clés physiques (Yubikeys)</a> sont utilisées pour l'authentification à double facteur.",
5434 - "hi": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\"> हार्डवेयर कुंजियाँ </a> को द्वितीयक लॉगिन प्रमाणीकरण के रूप में उपयोग किया जाता है।",
5435 - "hu": "A <a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">hardware kulcsok</a> másodlagos bejelentkezési hitelesítésre szolgálnak.",
5436 - "it": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">chiavi hardware</a>vengono utilizzate come autenticazione di accesso secondaria.",
5437 - "ja": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">ハードウェアキー</a>は、セカンダリログイン認証として使用されます。",
5438 - "ko": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">하드웨어 전자열쇠</a>는 보조 로그인 인증으로 사용됩니다.",
5439 - "nl": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Hardware sleutels</a> worden gebruikt als secundaire inlogverificatie.",
5440 - "pl": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Klucze sprzętowe</a> używane jako druga metoda autoryzacji.",
5441 - "pt": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Chaves Hardware</a> são usados como autenticação de login secundária.",
5442 - "pt-br": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\"> Chaves de hardware </a> são usadas como autenticação de login secundária.",
5443 - "ru": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Аппаратные ключи</a> используются в качестве дополнительной аутентификации.",
5444 - "sv": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\"> Hårdvaranycklar </a> används som sekundär inloggningsautentisering.",
5445 - "tr": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\"> Donanım anahtarları </a>, ikincil oturum açma kimlik doğrulaması olarak kullanılır.",
5446 - "zh-chs": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">硬件密钥</a>用作辅助登录身份验证。",
5447 - "zh-cht": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">硬件密鑰</a>用作輔助登入身份驗證。",
5448 - "uk": "<a href=\\\"https://www.yubico.com/\\\" rel=\\\"noreferrer noopener\\\" target=\\\"_blank\\\">Апаратні ключі</a> використовуються для двофакторної автентифікації.",
5449 - "xloc": [
5450 - "default.handlebars->47->235",
5451 - "default3.handlebars->35->222"
5452 - ]
5453 - },
5454 - {
5455 - "bs": "<b style=color:green>Aktivacija prijave u 2 koraka je uklonjena</b>. Ovu funkciju možete ponovo aktivirati u bilo kojem trenutku.",
5456 - "ca": "<b style=color:green>S'ha eliminat l'activació de l'inici de sessió en dos passos</b>. Podeu reactivar aquesta funció en qualsevol moment.",
5457 - "cs": "<b style=color:green>2-faktorové přihlašování odebráno</b>. Lze znovu kdykoliv znovu zapnout.",
5458 - "da": "<b style=color:green>2-trins loginaktivering fjernet</b>. Du kan til enhver tid genaktivere denne funktion.",
5459 - "de": "<b style=color:green>Aktivierung der Zweifaktor-Anmeldung entfernt</b>. Sie können dieses Feature jederzeit reaktivieren.",
5460 - "en": "<b style=color:green>2-step login activation removed</b>. You can reactivate this feature at any time.",
5461 - "es": "<b style=color:green>Activación de inicio de sesión de 2 pasos eliminada</b>. Puedes reactivar esta función en cualquier momento.",
5462 - "fi": "<b style=color:green>2-vaiheisen sisäänkirjautumisen aktivointi poistettu</b>. Voit aktivoida tämän ominaisuuden uudelleen milloin tahansa.",
5463 - "fr": "<b style=color:green>Authentification à double facteur supprimée</b>. Vous pouvez la réactiver à n'importe quel moment.",
5464 - "hi": "<b style=color:green>2-चरण लॉगिन सक्रियण हटा दिया गया </ b>। आप किसी भी समय इस सुविधा को पुनः सक्रिय कर सकते हैं।",
5465 - "hu": "<b style=color:green>A kétlépcsős bejelentkezés aktiválása eltávolítva</b>. Ezt a funkciót bármikor újraaktiválhatja.",
5466 - "it": "<b style=color:green>autenticazione a due fattori rimossa</b>. Puoi riattivare questa funzione in qualsiasi momento.",
5467 - "ja": "<b style=color:green>2段階のログインアクティベーションが削除されました</ b>。この機能はいつでも再アクティブ化できます。",
5468 - "ko": "<b style=color:green>2단계 로그인 활성화가 제거되었습니다 </b>. 언제든지 이 기능을 다시 활성화 할 수 있습니다.",
5469 - "nl": "<b style=color:green>Tweestapsverificatie verwijderd</b>. Je kan deze functie ten allen tijde weer inschakelen.",
5470 - "pl": "<b style=color:green>2-stopniowa aktywacja logowania usunięta</b>. Funkcję tę można ponownie aktywować w dowolnym momencie.",
5471 - "pt": "<b style=color:green>Ativação de login em duas etapas removida</b>. Pode reativar esse recurso a qualquer momento.",
5472 - "pt-br": "<b style = color: green> Ativação de autenticação em duas etapas removida </b>. Você pode reativar esse recurso a qualquer momento.",
5473 - "ru": "<b style=color:green>Активация двухэтапного входа удалена</b>. Вы можете активировать обратно эту функцию в любое время.",
5474 - "sv": "<b style = color: green> 2-stegs inloggningsaktivering har tagits bort </b>. Du kan återaktivera den här funktionen när som helst.",
5475 - "tr": "<b style = color: green> 2 adımlı giriş aktivasyonu kaldırıldı </b>. Bu özelliği istediğiniz zaman yeniden etkinleştirebilirsiniz.",
5476 - "zh-chs": "<b style=color:green>删除了两步登录激活</ b>。您可以随时重新激活此功能。",
5477 - "zh-cht": "<b style = color:green>刪除了兩步登入啟用</ b>。你可以隨時重新啟用此功能。",
5478 - "uk": "<b style=color:green>Двофакторна автентифікація видалена</b>. Ви можете відновити цю властивість в будь-який момент.",
5479 - "xloc": [
5480 - "default-mobile.handlebars->11->75"
5481 - ]
5482 - },
5483 - {
5484 - "bs": "<b style=color:green>Aktivacija prijave u 2 koraka uspješna</b>. Sada će vam trebati važeći token da se ponovo prijavite.",
5485 - "ca": "<b style=color:green>Activació de l'inici de sessió en dos passos correcta</b>. Ara necessitareu un testimoni vàlid per tornar a iniciar sessió.",
5486 - "cs": "<b style=color:green>2-faktorové ověřování zapnuto</b>. Pro opětovné přihlášení nyní budete potřebovat platný token.",
5487 - "da": "<b style=color:green>2-trins loginaktivering lykkedes</b>. Du skal nu bruge et gyldigt token for at logge på igen.",
5488 - "de": "<b style=color:green>Aktivierung der Zweifaktor-Anmeldung erfolgreich</b>. Sie werden nun ein gültiges Token benötigen, um sich erneut einzuloggen.",
5489 - "en": "<b style=color:green>2-step login activation successful</b>. You will now need a valid token to login again.",
5490 - "es": "<b style=color:green>Segundo-factor de autenticación activado exitosamente</b>. Ahora necesitará un token válido para iniciar sesión nuevamente.",
5491 - "fi": "<b style=color:green>Kaksivaiheisen sisäänkirjautumisen aktivointi onnistunut</b>. Tarvitset jatkossa kelvollisen tunnuksen kirjautuaksesi uudelleen sisään.",
5492 - "fr": "<b style=color:green>Authentification à double facteur activée</b>. Vous aurez besoin maintenant d'un jeton de connexion pour vous connecter. ",
5493 - "hi": "<b style=color:green>2-चरण लॉगिन सक्रियण सफल </ b>। अब आपको फिर से लॉगिन करने के लिए वैध टोकन की आवश्यकता होगी।",
5494 - "hu": "<b style=color:green>A kétlépcsős bejelentkezés aktiválása sikeres</b>. Az újbóli bejelentkezéshez most érvényes tokenre lesz szüksége.",
5495 - "it": "<b style=color:green>autenticazione a 2 fattori attivata con successo</b>. Ora avrai bisogno di un token valido per accedere nuovamente.",
5496 - "ja": "<b style=color:green>2段階ログインの有効化に成功</ b>。再度ログインするには、有効なトークンが必要になります。",
5497 - "ko": "<b style=color:green>2 단계 로그인 활성화 성공 </b>. 이제 다시 로그인하려면 유효한 토큰이 필요합니다.",
5498 - "nl": "<b style=color:green>Tweestapsverificatie successvol</b>. U hebt nu een geldig token nodig om opnieuw in te loggen.",
5499 - "pl": "<b style=color:green>Aktywacja logowania dwuetapowego powiodła się</b>. Będziesz teraz potrzebował ważnego tokena, aby zalogować się ponownie.",
5500 - "pt": "<b style=color:green> ativação de login em duas etapas </b>. Agora precisará de um token válido para fazer login novamente.",
5501 - "pt-br": "<b style = color: green> Ativação de autenticação em duas etapas bem-sucedida </b>. Agora você precisará de um token válido para fazer o login novamente.",
5502 - "ru": "<b style=color:green>Активация двухэтапного входа успешна</b>. Теперь вам понадобится действительный токен, чтобы снова войти в систему.",
5503 - "sv": "<b style = color: green> 2-stegs inloggningsaktivering lyckades </b>. Du behöver nu en giltig token för att logga in igen.",
5504 - "tr": "<b style = color: green> 2 adımlı oturum açma etkinleştirmesi başarılı </b>. Şimdi tekrar giriş yapmak için geçerli bir anahtara ihtiyacınız olacak.",
5505 - "zh-chs": "<b style=color:green>两步登录激活成功</ b>。您现在需要一个有效的保安编码才能再次登录。",
5506 - "zh-cht": "<b style = color:green>兩步登入啟用成功</ b>。你現在需要一個有效的保安編碼才能再次登入。",
5507 - "uk": "<b style=color:green>Двофакторну автентифікацію підтверджено</b>. Вам буде потрібен чинний токен для нового пікдключення.",
5508 - "xloc": [
5509 - "default-mobile.handlebars->11->72"
5510 - ]
5511 - },
5512 - {
5513 - "bs": "<b style=color:red>Aktivacija prijave u 2 koraka nije uspjela</b>. Obrišite tajnu iz aplikacije i pokušajte ponovo. Imate samo nekoliko minuta da unesete odgovarajući kod.",
5514 - "ca": "<b style=color:red>l'activació de l'inici de sessió en dos passos ha fallat</b>. Esborra el secret de l'aplicació i torna-ho a provar. Només teniu uns minuts per introduir el codi adequat.",
5515 - "cs": "<b style=color:red>zapnutí 2-faktorového přihlášení se nezdařilo</b>. Vymažte tajemství z aplikace a zkuste to znovu. Na zadání správného kódu máte jen pár minut.",
5516 - "da": "<b style=color:red>2-trins loginaktivering mislykkedes</b>. Ryd hemmeligheden fra applikationen, og prøv igen. Du har kun et par minutter til at indtaste den rigtige kode.",
5517 - "de": "<b style=color:red>Aktivierung der Zweifaktor-Anmeldung fehlgeschlagen</b>. Entfernen Sie das Geheimnis aus der Applikation und versuchen Sie es erneut. Sie haben nur wenige Minuten Zeit, um einen gültigen Code einzugeben.",
5518 - "en": "<b style=color:red>2-step login activation failed</b>. Clear the secret from the application and try again. You only have a few minutes to enter the proper code.",
5519 - "es": "<b style=color:red>Error de activación de inicio de sesión usando el segundo factor de autenticación</b>. Borra el código de la aplicación e intenta nuevamente. Sólo tiene unos minutos para ingresar el código adecuado.",
5520 - "fi": "<b style=color:red>Kaksivaiheisen kirjautumisen aktivointi epäonnistui</b>. Poista salainen avain sovelluksesta ja yritä uudelleen. Sinulla on vain muutama minuutti oikean koodin syöttämiseen.",
5521 - "fr": "<b style=color:red>Echec de l'authentification à double facteur</b>. Essayez à nouveau. Vous disposez de quelques minutes pour taper le bon code.",
5522 - "hi": "<b style=color:red>2-step लॉगिन सक्रियण विफल </ b> है। एप्लिकेशन से रहस्य साफ़ करें और पुनः प्रयास करें। आपके पास उचित कोड दर्ज करने के लिए केवल कुछ मिनट हैं।",
5523 - "hu": "<b style=color:red>A kétlépcsős bejelentkezés aktiválása nem sikerült</b>. Törölje ki a titkos kulcsot az alkalmazásból, és próbálja újra. Csak néhány perce van a megfelelő kód megadására.",
5524 - "it": "<b style=color:red>attivazione autenticazione a 2 fattori fallita</b>. Cancella il segreto dall'applicazione e riprova. Hai solo pochi minuti per inserire il codice corretto.",
5525 - "ja": "<b style=color:red>2段階ログインの有効化に失敗しました</ b>。アプリケーションから秘密をクリアして、再試行してください。適切なコードを入力するのに数分しかかかりません。",
5526 - "ko": "<b style=color:red>2 단계 로그인 활성화 실패 </b>. 응용 프로그램에서 비밀을 지우고 다시 시도하십시오. 올바른 코드를 입력하는 데 몇 분 밖에 걸리지 않습니다.",
5527 - "nl": "<b style=color:red>Tweestapsverificatie mislukt</b>. Wis het geheim van de applicatie en probeer het opnieuw. Je hebt maar een paar minuten om de juiste code in te voeren.",
5528 - "pl": "<b style=color:red>aktywacja logowania dwuetapowego nie powiodła się</b>. Wyczyść klucz z aplikacji i spróbuj ponownie. Masz tylko kilka minut na wprowadzenie odpowiedniego kodu.",
5529 - "pt": "<b style=color:red>falha na ativação do login em duas etapas </b>. Limpe o segredo da aplicação e tente novamente. Tem apenas alguns minutos para inserir o código correto.",
5530 - "pt-br": "<b style = color: red> Falha na ativação da autenticação em 2 etapas </b>. Apague o segredo do aplicativo e tente novamente. Você tem apenas alguns minutos para inserir o código adequado.",
5531 - "ru": "<b style=color:red>Активация двухэтапного входа не удалась</b>. Удалите ключ из приложения и попробуйте еще раз. У вас есть всего несколько минут, чтобы ввести правильный код.",
5532 - "sv": "<b style = color: red> Aktivering av tvåstegsinloggning misslyckades </b>. Rensa hemligheten från applikationen och försök igen. Du har bara några minuter på dig att ange rätt kod.",
5533 - "tr": "<b style = color: red> 2 adımlı oturum açma etkinleştirilemedi </b>. Uygulamadan şifreyi kaldırın ve tekrar deneyin. Doğru kodu girmek için yalnızca birkaç dakikanız var.",
5534 - "zh-chs": "<b style=color:red>两步登录激活失败</ b>。从应用程序中清除机密,然后重试。您只有几分钟的时间来输入正确的代码。",
5535 - "zh-cht": "<b style = color:red>兩步登入啟動失敗</ b>。從應用程序中清除秘密,然後重試。你只有幾分鐘的時間來輸入正確的代碼。",
5536 - "uk": "<b style=color:red>Двофакторна автентифікація невдала</b>. Очистіть ключ у застосунку та спробуйте ще раз. Ви маєте кілька хвилин для введеня дійсного коду.",
5537 - "xloc": [
5538 - "default-mobile.handlebars->11->73"
5539 - ]
5540 - },
5541 - {
5542 - "bs": "<b style=color:red>Uklanjanje aktivacije prijave u 2 koraka nije uspjelo</b>. Pokušaj ponovo.",
5543 - "ca": "<b style=color:red>S'ha produït un error en l'eliminació de l'activació de l'inici de sessió en dos passos</b>. Torna-ho a provar.",
5544 - "cs": "<b style=color:red>Odstranění 2-faktorového přihlašování se nezdařilo</b>. Zkuste znovu.",
5545 - "da": "<b style=color:red>Fjernelse af aktivering af 2-trins login mislykkedes</b>. Prøv igen.",
5546 - "de": "<b style=color:red>Entfernen der Aktivierung der Zweifaktor-Anmeldung fehlgeschlagen</b>. Versuchen Sie es erneut.",
5547 - "en": "<b style=color:red>2-step login activation removal failed</b>. Try again.",
5548 - "es": "<b style=color:red>Error al eliminar la activación del segundo factor de autenticación</b>. Inténtalo de nuevo.",
5549 - "fi": "<b style=color:red>Kaksivaiheisen sisäänkirjautumisen aktivoinnin poisto epäonnistui</b>. Yritä uudelleen.",
5550 - "fr": "<b style=color:red>Echec de la suppression de l'authentification à double facteur</b>. Essayer à nouveau.",
5551 - "hi": "<b style=color:red>2-step लॉगिन सक्रियण निष्कासन </ b> विफल रहा। पुनः प्रयास करें।",
5552 - "hu": "<b style=color:red>A kétlépcsős bejelentkezési aktiválás eltávolítása nem sikerült.</b> Próbáld újra.",
5553 - "it": "<b style=color:red>Impossibile rimuovere l'autenticazione a due fattori</b>. Riprova.",
5554 - "ja": "<b style=color:red>2段階のログインアクティベーションの削除に失敗しました</ b>。再試行する。",
5555 - "ko": "<b style=color:red>2 단계 로그인 활성화 제거에 실패했습니다 </b>. 다시 시도하십시오.",
5556 - "nl": "<b style=color:red>Tweestapsverificatie verwijdering mislukt</b>. Probeer het opnieuw.",
5557 - "pl": "<b style=color:red>Nie powiodło się usunięcie aktywacji 2-etapowego logowania</b>. Spróbuj ponownie.",
5558 - "pt": "<b style=color:red>falha na remoção da ativação do login em duas etapas </b>. Tente novamente.",
5559 - "pt-br": "<b style = color: red> Falha na remoção da ativação da autenticação em 2 etapas </b>. Tente novamente.",
5560 - "ru": "<b style=color:red>Удаление активации двухэтапного входа не удалось</b>. Попытайтесь снова.",
5561 - "sv": "<b style = color: red> borttagning av tvåstegs inloggningsaktivering misslyckades </b>. Försök igen.",
5562 - "tr": "<b style = color: red> 2 adımlı giriş aktivasyonu kaldırılamadı </b>. Tekrar deneyin.",
5563 - "zh-chs": "<b style=color:red>两步登录激活删除失败</ b>。再试一次。",
5564 - "zh-cht": "<b style = color:red>兩步登入啟動刪除失敗</ b>。再試一次。",
5565 - "uk": "<b style=color:red>Видалення двофакторної автентифікації невдале</b>. Спробуйте ще раз.",
5566 - "xloc": [
5567 - "default-mobile.handlebars->11->76"
5568 - ]
5569 - },
5570 - {
5571 - "ca": "<b>Servidors DNS</b>",
5572 - "en": "<b>DNS Servers</b>",
5573 - "nl": "<b>DNS Servers</b>",
5574 - "pl": "<b>Serwery DNS</b>",
5575 - "uk": "<b>DNS Сервери</b>",
5576 - "xloc": [
5577 - "default-mobile.handlebars->11->808",
5578 - "default.handlebars->47->1650",
5579 - "default3.handlebars->35->1513"
5580 - ]
5581 - },
5582 - {
5583 - "ca": "<div style=margin-bottom:4px>Efectua una notificació de dispositiu per lots</div>",
5584 - "en": "<div style=margin-bottom:4px>Perform batch device notification</div>",
5585 - "nl": "<div style=margin-bottom:4px>Perform batch device notification</div>",
5586 - "pl": "<div style=margin-bottom:4px>Wykonaj wsadowo powiadomienie na maszynach</div>",
5587 - "uk": "<div style=margin-bottom:4px>Виконати групове сповіщення пристрою</div>",
5588 - "xloc": [
5589 - "default.handlebars->47->767",
5590 - "default3.handlebars->35->721"
5591 - ]
5592 - },
5593 - {
5594 - "en": "<label for=dp2ipkvmhost class=form-label>Hostname</label>",
5595 - "xloc": [
5596 - "default3.handlebars->35->641"
5597 - ]
5598 - },
5599 - {
5600 - "en": "<label for=dp2ipkvmmodel class=form-label>Model</label>",
5601 - "xloc": [
5602 - "default3.handlebars->35->638"
5603 - ]
5604 - },
5605 - {
5606 - "en": "<label for=dp2ipkvmpass class=form-label>Password</label>",
5607 - "xloc": [
5608 - "default3.handlebars->35->643"
5609 - ]
5610 - },
5611 - {
5612 - "en": "<label for=dp2ipkvmuser class=form-label>Username</label>",
5613 - "xloc": [
5614 - "default3.handlebars->35->642"
5615 - ]
5616 - },
5617 - {
5618 - "en": "<label for=dp2meshname class=form-label>Name</>",
5619 - "xloc": [
5620 - "default3.handlebars->35->630"
5621 - ]
5622 - },
5623 - {
5624 - "en": "<label for=dp2meshtype class=form-label>Type</label>",
5625 - "xloc": [
5626 - "default3.handlebars->35->635"
5627 - ]
5628 - },
5629 - {
5630 - "ca": "<span style=color:green>D'acord</span>",
5631 - "en": "<span style=color:green>OK</span>",
5632 - "nl": "<span style=color:green>OK</span>",
5633 - "pl": "<span style=color:green>OK</span>",
5634 - "xloc": [
5635 - "default.handlebars->47->422",
5636 - "default.handlebars->47->424",
5637 - "default.handlebars->47->426",
5638 - "default3.handlebars->35->394",
5639 - "default3.handlebars->35->396",
5640 - "default3.handlebars->35->398"
5641 - ]
5642 - },
5643 - {
5644 - "ca": "<span style=color:red>DOLE</span>",
5645 - "en": "<span style=color:red>BAD</span>",
5646 - "nl": "<span style=color:red>FOUT</span>",
5647 - "pl": "<span style=color:red>NIEPOPRAWNY</span>",
5648 - "uk": "<span style=color:red>Кепсько</span>",
5649 - "xloc": [
5650 - "default.handlebars->47->423",
5651 - "default.handlebars->47->425",
5652 - "default.handlebars->47->427",
5653 - "default3.handlebars->35->395",
5654 - "default3.handlebars->35->397",
5655 - "default3.handlebars->35->399"
5656 - ]
5657 - },
5658 - {
5659 - "bs": "<table style=width:180px>",
5660 - "ca": "<table style=width:180px>",
5661 - "cs": "<table style=width:180px>",
5662 - "da": "<table style=width:180px>",
5663 - "de": "<table style=width:180px>",
5664 - "en": "<table style=width:180px>",
5665 - "es": "<table style=width:180px>",
5666 - "fi": "<table style=width:180px>",
5667 - "fr": "<table style=width:180px>",
5668 - "hi": "<table style=width:180px>",
5669 - "hu": "<table style=width:180px>",
5670 - "it": "<table style=width:180px>",
5671 - "ja": "<table style=width:180px>",
5672 - "ko": "<table style=width:180px>",
5673 - "nl": "<table style=width:180px>",
5674 - "pl": "<table style=width:180px>",
5675 - "pt": "<table style=width:180px>",
5676 - "pt-br": "<table style=width:180px>",
5677 - "ru": "<table style=width:180px>",
5678 - "sv": "<table style=width:180px>",
5679 - "tr": "<table style=width:180px>",
5680 - "zh-chs": "<table style=width:180px>",
5681 - "zh-cht": "<table style=width:180px>",
5682 - "xloc": [
5683 - "default.handlebars->47->642",
5684 - "default3.handlebars->35->581"
5685 - ]
5686 - },
5687 - {
5688 - "ca": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://play.google.com/store/apps/details?id=com. meshcentral.agent2\\\"><img style=cursor:pointer src=\\\"images/google-play-140.png\\\" width=140 srcset=\\\"images/google-play-280.png 2x\\\" />< /a></td></tr>",
5689 - "en": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://play.google.com/store/apps/details?id=com.meshcentral.agent2\\\"><img style=cursor:pointer src=\\\"images/google-play-140.png\\\" width=140 srcset=\\\"images/google-play-280.png 2x\\\" /></a></td></tr>",
5690 - "nl": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://play.google.com/store/apps/details?id=com.meshcentral.agent2\\\"><img style=cursor:pointer src=\\\"images/google-play-140.png\\\" width=140 srcset=\\\"images/google-play-280.png 2x\\\" /></a></td></tr>",
5691 - "pl": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://play.google.com/store/apps/details?id=com.meshcentral.agent2\\\"><img style=cursor:pointer src=\\\"images/google-play-140.png\\\" width=140 srcset=\\\"images/google-play-280.png 2x\\\" /></a></td></tr>",
5692 - "xloc": [
5693 - "default.handlebars->47->643",
5694 - "default3.handlebars->35->582"
5695 - ]
5696 - },
5697 - {
5698 - "ca": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\\\" ><img style=cursor:pointer src=\\\"images/amazon-appstore-140.png\\\" width=140 srcset=\\\"images/amazon-appstore-280.png 2x\\\" /></a></a></ td></tr>",
5699 - "en": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\\\"><img style=cursor:pointer src=\\\"images/amazon-appstore-140.png\\\" width=140 srcset=\\\"images/amazon-appstore-280.png 2x\\\" /></a></td></tr>",
5700 - "nl": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\\\"><img style=cursor:pointer src=\\\"images/amazon-appstore-140.png\\\" width=140 srcset=\\\"images/amazon-appstore-280.png 2x\\\" /></a></td></tr>",
5701 - "pl": "<tr><td style=text-align:center><a rel=\\\"noreferrer noopener\\\" target=_blank href=\\\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\\\"><img style=cursor:pointer src=\\\"images/amazon-appstore-140.png\\\" width=140 srcset=\\\"images/amazon-appstore-280.png 2x\\\" /></a></td></tr>",
5702 - "xloc": [
5703 - "default.handlebars->47->644",
5704 - "default3.handlebars->35->583"
5705 - ]
5706 - },
5325 {
5326 "bs": ">>",
5327 "ca": ">>",
@@ -5732,32 +5350,6 @@
5350 "player.handlebars->p11->deskarea0->deskarea4->3"
5351 ]
5352 },
5735 - {
5736 - "bs": "Dostupna je nova verzija ovog softvera. Ažurirati sada?",
5737 - "ca": "Hi ha disponible una nova versió d'aquest programari. Actualitzar ara?",
5738 - "cs": "K dispozici je nová verze tohoto softwaru. Nyní aktualizovat?",
5739 - "da": "En ny version af denne software er tilgængelig. Opdater nu?",
5740 - "de": "Eine neue Version dieser Software ist verfügbar. Jetzt aktualisieren?",
5741 - "en": "A new version of this software is available. Update now?",
5742 - "es": "Hay disponible una nueva versión de este software. ¿Actualizar ahora?",
5743 - "fi": "Tästä ohjelmistosta on saatavana uusi versio. Päivitä nyt?",
5744 - "fr": "Une nouvelle version de ce logiciel est disponible. Mettez à jour maintenant?",
5745 - "hi": "इस सॉफ़्टवेयर का एक नया संस्करण उपलब्ध है। अभी अद्यतन करें?",
5746 - "hu": "A szoftver új verziója már elérhető. Frissítés most?",
5747 - "it": "È disponibile una nuova versione di questo software. Aggiorna ora?",
5748 - "ja": "このソフトウェアの新しいバージョンが利用可能です。今すぐアップデート?",
5749 - "ko": "이 소프트웨어의 새 버전을 사용할 수 있습니다. 지금 업데이트 하시겠습니까?",
5750 - "nl": "Er is een nieuwe versie van deze software beschikbaar. Nu bijwerken?",
5751 - "pl": "Dostępna jest nowa wersja tego oprogramowania. Zaktualizować teraz?",
5752 - "pt": "Uma nova versão deste software está disponível. Atualizar agora?",
5753 - "pt-br": "Uma nova versão deste software está disponível. Deseja atualizar agora?",
5754 - "ru": "Доступна новая версия этого программного обеспечения. Обновить сейчас?",
5755 - "sv": "En ny version av denna programvara är tillgänglig. Uppdatera nu?",
5756 - "tr": "Bu yazılımın yeni bir sürümü mevcut. Şimdi güncelle?",
5757 - "zh-chs": "此软件的新版本可用。现在更新?",
5758 - "zh-cht": "該軟件有新版本可用。現在更新?",
5759 - "uk": "Наявна нова версія цієї програми. Оновити зараз?"
5760 - },
5353 {
5354 "bs": "ACM",
5355 "ca": "ACM",
@@ -5783,13 +5375,13 @@
5375 "zh-chs": "ACM",
5376 "zh-cht": "ACM",
5377 "xloc": [
5786 - "default-mobile.handlebars->11->510",
5787 - "default.handlebars->47->2227",
5788 - "default.handlebars->47->436",
5789 - "default.handlebars->47->916",
5790 - "default3.handlebars->35->2082",
5791 - "default3.handlebars->35->408",
5792 - "default3.handlebars->35->853"
5378 + "default-mobile.handlebars->11->516",
5379 + "default.handlebars->47->2231",
5380 + "default.handlebars->47->439",
5381 + "default.handlebars->47->917",
5382 + "default3.handlebars->35->2226",
5383 + "default3.handlebars->35->436",
5384 + "default3.handlebars->35->914"
5385 ]
5386 },
5387 {
@@ -5867,10 +5459,10 @@
5459 "zh-chs": "AMT",
5460 "zh-cht": "AMT",
5461 "xloc": [
5870 - "default.handlebars->47->413",
5871 - "default.handlebars->47->721",
5872 - "default3.handlebars->35->385",
5873 - "default3.handlebars->35->679"
5462 + "default.handlebars->47->416",
5463 + "default.handlebars->47->722",
5464 + "default3.handlebars->35->413",
5465 + "default3.handlebars->35->719"
5466 ]
5467 },
5468 {
@@ -5879,8 +5471,8 @@
5471 "nl": "AMT Host",
5472 "pl": "Host AMT",
5473 "xloc": [
5882 - "default.handlebars->47->384",
5883 - "default3.handlebars->35->356"
5474 + "default.handlebars->47->387",
5475 + "default3.handlebars->35->384"
5476 ]
5477 },
5478 {
@@ -5889,8 +5481,8 @@
5481 "nl": "AMT status",
5482 "pl": "Stan AMT",
5483 "xloc": [
5892 - "default.handlebars->47->385",
5893 - "default3.handlebars->35->357"
5484 + "default.handlebars->47->388",
5485 + "default3.handlebars->35->385"
5486 ]
5487 },
5488 {
@@ -5918,8 +5510,8 @@
5510 "zh-chs": "操作系统",
5511 "zh-cht": "AMT操作系統",
5512 "xloc": [
5921 - "default.handlebars->47->3332",
5922 - "default3.handlebars->35->3105"
5513 + "default.handlebars->47->3336",
5514 + "default3.handlebars->35->3323"
5515 ]
5516 },
5517 {
@@ -5947,8 +5539,8 @@
5539 "zh-chs": "AMT-Redir",
5540 "zh-cht": "AMT-Redir",
5541 "xloc": [
5950 - "default.handlebars->47->3194",
5951 - "default3.handlebars->35->2967"
5542 + "default.handlebars->47->3198",
5543 + "default3.handlebars->35->3185"
5544 ]
5545 },
5546 {
@@ -5976,8 +5568,8 @@
5568 "zh-chs": "AMT-WSMAN",
5569 "zh-cht": "AMT-WSMAN",
5570 "xloc": [
5979 - "default.handlebars->47->3193",
5980 - "default3.handlebars->35->2966"
5571 + "default.handlebars->47->3197",
5572 + "default3.handlebars->35->3184"
5573 ]
5574 },
5575 {
@@ -5985,8 +5577,8 @@
5577 "en": "APK",
5578 "nl": "APK",
5579 "xloc": [
5988 - "default.handlebars->47->648",
5989 - "default3.handlebars->35->587"
5580 + "default.handlebars->47->649",
5581 + "default3.handlebars->35->646"
5582 ]
5583 },
5584 {
@@ -5996,17 +5588,17 @@
5588 "pl": "Wersja APK MeshAgent",
5589 "uk": "MeshAgent версія APK",
5590 "xloc": [
5999 - "default-mobile.handlebars->11->965",
6000 - "default.handlebars->47->647",
6001 - "default3.handlebars->35->586"
5591 + "default-mobile.handlebars->11->971",
5592 + "default.handlebars->47->648",
5593 + "default3.handlebars->35->645"
5594 ]
5595 },
5596 {
5597 "en": "ARM 64bit version of macOS Mesh Agent",
5598 "nl": "ARM 64bit versie van de macOS Mesh Agent",
5599 "xloc": [
6008 - "default.handlebars->47->634",
6009 - "default3.handlebars->35->573"
5600 + "default.handlebars->47->637",
5601 + "default3.handlebars->35->634"
5602 ]
5603 },
5604 {
@@ -6018,10 +5610,10 @@
5610 "pl": "Meshagent wersja ARM 64bit",
5611 "uk": "MeshAgent версія ARM 64біт ",
5612 "xloc": [
6021 - "default.handlebars->47->619",
6022 - "default.handlebars->47->668",
6023 - "default3.handlebars->35->558",
6024 - "default3.handlebars->35->607"
5613 + "default.handlebars->47->622",
5614 + "default.handlebars->47->669",
5615 + "default3.handlebars->35->619",
5616 + "default3.handlebars->35->666"
5617 ]
5618 },
5619 {
@@ -6200,12 +5792,12 @@
5792 "zh-chs": "影音",
5793 "zh-cht": "視聽",
5794 "xloc": [
6203 - "default-mobile.handlebars->11->751",
6204 - "default-mobile.handlebars->11->753",
6205 - "default.handlebars->47->935",
6206 - "default.handlebars->47->937",
6207 - "default3.handlebars->35->872",
6208 - "default3.handlebars->35->874"
5795 + "default-mobile.handlebars->11->757",
5796 + "default-mobile.handlebars->11->759",
5797 + "default.handlebars->47->936",
5798 + "default.handlebars->47->938",
5799 + "default3.handlebars->35->933",
5800 + "default3.handlebars->35->935"
5801 ]
5802 },
5803 {
@@ -6234,9 +5826,9 @@
5826 "zh-cht": "拒絕存取",
5827 "uk": "Доступ Відмовлено",
5828 "xloc": [
6237 - "default-mobile.handlebars->11->915",
6238 - "default.handlebars->47->1758",
6239 - "default3.handlebars->35->1619"
5829 + "default-mobile.handlebars->11->921",
5830 + "default.handlebars->47->1759",
5831 + "default3.handlebars->35->1741"
5832 ]
5833 },
5834 {
@@ -6265,7 +5857,7 @@
5857 "zh-cht": "訪問被拒絕。",
5858 "uk": "Доступ Забраковано.",
5859 "xloc": [
6268 - "login2.handlebars->7->231"
5860 + "login2.handlebars->7->230"
5861 ]
5862 },
5863 {
@@ -6296,7 +5888,7 @@
5888 "xloc": [
5889 "login-mobile.handlebars->5->16",
5890 "login.handlebars->5->18",
6299 - "login2.handlebars->7->217"
5891 + "login2.handlebars->7->216"
5892 ]
5893 },
5894 {
@@ -6325,8 +5917,8 @@
5917 "zh-cht": "存取伺服器檔案",
5918 "uk": "Доступ до файлів серверу",
5919 "xloc": [
6328 - "default.handlebars->47->2919",
6329 - "default3.handlebars->35->2710"
5920 + "default.handlebars->47->2923",
5921 + "default3.handlebars->35->2916"
5922 ]
5923 },
5924 {
@@ -6446,20 +6038,26 @@
6038 "zh-cht": "帳號安全",
6039 "uk": "Безпека Акаунту",
6040 "xloc": [
6449 - "default-mobile.handlebars->11->334",
6450 - "default-mobile.handlebars->11->336",
6451 - "default-mobile.handlebars->11->348",
6452 - "default-mobile.handlebars->11->477",
6453 - "default-mobile.handlebars->11->479",
6454 - "default-mobile.handlebars->11->90",
6041 + "default-mobile.handlebars->11->340",
6042 + "default-mobile.handlebars->11->342",
6043 + "default-mobile.handlebars->11->354",
6044 + "default-mobile.handlebars->11->483",
6045 + "default-mobile.handlebars->11->485",
6046 + "default-mobile.handlebars->11->96",
6047 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3AccountActions->p2AccountSecurity->1->0",
6456 - "default.handlebars->47->2092",
6048 "default.handlebars->47->2094",
6458 - "default.handlebars->47->3386",
6459 - "default.handlebars->47->729",
6460 - "default.handlebars->47->876",
6461 - "default.handlebars->47->878",
6462 - "default3.handlebars->35->3155"
6049 + "default.handlebars->47->2096",
6050 + "default.handlebars->47->3390",
6051 + "default.handlebars->47->730",
6052 + "default.handlebars->47->877",
6053 + "default.handlebars->47->879",
6054 + "default3.handlebars->35->2095",
6055 + "default3.handlebars->35->2096",
6056 + "default3.handlebars->35->3375",
6057 + "default3.handlebars->35->3377",
6058 + "default3.handlebars->35->727",
6059 + "default3.handlebars->35->874",
6060 + "default3.handlebars->35->876"
6061 ]
6062 },
6063 {
@@ -6488,9 +6086,9 @@
6086 "zh-cht": "帳號設定",
6087 "uk": "Налаштування Акаунту",
6088 "xloc": [
6491 - "default-mobile.handlebars->11->1023",
6492 - "default.handlebars->47->3257",
6493 - "default3.handlebars->35->3030"
6089 + "default-mobile.handlebars->11->1029",
6090 + "default.handlebars->47->3261",
6091 + "default3.handlebars->35->3248"
6092 ]
6093 },
6094 {
@@ -6564,8 +6162,8 @@
6162 "pl": "Konto zmienione di synchronizacji z danymi LDAP.",
6163 "uk": "Акаунт змінено на синхронізацію з даними LDAP.",
6164 "xloc": [
6567 - "default.handlebars->47->2671",
6568 - "default3.handlebars->35->2488"
6165 + "default.handlebars->47->2675",
6166 + "default3.handlebars->35->2671"
6167 ]
6168 },
6169 {
@@ -6594,8 +6192,8 @@
6192 "zh-cht": "帳戶已更改:{0}",
6193 "uk": "Акаунт змінено: {0}",
6194 "xloc": [
6597 - "default.handlebars->47->2583",
6598 - "default3.handlebars->35->2400"
6195 + "default.handlebars->47->2587",
6196 + "default3.handlebars->35->2583"
6197 ]
6198 },
6199 {
@@ -6624,8 +6222,8 @@
6222 "zh-cht": "創建帳戶,電子郵件為{0}",
6223 "uk": "Акаунт створено з е-поштою {0}",
6224 "xloc": [
6627 - "default.handlebars->47->2582",
6628 - "default3.handlebars->35->2399"
6225 + "default.handlebars->47->2586",
6226 + "default3.handlebars->35->2582"
6227 ]
6228 },
6229 {
@@ -6654,8 +6252,8 @@
6252 "zh-cht": "已創建帳戶,名稱為 {0}。",
6253 "uk": "Акаунт створено із іменем {0}.",
6254 "xloc": [
6657 - "default.handlebars->47->2645",
6658 - "default3.handlebars->35->2462"
6255 + "default.handlebars->47->2649",
6256 + "default3.handlebars->35->2645"
6257 ]
6258 },
6259 {
@@ -6684,8 +6282,8 @@
6282 "zh-cht": "帳戶已創建,用戶名是{0}",
6283 "uk": "Акаунт створено із іменем користувача {0}",
6284 "xloc": [
6687 - "default.handlebars->47->2581",
6688 - "default3.handlebars->35->2398"
6285 + "default.handlebars->47->2585",
6286 + "default3.handlebars->35->2581"
6287 ]
6288 },
6289 {
@@ -6716,11 +6314,11 @@
6314 "xloc": [
6315 "default-mobile.handlebars->11->67",
6316 "default.handlebars->47->212",
6719 - "default.handlebars->47->2738",
6720 - "default.handlebars->47->2916",
6721 - "default3.handlebars->35->202",
6722 - "default3.handlebars->35->2553",
6723 - "default3.handlebars->35->2707"
6317 + "default.handlebars->47->2742",
6318 + "default.handlebars->47->2920",
6319 + "default3.handlebars->35->211",
6320 + "default3.handlebars->35->2738",
6321 + "default3.handlebars->35->2913"
6322 ]
6323 },
6324 {
@@ -6749,12 +6347,12 @@
6347 "zh-cht": "達到帳戶限制。",
6348 "uk": "Досягнуто обмеження акаунту.",
6349 "xloc": [
6752 - "default-mobile.handlebars->11->1035",
6753 - "default.handlebars->47->3269",
6754 - "default3.handlebars->35->3042",
6350 + "default-mobile.handlebars->11->1041",
6351 + "default.handlebars->47->3273",
6352 + "default3.handlebars->35->3260",
6353 "login-mobile.handlebars->5->6",
6354 "login.handlebars->5->8",
6757 - "login2.handlebars->7->207"
6355 + "login2.handlebars->7->206"
6356 ]
6357 },
6358 {
@@ -6785,7 +6383,7 @@
6383 "xloc": [
6384 "login-mobile.handlebars->5->15",
6385 "login.handlebars->5->17",
6788 - "login2.handlebars->7->216"
6386 + "login2.handlebars->7->215"
6387 ]
6388 },
6389 {
@@ -6814,8 +6412,8 @@
6412 "zh-cht": "帳號登錄",
6413 "uk": "Вхід до акаунту",
6414 "xloc": [
6817 - "default.handlebars->47->2518",
6818 - "default3.handlebars->35->2335"
6415 + "default.handlebars->47->2522",
6416 + "default3.handlebars->35->2518"
6417 ]
6418 },
6419 {
@@ -6844,8 +6442,8 @@
6442 "zh-cht": "從 {0}、{1}、{2} 登錄帳戶",
6443 "uk": "Вхід до акаунту з {0}, {1}, {2}",
6444 "xloc": [
6847 - "default.handlebars->47->2624",
6848 - "default3.handlebars->35->2441"
6445 + "default.handlebars->47->2628",
6446 + "default3.handlebars->35->2624"
6447 ]
6448 },
6449 {
@@ -6859,8 +6457,8 @@
6457 "pl": "Zapisy logowania tokenami użytkownika",
6458 "uk": "Записи токенів входу до акаунту",
6459 "xloc": [
6862 - "default.handlebars->47->3236",
6863 - "default3.handlebars->35->3009"
6460 + "default.handlebars->47->3240",
6461 + "default3.handlebars->35->3227"
6462 ]
6463 },
6464 {
@@ -6889,8 +6487,8 @@
6487 "zh-cht": "帳戶登出",
6488 "uk": "Вихід з акаунту",
6489 "xloc": [
6892 - "default.handlebars->47->2519",
6893 - "default3.handlebars->35->2336"
6490 + "default.handlebars->47->2523",
6491 + "default3.handlebars->35->2519"
6492 ]
6493 },
6494 {
@@ -6921,7 +6519,7 @@
6519 "xloc": [
6520 "login-mobile.handlebars->5->12",
6521 "login.handlebars->5->14",
6924 - "login2.handlebars->7->213"
6522 + "login2.handlebars->7->212"
6523 ]
6524 },
6525 {
@@ -6950,8 +6548,8 @@
6548 "zh-cht": "帳戶密碼已更改:{0}",
6549 "uk": "Пароль до акаунту змінено: {0}",
6550 "xloc": [
6953 - "default.handlebars->47->2591",
6954 - "default3.handlebars->35->2408"
6551 + "default.handlebars->47->2595",
6552 + "default3.handlebars->35->2591"
6553 ]
6554 },
6555 {
@@ -6980,8 +6578,8 @@
6578 "zh-cht": "帳戶已刪除",
6579 "uk": "Акаунт видалено",
6580 "xloc": [
6983 - "default.handlebars->47->2580",
6984 - "default3.handlebars->35->2397"
6581 + "default.handlebars->47->2584",
6582 + "default3.handlebars->35->2580"
6583 ]
6584 },
6585 {
@@ -7040,10 +6638,10 @@
6638 "zh-cht": "指令",
6639 "uk": "Дія",
6640 "xloc": [
7043 - "default-mobile.handlebars->11->921",
7044 - "default.handlebars->47->1764",
6641 + "default-mobile.handlebars->11->927",
6642 + "default.handlebars->47->1765",
6643 "default.handlebars->container->column_l->p42->p42tbl->1->0->8",
7046 - "default3.handlebars->35->1624",
6644 + "default3.handlebars->35->1747",
6645 "default3.handlebars->container->column_l->p42->p42tbl->1->0->17"
6646 ]
6647 },
@@ -7073,10 +6671,10 @@
6671 "zh-cht": "動作檔案",
6672 "uk": "Файл Операцій",
6673 "xloc": [
7076 - "default.handlebars->47->1344",
7077 - "default.handlebars->47->1346",
7078 - "default3.handlebars->35->1245",
7079 - "default3.handlebars->35->1247"
6674 + "default.handlebars->47->1345",
6675 + "default.handlebars->47->1347",
6676 + "default3.handlebars->35->1333",
6677 + "default3.handlebars->35->1335"
6678 ]
6679 },
6680 {
@@ -7105,15 +6703,15 @@
6703 "zh-cht": "動作",
6704 "uk": "Дії",
6705 "xloc": [
7108 - "default-mobile.handlebars->11->544",
6706 + "default-mobile.handlebars->11->550",
6707 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3",
6708 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->1",
6709 "default-mobile.handlebars->container->page_content->column_l->p10->p10terminal->termTable->termarea4->1->3",
7112 - "default.handlebars->47->1008",
6710 + "default.handlebars->47->1009",
6711 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1",
6712 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1",
6713 "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1",
7116 - "default3.handlebars->35->945",
6714 + "default3.handlebars->35->1006",
6715 "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3",
6716 "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3",
6717 "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3"
@@ -7145,8 +6743,8 @@
6743 "zh-cht": "使用FAT格式的USB密鑰在管理控制模式(ACM)中激活英特爾&reg;AMT。將setup.bin放在其上,然後使用此鍵引導一台或多台計算機。",
6744 "uk": "Активуйте Intel® AMT у режимі адміністратора (Admin Control Mode = ACM) за допомогою USB-накопичувача у форматі FAT. Помістіть на нього файл setup.bin і завантажте один або кілька комп’ютерів за допомогою цього накопичувача.",
6745 "xloc": [
7148 - "default.handlebars->47->522",
7149 - "default3.handlebars->35->486"
6746 + "default.handlebars->47->525",
6747 + "default3.handlebars->35->522"
6748 ]
6749 },
6750 {
@@ -7233,8 +6831,8 @@
6831 "zh-cht": "如果ACM失敗,則激活到CCM",
6832 "uk": "Активувати CCM, якщо ACM зазнало невдачі",
6833 "xloc": [
7236 - "default.handlebars->47->2282",
7237 - "default3.handlebars->35->2125"
6834 + "default.handlebars->47->2286",
6835 + "default3.handlebars->35->2279"
6836 ]
6837 },
6838 {
@@ -7263,15 +6861,15 @@
6861 "zh-cht": "已啟動",
6862 "uk": "Активовано",
6863 "xloc": [
7266 - "default-mobile.handlebars->11->505",
7267 - "default-mobile.handlebars->11->507",
7268 - "default-mobile.handlebars->11->817",
7269 - "default.handlebars->47->1659",
7270 - "default.handlebars->47->909",
7271 - "default.handlebars->47->911",
7272 - "default3.handlebars->35->1520",
7273 - "default3.handlebars->35->846",
7274 - "default3.handlebars->35->848"
6864 + "default-mobile.handlebars->11->511",
6865 + "default-mobile.handlebars->11->513",
6866 + "default-mobile.handlebars->11->823",
6867 + "default.handlebars->47->1660",
6868 + "default.handlebars->47->910",
6869 + "default.handlebars->47->912",
6870 + "default3.handlebars->35->1642",
6871 + "default3.handlebars->35->907",
6872 + "default3.handlebars->35->909"
6873 ]
6874 },
6875 {
@@ -7300,8 +6898,8 @@
6898 "zh-cht": "啟動",
6899 "uk": "Активація",
6900 "xloc": [
7303 - "default.handlebars->47->320",
7304 - "default3.handlebars->35->297"
6901 + "default.handlebars->47->323",
6902 + "default3.handlebars->35->320"
6903 ]
6904 },
6905 {
@@ -7330,10 +6928,10 @@
6928 "zh-cht": "主動設備共享",
6929 "uk": "Спільний доступ до пристрою активний",
6930 "xloc": [
7333 - "default.handlebars->47->1084",
7334 - "default.handlebars->47->2231",
7335 - "default3.handlebars->35->1021",
7336 - "default3.handlebars->35->2086"
6931 + "default.handlebars->47->1085",
6932 + "default.handlebars->47->2235",
6933 + "default3.handlebars->35->1082",
6934 + "default3.handlebars->35->2230"
6935 ]
6936 },
6937 {
@@ -7362,8 +6960,8 @@
6960 "zh-cht": "活動登錄令牌",
6961 "uk": "Активні Токени Входу",
6962 "xloc": [
7365 - "default.handlebars->47->2123",
7366 - "default3.handlebars->35->1988"
6963 + "default.handlebars->47->2125",
6964 + "default3.handlebars->35->2124"
6965 ]
6966 },
6967 {
@@ -7392,9 +6990,9 @@
6990 "zh-cht": "活躍用戶",
6991 "uk": "Активний Користувач",
6992 "xloc": [
7395 - "default-mobile.handlebars->11->778",
7396 - "default.handlebars->47->962",
7397 - "default3.handlebars->35->899"
6993 + "default-mobile.handlebars->11->784",
6994 + "default.handlebars->47->963",
6995 + "default3.handlebars->35->960"
6996 ]
6997 },
6998 {
@@ -7423,9 +7021,9 @@
7021 "zh-cht": "活躍用戶",
7022 "uk": "Користувачі Активні",
7023 "xloc": [
7426 - "default-mobile.handlebars->11->777",
7427 - "default.handlebars->47->961",
7428 - "default3.handlebars->35->898"
7024 + "default-mobile.handlebars->11->783",
7025 + "default.handlebars->47->962",
7026 + "default3.handlebars->35->959"
7027 ]
7028 },
7029 {
@@ -7480,11 +7078,11 @@
7078 "zh-cht": "添加",
7079 "uk": "Додати",
7080 "xloc": [
7483 - "default-mobile.handlebars->11->669",
7484 - "default.handlebars->47->1434",
7485 - "default.handlebars->47->1440",
7486 - "default3.handlebars->35->1327",
7487 - "default3.handlebars->35->1332"
7081 + "default-mobile.handlebars->11->675",
7082 + "default.handlebars->47->1435",
7083 + "default.handlebars->47->1441",
7084 + "default3.handlebars->35->1422",
7085 + "default3.handlebars->35->1428"
7086 ]
7087 },
7088 {
@@ -7565,10 +7163,10 @@
7163 "zh-cht": "新增代理",
7164 "uk": "Додати Агента",
7165 "xloc": [
7568 - "default.handlebars->47->2221",
7569 - "default.handlebars->47->488",
7570 - "default3.handlebars->35->2076",
7571 - "default3.handlebars->35->458"
7166 + "default.handlebars->47->2225",
7167 + "default.handlebars->47->491",
7168 + "default3.handlebars->35->2220",
7169 + "default3.handlebars->35->488"
7170 ]
7171 },
7172 {
@@ -7623,13 +7221,14 @@
7221 "zh-cht": "新增裝置",
7222 "uk": "Додати Пристрій",
7223 "xloc": [
7626 - "default.handlebars->47->2225",
7627 - "default.handlebars->47->2891",
7628 - "default.handlebars->47->3086",
7629 - "default.handlebars->47->492",
7630 - "default3.handlebars->35->2080",
7631 - "default3.handlebars->35->2868",
7632 - "default3.handlebars->35->462"
7224 + "default.handlebars->47->2229",
7225 + "default.handlebars->47->2895",
7226 + "default.handlebars->47->3090",
7227 + "default.handlebars->47->495",
7228 + "default3.handlebars->35->2224",
7229 + "default3.handlebars->35->2888",
7230 + "default3.handlebars->35->3077",
7231 + "default3.handlebars->35->492"
7232 ]
7233 },
7234 {
@@ -7658,7 +7257,8 @@
7257 "zh-cht": "新增裝置日誌",
7258 "uk": "Додати Подію Пристрою",
7259 "xloc": [
7661 - "default.handlebars->47->1170"
7260 + "default.handlebars->47->1171",
7261 + "default3.handlebars->35->1166"
7262 ]
7263 },
7264 {
@@ -7687,13 +7287,14 @@
7287 "zh-cht": "新增裝置群",
7288 "uk": "Додати Групу Пристроїв",
7289 "xloc": [
7690 - "default.handlebars->47->2368",
7691 - "default.handlebars->47->2885",
7692 - "default.handlebars->47->3074",
7693 - "default.handlebars->47->389",
7694 - "default3.handlebars->35->2198",
7695 - "default3.handlebars->35->2856",
7696 - "default3.handlebars->35->361"
7290 + "default.handlebars->47->2372",
7291 + "default.handlebars->47->2889",
7292 + "default.handlebars->47->3078",
7293 + "default.handlebars->47->392",
7294 + "default3.handlebars->35->2368",
7295 + "default3.handlebars->35->2882",
7296 + "default3.handlebars->35->3065",
7297 + "default3.handlebars->35->389"
7298 ]
7299 },
7300 {
@@ -7722,8 +7323,8 @@
7323 "zh-cht": "新增裝置群權限",
7324 "uk": "Додайте Дозволи Групи Пристроїв",
7325 "xloc": [
7725 - "default.handlebars->47->2365",
7726 - "default3.handlebars->35->2195"
7326 + "default.handlebars->47->2369",
7327 + "default3.handlebars->35->2365"
7328 ]
7329 },
7330 {
@@ -7752,10 +7353,10 @@
7353 "zh-cht": "新增裝置權限",
7354 "uk": "Додати Дозволи Пристрою",
7355 "xloc": [
7755 - "default.handlebars->47->2370",
7756 - "default.handlebars->47->2372",
7757 - "default3.handlebars->35->2200",
7758 - "default3.handlebars->35->2202"
7356 + "default.handlebars->47->2374",
7357 + "default.handlebars->47->2376",
7358 + "default3.handlebars->35->2370",
7359 + "default3.handlebars->35->2372"
7360 ]
7361 },
7362 {
@@ -7810,7 +7411,8 @@
7411 "zh-cht": "新增Intel&reg; AMT裝置",
7412 "uk": "Додати пристрій Intel® AMT",
7413 "xloc": [
7813 - "default.handlebars->47->512"
7414 + "default.handlebars->47->515",
7415 + "default3.handlebars->35->512"
7416 ]
7417 },
7418 {
@@ -7839,8 +7441,8 @@
7441 "zh-cht": "新增密鑰",
7442 "uk": "Додати Ключ",
7443 "xloc": [
7842 - "default.handlebars->47->239",
7843 - "default3.handlebars->35->226"
7444 + "default.handlebars->47->242",
7445 + "default3.handlebars->35->239"
7446 ]
7447 },
7448 {
@@ -7869,8 +7471,8 @@
7471 "zh-cht": "新增本地",
7472 "uk": "Додати Локально",
7473 "xloc": [
7872 - "default.handlebars->47->482",
7873 - "default3.handlebars->35->452"
7474 + "default.handlebars->47->485",
7475 + "default3.handlebars->35->482"
7476 ]
7477 },
7478 {
@@ -7925,7 +7527,8 @@
7527 "zh-cht": "新增成員身份",
7528 "uk": "Додати Приналежність",
7529 "xloc": [
7928 - "default.handlebars->47->3106"
7530 + "default.handlebars->47->3110",
7531 + "default3.handlebars->35->3097"
7532 ]
7533 },
7534 {
@@ -7954,8 +7557,8 @@
7557 "zh-cht": "新增 Mesh Agent",
7558 "uk": "Додати Mesh Agent",
7559 "xloc": [
7957 - "default.handlebars->47->685",
7958 - "default3.handlebars->35->625"
7560 + "default.handlebars->47->686",
7561 + "default3.handlebars->35->683"
7562 ]
7563 },
7564 {
@@ -8010,12 +7613,18 @@
7613 "zh-cht": "新增安全密鑰",
7614 "uk": "Додати Ключ Безпеки",
7615 "xloc": [
8013 - "default.handlebars->47->1838",
8014 - "default.handlebars->47->1839",
8015 - "default.handlebars->47->243",
8016 - "default.handlebars->47->245",
7616 + "default.handlebars->47->1840",
7617 + "default.handlebars->47->1841",
7618 + "default.handlebars->47->246",
7619 "default.handlebars->47->248",
8018 - "default.handlebars->47->250"
7620 + "default.handlebars->47->251",
7621 + "default.handlebars->47->253",
7622 + "default3.handlebars->35->1820",
7623 + "default3.handlebars->35->1821",
7624 + "default3.handlebars->35->243",
7625 + "default3.handlebars->35->245",
7626 + "default3.handlebars->35->248",
7627 + "default3.handlebars->35->250"
7628 ]
7629 },
7630 {
@@ -8044,9 +7653,9 @@
7653 "zh-cht": "新增用戶",
7654 "uk": "Додати Користувача",
7655 "xloc": [
8047 - "default-mobile.handlebars->11->947",
8048 - "default.handlebars->47->1076",
8049 - "default3.handlebars->35->1013"
7656 + "default-mobile.handlebars->11->953",
7657 + "default.handlebars->47->1077",
7658 + "default3.handlebars->35->1074"
7659 ]
7660 },
7661 {
@@ -8075,8 +7684,8 @@
7684 "zh-cht": "新增用戶裝置權限",
7685 "uk": "Додати Дозволи для Пристрою Користувача",
7686 "xloc": [
8078 - "default.handlebars->47->2375",
8079 - "default3.handlebars->35->2205"
7687 + "default.handlebars->47->2379",
7688 + "default3.handlebars->35->2375"
7689 ]
7690 },
7691 {
@@ -8105,14 +7714,14 @@
7714 "zh-cht": "新增用戶群",
7715 "uk": "Додати Групу Користувачів",
7716 "xloc": [
8108 - "default.handlebars->47->1077",
8109 - "default.handlebars->47->2215",
8110 - "default.handlebars->47->2367",
8111 - "default.handlebars->47->3080",
8112 - "default3.handlebars->35->1014",
8113 - "default3.handlebars->35->2070",
8114 - "default3.handlebars->35->2197",
8115 - "default3.handlebars->35->2862"
7717 + "default.handlebars->47->1078",
7718 + "default.handlebars->47->2219",
7719 + "default.handlebars->47->2371",
7720 + "default.handlebars->47->3084",
7721 + "default3.handlebars->35->1075",
7722 + "default3.handlebars->35->2214",
7723 + "default3.handlebars->35->2367",
7724 + "default3.handlebars->35->3071"
7725 ]
7726 },
7727 {
@@ -8141,8 +7750,8 @@
7750 "zh-cht": "新增用戶群裝置權限",
7751 "uk": "Додати Дозволи на Пристрої Групи Користувачів",
7752 "xloc": [
8144 - "default.handlebars->47->2377",
8145 - "default3.handlebars->35->2207"
7753 + "default.handlebars->47->2381",
7754 + "default3.handlebars->35->2377"
7755 ]
7756 },
7757 {
@@ -8171,7 +7780,7 @@
7780 "zh-cht": "將用戶新增到裝置群",
7781 "uk": "Додати Користувача до Групи Пристроїв",
7782 "xloc": [
8174 - "default-mobile.handlebars->11->988"
7783 + "default-mobile.handlebars->11->994"
7784 ]
7785 },
7786 {
@@ -8226,9 +7835,10 @@
7835 "zh-cht": "新增用戶",
7836 "uk": "Додати Користувачів",
7837 "xloc": [
8229 - "default.handlebars->47->2214",
8230 - "default.handlebars->47->2880",
8231 - "default3.handlebars->35->2069"
7838 + "default.handlebars->47->2218",
7839 + "default.handlebars->47->2884",
7840 + "default3.handlebars->35->2213",
7841 + "default3.handlebars->35->2877"
7842 ]
7843 },
7844 {
@@ -8257,7 +7867,8 @@
7867 "zh-cht": "將用戶新增到裝置群",
7868 "uk": "Додати Користувачів до Групи Пристроїв",
7869 "xloc": [
8260 - "default.handlebars->47->2364"
7870 + "default.handlebars->47->2368",
7871 + "default3.handlebars->35->2364"
7872 ]
7873 },
7874 {
@@ -8286,7 +7897,8 @@
7897 "zh-cht": "將用戶新增到用戶群",
7898 "uk": "Додати Користувачів до Групи Користувачів",
7899 "xloc": [
8289 - "default.handlebars->47->2915"
7900 + "default.handlebars->47->2919",
7901 + "default3.handlebars->35->2912"
7902 ]
7903 },
7904 {
@@ -8315,8 +7927,8 @@
7927 "zh-cht": "新增YubiKey&reg;OTP",
7928 "uk": "Додати YubiKey&reg; OTP",
7929 "xloc": [
8318 - "default.handlebars->47->240",
8319 - "default3.handlebars->35->227"
7930 + "default.handlebars->47->243",
7931 + "default3.handlebars->35->240"
7932 ]
7933 },
7934 {
@@ -8345,8 +7957,8 @@
7957 "zh-cht": "將本地設備添加到設備組 \\\"{0}\\\"。",
7958 "uk": "Додати локальний пристрій до групи пристроїв \\\"{0}\\\".",
7959 "xloc": [
8348 - "default.handlebars->47->493",
8349 - "default3.handlebars->35->463"
7960 + "default.handlebars->47->496",
7961 + "default3.handlebars->35->493"
7962 ]
7963 },
7964 {
@@ -8375,8 +7987,8 @@
7987 "zh-cht": "通過掃描本地網絡新增新的Intel&reg; AMT電腦。",
7988 "uk": "Додати новий комп'ютер Intel&reg; AMT, просканувавши локальну мережу.",
7989 "xloc": [
8378 - "default.handlebars->47->483",
8379 - "default3.handlebars->35->453"
7990 + "default.handlebars->47->486",
7991 + "default3.handlebars->35->483"
7992 ]
7993 },
7994 {
@@ -8431,8 +8043,8 @@
8043 "zh-cht": "新增位於本地網絡上的新Intel&reg; AMT電腦。",
8044 "uk": "Додати новий комп'ютер Intel&reg; AMT, що знаходиться у локальній мережі.",
8045 "xloc": [
8434 - "default.handlebars->47->481",
8435 - "default3.handlebars->35->451"
8046 + "default.handlebars->47->484",
8047 + "default3.handlebars->35->481"
8048 ]
8049 },
8050 {
@@ -8461,8 +8073,8 @@
8073 "zh-cht": "將新的Intel&reg; AMT裝置新增到裝置群“{0}”。",
8074 "uk": "Додати новий пристрій Intel&reg; AMT до групи пристроїв \\\"{0}\\\".",
8075 "xloc": [
8464 - "default.handlebars->47->502",
8465 - "default3.handlebars->35->471"
8076 + "default.handlebars->47->505",
8077 + "default3.handlebars->35->502"
8078 ]
8079 },
8080 {
@@ -8491,10 +8103,10 @@
8103 "zh-cht": "通過安裝Mesh Agent將新電腦新增到該裝置群。",
8104 "uk": "Додати новий комп'ютер до цієї групи пристроїв, встановивши MeshAgent.",
8105 "xloc": [
8494 - "default.handlebars->47->2220",
8495 - "default.handlebars->47->487",
8496 - "default3.handlebars->35->2075",
8497 - "default3.handlebars->35->457"
8106 + "default.handlebars->47->2224",
8107 + "default.handlebars->47->490",
8108 + "default3.handlebars->35->2219",
8109 + "default3.handlebars->35->487"
8110 ]
8111 },
8112 {
@@ -8523,10 +8135,10 @@
8135 "zh-cht": "添加位於本地網絡上的設備。",
8136 "uk": "Додати пристрій, що знаходиться в локальній мережі.",
8137 "xloc": [
8526 - "default.handlebars->47->2224",
8527 - "default.handlebars->47->491",
8528 - "default3.handlebars->35->2079",
8529 - "default3.handlebars->35->461"
8138 + "default.handlebars->47->2228",
8139 + "default.handlebars->47->494",
8140 + "default3.handlebars->35->2223",
8141 + "default3.handlebars->35->491"
8142 ]
8143 },
8144 {
@@ -8555,7 +8167,8 @@
8167 "zh-cht": "添加本地設備",
8168 "uk": "Додати локальний пристрій",
8169 "xloc": [
8558 - "default.handlebars->47->501"
8170 + "default.handlebars->47->504",
8171 + "default3.handlebars->35->501"
8172 ]
8173 },
8174 {
@@ -8584,8 +8197,8 @@
8197 "zh-cht": "新增標籤",
8198 "uk": "Додати теги",
8199 "xloc": [
8587 - "default.handlebars->47->761",
8588 - "default3.handlebars->35->716"
8200 + "default.handlebars->47->762",
8201 + "default3.handlebars->35->759"
8202 ]
8203 },
8204 {
@@ -8614,8 +8227,8 @@
8227 "zh-cht": "通過定期在遠程設備上以管理員身份運行MeshCmd,添加,激活和配置Intel&reg; AMT以將“{0}”分組。",
8228 "uk": "Додати, активувати та налаштувати Intel&reg; AMT до групи \\\"{0}\\\", періодично запускаючи MeshCmd від імені адміністратора на віддаленому пристрої.",
8229 "xloc": [
8617 - "default.handlebars->47->519",
8618 - "default3.handlebars->35->484"
8230 + "default.handlebars->47->522",
8231 + "default3.handlebars->35->519"
8232 ]
8233 },
8234 {
@@ -8644,8 +8257,8 @@
8257 "zh-cht": "添加了身份驗證應用程序",
8258 "uk": "Додано застосунок автентифікації",
8259 "xloc": [
8647 - "default.handlebars->47->2607",
8648 - "default3.handlebars->35->2424"
8260 + "default.handlebars->47->2611",
8261 + "default3.handlebars->35->2607"
8262 ]
8263 },
8264 {
@@ -8674,8 +8287,8 @@
8287 "zh-cht": "已將設備共享{0}從{1}添加到{2}",
8288 "uk": "Додано поширення пристрою {0} від {1} до {2}",
8289 "xloc": [
8677 - "default.handlebars->47->2618",
8678 - "default3.handlebars->35->2435"
8290 + "default.handlebars->47->2622",
8291 + "default3.handlebars->35->2618"
8292 ]
8293 },
8294 {
@@ -8704,8 +8317,8 @@
8317 "zh-cht": "添加了每天重複的設備共享 {0}。",
8318 "uk": "Додано поширення пристрою {0}, із щоденною переактивацією.",
8319 "xloc": [
8707 - "default.handlebars->47->2655",
8708 - "default3.handlebars->35->2472"
8320 + "default.handlebars->47->2659",
8321 + "default3.handlebars->35->2655"
8322 ]
8323 },
8324 {
@@ -8734,8 +8347,8 @@
8347 "zh-cht": "添加了每週重複的設備共享 {0}。",
8348 "uk": "Додано поширення пристрою {0}, із щотижневою переактивацією.",
8349 "xloc": [
8737 - "default.handlebars->47->2656",
8738 - "default3.handlebars->35->2473"
8350 + "default.handlebars->47->2660",
8351 + "default3.handlebars->35->2656"
8352 ]
8353 },
8354 {
@@ -8764,8 +8377,8 @@
8377 "zh-cht": "添加了無限時間的設備共享 {0}。",
8378 "uk": "Додано поширення пристрою {0} без обмеження часу.",
8379 "xloc": [
8767 - "default.handlebars->47->2648",
8768 - "default3.handlebars->35->2465"
8380 + "default.handlebars->47->2652",
8381 + "default3.handlebars->35->2648"
8382 ]
8383 },
8384 {
@@ -8794,10 +8407,10 @@
8407 "zh-cht": "已將設備{0}添加到設備組{1}",
8408 "uk": "Пристрій {0} додано до групи пристроїв {1}",
8409 "xloc": [
8797 - "default.handlebars->47->2574",
8798 - "default.handlebars->47->2601",
8799 - "default3.handlebars->35->2391",
8800 - "default3.handlebars->35->2418"
8410 + "default.handlebars->47->2578",
8411 + "default.handlebars->47->2605",
8412 + "default3.handlebars->35->2574",
8413 + "default3.handlebars->35->2601"
8414 ]
8415 },
8416 {
@@ -8826,8 +8439,8 @@
8439 "zh-cht": "添加了登錄令牌",
8440 "uk": "Додано токен лоґіну",
8441 "xloc": [
8829 - "default.handlebars->47->2632",
8830 - "default3.handlebars->35->2449"
8442 + "default.handlebars->47->2636",
8443 + "default3.handlebars->35->2632"
8444 ]
8445 },
8446 {
@@ -8856,8 +8469,8 @@
8469 "zh-cht": "增加推送通知認證設備",
8470 "uk": "На пристрій додано автентифікацію через push-сповіщення",
8471 "xloc": [
8859 - "default.handlebars->47->2630",
8860 - "default3.handlebars->35->2447"
8472 + "default.handlebars->47->2634",
8473 + "default3.handlebars->35->2630"
8474 ]
8475 },
8476 {
@@ -8886,8 +8499,8 @@
8499 "zh-cht": "添加了安全密鑰",
8500 "uk": "Додано Ключ Безпеки",
8501 "xloc": [
8889 - "default.handlebars->47->2612",
8890 - "default3.handlebars->35->2429"
8502 + "default.handlebars->47->2616",
8503 + "default3.handlebars->35->2612"
8504 ]
8505 },
8506 {
@@ -8916,8 +8529,8 @@
8529 "zh-cht": "已將用戶組{0}添加到設備組{1}",
8530 "uk": "Групу користувачів {0} додано до групи пристроїв {1}",
8531 "xloc": [
8919 - "default.handlebars->47->2585",
8920 - "default3.handlebars->35->2402"
8532 + "default.handlebars->47->2589",
8533 + "default3.handlebars->35->2585"
8534 ]
8535 },
8536 {
@@ -8946,10 +8559,10 @@
8559 "zh-cht": "已將用戶{0}添加到用戶組{1}",
8560 "uk": "Додано користувача {0} до групи користувачів {1}",
8561 "xloc": [
8949 - "default.handlebars->47->2588",
8950 - "default.handlebars->47->2597",
8951 - "default3.handlebars->35->2405",
8952 - "default3.handlebars->35->2414"
8562 + "default.handlebars->47->2592",
8563 + "default.handlebars->47->2601",
8564 + "default3.handlebars->35->2588",
8565 + "default3.handlebars->35->2597"
8566 ]
8567 },
8568 {
@@ -8978,8 +8591,8 @@
8591 "zh-cht": "地址",
8592 "uk": "Адреса",
8593 "xloc": [
8981 - "default.handlebars->47->382",
8982 - "default3.handlebars->35->354"
8594 + "default.handlebars->47->385",
8595 + "default3.handlebars->35->382"
8596 ]
8597 },
8598 {
@@ -9037,9 +8650,9 @@
8650 "zh-cht": "管理員控制模式(ACM)",
8651 "uk": "Режим Керування Адміністратора (eng. ACM)",
8652 "xloc": [
9040 - "default-mobile.handlebars->11->819",
9041 - "default.handlebars->47->1661",
9042 - "default3.handlebars->35->1522"
8653 + "default-mobile.handlebars->11->825",
8654 + "default.handlebars->47->1662",
8655 + "default3.handlebars->35->1644"
8656 ]
8657 },
8658 {
@@ -9068,9 +8681,9 @@
8681 "zh-cht": "管理員憑證",
8682 "uk": "Облікові Дані Адміністратора",
8683 "xloc": [
9071 - "default-mobile.handlebars->11->825",
9072 - "default.handlebars->47->1667",
9073 - "default3.handlebars->35->1528"
8684 + "default-mobile.handlebars->11->831",
8685 + "default.handlebars->47->1668",
8686 + "default3.handlebars->35->1650"
8687 ]
8688 },
8689 {
@@ -9130,8 +8743,8 @@
8743 "zh-cht": "管理領域",
8744 "uk": "Області Адміністратора",
8745 "xloc": [
9133 - "default.handlebars->47->2967",
9134 - "default3.handlebars->35->2758"
8746 + "default.handlebars->47->2971",
8747 + "default3.handlebars->35->2964"
8748 ]
8749 },
8750 {
@@ -9191,7 +8804,8 @@
8804 "zh-cht": "管理領域",
8805 "uk": "Адміністративні Області",
8806 "xloc": [
9194 - "default.handlebars->47->2812"
8807 + "default.handlebars->47->2816",
8808 + "default3.handlebars->35->2809"
8809 ]
8810 },
8811 {
@@ -9220,8 +8834,8 @@
8834 "zh-cht": "管理員",
8835 "uk": "Адміністратор",
8836 "xloc": [
9223 - "default.handlebars->47->2730",
9224 - "default3.handlebars->35->2545"
8837 + "default.handlebars->47->2734",
8838 + "default3.handlebars->35->2730"
8839 ]
8840 },
8841 {
@@ -9250,9 +8864,9 @@
8864 "zh-cht": "南非文",
8865 "uk": "Африканська",
8866 "xloc": [
9253 - "default-mobile.handlebars->11->107",
9254 - "default.handlebars->47->1841",
9255 - "default3.handlebars->35->1680",
8867 + "default-mobile.handlebars->11->113",
8868 + "default.handlebars->47->1843",
8869 + "default3.handlebars->35->1823",
8870 "login2.handlebars->7->1"
8871 ]
8872 },
@@ -9283,21 +8897,21 @@
8897 "uk": "Агент",
8898 "xloc": [
8899 "agent-translations.json",
9286 - "default-mobile.handlebars->11->469",
9287 - "default-mobile.handlebars->11->526",
8900 + "default-mobile.handlebars->11->475",
8901 + "default-mobile.handlebars->11->532",
8902 "default-mobile.handlebars->container->page_content->column_l->p10->p10console->consoleTable->1->4->1->1->1->0->p15outputselecttd->p15outputselect->p15outputselect1",
9289 - "default.handlebars->47->2448",
9290 - "default.handlebars->47->2461",
9291 - "default.handlebars->47->3330",
9292 - "default.handlebars->47->409",
9293 - "default.handlebars->47->717",
8903 + "default.handlebars->47->2452",
8904 + "default.handlebars->47->2465",
8905 + "default.handlebars->47->3334",
8906 + "default.handlebars->47->412",
8907 + "default.handlebars->47->718",
8908 "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->p15outputselect1",
8909 "default.handlebars->container->dialog->dialogBody->dialog7->1->td7meshkvm",
9296 - "default3.handlebars->35->2272",
9297 - "default3.handlebars->35->2285",
9298 - "default3.handlebars->35->3103",
9299 - "default3.handlebars->35->381",
9300 - "default3.handlebars->35->675",
8910 + "default3.handlebars->35->2448",
8911 + "default3.handlebars->35->2461",
8912 + "default3.handlebars->35->3321",
8913 + "default3.handlebars->35->409",
8914 + "default3.handlebars->35->715",
8915 "default3.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->p15outputselect1",
8916 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->xxAddAgentBody->dialog7->1->td7meshkvm"
8917 ]
@@ -9328,10 +8942,10 @@
8942 "zh-cht": "代理+Intel&reg; AMT",
8943 "uk": "Агент + Intel&reg; AMT",
8944 "xloc": [
9331 - "default.handlebars->47->2450",
9332 - "default.handlebars->47->2463",
9333 - "default3.handlebars->35->2274",
9334 - "default3.handlebars->35->2287"
8945 + "default.handlebars->47->2454",
8946 + "default.handlebars->47->2467",
8947 + "default3.handlebars->35->2450",
8948 + "default3.handlebars->35->2463"
8949 ]
8950 },
8951 {
@@ -9391,12 +9005,12 @@
9005 "zh-cht": "代理控制台",
9006 "uk": "Консоль Агента",
9007 "xloc": [
9394 - "default-mobile.handlebars->11->605",
9395 - "default-mobile.handlebars->11->994",
9396 - "default.handlebars->47->2385",
9397 - "default.handlebars->47->807",
9398 - "default3.handlebars->35->2215",
9399 - "default3.handlebars->35->755"
9008 + "default-mobile.handlebars->11->1000",
9009 + "default-mobile.handlebars->11->611",
9010 + "default.handlebars->47->2389",
9011 + "default.handlebars->47->808",
9012 + "default3.handlebars->35->2385",
9013 + "default3.handlebars->35->805"
9014 ]
9015 },
9016 {
@@ -9425,8 +9039,8 @@
9039 "zh-cht": "代理錯誤計數器",
9040 "uk": "Лічильник Помилок Агента",
9041 "xloc": [
9428 - "default.handlebars->47->3299",
9429 - "default3.handlebars->35->3072"
9042 + "default.handlebars->47->3303",
9043 + "default3.handlebars->35->3290"
9044 ]
9045 },
9046 {
@@ -9455,8 +9069,8 @@
9069 "zh-cht": "代理 IP 地址",
9070 "uk": "IP-адреса Агента",
9071 "xloc": [
9458 - "default.handlebars->47->350",
9459 - "default3.handlebars->35->323"
9072 + "default.handlebars->47->353",
9073 + "default3.handlebars->35->350"
9074 ]
9075 },
9076 {
@@ -9528,9 +9142,9 @@
9142 "zh-cht": "代理訊息",
9143 "uk": "Повідомлення Агента",
9144 "xloc": [
9531 - "default-mobile.handlebars->11->442",
9532 - "default.handlebars->47->473",
9533 - "default3.handlebars->35->445"
9145 + "default-mobile.handlebars->11->448",
9146 + "default.handlebars->47->476",
9147 + "default3.handlebars->35->473"
9148 ]
9149 },
9150 {
@@ -9559,7 +9173,7 @@
9173 "zh-cht": "代理中繼",
9174 "uk": "Ретранслятор Агента",
9175 "xloc": [
9562 - "default-mobile.handlebars->11->529"
9176 + "default-mobile.handlebars->11->535"
9177 ]
9178 },
9179 {
@@ -9644,10 +9258,10 @@
9258 "zh-cht": "代理自行共享",
9259 "uk": "Само-Поширення Агента",
9260 "xloc": [
9647 - "default.handlebars->47->1105",
9648 - "default.handlebars->47->2252",
9649 - "default3.handlebars->35->1042",
9650 - "default3.handlebars->35->2107"
9261 + "default.handlebars->47->1106",
9262 + "default.handlebars->47->2256",
9263 + "default3.handlebars->35->1103",
9264 + "default3.handlebars->35->2251"
9265 ]
9266 },
9267 {
@@ -9676,8 +9290,8 @@
9290 "zh-cht": "代理時段",
9291 "uk": "Сесії Агента",
9292 "xloc": [
9679 - "default.handlebars->47->3315",
9680 - "default3.handlebars->35->3088"
9293 + "default.handlebars->47->3319",
9294 + "default3.handlebars->35->3306"
9295 ]
9296 },
9297 {
@@ -9732,9 +9346,9 @@
9346 "zh-cht": "代理標籤",
9347 "uk": "Тег Агента",
9348 "xloc": [
9735 - "default-mobile.handlebars->11->523",
9736 - "default.handlebars->47->932",
9737 - "default3.handlebars->35->869"
9349 + "default-mobile.handlebars->11->529",
9350 + "default.handlebars->47->933",
9351 + "default3.handlebars->35->930"
9352 ]
9353 },
9354 {
@@ -9763,10 +9377,10 @@
9377 "zh-cht": "代理類型",
9378 "uk": "Тип Агента",
9379 "xloc": [
9766 - "default.handlebars->47->339",
9767 - "default.handlebars->47->372",
9768 - "default3.handlebars->35->312",
9769 - "default3.handlebars->35->344"
9380 + "default.handlebars->47->342",
9381 + "default.handlebars->47->375",
9382 + "default3.handlebars->35->339",
9383 + "default3.handlebars->35->372"
9384 ]
9385 },
9386 {
@@ -9795,9 +9409,9 @@
9409 "zh-cht": "代理類型",
9410 "uk": "Тип Агента",
9411 "xloc": [
9798 - "default.handlebars->47->2459",
9412 + "default.handlebars->47->2463",
9413 "default.handlebars->container->column_l->p21->p21main->1->1->meshOsChartDiv->1",
9800 - "default3.handlebars->35->2283",
9414 + "default3.handlebars->35->2459",
9415 "default3.handlebars->container->column_l->p21->p21main->1->1->meshOsChartDiv->1"
9416 ]
9417 },
@@ -9827,10 +9441,10 @@
9441 "zh-cht": "代理版本",
9442 "uk": "Версія Агента",
9443 "xloc": [
9830 - "default.handlebars->47->340",
9831 - "default.handlebars->47->373",
9832 - "default3.handlebars->35->313",
9833 - "default3.handlebars->35->345"
9444 + "default.handlebars->47->343",
9445 + "default.handlebars->47->376",
9446 + "default3.handlebars->35->340",
9447 + "default3.handlebars->35->373"
9448 ]
9449 },
9450 {
@@ -9859,8 +9473,8 @@
9473 "zh-cht": "代理關閉了與{0}%代理到服務器壓縮的會話。已發送:{1},已壓縮:{2}",
9474 "uk": "Агент закрив сесію зі стисненням {0}% між агентом і сервером. Надіслано: {1}, стиснуто: {2}",
9475 "xloc": [
9862 - "default.handlebars->47->2571",
9863 - "default3.handlebars->35->2388"
9476 + "default.handlebars->47->2575",
9477 + "default3.handlebars->35->2571"
9478 ]
9479 },
9480 {
@@ -9889,12 +9503,12 @@
9503 "zh-cht": "代理已連接",
9504 "uk": "Агент підключено",
9505 "xloc": [
9892 - "default.handlebars->47->1063",
9506 "default.handlebars->47->1064",
9894 - "default.handlebars->47->259",
9895 - "default3.handlebars->35->1000",
9896 - "default3.handlebars->35->1001",
9897 - "default3.handlebars->35->239"
9507 + "default.handlebars->47->1065",
9508 + "default.handlebars->47->262",
9509 + "default3.handlebars->35->1061",
9510 + "default3.handlebars->35->1062",
9511 + "default3.handlebars->35->259"
9512 ]
9513 },
9514 {
@@ -9923,8 +9537,8 @@
9537 "zh-cht": "與有限特權相關的代理",
9538 "uk": "Агент підключено із обмеженими привілеями",
9539 "xloc": [
9926 - "default.handlebars->47->260",
9927 - "default3.handlebars->35->240"
9540 + "default.handlebars->47->263",
9541 + "default3.handlebars->35->260"
9542 ]
9543 },
9544 {
@@ -9953,8 +9567,8 @@
9567 "zh-cht": "代理已斷開連接",
9568 "uk": "Агент відключений",
9569 "xloc": [
9956 - "default.handlebars->47->264",
9957 - "default3.handlebars->35->244"
9570 + "default.handlebars->47->267",
9571 + "default3.handlebars->35->264"
9572 ]
9573 },
9574 {
@@ -9984,7 +9598,7 @@
9598 "uk": "Перевірку хешу агента проігноровано, це небезпечно.",
9599 "xloc": [
9600 "default.handlebars->47->93",
9987 - "default3.handlebars->35->92"
9601 + "default3.handlebars->35->93"
9602 ]
9603 },
9604 {
@@ -10091,9 +9705,9 @@
9705 "zh-cht": "代理離線",
9706 "uk": "Агент офлайн",
9707 "xloc": [
10094 - "default-mobile.handlebars->11->913",
10095 - "default.handlebars->47->1756",
10096 - "default3.handlebars->35->1617"
9708 + "default-mobile.handlebars->11->919",
9709 + "default.handlebars->47->1757",
9710 + "default3.handlebars->35->1739"
9711 ]
9712 },
9713 {
@@ -10122,9 +9736,9 @@
9736 "zh-cht": "代理在線",
9737 "uk": "Агент онлайн",
9738 "xloc": [
10125 - "default-mobile.handlebars->11->912",
10126 - "default.handlebars->47->1755",
10127 - "default3.handlebars->35->1616"
9739 + "default-mobile.handlebars->11->918",
9740 + "default.handlebars->47->1756",
9741 + "default3.handlebars->35->1738"
9742 ]
9743 },
9744 {
@@ -10231,8 +9845,8 @@
9845 "zh-cht": "代理在特權降低的遠程設備上運行。",
9846 "uk": "Агент працює на віддаленому пристрої без прав адміністратора.",
9847 "xloc": [
10234 - "default.handlebars->47->1057",
10235 - "default3.handlebars->35->994"
9848 + "default.handlebars->47->1058",
9849 + "default3.handlebars->35->1055"
9850 ]
9851 },
9852 {
@@ -10365,12 +9979,12 @@
9979 "zh-cht": "代理",
9980 "uk": "Агент",
9981 "xloc": [
10368 - "default.handlebars->47->2416",
10369 - "default.handlebars->47->3343",
10370 - "default.handlebars->47->575",
10371 - "default3.handlebars->35->2243",
10372 - "default3.handlebars->35->3116",
10373 - "default3.handlebars->35->536"
9982 + "default.handlebars->47->2420",
9983 + "default.handlebars->47->3347",
9984 + "default.handlebars->47->578",
9985 + "default3.handlebars->35->2416",
9986 + "default3.handlebars->35->3334",
9987 + "default3.handlebars->35->575"
9988 ]
9989 },
9990 {
@@ -10399,9 +10013,9 @@
10013 "zh-cht": "阿爾巴尼亞文",
10014 "uk": "Албанська",
10015 "xloc": [
10402 - "default-mobile.handlebars->11->108",
10403 - "default.handlebars->47->1842",
10404 - "default3.handlebars->35->1681",
10016 + "default-mobile.handlebars->11->114",
10017 + "default.handlebars->47->1844",
10018 + "default3.handlebars->35->1824",
10019 "login2.handlebars->7->2"
10020 ]
10021 },
@@ -10412,10 +10026,10 @@
10026 "pl": "Okno Powiadomienia",
10027 "uk": "Вікно Попередження",
10028 "xloc": [
10415 - "default.handlebars->47->1189",
10416 - "default.handlebars->47->770",
10417 - "default3.handlebars->35->1115",
10418 - "default3.handlebars->35->724"
10029 + "default.handlebars->47->1190",
10030 + "default.handlebars->47->771",
10031 + "default3.handlebars->35->1185",
10032 + "default3.handlebars->35->768"
10033 ]
10034 },
10035 {
@@ -10444,12 +10058,12 @@
10058 "zh-cht": "所有",
10059 "uk": "Усі",
10060 "xloc": [
10447 - "default-mobile.handlebars->11->361",
10448 - "default-mobile.handlebars->11->707",
10449 - "default-mobile.handlebars->11->709",
10450 - "default.handlebars->47->3163",
10061 + "default-mobile.handlebars->11->367",
10062 + "default-mobile.handlebars->11->713",
10063 + "default-mobile.handlebars->11->715",
10064 + "default.handlebars->47->3167",
10065 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar->DevFilterSelect->1",
10452 - "default3.handlebars->35->2937",
10066 + "default3.handlebars->35->3154",
10067 "default3.handlebars->container->column_l->p1->devListToolbarSpan->devListToolbar->DevFilterSelect->1"
10068 ]
10069 },
@@ -10479,8 +10093,8 @@
10093 "zh-cht": "全部可用",
10094 "uk": "Усі Наявні",
10095 "xloc": [
10482 - "default.handlebars->47->2692",
10483 - "default3.handlebars->35->2509"
10096 + "default.handlebars->47->2696",
10097 + "default3.handlebars->35->2692"
10098 ]
10099 },
10100 {
@@ -10509,10 +10123,10 @@
10123 "zh-cht": "所有可用的代理",
10124 "uk": "Усі Наявні Агенти",
10125 "xloc": [
10512 - "default.handlebars->47->2417",
10513 - "default.handlebars->47->576",
10514 - "default3.handlebars->35->2244",
10515 - "default3.handlebars->35->537"
10126 + "default.handlebars->47->2421",
10127 + "default.handlebars->47->579",
10128 + "default3.handlebars->35->2417",
10129 + "default3.handlebars->35->576"
10130 ]
10131 },
10132 {
@@ -10541,8 +10155,8 @@
10155 "zh-cht": "所有顯示",
10156 "uk": "Усі Дисплеї",
10157 "xloc": [
10544 - "default.handlebars->47->1485",
10545 - "default3.handlebars->35->1370"
10158 + "default.handlebars->47->1486",
10159 + "default3.handlebars->35->1471"
10160 ]
10161 },
10162 {
@@ -10571,8 +10185,8 @@
10185 "zh-cht": "所有事件",
10186 "uk": "Усі Події",
10187 "xloc": [
10574 - "default.handlebars->47->2690",
10575 - "default3.handlebars->35->2507"
10188 + "default.handlebars->47->2694",
10189 + "default3.handlebars->35->2690"
10190 ]
10191 },
10192 {
@@ -10601,12 +10215,12 @@
10215 "zh-cht": "全部聚焦",
10216 "uk": "Фокусувати Все",
10217 "xloc": [
10604 - "default.handlebars->47->1403",
10605 - "default.handlebars->47->1405",
10218 + "default.handlebars->47->1404",
10219 "default.handlebars->47->1406",
10607 - "default3.handlebars->35->1297",
10608 - "default3.handlebars->35->1298",
10609 - "default3.handlebars->35->1299"
10220 + "default.handlebars->47->1407",
10221 + "default3.handlebars->35->1391",
10222 + "default3.handlebars->35->1393",
10223 + "default3.handlebars->35->1394"
10224 ]
10225 },
10226 {
@@ -10623,6 +10237,12 @@
10237 "default3.handlebars->container->column_l->p31->3->1->0->3->1->p31filterevents->1"
10238 ]
10239 },
10240 + {
10241 + "en": "All Themes",
10242 + "xloc": [
10243 + "default3.handlebars->35->2092"
10244 + ]
10245 + },
10246 {
10247 "bs": "Dopustiti",
10248 "ca": "Permetre",
@@ -10678,10 +10298,10 @@
10298 "zh-cht": "允許用戶管理此裝置群和該群中的裝置。",
10299 "uk": "Дозволити користувачам керувати цією групою пристроїв і пристроями в цій групі.",
10300 "xloc": [
10681 - "default.handlebars->47->2329",
10682 - "default.handlebars->47->2912",
10683 - "default3.handlebars->35->2160",
10684 - "default3.handlebars->35->2704"
10301 + "default.handlebars->47->2333",
10302 + "default.handlebars->47->2916",
10303 + "default3.handlebars->35->2329",
10304 + "default3.handlebars->35->2909"
10305 ]
10306 },
10307 {
@@ -10710,8 +10330,8 @@
10330 "zh-cht": "允許用戶管理此裝置。",
10331 "uk": "Дозволити користувачам керувати цим пристроєм.",
10332 "xloc": [
10713 - "default.handlebars->47->2330",
10714 - "default3.handlebars->35->2161"
10333 + "default.handlebars->47->2334",
10334 + "default3.handlebars->35->2330"
10335 ]
10336 },
10337 {
@@ -10740,8 +10360,8 @@
10360 "zh-cht": "允許",
10361 "uk": "Дозволено",
10362 "xloc": [
10743 - "default.handlebars->47->287",
10744 - "default3.handlebars->35->267"
10363 + "default.handlebars->47->290",
10364 + "default3.handlebars->35->287"
10365 ]
10366 },
10367 {
@@ -10827,12 +10447,12 @@
10447 "zh-cht": "Alt",
10448 "uk": "Alt",
10449 "xloc": [
10830 - "default-mobile.handlebars->11->662",
10831 - "default-mobile.handlebars->11->666",
10832 - "default.handlebars->47->1427",
10833 - "default.handlebars->47->1431",
10834 - "default3.handlebars->35->1320",
10835 - "default3.handlebars->35->1324"
10450 + "default-mobile.handlebars->11->668",
10451 + "default-mobile.handlebars->11->672",
10452 + "default.handlebars->47->1428",
10453 + "default.handlebars->47->1432",
10454 + "default3.handlebars->35->1415",
10455 + "default3.handlebars->35->1419"
10456 ]
10457 },
10458 {
@@ -10861,8 +10481,8 @@
10481 "zh-cht": "替代Shell",
10482 "uk": "Alt Оболонка",
10483 "xloc": [
10864 - "default.handlebars->47->1393",
10865 - "default3.handlebars->35->1289"
10484 + "default.handlebars->47->1394",
10485 + "default3.handlebars->35->1381"
10486 ]
10487 },
10488 {
@@ -10951,8 +10571,8 @@
10571 "zh-cht": "備用(F10 = ESC + 0)",
10572 "uk": "Замінити (F10 = ESC+0)",
10573 "xloc": [
10954 - "default.handlebars->47->1519",
10955 - "default3.handlebars->35->1402",
10574 + "default.handlebars->47->1520",
10575 + "default3.handlebars->35->1505",
10576 "sharing.handlebars->11->37"
10577 ]
10578 },
@@ -11049,14 +10669,14 @@
10669 "zh-cht": "一直通知",
10670 "uk": "Завжди Сповіщувати",
10671 "xloc": [
11052 - "default.handlebars->47->2191",
11053 - "default.handlebars->47->2871",
11054 - "default.handlebars->47->2976",
11055 - "default.handlebars->47->971",
11056 - "default3.handlebars->35->2046",
11057 - "default3.handlebars->35->2669",
11058 - "default3.handlebars->35->2767",
11059 - "default3.handlebars->35->908"
10672 + "default.handlebars->47->2195",
10673 + "default.handlebars->47->2875",
10674 + "default.handlebars->47->2980",
10675 + "default.handlebars->47->972",
10676 + "default3.handlebars->35->2190",
10677 + "default3.handlebars->35->2868",
10678 + "default3.handlebars->35->2973",
10679 + "default3.handlebars->35->969"
10680 ]
10681 },
10682 {
@@ -11085,14 +10705,14 @@
10705 "zh-cht": "一直提示",
10706 "uk": "Завжди Запитувати",
10707 "xloc": [
11088 - "default.handlebars->47->2192",
11089 - "default.handlebars->47->2872",
11090 - "default.handlebars->47->2977",
11091 - "default.handlebars->47->972",
11092 - "default3.handlebars->35->2047",
11093 - "default3.handlebars->35->2670",
11094 - "default3.handlebars->35->2768",
11095 - "default3.handlebars->35->909"
10708 + "default.handlebars->47->2196",
10709 + "default.handlebars->47->2876",
10710 + "default.handlebars->47->2981",
10711 + "default.handlebars->47->973",
10712 + "default3.handlebars->35->2191",
10713 + "default3.handlebars->35->2869",
10714 + "default3.handlebars->35->2974",
10715 + "default3.handlebars->35->970"
10716 ]
10717 },
10718 {
@@ -11121,6 +10741,13 @@
10741 "zh-cht": "始終連接",
10742 "uk": "Завжди підключено"
10743 },
10744 + {
10745 + "en": "Amazon App Store",
10746 + "xloc": [
10747 + "default.handlebars->47->646",
10748 + "default3.handlebars->35->643"
10749 + ]
10750 + },
10751 {
10752 "bs": "Za vas je kreiran nalog na serveru",
10753 "ca": "S'ha creat un compte per a tu al servidor",
@@ -11191,8 +10818,8 @@
10818 "pl": "Wystąpił nieznany błąd.",
10819 "uk": "Сталася невідома помилка.",
10820 "xloc": [
11194 - "default.handlebars->47->3115",
11195 - "default3.handlebars->35->2890"
10821 + "default.handlebars->47->3119",
10822 + "default3.handlebars->35->3106"
10823 ]
10824 },
10825 {
@@ -11256,9 +10883,9 @@
10883 "zh-cht": "Android APK",
10884 "uk": "Android APK",
10885 "xloc": [
11259 - "default-mobile.handlebars->11->966",
11260 - "default.handlebars->47->646",
11261 - "default3.handlebars->35->585"
10886 + "default-mobile.handlebars->11->972",
10887 + "default.handlebars->47->647",
10888 + "default3.handlebars->35->644"
10889 ]
10890 },
10891 {
@@ -11345,7 +10972,7 @@
10972 "zh-cht": "安卓安裝",
10973 "uk": "Інсталяція Android",
10974 "xloc": [
11348 - "default-mobile.handlebars->11->968"
10975 + "default-mobile.handlebars->11->974"
10976 ]
10977 },
10978 {
@@ -11354,8 +10981,8 @@
10981 "nl": "Android MeshAgent",
10982 "uk": "Android MeshAgent",
10983 "xloc": [
11357 - "default.handlebars->47->581",
11358 - "default3.handlebars->35->542"
10984 + "default.handlebars->47->584",
10985 + "default3.handlebars->35->581"
10986 ]
10987 },
10988 {
@@ -11364,9 +10991,9 @@
10991 "nl": "Android Versie",
10992 "uk": "Версія Android",
10993 "xloc": [
11367 - "default-mobile.handlebars->11->794",
11368 - "default.handlebars->47->1626",
11369 - "default3.handlebars->35->1489"
10994 + "default-mobile.handlebars->11->800",
10995 + "default.handlebars->47->1627",
10996 + "default3.handlebars->35->1611"
10997 ]
10998 },
10999 {
@@ -11426,10 +11053,10 @@
11053 "zh-cht": "殺毒軟件未激活",
11054 "uk": "Антивірус непрацюючий",
11055 "xloc": [
11429 - "default.handlebars->47->2452",
11430 - "default.handlebars->47->2466",
11431 - "default3.handlebars->35->2276",
11432 - "default3.handlebars->35->2290"
11056 + "default.handlebars->47->2456",
11057 + "default.handlebars->47->2470",
11058 + "default3.handlebars->35->2452",
11059 + "default3.handlebars->35->2466"
11060 ]
11061 },
11062 {
@@ -11458,9 +11085,9 @@
11085 "zh-cht": "防毒軟體",
11086 "uk": "Антивірус",
11087 "xloc": [
11461 - "default-mobile.handlebars->11->776",
11462 - "default.handlebars->47->960",
11463 - "default3.handlebars->35->897"
11088 + "default-mobile.handlebars->11->782",
11089 + "default.handlebars->47->961",
11090 + "default3.handlebars->35->958"
11091 ]
11092 },
11093 {
@@ -11489,8 +11116,8 @@
11116 "zh-cht": "任何可支持的",
11117 "uk": "Усі Можливі",
11118 "xloc": [
11492 - "default.handlebars->47->549",
11493 - "default3.handlebars->35->511"
11119 + "default.handlebars->47->552",
11120 + "default3.handlebars->35->549"
11121 ]
11122 },
11123 {
@@ -11580,7 +11207,8 @@
11207 "zh-cht": "蘋果macOS",
11208 "uk": "Apple macOS",
11209 "xloc": [
11583 - "default.handlebars->47->591"
11210 + "default.handlebars->47->594",
11211 + "default3.handlebars->35->591"
11212 ]
11213 },
11214 {
@@ -11589,7 +11217,8 @@
11217 "nl": "Apple macOS (verwijderen)",
11218 "uk": "Apple macOS (Деінсталяція)",
11219 "xloc": [
11592 - "default.handlebars->47->596"
11220 + "default.handlebars->47->599",
11221 + "default3.handlebars->35->596"
11222 ]
11223 },
11224 {
@@ -11599,8 +11228,8 @@
11228 "uk": "Для запуску виконувані файли Apple macOS потрібно буде вилучити з карантину запустивши 'xattr -r -d com.apple.quarantine meshagent'",
11229 "xloc": [
11230 "agentinvite.handlebars->3->12",
11602 - "default.handlebars->47->678",
11603 - "default3.handlebars->35->617"
11231 + "default.handlebars->47->679",
11232 + "default3.handlebars->35->676"
11233 ]
11234 },
11235 {
@@ -11629,8 +11258,8 @@
11258 "zh-cht": "僅限Apple macOS",
11259 "uk": "Лише Apple macOS",
11260 "xloc": [
11632 - "default.handlebars->47->551",
11633 - "default3.handlebars->35->513"
11261 + "default.handlebars->47->554",
11262 + "default3.handlebars->35->551"
11263 ]
11264 },
11265 {
@@ -11810,7 +11439,8 @@
11439 "zh-cht": "應用程序,始終連接",
11440 "uk": "Застосунок, Завжди підключено",
11441 "xloc": [
11813 - "default.handlebars->47->605"
11442 + "default.handlebars->47->608",
11443 + "default3.handlebars->35->605"
11444 ]
11445 },
11446 {
@@ -11839,7 +11469,8 @@
11469 "zh-cht": "應用程序,根據用戶請求連接",
11470 "uk": "Застосунок, Підключення за запитом користувача",
11471 "xloc": [
11842 - "default.handlebars->47->604"
11472 + "default.handlebars->47->607",
11473 + "default3.handlebars->35->604"
11474 ]
11475 },
11476 {
@@ -11868,9 +11499,9 @@
11499 "zh-cht": "阿拉伯文(阿爾及利亞)",
11500 "uk": "Арабська (Алжир)",
11501 "xloc": [
11871 - "default-mobile.handlebars->11->110",
11872 - "default.handlebars->47->1844",
11873 - "default3.handlebars->35->1683",
11502 + "default-mobile.handlebars->11->116",
11503 + "default.handlebars->47->1846",
11504 + "default3.handlebars->35->1826",
11505 "login2.handlebars->7->4"
11506 ]
11507 },
@@ -11900,9 +11531,9 @@
11531 "zh-cht": "阿拉伯文(巴林)",
11532 "uk": "Арабська (Бахрейн)",
11533 "xloc": [
11903 - "default-mobile.handlebars->11->111",
11904 - "default.handlebars->47->1845",
11905 - "default3.handlebars->35->1684",
11534 + "default-mobile.handlebars->11->117",
11535 + "default.handlebars->47->1847",
11536 + "default3.handlebars->35->1827",
11537 "login2.handlebars->7->5"
11538 ]
11539 },
@@ -11932,9 +11563,9 @@
11563 "zh-cht": "阿拉伯文(埃及)",
11564 "uk": "Арабська (Єгипет)",
11565 "xloc": [
11935 - "default-mobile.handlebars->11->112",
11936 - "default.handlebars->47->1846",
11937 - "default3.handlebars->35->1685",
11566 + "default-mobile.handlebars->11->118",
11567 + "default.handlebars->47->1848",
11568 + "default3.handlebars->35->1828",
11569 "login2.handlebars->7->6"
11570 ]
11571 },
@@ -11964,9 +11595,9 @@
11595 "zh-cht": "阿拉伯文(伊拉克)",
11596 "uk": "Арабська (Ірак)",
11597 "xloc": [
11967 - "default-mobile.handlebars->11->113",
11968 - "default.handlebars->47->1847",
11969 - "default3.handlebars->35->1686",
11598 + "default-mobile.handlebars->11->119",
11599 + "default.handlebars->47->1849",
11600 + "default3.handlebars->35->1829",
11601 "login2.handlebars->7->7"
11602 ]
11603 },
@@ -11996,9 +11627,9 @@
11627 "zh-cht": "阿拉伯文(約旦)",
11628 "uk": "Арабська (Йорданія)",
11629 "xloc": [
11999 - "default-mobile.handlebars->11->114",
12000 - "default.handlebars->47->1848",
12001 - "default3.handlebars->35->1687",
11630 + "default-mobile.handlebars->11->120",
11631 + "default.handlebars->47->1850",
11632 + "default3.handlebars->35->1830",
11633 "login2.handlebars->7->8"
11634 ]
11635 },
@@ -12028,9 +11659,9 @@
11659 "zh-cht": "阿拉伯文(科威特)",
11660 "uk": "Арабська (Кувейт)",
11661 "xloc": [
12031 - "default-mobile.handlebars->11->115",
12032 - "default.handlebars->47->1849",
12033 - "default3.handlebars->35->1688",
11662 + "default-mobile.handlebars->11->121",
11663 + "default.handlebars->47->1851",
11664 + "default3.handlebars->35->1831",
11665 "login2.handlebars->7->9"
11666 ]
11667 },
@@ -12060,9 +11691,9 @@
11691 "zh-cht": "阿拉伯文(黎巴嫩)",
11692 "uk": "Арабська (Ліван)",
11693 "xloc": [
12063 - "default-mobile.handlebars->11->116",
12064 - "default.handlebars->47->1850",
12065 - "default3.handlebars->35->1689",
11694 + "default-mobile.handlebars->11->122",
11695 + "default.handlebars->47->1852",
11696 + "default3.handlebars->35->1832",
11697 "login2.handlebars->7->10"
11698 ]
11699 },
@@ -12092,9 +11723,9 @@
11723 "zh-cht": "阿拉伯文(利比亞)",
11724 "uk": "Арабська (Лівія)",
11725 "xloc": [
12095 - "default-mobile.handlebars->11->117",
12096 - "default.handlebars->47->1851",
12097 - "default3.handlebars->35->1690",
11726 + "default-mobile.handlebars->11->123",
11727 + "default.handlebars->47->1853",
11728 + "default3.handlebars->35->1833",
11729 "login2.handlebars->7->11"
11730 ]
11731 },
@@ -12124,9 +11755,9 @@
11755 "zh-cht": "阿拉伯文(摩洛哥)",
11756 "uk": "Арабська (Марокко)",
11757 "xloc": [
12127 - "default-mobile.handlebars->11->118",
12128 - "default.handlebars->47->1852",
12129 - "default3.handlebars->35->1691",
11758 + "default-mobile.handlebars->11->124",
11759 + "default.handlebars->47->1854",
11760 + "default3.handlebars->35->1834",
11761 "login2.handlebars->7->12"
11762 ]
11763 },
@@ -12156,9 +11787,9 @@
11787 "zh-cht": "阿拉伯文(阿曼)",
11788 "uk": "Арабська (Оман)",
11789 "xloc": [
12159 - "default-mobile.handlebars->11->119",
12160 - "default.handlebars->47->1853",
12161 - "default3.handlebars->35->1692",
11790 + "default-mobile.handlebars->11->125",
11791 + "default.handlebars->47->1855",
11792 + "default3.handlebars->35->1835",
11793 "login2.handlebars->7->13"
11794 ]
11795 },
@@ -12188,9 +11819,9 @@
11819 "zh-cht": "阿拉伯文(卡塔爾)",
11820 "uk": "Арабська (Катар)",
11821 "xloc": [
12191 - "default-mobile.handlebars->11->120",
12192 - "default.handlebars->47->1854",
12193 - "default3.handlebars->35->1693",
11822 + "default-mobile.handlebars->11->126",
11823 + "default.handlebars->47->1856",
11824 + "default3.handlebars->35->1836",
11825 "login2.handlebars->7->14"
11826 ]
11827 },
@@ -12220,9 +11851,9 @@
11851 "zh-cht": "阿拉伯文(沙特阿拉伯)",
11852 "uk": "Арабська (Саудівська Аравія)",
11853 "xloc": [
12223 - "default-mobile.handlebars->11->121",
12224 - "default.handlebars->47->1855",
12225 - "default3.handlebars->35->1694",
11854 + "default-mobile.handlebars->11->127",
11855 + "default.handlebars->47->1857",
11856 + "default3.handlebars->35->1837",
11857 "login2.handlebars->7->15"
11858 ]
11859 },
@@ -12252,9 +11883,9 @@
11883 "zh-cht": "阿拉伯文(標準)",
11884 "uk": "Арабська (Стандартна)",
11885 "xloc": [
12255 - "default-mobile.handlebars->11->109",
12256 - "default.handlebars->47->1843",
12257 - "default3.handlebars->35->1682",
11886 + "default-mobile.handlebars->11->115",
11887 + "default.handlebars->47->1845",
11888 + "default3.handlebars->35->1825",
11889 "login2.handlebars->7->3"
11890 ]
11891 },
@@ -12284,9 +11915,9 @@
11915 "zh-cht": "阿拉伯文(敘利亞)",
11916 "uk": "Арабська (Сирія)",
11917 "xloc": [
12287 - "default-mobile.handlebars->11->122",
12288 - "default.handlebars->47->1856",
12289 - "default3.handlebars->35->1695",
11918 + "default-mobile.handlebars->11->128",
11919 + "default.handlebars->47->1858",
11920 + "default3.handlebars->35->1838",
11921 "login2.handlebars->7->16"
11922 ]
11923 },
@@ -12316,9 +11947,9 @@
11947 "zh-cht": "阿拉伯文(突尼斯)",
11948 "uk": "Арабська (Туніс)",
11949 "xloc": [
12319 - "default-mobile.handlebars->11->123",
12320 - "default.handlebars->47->1857",
12321 - "default3.handlebars->35->1696",
11950 + "default-mobile.handlebars->11->129",
11951 + "default.handlebars->47->1859",
11952 + "default3.handlebars->35->1839",
11953 "login2.handlebars->7->17"
11954 ]
11955 },
@@ -12348,9 +11979,9 @@
11979 "zh-cht": "阿拉伯文(阿聯酋)",
11980 "uk": "Арабська (ОАЕ)",
11981 "xloc": [
12351 - "default-mobile.handlebars->11->124",
12352 - "default.handlebars->47->1858",
12353 - "default3.handlebars->35->1697",
11982 + "default-mobile.handlebars->11->130",
11983 + "default.handlebars->47->1860",
11984 + "default3.handlebars->35->1840",
11985 "login2.handlebars->7->18"
11986 ]
11987 },
@@ -12380,9 +12011,9 @@
12011 "zh-cht": "阿拉伯文(也門)",
12012 "uk": "Арабська (Ємен)",
12013 "xloc": [
12383 - "default-mobile.handlebars->11->125",
12384 - "default.handlebars->47->1859",
12385 - "default3.handlebars->35->1698",
12014 + "default-mobile.handlebars->11->131",
12015 + "default.handlebars->47->1861",
12016 + "default3.handlebars->35->1841",
12017 "login2.handlebars->7->19"
12018 ]
12019 },
@@ -12412,9 +12043,9 @@
12043 "zh-cht": "阿拉貢文",
12044 "uk": "Арагонська",
12045 "xloc": [
12415 - "default-mobile.handlebars->11->126",
12416 - "default.handlebars->47->1860",
12417 - "default3.handlebars->35->1699",
12046 + "default-mobile.handlebars->11->132",
12047 + "default.handlebars->47->1862",
12048 + "default3.handlebars->35->1842",
12049 "login2.handlebars->7->20"
12050 ]
12051 },
@@ -12444,15 +12075,15 @@
12075 "zh-cht": "結構",
12076 "uk": "Архітектура",
12077 "xloc": [
12447 - "default-mobile.handlebars->11->743",
12448 - "default-mobile.handlebars->11->745",
12449 - "default-mobile.handlebars->11->747",
12450 - "default.handlebars->47->1603",
12451 - "default.handlebars->47->1605",
12452 - "default.handlebars->47->1607",
12453 - "default3.handlebars->35->1466",
12454 - "default3.handlebars->35->1468",
12455 - "default3.handlebars->35->1470"
12078 + "default-mobile.handlebars->11->749",
12079 + "default-mobile.handlebars->11->751",
12080 + "default-mobile.handlebars->11->753",
12081 + "default.handlebars->47->1604",
12082 + "default.handlebars->47->1606",
12083 + "default.handlebars->47->1608",
12084 + "default3.handlebars->35->1588",
12085 + "default3.handlebars->35->1590",
12086 + "default3.handlebars->35->1592"
12087 ]
12088 },
12089 {
@@ -12481,8 +12112,8 @@
12112 "zh-cht": "你確定要連接到{0}裝置嗎?",
12113 "uk": "Ви впевнені, що хочете підключитися до {0} пристроїв?",
12114 "xloc": [
12484 - "default.handlebars->47->476",
12485 - "default3.handlebars->35->447"
12115 + "default.handlebars->47->479",
12116 + "default3.handlebars->35->476"
12117 ]
12118 },
12119 {
@@ -12511,9 +12142,9 @@
12142 "zh-cht": "你確定要刪除群{0}嗎?刪除裝置群還將刪除該群中有關裝置的所有訊息。",
12143 "uk": "Ви впевнені, що бажаєте видалити групу {0}? Видалення групи пристроїв також видалить всю інформацію про пристрої в цій групі.",
12144 "xloc": [
12514 - "default-mobile.handlebars->11->954",
12515 - "default.handlebars->47->2296",
12516 - "default3.handlebars->35->2133"
12145 + "default-mobile.handlebars->11->960",
12146 + "default.handlebars->47->2300",
12147 + "default3.handlebars->35->2293"
12148 ]
12149 },
12150 {
@@ -12542,8 +12173,8 @@
12173 "zh-cht": "你確定要刪除節點{0}嗎?",
12174 "uk": "Ви впевнені, що хочете видалити вузол {0}?",
12175 "xloc": [
12545 - "default.handlebars->47->1319",
12546 - "default3.handlebars->35->1225"
12176 + "default.handlebars->47->1320",
12177 + "default3.handlebars->35->1310"
12178 ]
12179 },
12180 {
@@ -12552,7 +12183,7 @@
12183 "nl": "Weet u zeker dat u dit bestand/ deze map op het bureaublad van het externe apparaat wilt openen?",
12184 "uk": "Ви впевнені, що бажаєте відкрити цей файл/теку на стільниці віддаленого пристрою?",
12185 "xloc": [
12555 - "default.handlebars->47->1543"
12186 + "default.handlebars->47->1544"
12187 ]
12188 },
12189 {
@@ -12581,8 +12212,8 @@
12212 "zh-cht": "你確定要卸載所選代理嗎?",
12213 "uk": "Ви впевнені, що хочете видалити відібраний агент?",
12214 "xloc": [
12584 - "default.handlebars->47->1308",
12585 - "default3.handlebars->35->1218"
12215 + "default.handlebars->47->1309",
12216 + "default3.handlebars->35->1300"
12217 ]
12218 },
12219 {
@@ -12611,8 +12242,8 @@
12242 "zh-cht": "你確定要卸載所選的{0}代理嗎?",
12243 "uk": "Ви впевнені, що бажаєте видалити відібрані агенти {0}?",
12244 "xloc": [
12614 - "default.handlebars->47->1307",
12615 - "default3.handlebars->35->1217"
12245 + "default.handlebars->47->1308",
12246 + "default3.handlebars->35->1299"
12247 ]
12248 },
12249 {
@@ -12641,8 +12272,8 @@
12272 "zh-cht": "你確定要{0}外掛嗎:{1}",
12273 "uk": "Ви впевнені, що хочете {0} плаґін: {1}",
12274 "xloc": [
12644 - "default.handlebars->47->3395",
12645 - "default3.handlebars->35->3164"
12275 + "default.handlebars->47->3399",
12276 + "default3.handlebars->35->3386"
12277 ]
12278 },
12279 {
@@ -12702,9 +12333,9 @@
12333 "zh-cht": "亞美尼亞文",
12334 "uk": "Вірменська",
12335 "xloc": [
12705 - "default-mobile.handlebars->11->127",
12706 - "default.handlebars->47->1861",
12707 - "default3.handlebars->35->1700",
12336 + "default-mobile.handlebars->11->133",
12337 + "default.handlebars->47->1863",
12338 + "default3.handlebars->35->1843",
12339 "login2.handlebars->7->21"
12340 ]
12341 },
@@ -12916,9 +12547,9 @@
12547 "zh-cht": "阿薩姆文",
12548 "uk": "Асамська",
12549 "xloc": [
12919 - "default-mobile.handlebars->11->128",
12920 - "default.handlebars->47->1862",
12921 - "default3.handlebars->35->1701",
12550 + "default-mobile.handlebars->11->134",
12551 + "default.handlebars->47->1864",
12552 + "default3.handlebars->35->1844",
12553 "login2.handlebars->7->22"
12554 ]
12555 },
@@ -13035,10 +12666,10 @@
12666 "zh-cht": "Windows 助手 (.exe)",
12667 "uk": "Помічник Windows (.exe)",
12668 "xloc": [
13038 - "default.handlebars->47->652",
13039 - "default.handlebars->47->656",
13040 - "default3.handlebars->35->591",
13041 - "default3.handlebars->35->595"
12669 + "default.handlebars->47->653",
12670 + "default.handlebars->47->657",
12671 + "default3.handlebars->35->650",
12672 + "default3.handlebars->35->654"
12673 ]
12674 },
12675 {
@@ -13096,9 +12727,9 @@
12727 "zh-cht": "阿斯圖里亞斯文",
12728 "uk": "Астурійська",
12729 "xloc": [
13099 - "default-mobile.handlebars->11->129",
13100 - "default.handlebars->47->1863",
13101 - "default3.handlebars->35->1702",
12730 + "default-mobile.handlebars->11->135",
12731 + "default.handlebars->47->1865",
12732 + "default3.handlebars->35->1845",
12733 "login2.handlebars->7->23"
12734 ]
12735 },
@@ -13128,8 +12759,8 @@
12759 "zh-cht": "嘗試激活英特爾(R)AMT ACM模式",
12760 "uk": "Спроба активувати режим Intel(R) AMT ACM",
12761 "xloc": [
13131 - "default.handlebars->47->2540",
13132 - "default3.handlebars->35->2357"
12762 + "default.handlebars->47->2544",
12763 + "default3.handlebars->35->2540"
12764 ]
12765 },
12766 {
@@ -13184,14 +12815,15 @@
12815 "zh-cht": "驗證",
12816 "uk": "Автентифікація",
12817 "xloc": [
13187 - "default-mobile.handlebars->11->678",
13188 - "default-mobile.handlebars->11->682",
13189 - "default-mobile.handlebars->11->694",
13190 - "default.handlebars->47->1494",
13191 - "default.handlebars->47->1498",
13192 - "default.handlebars->47->1510",
13193 - "default3.handlebars->35->1378",
13194 - "default3.handlebars->35->1382",
12818 + "default-mobile.handlebars->11->684",
12819 + "default-mobile.handlebars->11->688",
12820 + "default-mobile.handlebars->11->700",
12821 + "default.handlebars->47->1495",
12822 + "default.handlebars->47->1499",
12823 + "default.handlebars->47->1511",
12824 + "default3.handlebars->35->1480",
12825 + "default3.handlebars->35->1484",
12826 + "default3.handlebars->35->1496",
12827 "ssh.handlebars->3->21",
12828 "ssh.handlebars->3->22",
12829 "ssh.handlebars->3->5",
@@ -13224,8 +12856,8 @@
12856 "zh-cht": "認證軟體",
12857 "uk": "Застосунок Автентифікації",
12858 "xloc": [
13227 - "default.handlebars->47->2980",
13228 - "default3.handlebars->35->2771"
12859 + "default.handlebars->47->2984",
12860 + "default3.handlebars->35->2977"
12861 ]
12862 },
12863 {
@@ -13254,9 +12886,12 @@
12886 "zh-cht": "認證設備",
12887 "uk": "Пристрій Автентифікації",
12888 "xloc": [
13257 - "default.handlebars->47->1824",
12889 "default.handlebars->47->1826",
13259 - "default.handlebars->47->1830"
12890 + "default.handlebars->47->1828",
12891 + "default.handlebars->47->1832",
12892 + "default3.handlebars->35->1807",
12893 + "default3.handlebars->35->1809",
12894 + "default3.handlebars->35->1812"
12895 ]
12896 },
12897 {
@@ -13285,12 +12920,12 @@
12920 "zh-cht": "授權錯誤",
12921 "uk": "Помилка Автентифікації",
12922 "xloc": [
13288 - "default-mobile.handlebars->11->695",
12923 "default-mobile.handlebars->11->701",
13290 - "default.handlebars->47->1512",
13291 - "default.handlebars->47->1527",
13292 - "default3.handlebars->35->1395",
13293 - "default3.handlebars->35->1409"
12924 + "default-mobile.handlebars->11->707",
12925 + "default.handlebars->47->1513",
12926 + "default.handlebars->47->1528",
12927 + "default3.handlebars->35->1498",
12928 + "default3.handlebars->35->1513"
12929 ]
12930 },
12931 {
@@ -13319,14 +12954,18 @@
12954 "zh-cht": "認證軟體",
12955 "uk": "Застосунок Автентифікатора",
12956 "xloc": [
13322 - "default-mobile.handlebars->11->312",
13323 - "default-mobile.handlebars->11->314",
13324 - "default-mobile.handlebars->11->71",
13325 - "default-mobile.handlebars->11->74",
13326 - "default.handlebars->47->1820",
12957 + "default-mobile.handlebars->11->318",
12958 + "default-mobile.handlebars->11->320",
12959 + "default-mobile.handlebars->11->73",
12960 + "default-mobile.handlebars->11->78",
12961 "default.handlebars->47->1822",
13328 - "default.handlebars->47->218",
13329 - "default.handlebars->47->223"
12962 + "default.handlebars->47->1824",
12963 + "default.handlebars->47->220",
12964 + "default.handlebars->47->225",
12965 + "default3.handlebars->35->1803",
12966 + "default3.handlebars->35->1805",
12967 + "default3.handlebars->35->219",
12968 + "default3.handlebars->35->224"
12969 ]
12970 },
12971 {
@@ -13355,8 +12994,9 @@
12994 "zh-cht": "認證軟體啟動成功。",
12995 "uk": "Двофакторну автентифікацію успішно ввімкнено.",
12996 "xloc": [
13358 - "default.handlebars->47->219",
13359 - "default3.handlebars->35->208"
12997 + "default-mobile.handlebars->11->74",
12998 + "default.handlebars->47->221",
12999 + "default3.handlebars->35->220"
13000 ]
13001 },
13002 {
@@ -13385,8 +13025,9 @@
13025 "zh-cht": "認證軟體已刪除。",
13026 "uk": "Вилучено двофакторну автентифікацію.",
13027 "xloc": [
13388 - "default.handlebars->47->224",
13389 - "default3.handlebars->35->212"
13028 + "default-mobile.handlebars->11->79",
13029 + "default.handlebars->47->226",
13030 + "default3.handlebars->35->225"
13031 ]
13032 },
13033 {
@@ -13474,10 +13115,10 @@
13115 "zh-cht": "自動刪除",
13116 "uk": "Авто-Видалення",
13117 "xloc": [
13477 - "default.handlebars->47->2176",
13478 - "default.handlebars->47->2683",
13479 - "default3.handlebars->35->2031",
13480 - "default3.handlebars->35->2500"
13118 + "default.handlebars->47->2180",
13119 + "default.handlebars->47->2687",
13120 + "default3.handlebars->35->2175",
13121 + "default3.handlebars->35->2683"
13122 ]
13123 },
13124 {
@@ -13542,13 +13183,10 @@
13183 "zh-cht": "自動下載代理程序核心轉儲文件:“{0}”",
13184 "uk": "Автоматичне завантаження файлу дампа ядра агента: \\\"{0}\\\"",
13185 "xloc": [
13545 - "default.handlebars->47->2621",
13546 - "default3.handlebars->35->2438"
13186 + "default.handlebars->47->2625",
13187 + "default3.handlebars->35->2621"
13188 ]
13189 },
13549 - {
13550 - "en": "Automatic\n Clipboard"
13551 - },
13190 {
13191 "bs": "Automatski međuspremnik",
13192 "ca": "Porta-retalls automàtic",
@@ -13663,8 +13301,8 @@
13301 "zh-cht": "自動移除非活動設備",
13302 "uk": "Автоматично видаляти неактивні пристрої",
13303 "xloc": [
13666 - "default.handlebars->47->2324",
13667 - "default3.handlebars->35->2156"
13304 + "default.handlebars->47->2328",
13305 + "default3.handlebars->35->2324"
13306 ]
13307 },
13308 {
@@ -13693,8 +13331,8 @@
13331 "zh-cht": "可用內存",
13332 "uk": "Доступна пам'ять",
13333 "xloc": [
13696 - "default.handlebars->47->3324",
13697 - "default3.handlebars->35->3097"
13334 + "default.handlebars->47->3328",
13335 + "default3.handlebars->35->3315"
13336 ]
13337 },
13338 {
@@ -13723,9 +13361,9 @@
13361 "zh-cht": "阿塞拜疆文",
13362 "uk": "Азербайджанська",
13363 "xloc": [
13726 - "default-mobile.handlebars->11->130",
13727 - "default.handlebars->47->1864",
13728 - "default3.handlebars->35->1703",
13364 + "default-mobile.handlebars->11->136",
13365 + "default.handlebars->47->1866",
13366 + "default3.handlebars->35->1846",
13367 "login2.handlebars->7->24"
13368 ]
13369 },
@@ -13755,15 +13393,21 @@
13393 "zh-cht": "壞的",
13394 "uk": "КЕПСЬКО",
13395 "xloc": [
13758 - "default-mobile.handlebars->11->754",
13759 - "default-mobile.handlebars->11->758",
13760 - "default-mobile.handlebars->11->762",
13761 - "default.handlebars->47->938",
13762 - "default.handlebars->47->942",
13763 - "default.handlebars->47->946",
13764 - "default3.handlebars->35->875",
13765 - "default3.handlebars->35->879",
13766 - "default3.handlebars->35->883"
13396 + "default-mobile.handlebars->11->760",
13397 + "default-mobile.handlebars->11->764",
13398 + "default-mobile.handlebars->11->768",
13399 + "default.handlebars->47->426",
13400 + "default.handlebars->47->428",
13401 + "default.handlebars->47->430",
13402 + "default.handlebars->47->939",
13403 + "default.handlebars->47->943",
13404 + "default.handlebars->47->947",
13405 + "default3.handlebars->35->423",
13406 + "default3.handlebars->35->425",
13407 + "default3.handlebars->35->427",
13408 + "default3.handlebars->35->936",
13409 + "default3.handlebars->35->940",
13410 + "default3.handlebars->35->944"
13411 ]
13412 },
13413 {
@@ -13792,9 +13436,9 @@
13436 "zh-cht": "的BIOS",
13437 "uk": "BIOS",
13438 "xloc": [
13795 - "default-mobile.handlebars->11->834",
13796 - "default.handlebars->47->1676",
13797 - "default3.handlebars->35->1537"
13439 + "default-mobile.handlebars->11->840",
13440 + "default.handlebars->47->1677",
13441 + "default3.handlebars->35->1659"
13442 ]
13443 },
13444 {
@@ -13932,9 +13576,9 @@
13576 "zh-cht": "退格",
13577 "uk": "BackSpace",
13578 "xloc": [
13935 - "default-mobile.handlebars->11->643",
13936 - "default.handlebars->47->1409",
13937 - "default3.handlebars->35->1302"
13579 + "default-mobile.handlebars->11->649",
13580 + "default.handlebars->47->1410",
13581 + "default3.handlebars->35->1397"
13582 ]
13583 },
13584 {
@@ -13964,7 +13608,8 @@
13608 "uk": "Фоновий та Інтерактивний",
13609 "xloc": [
13610 "agentinvite.handlebars->3->8",
13967 - "default.handlebars->47->600"
13611 + "default.handlebars->47->603",
13612 + "default3.handlebars->35->600"
13613 ]
13614 },
13615 {
@@ -13993,14 +13638,14 @@
13638 "zh-cht": "背景與互動",
13639 "uk": "Фоновий та Інтерактивний",
13640 "xloc": [
13996 - "default.handlebars->47->2423",
13997 - "default.handlebars->47->2430",
13998 - "default.handlebars->47->562",
13999 - "default.handlebars->47->583",
14000 - "default3.handlebars->35->2250",
14001 - "default3.handlebars->35->2256",
14002 - "default3.handlebars->35->524",
14003 - "default3.handlebars->35->544"
13641 + "default.handlebars->47->2427",
13642 + "default.handlebars->47->2434",
13643 + "default.handlebars->47->565",
13644 + "default.handlebars->47->586",
13645 + "default3.handlebars->35->2423",
13646 + "default3.handlebars->35->2430",
13647 + "default3.handlebars->35->562",
13648 + "default3.handlebars->35->583"
13649 ]
13650 },
13651 {
@@ -14030,15 +13675,16 @@
13675 "uk": "Лише Фоновий",
13676 "xloc": [
13677 "agentinvite.handlebars->3->9",
14033 - "default.handlebars->47->2424",
14034 - "default.handlebars->47->2432",
14035 - "default.handlebars->47->563",
14036 - "default.handlebars->47->584",
14037 - "default.handlebars->47->601",
14038 - "default3.handlebars->35->2251",
14039 - "default3.handlebars->35->2258",
14040 - "default3.handlebars->35->525",
14041 - "default3.handlebars->35->545"
13678 + "default.handlebars->47->2428",
13679 + "default.handlebars->47->2436",
13680 + "default.handlebars->47->566",
13681 + "default.handlebars->47->587",
13682 + "default.handlebars->47->604",
13683 + "default3.handlebars->35->2424",
13684 + "default3.handlebars->35->2432",
13685 + "default3.handlebars->35->563",
13686 + "default3.handlebars->35->584",
13687 + "default3.handlebars->35->601"
13688 ]
13689 },
13690 {
@@ -14098,10 +13744,10 @@
13744 "zh-cht": "備用碼",
13745 "uk": "Резервні Коди",
13746 "xloc": [
14101 - "default.handlebars->47->2984",
14102 - "default.handlebars->47->3211",
14103 - "default3.handlebars->35->2775",
14104 - "default3.handlebars->35->2984"
13747 + "default.handlebars->47->2988",
13748 + "default.handlebars->47->3215",
13749 + "default3.handlebars->35->2981",
13750 + "default3.handlebars->35->3202"
13751 ]
13752 },
13753 {
@@ -14132,7 +13778,7 @@
13778 "xloc": [
13779 "default-mobile.handlebars->11->64",
13780 "default.handlebars->47->209",
14135 - "default3.handlebars->35->199"
13781 + "default3.handlebars->35->208"
13782 ]
13783 },
13784 {
@@ -14162,7 +13808,7 @@
13808 "uk": "Шлях резервного копіювання не можна встановити у теці meshcentral-data, параметри резервного копіювання ігноруються.",
13809 "xloc": [
13810 "default.handlebars->47->105",
14165 - "default3.handlebars->35->104"
13811 + "default3.handlebars->35->105"
13812 ]
13813 },
13814 {
@@ -14191,8 +13837,8 @@
13837 "zh-cht": "錯誤的簽名",
13838 "uk": "Помилковий Підпис",
13839 "xloc": [
14194 - "default.handlebars->47->3306",
14195 - "default3.handlebars->35->3079"
13840 + "default.handlebars->47->3310",
13841 + "default3.handlebars->35->3297"
13842 ]
13843 },
13844 {
@@ -14221,8 +13867,8 @@
13867 "zh-cht": "錯誤的網絡憑證",
13868 "uk": "Недійсний Веб-Сертифікат",
13869 "xloc": [
14224 - "default.handlebars->47->3305",
14225 - "default3.handlebars->35->3078"
13870 + "default.handlebars->47->3309",
13871 + "default3.handlebars->35->3296"
13872 ]
13873 },
13874 {
@@ -14251,9 +13897,9 @@
13897 "zh-cht": "巴斯克",
13898 "uk": "Баскська",
13899 "xloc": [
14254 - "default-mobile.handlebars->11->131",
14255 - "default.handlebars->47->1865",
14256 - "default3.handlebars->35->1704",
13900 + "default-mobile.handlebars->11->137",
13901 + "default.handlebars->47->1867",
13902 + "default3.handlebars->35->1847",
13903 "login2.handlebars->7->25"
13904 ]
13905 },
@@ -14283,7 +13929,8 @@
13929 "zh-cht": "批處理文件上傳",
13930 "uk": "Пакетне Вивантаження Файлів",
13931 "xloc": [
14286 - "default.handlebars->47->783"
13932 + "default.handlebars->47->784",
13933 + "default3.handlebars->35->781"
13934 ]
13935 },
13936 {
@@ -14356,8 +14003,8 @@
14003 "zh-cht": "將{0}個文件批量上傳到文件夾{1}",
14004 "uk": "Пакетне завантаження файлів ({0}) до теки {1}",
14005 "xloc": [
14359 - "default.handlebars->47->2620",
14360 - "default3.handlebars->35->2437"
14006 + "default.handlebars->47->2624",
14007 + "default3.handlebars->35->2620"
14008 ]
14009 },
14010 {
@@ -14386,9 +14033,9 @@
14033 "zh-cht": "白俄羅斯文",
14034 "uk": "Білоруська",
14035 "xloc": [
14389 - "default-mobile.handlebars->11->133",
14390 - "default.handlebars->47->1867",
14391 - "default3.handlebars->35->1706",
14036 + "default-mobile.handlebars->11->139",
14037 + "default.handlebars->47->1869",
14038 + "default3.handlebars->35->1849",
14039 "login2.handlebars->7->27"
14040 ]
14041 },
@@ -14418,9 +14065,9 @@
14065 "zh-cht": "孟加拉",
14066 "uk": "Бенгальська",
14067 "xloc": [
14421 - "default-mobile.handlebars->11->134",
14422 - "default.handlebars->47->1868",
14423 - "default3.handlebars->35->1707",
14068 + "default-mobile.handlebars->11->140",
14069 + "default.handlebars->47->1870",
14070 + "default3.handlebars->35->1850",
14071 "login2.handlebars->7->28"
14072 ]
14073 },
@@ -14488,9 +14135,9 @@
14135 "nl": "BitLocker",
14136 "uk": "BitLocker",
14137 "xloc": [
14491 - "default-mobile.handlebars->11->890",
14492 - "default.handlebars->47->1732",
14493 - "default3.handlebars->35->1593"
14138 + "default-mobile.handlebars->11->896",
14139 + "default.handlebars->47->1733",
14140 + "default3.handlebars->35->1715"
14141 ]
14142 },
14143 {
@@ -14500,9 +14147,9 @@
14147 "pl": "Informacje o BitLocker",
14148 "uk": "Інформація о BitLocker",
14149 "xloc": [
14503 - "default-mobile.handlebars->11->911",
14504 - "default.handlebars->47->1753",
14505 - "default3.handlebars->35->1614"
14150 + "default-mobile.handlebars->11->917",
14151 + "default.handlebars->47->1754",
14152 + "default3.handlebars->35->1736"
14153 ]
14154 },
14155 {
@@ -14531,9 +14178,9 @@
14178 "zh-cht": "引導加載程序",
14179 "uk": "Завантажувач",
14180 "xloc": [
14534 - "default-mobile.handlebars->11->791",
14535 - "default.handlebars->47->1623",
14536 - "default3.handlebars->35->1486"
14181 + "default-mobile.handlebars->11->797",
14182 + "default.handlebars->47->1624",
14183 + "default3.handlebars->35->1608"
14184 ]
14185 },
14186 {
@@ -14562,9 +14209,9 @@
14209 "zh-cht": "波斯尼亞文",
14210 "uk": "Боснійська",
14211 "xloc": [
14565 - "default-mobile.handlebars->11->135",
14566 - "default.handlebars->47->1869",
14567 - "default3.handlebars->35->1708",
14212 + "default-mobile.handlebars->11->141",
14213 + "default.handlebars->47->1871",
14214 + "default3.handlebars->35->1851",
14215 "login2.handlebars->7->29"
14216 ]
14217 },
@@ -14594,9 +14241,9 @@
14241 "zh-cht": "布列塔尼",
14242 "uk": "Бретонська",
14243 "xloc": [
14597 - "default-mobile.handlebars->11->136",
14598 - "default.handlebars->47->1870",
14599 - "default3.handlebars->35->1709",
14244 + "default-mobile.handlebars->11->142",
14245 + "default.handlebars->47->1872",
14246 + "default3.handlebars->35->1852",
14247 "login2.handlebars->7->30"
14248 ]
14249 },
@@ -14626,9 +14273,9 @@
14273 "zh-cht": "廣播",
14274 "uk": "Широкомовне",
14275 "xloc": [
14629 - "default.handlebars->47->2878",
14276 + "default.handlebars->47->2882",
14277 "default.handlebars->container->column_l->p4->3->1->0->3->1",
14631 - "default3.handlebars->35->2676",
14278 + "default3.handlebars->35->2875",
14279 "default3.handlebars->container->column_l->p4->3->1->0->1->3"
14280 ]
14281 },
@@ -14658,7 +14305,8 @@
14305 "zh-cht": "廣播消息",
14306 "uk": "Широкомовне Повідомлення",
14307 "xloc": [
14661 - "default.handlebars->47->2794"
14308 + "default.handlebars->47->2798",
14309 + "default3.handlebars->35->2793"
14310 ]
14311 },
14312 {
@@ -14687,8 +14335,8 @@
14335 "zh-cht": "向所有連接的用戶廣播消息。",
14336 "uk": "Широкомовне повідомлення всім підключеним користувачам.",
14337 "xloc": [
14690 - "default.handlebars->47->2789",
14691 - "default3.handlebars->35->2592"
14338 + "default.handlebars->47->2793",
14339 + "default3.handlebars->35->2788"
14340 ]
14341 },
14342 {
@@ -14717,8 +14365,8 @@
14365 "zh-cht": "瀏覽器",
14366 "uk": "Браузер",
14367 "xloc": [
14720 - "default.handlebars->47->3185",
14721 - "default3.handlebars->35->2958"
14368 + "default.handlebars->47->3189",
14369 + "default3.handlebars->35->3176"
14370 ]
14371 },
14372 {
@@ -14777,7 +14425,7 @@
14425 "zh-cht": "瀏覽器默認",
14426 "uk": "Типовий Браузер",
14427 "xloc": [
14780 - "default-mobile.handlebars->11->95",
14428 + "default-mobile.handlebars->11->101",
14429 "default.handlebars->47->64",
14430 "default3.handlebars->35->64"
14431 ]
@@ -14808,9 +14456,9 @@
14456 "zh-cht": "保加利亞文",
14457 "uk": "Болгарська",
14458 "xloc": [
14811 - "default-mobile.handlebars->11->132",
14812 - "default.handlebars->47->1866",
14813 - "default3.handlebars->35->1705",
14459 + "default-mobile.handlebars->11->138",
14460 + "default.handlebars->47->1868",
14461 + "default3.handlebars->35->1848",
14462 "login2.handlebars->7->26"
14463 ]
14464 },
@@ -14840,9 +14488,9 @@
14488 "zh-cht": "緬甸文",
14489 "uk": "Бірманська",
14490 "xloc": [
14843 - "default-mobile.handlebars->11->137",
14844 - "default.handlebars->47->1871",
14845 - "default3.handlebars->35->1710",
14491 + "default-mobile.handlebars->11->143",
14492 + "default.handlebars->47->1873",
14493 + "default3.handlebars->35->1853",
14494 "login2.handlebars->7->31"
14495 ]
14496 },
@@ -14872,8 +14520,8 @@
14520 "zh-cht": "默認情況下,非活動設備將在 1 天后移除。",
14521 "uk": "Типово неактивні пристрої видаляються через 1 день.",
14522 "xloc": [
14875 - "default.handlebars->47->2326",
14876 - "default3.handlebars->35->2158"
14523 + "default.handlebars->47->2330",
14524 + "default3.handlebars->35->2326"
14525 ]
14526 },
14527 {
@@ -14902,8 +14550,8 @@
14550 "zh-cht": "默認情況下,不活動的設備將在 {0} 天后被移除。",
14551 "uk": "Типово неактивні пристрої видаляються через {0} дн.",
14552 "xloc": [
14905 - "default.handlebars->47->2327",
14906 - "default3.handlebars->35->2159"
14553 + "default.handlebars->47->2331",
14554 + "default3.handlebars->35->2327"
14555 ]
14556 },
14557 {
@@ -14945,8 +14593,8 @@
14593 "zh-cht": "字節輸入",
14594 "uk": "Байт Вх.",
14595 "xloc": [
14948 - "default.handlebars->47->3181",
14949 - "default3.handlebars->35->2954"
14596 + "default.handlebars->47->3185",
14597 + "default3.handlebars->35->3172"
14598 ]
14599 },
14600 {
@@ -14975,8 +14623,8 @@
14623 "zh-cht": "字節輸出",
14624 "uk": "Байт Вих.",
14625 "xloc": [
14978 - "default.handlebars->47->3182",
14979 - "default3.handlebars->35->2955"
14626 + "default.handlebars->47->3186",
14627 + "default3.handlebars->35->3173"
14628 ]
14629 },
14630 {
@@ -15052,11 +14700,11 @@
14700 "zh-cht": "CCM",
14701 "uk": "CCM",
14702 "xloc": [
15055 - "default-mobile.handlebars->11->509",
15056 - "default.handlebars->47->434",
15057 - "default.handlebars->47->914",
15058 - "default3.handlebars->35->406",
15059 - "default3.handlebars->35->851"
14703 + "default-mobile.handlebars->11->515",
14704 + "default.handlebars->47->437",
14705 + "default.handlebars->47->915",
14706 + "default3.handlebars->35->434",
14707 + "default3.handlebars->35->912"
14708 ]
14709 },
14710 {
@@ -15085,7 +14733,8 @@
14733 "zh-cht": "CCM模式",
14734 "uk": "Режим CCM",
14735 "xloc": [
15088 - "default.handlebars->47->2279"
14736 + "default.handlebars->47->2283",
14737 + "default3.handlebars->35->2276"
14738 ]
14739 },
14740 {
@@ -15093,15 +14742,15 @@
14742 "en": "CD-ROM",
14743 "nl": "CD-ROM",
14744 "xloc": [
15096 - "default-mobile.handlebars->11->883",
15097 - "default-mobile.handlebars->11->895",
15098 - "default-mobile.handlebars->11->902",
15099 - "default.handlebars->47->1725",
15100 - "default.handlebars->47->1737",
15101 - "default.handlebars->47->1744",
15102 - "default3.handlebars->35->1586",
15103 - "default3.handlebars->35->1598",
15104 - "default3.handlebars->35->1605"
14745 + "default-mobile.handlebars->11->889",
14746 + "default-mobile.handlebars->11->901",
14747 + "default-mobile.handlebars->11->908",
14748 + "default.handlebars->47->1726",
14749 + "default.handlebars->47->1738",
14750 + "default.handlebars->47->1745",
14751 + "default3.handlebars->35->1708",
14752 + "default3.handlebars->35->1720",
14753 + "default3.handlebars->35->1727"
14754 ]
14755 },
14756 {
@@ -15130,13 +14779,13 @@
14779 "zh-cht": "CIRA",
14780 "uk": "CIRA",
14781 "xloc": [
15133 - "default-mobile.handlebars->11->470",
15134 - "default.handlebars->47->3331",
15135 - "default.handlebars->47->411",
15136 - "default.handlebars->47->719",
15137 - "default3.handlebars->35->3104",
15138 - "default3.handlebars->35->383",
15139 - "default3.handlebars->35->677"
14782 + "default-mobile.handlebars->11->476",
14783 + "default.handlebars->47->3335",
14784 + "default.handlebars->47->414",
14785 + "default.handlebars->47->720",
14786 + "default3.handlebars->35->3322",
14787 + "default3.handlebars->35->411",
14788 + "default3.handlebars->35->717"
14789 ]
14790 },
14791 {
@@ -15165,8 +14814,8 @@
14814 "zh-cht": "CIRA伺服器",
14815 "uk": "Сервер CIRA",
14816 "xloc": [
15168 - "default.handlebars->47->3379",
15169 - "default3.handlebars->35->3151"
14817 + "default.handlebars->47->3383",
14818 + "default3.handlebars->35->3370"
14819 ]
14820 },
14821 {
@@ -15195,8 +14844,8 @@
14844 "zh-cht": "CIRA伺服器指令",
14845 "uk": "Команди Сервера CIRA",
14846 "xloc": [
15198 - "default.handlebars->47->3380",
15199 - "default3.handlebars->35->3152"
14847 + "default.handlebars->47->3384",
14848 + "default3.handlebars->35->3371"
14849 ]
14850 },
14851 {
@@ -15226,7 +14875,7 @@
14875 "uk": "Локальні імена FQDN CIRA ігноруються, коли сервер працює в режимі лише LAN або лише WAN.",
14876 "xloc": [
14877 "default.handlebars->47->91",
15229 - "default3.handlebars->35->90"
14878 + "default3.handlebars->35->91"
14879 ]
14880 },
14881 {
@@ -15255,7 +14904,8 @@
14904 "zh-cht": "CIRA設置",
14905 "uk": "Налаштування CIRA",
14906 "xloc": [
15258 - "default.handlebars->47->2287"
14907 + "default.handlebars->47->2291",
14908 + "default3.handlebars->35->2283"
14909 ]
14910 },
14911 {
@@ -15284,14 +14934,14 @@
14934 "zh-cht": "CPU",
14935 "uk": "ЦП",
14936 "xloc": [
15287 - "default-mobile.handlebars->11->840",
15288 - "default.handlebars->47->1598",
15289 - "default.handlebars->47->1682",
15290 - "default.handlebars->47->3355",
14937 + "default-mobile.handlebars->11->846",
14938 + "default.handlebars->47->1599",
14939 + "default.handlebars->47->1683",
14940 + "default.handlebars->47->3359",
14941 "default.handlebars->container->column_l->p40->3->1->p40type->5",
15292 - "default3.handlebars->35->1461",
15293 - "default3.handlebars->35->1543",
15294 - "default3.handlebars->35->3128",
14942 + "default3.handlebars->35->1583",
14943 + "default3.handlebars->35->1665",
14944 + "default3.handlebars->35->3346",
14945 "default3.handlebars->container->column_l->p40->3->3->p40type->5"
14946 ]
14947 },
@@ -15321,8 +14971,8 @@
14971 "zh-cht": "CPU負載",
14972 "uk": "Навантаження ЦП",
14973 "xloc": [
15324 - "default.handlebars->47->3320",
15325 - "default3.handlebars->35->3093"
14974 + "default.handlebars->47->3324",
14975 + "default3.handlebars->35->3311"
14976 ]
14977 },
14978 {
@@ -15351,8 +15001,8 @@
15001 "zh-cht": "最近15分鐘的CPU負載",
15002 "uk": "Навантаження ЦП за останні 15 хвилин",
15003 "xloc": [
15354 - "default.handlebars->47->3323",
15355 - "default3.handlebars->35->3096"
15004 + "default.handlebars->47->3327",
15005 + "default3.handlebars->35->3314"
15006 ]
15007 },
15008 {
@@ -15381,8 +15031,8 @@
15031 "zh-cht": "最近5分鐘的CPU負載",
15032 "uk": "Навантаження ЦП за останні 5 хвилин",
15033 "xloc": [
15384 - "default.handlebars->47->3322",
15385 - "default3.handlebars->35->3095"
15034 + "default.handlebars->47->3326",
15035 + "default3.handlebars->35->3313"
15036 ]
15037 },
15038 {
@@ -15411,8 +15061,8 @@
15061 "zh-cht": "最近一分鐘的CPU負載",
15062 "uk": "Навантаження ЦП за останню хвилину",
15063 "xloc": [
15414 - "default.handlebars->47->3321",
15415 - "default3.handlebars->35->3094"
15064 + "default.handlebars->47->3325",
15065 + "default3.handlebars->35->3312"
15066 ]
15067 },
15068 {
@@ -15441,11 +15091,11 @@
15091 "zh-cht": "CR+LF",
15092 "uk": "CR+LF",
15093 "xloc": [
15444 - "default.handlebars->47->1490",
15445 - "default.handlebars->47->1521",
15094 + "default.handlebars->47->1491",
15095 + "default.handlebars->47->1522",
15096 "default.handlebars->container->column_l->p12->termTable->1->1->4->1->1->terminalSettingsButtons",
15447 - "default3.handlebars->35->1374",
15448 - "default3.handlebars->35->1404",
15097 + "default3.handlebars->35->1476",
15098 + "default3.handlebars->35->1507",
15099 "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->3->terminalSettingsButtons",
15100 "sharing.handlebars->11->25",
15101 "sharing.handlebars->11->39",
@@ -15478,8 +15128,8 @@
15128 "zh-cht": "CSV",
15129 "uk": "CSV",
15130 "xloc": [
15481 - "default.handlebars->47->2700",
15482 - "default3.handlebars->35->2517"
15131 + "default.handlebars->47->2704",
15132 + "default3.handlebars->35->2700"
15133 ]
15134 },
15135 {
@@ -15508,12 +15158,12 @@
15158 "zh-cht": "CSV格式",
15159 "uk": "Формат CSV",
15160 "xloc": [
15511 - "default.handlebars->47->2704",
15512 - "default.handlebars->47->2781",
15513 - "default.handlebars->47->792",
15514 - "default3.handlebars->35->2520",
15515 - "default3.handlebars->35->2585",
15516 - "default3.handlebars->35->741"
15161 + "default.handlebars->47->2708",
15162 + "default.handlebars->47->2785",
15163 + "default.handlebars->47->793",
15164 + "default3.handlebars->35->2704",
15165 + "default3.handlebars->35->2780",
15166 + "default3.handlebars->35->790"
15167 ]
15168 },
15169 {
@@ -15522,8 +15172,8 @@
15172 "nl": "Het CSV bestandsformaat is als volgt:",
15173 "uk": "Формат файлу CSV нижче:",
15174 "xloc": [
15525 - "default.handlebars->47->2767",
15526 - "default3.handlebars->35->2577"
15175 + "default.handlebars->47->2771",
15176 + "default3.handlebars->35->2766"
15177 ]
15178 },
15179 {
@@ -15578,8 +15228,8 @@
15228 "zh-cht": "呼叫錯誤",
15229 "uk": "Помилка Виклику",
15230 "xloc": [
15581 - "default.handlebars->47->3396",
15582 - "default3.handlebars->35->3165"
15231 + "default.handlebars->47->3400",
15232 + "default3.handlebars->35->3387"
15233 ]
15234 },
15235 {
@@ -15592,10 +15242,10 @@
15242 "pl": "CallMeBot",
15243 "uk": "CallMeBot",
15244 "xloc": [
15595 - "default.handlebars->47->1790",
15596 - "default.handlebars->47->3019",
15597 - "default3.handlebars->35->1642",
15598 - "default3.handlebars->35->2810"
15245 + "default.handlebars->47->1791",
15246 + "default.handlebars->47->3023",
15247 + "default3.handlebars->35->1772",
15248 + "default3.handlebars->35->3016"
15249 ]
15250 },
15251 {
@@ -15625,7 +15275,7 @@
15275 "uk": "Не можна мати більше 4 локальних FQDN CIRA. Ігнорування значення.",
15276 "xloc": [
15277 "default.handlebars->47->92",
15628 - "default3.handlebars->35->91"
15278 + "default3.handlebars->35->92"
15279 ]
15280 },
15281 {
@@ -15655,14 +15305,13 @@
15305 "uk": "Скасувати",
15306 "xloc": [
15307 "agent-translations.json",
15658 - "default-mobile.handlebars->11->323",
15308 + "default-mobile.handlebars->11->329",
15309 "default-mobile.handlebars->dialog->idx_dlgButtonBar",
15660 - "default.handlebars->47->2143",
15661 - "default.handlebars->47->3385",
15662 - "default.handlebars->47->535",
15310 + "default.handlebars->47->2147",
15311 + "default.handlebars->47->3389",
15312 + "default.handlebars->47->538",
15313 "default.handlebars->container->dialog->idx_dlgButtonBar",
15664 - "default3.handlebars->35->2005",
15665 - "default3.handlebars->35->498",
15314 + "default3.handlebars->35->535",
15315 "default3.handlebars->container->xxAddAgentModal->xxAddAgentModalConf->1->5->idx_dlgCancelButton",
15316 "login-mobile.handlebars->dialog->idx_dlgButtonBar",
15317 "login.handlebars->dialog->idx_dlgButtonBar",
@@ -15781,30 +15430,30 @@
15430 "zh-cht": "容量",
15431 "uk": "Ємність",
15432 "xloc": [
15784 - "default-mobile.handlebars->11->858",
15433 "default-mobile.handlebars->11->864",
15434 "default-mobile.handlebars->11->870",
15787 - "default-mobile.handlebars->11->875",
15788 - "default-mobile.handlebars->11->877",
15789 - "default-mobile.handlebars->11->880",
15790 - "default-mobile.handlebars->11->892",
15791 - "default-mobile.handlebars->11->899",
15792 - "default.handlebars->47->1700",
15793 - "default.handlebars->47->1706",
15794 - "default.handlebars->47->1712",
15795 - "default.handlebars->47->1717",
15796 - "default.handlebars->47->1719",
15797 - "default.handlebars->47->1722",
15798 - "default.handlebars->47->1734",
15799 - "default.handlebars->47->1741",
15800 - "default3.handlebars->35->1561",
15801 - "default3.handlebars->35->1567",
15802 - "default3.handlebars->35->1573",
15803 - "default3.handlebars->35->1578",
15804 - "default3.handlebars->35->1580",
15805 - "default3.handlebars->35->1583",
15806 - "default3.handlebars->35->1595",
15807 - "default3.handlebars->35->1602"
15435 + "default-mobile.handlebars->11->876",
15436 + "default-mobile.handlebars->11->881",
15437 + "default-mobile.handlebars->11->883",
15438 + "default-mobile.handlebars->11->886",
15439 + "default-mobile.handlebars->11->898",
15440 + "default-mobile.handlebars->11->905",
15441 + "default.handlebars->47->1701",
15442 + "default.handlebars->47->1707",
15443 + "default.handlebars->47->1713",
15444 + "default.handlebars->47->1718",
15445 + "default.handlebars->47->1720",
15446 + "default.handlebars->47->1723",
15447 + "default.handlebars->47->1735",
15448 + "default.handlebars->47->1742",
15449 + "default3.handlebars->35->1683",
15450 + "default3.handlebars->35->1689",
15451 + "default3.handlebars->35->1695",
15452 + "default3.handlebars->35->1700",
15453 + "default3.handlebars->35->1702",
15454 + "default3.handlebars->35->1705",
15455 + "default3.handlebars->35->1717",
15456 + "default3.handlebars->35->1724"
15457 ]
15458 },
15459 {
@@ -15833,15 +15482,15 @@
15482 "zh-cht": "容量/速度",
15483 "uk": "Ємність / Швидкість",
15484 "xloc": [
15836 - "default-mobile.handlebars->11->856",
15485 "default-mobile.handlebars->11->862",
15486 "default-mobile.handlebars->11->868",
15839 - "default.handlebars->47->1698",
15840 - "default.handlebars->47->1704",
15841 - "default.handlebars->47->1710",
15842 - "default3.handlebars->35->1559",
15843 - "default3.handlebars->35->1565",
15844 - "default3.handlebars->35->1571"
15487 + "default-mobile.handlebars->11->874",
15488 + "default.handlebars->47->1699",
15489 + "default.handlebars->47->1705",
15490 + "default.handlebars->47->1711",
15491 + "default3.handlebars->35->1681",
15492 + "default3.handlebars->35->1687",
15493 + "default3.handlebars->35->1693"
15494 ]
15495 },
15496 {
@@ -15850,15 +15499,15 @@
15499 "nl": "Resterende capaciteit",
15500 "uk": "Залишок ємності",
15501 "xloc": [
15853 - "default-mobile.handlebars->11->881",
15854 - "default-mobile.handlebars->11->893",
15855 - "default-mobile.handlebars->11->900",
15856 - "default.handlebars->47->1723",
15857 - "default.handlebars->47->1735",
15858 - "default.handlebars->47->1742",
15859 - "default3.handlebars->35->1584",
15860 - "default3.handlebars->35->1596",
15861 - "default3.handlebars->35->1603"
15502 + "default-mobile.handlebars->11->887",
15503 + "default-mobile.handlebars->11->899",
15504 + "default-mobile.handlebars->11->906",
15505 + "default.handlebars->47->1724",
15506 + "default.handlebars->47->1736",
15507 + "default.handlebars->47->1743",
15508 + "default3.handlebars->35->1706",
15509 + "default3.handlebars->35->1718",
15510 + "default3.handlebars->35->1725"
15511 ]
15512 },
15513 {
@@ -15887,9 +15536,9 @@
15536 "zh-cht": "加泰羅尼亞文",
15537 "uk": "Каталанська",
15538 "xloc": [
15890 - "default-mobile.handlebars->11->138",
15891 - "default.handlebars->47->1872",
15892 - "default3.handlebars->35->1711",
15539 + "default-mobile.handlebars->11->144",
15540 + "default.handlebars->47->1874",
15541 + "default3.handlebars->35->1854",
15542 "login2.handlebars->7->32"
15543 ]
15544 },
@@ -15919,8 +15568,8 @@
15568 "zh-cht": "在這裡為中心顯示地圖",
15569 "uk": "Центрувати мапу тут",
15570 "xloc": [
15922 - "default.handlebars->47->867",
15923 - "default3.handlebars->35->807"
15571 + "default.handlebars->47->868",
15572 + "default3.handlebars->35->865"
15573 ]
15574 },
15575 {
@@ -15978,14 +15627,14 @@
15627 "default-mobile.handlebars->11->61",
15628 "default.handlebars->47->115",
15629 "default.handlebars->47->116",
15981 - "default3.handlebars->35->113",
15982 - "default3.handlebars->35->114"
15630 + "default3.handlebars->35->115",
15631 + "default3.handlebars->35->116"
15632 ]
15633 },

This file is too large to show in full.

views/default-mobile.handlebars
+4 -4
@@ -1743,7 +1743,7 @@
1743 var secret = message.secret;
1744 if (secret.length == 52) { secret = secret.split(/(.............)/).filter(Boolean).join(' '); }
1745 else if (secret.length == 32) { secret = secret.split(/(....)/).filter(Boolean).join(' '); secret = secret.substring(0, 20) + '<br/>' + secret.substring(20) }
1746 - QH('d2optinfo', format("Install <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\" rel=\"noreferrer noopener\" target=_blank>Google Authenticator</a> or a compatible application, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank> this link</a> or enter the secret below. Then, enter the current 6 digit token to activate 2-Step login.", message.url) + '<br /><br /><div style=width:100%;text-align:center><tt id=d2optsecret secret="' + message.secret + '" style=font-size:15px>' + secret + '</tt><br /><br />Token: <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress=\"return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)\" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></div>');
1746 + QH('d2optinfo', format("Install" + ' <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>' + "Google Authenticator" + '</a> ' + "or a compatible application, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank> this link</a> or enter the secret below. Then, enter the current 6 digit token to activate 2-Step login.", message.url) + '<br /><br /><div style=width:100%;text-align:center><tt id=d2optsecret secret="' + message.secret + '" style=font-size:15px>' + secret + '</tt><br /><br />Token: <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress=\"return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)\" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></div>');
1747 QV('idx_dlgOkButton', true);
1748 QE('idx_dlgOkButton', false);
1749 Q('d2otpauthinput').focus();
@@ -1753,12 +1753,12 @@
1753 }
1754 case 'otpauth-setup': {
1755 if (xxdialogMode) return;
1756 - setDialogMode(2, "Authenticator App", 1, null, message.success ? "<b style=color:green>2-step login activation successful</b>. You will now need a valid token to login again." : "<b style=color:red>2-step login activation failed</b>. Clear the secret from the application and try again. You only have a few minutes to enter the proper code.");
1756 + setDialogMode(2, "Authenticator App", 1, null, message.success ? ('<b style=color:green>' + "Authenticator app activation successful." + '</b> ' + "You will now need a valid token to login again.") : ('<b style=color:red>' + "2-step login activation failed." + '</b> ' + "Clear the secret from the application and try again. You only have a few minutes to enter the proper code."));
1757 break;
1758 }
1759 case 'otpauth-clear': {
1760 if (xxdialogMode) return;
1761 - setDialogMode(2, "Authenticator App", 1, null, message.success ? "<b style=color:green>2-step login activation removed</b>. You can reactivate this feature at any time." : "<b style=color:red>2-step login activation removal failed</b>. Try again.");
1761 + setDialogMode(2, "Authenticator App", 1, null, message.success ? ('<b>' + "Authenticator application removed." + '</b> ' + "You can reactivate this feature at any time.") : ('<b style=color:red>' + "2-step login activation removal failed." + '</b> ' + "Try again."));
1762 break;
1763 }
1764 case 'otpauth-getpasswords': {
@@ -6351,7 +6351,7 @@
6351 }
6352 if (hardware.network && hardware.network.dns) {
6353 x += '<tr><td><div class=style10 style=border-radius:5px;padding:8px>';
6354 - x += addDetailItem("<b>DNS Servers</b>", hardware.network.dns.join(", "));
6354 + x += addDetailItem('<b>' + "DNS Servers" + '</b>', hardware.network.dns.join(", "));
6355 x += '</div></td></tr>';
6356 }
6357 x += '</table>';
views/default.handlebars
+12 -12
@@ -3011,7 +3011,7 @@
3011 var secret = message.secret;
3012 if (secret.length == 52) { secret = secret.split(/(.............)/).filter(Boolean).join(' '); }
3013 else if (secret.length == 32) { secret = secret.split(/(....)/).filter(Boolean).join(' '); secret = secret.substring(0, 20) + '<br/>' + secret.substring(20) }
3014 - QH('d2optinfo', '<table style=width:380px><tr><td style=vertical-align:top>' + format("Install <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\" rel=\"noreferrer noopener\" target=_blank>Google Authenticator</a> or a compatible application and scan the barcode, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank>this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.", message.url) + '<br /><br />' + 'Secret <img src=images/link4.png height=10 width=10 title="' + "Copy Secret to clipboard" + '" style=cursor:pointer onclick=d2CopySecretToClip()>' + '<br /><tt id=d2optsecret secret="' + message.secret + '" style=font-size:12px>' + secret + '</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="' + message.url + '" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />' + "Enter the token here for 2-step login:" + ' <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');
3014 + QH('d2optinfo', '<table style=width:380px><tr><td style=vertical-align:top>' + format("Install" + ' <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>' + "Google Authenticator" + '</a> ' + "or a compatible application and scan the barcode, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank>this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.", message.url) + '<br /><br />' + 'Secret <img src=images/link4.png height=10 width=10 title="' + "Copy Secret to clipboard" + '" style=cursor:pointer onclick=d2CopySecretToClip()>' + '<br /><tt id=d2optsecret secret="' + message.secret + '" style=font-size:12px>' + secret + '</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="' + message.url + '" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />' + "Enter the token here for 2-step login:" + ' <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');
3015 new QRCode(Q('qrcode'), { text: message.url, width: 128, height: 128, colorDark: '#000000', colorLight: '#EEE', correctLevel: QRCode.CorrectLevel.H });
3016 QV('idx_dlgOkButton', true);
3017 QE('idx_dlgOkButton', false);
@@ -3066,7 +3066,7 @@
3066 if (xxdialogMode && (xxdialogTag != 'otpauth-hardware-manage')) return;
3067 var start = '<div style="border-radius:6px;border:2px solid #CCC;background-color:#BBB;width:100%;box-sizing:border-box;margin-bottom:6px"><div style="margin:3px;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold"><table style=width:100%;text-align:left>';
3068 var end = '</table></div></div>';
3069 - var x = "<a href=\"https://www.yubico.com/\" rel=\"noreferrer noopener\" target=\"_blank\">Hardware keys</a> are used as secondary login authentication.";
3069 + var x = '<a href="https://www.yubico.com/" rel="noreferrer noopener" target="_blank">' + "Hardware keys" + '</a> ' + "are used as secondary login authentication.";
3070 x += '<div style="max-height:150px;overflow-y:auto;overflow-x:hidden;margin-top:6px;margin-bottom:6px">';
3071 if (message.keys && message.keys.length > 0) {
3072 for (var i in message.keys) {
@@ -4898,13 +4898,13 @@
4898 r += '<span style=line-height:20px>' + groupingTags + '</span>';
4899 }
4900 if (deviceViewSettings.devsCols.indexOf('windowsav') >= 0) { // Windows AV
4901 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.antiVirus != null) ? (node.wsc.antiVirus == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
4901 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.antiVirus != null) ? (node.wsc.antiVirus == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
4902 }
4903 if (deviceViewSettings.devsCols.indexOf('windowsupdate') >= 0) {// Windows Update
4904 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.autoUpdate != null) ? (node.wsc.autoUpdate == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
4904 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.autoUpdate != null) ? (node.wsc.autoUpdate == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
4905 }
4906 if (deviceViewSettings.devsCols.indexOf('windowsfirewall') >= 0) { // Windows Firewall
4907 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.firewall != null) ? (node.wsc.firewall == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
4907 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.firewall != null) ? (node.wsc.firewall == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
4908 }
4909 if (deviceViewSettings.devsCols.indexOf('lastbootuptime') >= 0) { // Last Boot Up Time
4910 r += '<td style=text-align:center;font-size:x-small>' + ((node.lastbootuptime != null) ? printDateTime(new Date(node.lastbootuptime)) : "");
@@ -5614,10 +5614,10 @@
5614
5615 // QR code agent install
5616 x += '<div id=agins_qrcode style=display:none;min-height:180px><a id=agins_qrimage_a rel=\"noreferrer noopener\" target=_blank><div id=agins_qrimage style=float:right;margin-left:10px;width:180px;height:180px;cursor:pointer></div></a><div>' + format("To add a mobile device to group \"{0}\", download the MeshAgent application and scan this QR code.", EscapeHtml(mesh.name)) + '</div>';
5617 - x += "<table style=width:180px>";
5618 - x += "<tr><td style=text-align:center><a rel=\"noreferrer noopener\" target=_blank href=\"https://play.google.com/store/apps/details?id=com.meshcentral.agent2\"><img style=cursor:pointer src=\"images/google-play-140.png\" width=140 srcset=\"images/google-play-280.png 2x\" /></a></td></tr>";
5619 - x += "<tr><td style=text-align:center><a rel=\"noreferrer noopener\" target=_blank href=\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\"><img style=cursor:pointer src=\"images/amazon-appstore-140.png\" width=140 srcset=\"images/amazon-appstore-280.png 2x\" /></a></td></tr>";
5620 - x += "</table>";
5617 + x += '<table style=width:180px>';
5618 + x += '<tr><td style=text-align:center><a title="' + "Google Play Store" + '"rel="noreferrer noopener" target=_blank href="https://play.google.com/store/apps/details?id=com.meshcentral.agent2"><img style=cursor:pointer src="images/google-play-140.png" width=140 srcset="images/google-play-280.png 2x" /></a></td></tr>';
5619 + x += '<tr><td style=text-align:center><a title="' + "Amazon App Store" + '" rel="noreferrer noopener" target=_blank href="https://www.amazon.co.uk/gp/product/B097Z4Q7SK/"><img style=cursor:pointer src="images/amazon-appstore-140.png" width=140 srcset="images/amazon-appstore-280.png 2x" /></a></td></tr>';
5620 + x += '</table>';
5621 x += addHtmlValue("Android APK", '<a onclick=downloadFile("meshagents?id=14' + (urlargs.key?('&key=' + urlargs.key):'') + '",null,true) title="' + "APK version of the MeshAgent" + '">' + "APK" + '</a> <img src=images/link4.png height=10 width=10 title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=14&meshid=' + meshid.split('/')[2] + (urlargs.key?('&key=' + urlargs.key):'') + '")>');
5622 x += '</div>'
5623
@@ -5942,7 +5942,7 @@
5942 setDialogMode(2, "Edit Device Tags", 3, d2groupActionFunctionTagsExec, x);
5943 } else if (op == 108) {
5944 // Device notification
5945 - var x = "<div style=margin-bottom:4px>Perform batch device notification</div>";
5945 + var x = '<div style=margin-bottom:4px>'+ "Perform batch device notification" + '</div>';
5946 x += '<select id=d2deviceop style=width:100%;margin-bottom:4px><option value=2>' + "Toast Notification" + '</option><option value=1>' + "Message Box" + '</option><option value=3>' + "Alert Box" + '</option></select>';
5947 x += '<input id=dp2notifyTitle maxlength=256 placeholder="' + "Title" + '" style=width:100%;box-sizing:border-box;margin-bottom:4px />';
5948 x += '<textarea id=d2notifyMsg style=background-color:#fcf3cf;width:100%;height:140px;resize:none;overflow-y:scroll;box-sizing:border-box;margin-bottom:4px></textarea>';
@@ -12231,7 +12231,7 @@
12231 }
12232 if (hardware.network && hardware.network.dns) {
12233 x += '<tr><td><div class=style10 style=border-radius:5px;padding:8px>';
12234 - x += addDetailItem("<b>DNS Servers</b>", hardware.network.dns.join(", "));
12234 + x += addDetailItem('<b>' + "DNS Servers" + '</b>', hardware.network.dns.join(", "));
12235 x += '</div></td></tr>';
12236 }
12237 x += '</table>';
@@ -13407,7 +13407,7 @@
13407
13408 function server_showRestoreDlg() {
13409 if (xxdialogMode) return false;
13410 - var x = "Restore the server using a backup, <span style=color:red>this will delete the existing server data</span>. Only do this if you know what you are doing." + '<br /><br />';
13410 + var x = "Restore the server using a backup," + ' <span style=color:red>' + "this will delete the existing server data." + '</span> ' + "Only do this if you know what you are doing." + '<br /><br />';
13411 x += '<form action="/restoreserver.ashx' + ((urlargs.key)?('?key=' + urlargs.key):'') + '" enctype="multipart/form-data" method="post"><div>';
13412 x += '<input type=hidden name=auth value=' + authCookie + '>';
13413 x += '<input id=account_dlgFileInput type=file name=datafile style=width:100% accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()><br /><br />';
views/default3.handlebars
+343 -475
@@ -281,15 +281,6 @@
281 </div>
282 </div>
283 </div>
284 - {{!-- <table id=EventsSubMenu cellpadding=0 cellspacing=0 class=style1>
285 - <tr>
286 - <td tabindex=0 id=EventsLive class="topbar_td style3x" onmouseup=go(3,event)
287 - onkeypress="if (event.key == 'Enter') go(3)">Events</td>
288 - <td tabindex=0 id=EventsReport class="topbar_td style3x" onmouseup=go(60,event)
289 - onkeypress="if (event.key == 'Enter') go(60)">Reports</td>
290 - <td class="topbar_td_end style3">&nbsp;</td>
291 - </tr>
292 - </table> --}}
284 </div>
285 <div id=UserSubMenuSpan style="display:none">
286 <table id=UserSubMenu cellpadding=0 cellspacing=0 class=style1>
@@ -603,7 +594,7 @@
594 </div>
595 <div id=p2logintokens></div>
596 <strong>Device Groups</strong>
606 - <span id="p2createMeshLink1"> - <button class="btn btn-primary btn-sm" onclick="return account_createMesh()"><i class="fa-fw fa-solid fa-plus-circle"></i> New</button></span>
597 + <span id="p2createMeshLink1"> - <button class="btn btn-primary btn-sm" onclick="return account_createMesh()"><i class="fa-fw fa-solid fa-circle-plus"></i> New</button></span>
598 <br /><br />
599 <div id=p2meshes></div>
600 <div id=p2noMeshFound style="display:none">No device groups.<span id="p2createMeshLink2"> <a href=# onclick="return account_createMesh()"><strong>Get started here!</strong></a></span>
@@ -1466,50 +1457,20 @@
1457 <div class='fs-4 fw-bold'>General - <span id=p30userName></span></div>
1458 </div>
1459 <div id="p30info" style="overflow-y:auto">
1469 - {{!-- <table style="width:100%" cellpadding="0" cellspacing="0">
1470 - <tr>
1471 - <td style=width:auto valign=top>
1472 - <div id=p30html></div>
1473 - </td>
1474 - <td style=width:20px></td>
1475 - <td style=width:200px;position:relative valign=top>
1476 - <img id="p30userAuthServiceLogo" loading="lazy" style="display:none"
1477 - class=userAuthStrategyLogo width=64 height=64>
1478 - <picture id=MainUserImage
1479 - style="display:none;border-width:0px;height:200px;width:200px;float:right"
1480 - onclick="account_manageImage(1)">
1481 - <source type="image/webp" width=200 height=200 srcset="images/webp/user-256.webp" />
1482 - <img alt="" width=200 height=200 src=images/user-256.png />
1483 - </picture>
1484 - <img id=MainUserImageEx alt="" width=200 height=200 src=images/user-256.png
1485 - onclick="account_manageImage(1)" />
1486 - <div style="width:100%;text-align:center"><strong><span
1487 - id=MainUserState></span></strong></div>
1488 - </td>
1489 - </tr>
1490 - </table><br /> --}}
1460 <div class="row">
1492 - <!-- First column: p30html div -->
1461 <div class="col">
1462 <div id="p30html"></div>
1463 </div>
1496 -
1497 - <!-- Spacer column (20px width) -->
1464 <div class="col-auto" style="width: 20px;"></div>
1499 -
1500 - <!-- Second column: User image and state -->
1465 <div class="col-auto" style="width: 200px; position: relative;">
1466 <img id="p30userAuthServiceLogo" loading="lazy" style="display:none" class="userAuthStrategyLogo" width="64" height="64">
1503 -
1467 <picture id="MainUserImage"
1468 style="display:none; border-width:0px; height:200px; width:200px; float:right"
1469 onclick="account_manageImage(1)">
1470 <source type="image/webp" width="200" height="200" srcset="images/webp/user-256.webp" />
1471 <img alt="" width="200" height="200" src="images/user-256.png" />
1472 </picture>
1510 -
1473 <img id="MainUserImageEx" alt="" width="200" height="200" src="images/user-256.png" onclick="account_manageImage(1)" />
1512 -
1474 <div style="width:100%;text-align:center;">
1475 <strong><span id="MainUserState"></span></strong>
1476 </div>
@@ -1533,10 +1494,10 @@
1494 <tr>
1495 {{!-- <td class="h1"></td> --}}
1496 <!--<td>&nbsp;<input type=button onclick=refreshUsersEvents() value="Refresh" /></td>-->
1536 - <td class="auto-style1">
1537 - <div class="d-inline-flex align-items-center m-1">
1538 - <label for="p31filterevents" class="form-label me-2">Filter</label>
1539 - <select id=p31filterevents class="form-select-sm" onchange=refreshUsersEvents()>
1497 + <td class="auto-style1 d-flex justify-content-end p-1">
1498 + <div class="d-flex align-items-center">
1499 + <label for="p31filterevents" class="me-1">Filter</label>
1500 + <select id=p31filterevents class="form-select-sm me-2" onchange=refreshUsersEvents()>
1501 <option value="">All Logs</option>
1502 <option value=agentlog>Agent Logs</option>
1503 <option value=relaylog>Relay Logs</option>
@@ -1546,10 +1507,8 @@
1507 <option value=changenode>Change Node Logs</option>
1508 <option value=removenode>Remove Node Logs</option>
1509 </select>
1549 - </div>
1550 - <div class="d-inline-flex align-items-center">
1551 - <label for="p31limitdropdown" class="form-label me-2">Show</label>
1552 - <select id=p31limitdropdown class="form-select-sm" onchange=refreshUsersEvents()>
1510 + <label for="p31limitdropdown" class="me-1">Show</label>
1511 + <select id=p31limitdropdown class="form-select-sm me-2" onchange=refreshUsersEvents()>
1512 <option value=60>Last 60</option>
1513 <option value=120>Last 120</option>
1514 <option value=250>Last 250</option>
@@ -1557,8 +1516,8 @@
1516 <option value=1000>Last 1000</option>
1517 <option value="">No limit</option>
1518 </select>
1519 + <a href=# onclick=p3showDownloadEventsDialog(3)><i class="fa-solid fa-download" role="button" title="Download Events"></i></a>
1520 </div>
1561 - <a href=# onclick=p3showDownloadEventsDialog(3)><i class="fa-solid fa-download" title="Download Events" style=cursor:pointer></i></a>&nbsp;
1521 </td>
1522 {{!-- <td class="h2"></td> --}}
1523 </tr>
@@ -1688,33 +1647,11 @@
1647 <div class='fs-4 fw-bold'>User Group - <span id=p51groupName></span></div>
1648 </div>
1649 <div id="p51info" style="overflow-y:auto">
1691 - {{!-- <table style="width:100%" cellpadding="0" cellspacing="0">
1692 - <tr>
1693 - <td style=width:auto valign=top>
1694 - <div id=p51group></div>
1695 - </td>
1696 - <td style=width:20px></td>
1697 - <td style=width:200px valign=top>
1698 - <picture id=MainUserImage style=border-width:0px;height:200px;width:200px;float:right>
1699 - <source type="image/webp" width=200 height=200
1700 - srcset="images/webp/group-256.webp" />
1701 - <img alt="" width=200 height=200 src=images/group-256.png />
1702 - </picture>
1703 - <div style="width:100%;text-align:center"><strong><span
1704 - id=MainUserState></span></strong></div>
1705 - </td>
1706 - </tr>
1707 - </table> --}}
1650 <div class="row">
1709 - <!-- First column: p51group div -->
1651 <div class="col">
1652 <div id="p51group"></div>
1653 </div>
1713 -
1714 - <!-- Spacer column (20px width) -->
1654 <div class="col-auto" style="width: 20px;"></div>
1716 -
1717 - <!-- Second column: User image and state -->
1655 <div class="col-auto" style="width: 200px;">
1656 <picture id="MainUserImage" style="border-width:0px;height:200px;width:200px;float:right">
1657 <source type="image/webp" width="200" height="200"
@@ -1726,7 +1663,6 @@
1663 </div>
1664 </div>
1665 </div>
1729 -
1666 <div id=p51group2></div>
1667 <br />
1668 </div>
@@ -1826,10 +1762,10 @@
1762 </div>
1763 </div>
1764 <div id=dialog4 style="">
1829 - <input id="d4WrapButton" class="btn btn-primary me-2 mb-2" type="button" value="Wrap On" onclick="d4ToggleWrap()" />
1830 - <input id="d4SizeButton" class="btn btn-primary me-2 mb-2" type="button" value="Small" onclick="d4ToggleSize()" />
1831 - <input id="d4EncodingButton" class="btn btn-primary me-2 mb-2" type="button" value="Raw" onclick="d4ToggleEncoding()" />
1832 - <input id="d4LineBreakButton" class="btn btn-primary me-2 mb-2" type="button" value="Windows" onclick="d4ToggleLineBreak()" />
1765 + <input id="d4WrapButton" class="btn btn-primary me-1 mb-1" type="button" value="Wrap On" onclick="d4ToggleWrap()" />
1766 + <input id="d4SizeButton" class="btn btn-primary me-1 mb-1" type="button" value="Small" onclick="d4ToggleSize()" />
1767 + <input id="d4EncodingButton" class="btn btn-primary me-1 mb-1" type="button" value="Raw" onclick="d4ToggleEncoding()" />
1768 + <input id="d4LineBreakButton" class="btn btn-primary me-1 mb-1" type="button" value="Windows" onclick="d4ToggleLineBreak()" />
1769 <textarea id=d4editorarea autocomplete="off" style="height:calc(100vh - 286px);width:100%;overflow:scroll;resize:none;white-space:pre"></textarea>
1770 </div>
1771 <div id=dialog7 style="">
@@ -1947,12 +1883,12 @@
1883 <button type="button" class="btn btn-primary" data-bs-dismiss="modal" id="idx_dlgCancelButton">Cancel</button>
1884 <button type="button" class="btn btn-outline-success" id="idx_dlgOkButton" >OK</button>
1885 <button type="button" class="btn btn-outline-danger" id="idx_dlgDeleteButton" style="display:none">Delete</button>
1950 - {{!-- <div id="idx_dlgMoreButtons">
1886 + <!-- <div id="idx_dlgMoreButtons">
1887 <a href="#" id="idx_dlgMoreButtons1" class="btn btn-primary"
1888 title="Toggle advanced options" onclick="MoreToggle(true)">&#x25BC;</a>
1889 <a href="#" id="idx_dlgMoreButtons2" class="btn btn-primary"
1890 title="Toggle advanced options" onclick="MoreToggle(false)">&#x25B2;</a>
1955 - </div> --}}
1891 + </div> -->
1892 </div>
1893 </div>
1894 </div>
@@ -2617,7 +2553,7 @@
2553 x += '<input type=radio id=night2 name=nightmoderadio value=2 ' + ((cNightMode == 2) ? 'checked' : '') + '><label for=night2>' + "Light mode" + '</label><br>';
2554 x += '<input type=radio id=night1 name=nightmoderadio value=1 ' + ((cNightMode == 1) ? 'checked' : '') + '><label for=night1>' + "Dark mode" + '</label><br>';
2555 xxdialogButtons = 3;
2620 - setModalContent('xxAddAgent', 'Night Mode', x);
2556 + setModalContent('xxAddAgent', "Night Mode", x);
2557 showModal('xxAddAgentModal', 'idx_dlgOkButton', toggleNightModeEx);
2558
2559 QV('uiMenu', false);
@@ -2990,7 +2926,8 @@
2926 23: "Unable to load agent icon file: {0}.",
2927 24: "Unable to load agent logo file: {0}.",
2928 25: "This NodeJS version does not support OpenID.",
2993 - 26: "This NodeJS version does not support Discord.js."
2929 + 26: "This NodeJS version does not support Discord.js.",
2930 + 27: "Firebase now requires a service account JSON file, Firebase disabled."
2931 };
2932 var x = '';
2933 for (var i in message.warnings) {
@@ -3388,12 +3325,12 @@
3325 x += addHtmlValue2('<label><input id=d2updateCheck2 type=checkbox class="form-check-input me-2" onclick=server_showVersionDlgUpdate()' + (((message.tags.latest == "Unknown") || (message.tags.current == message.tags.latest) || ((features & 2048) == 0)) ? ' disabled' : '') + ' /> ' + "Latest Version" + '</label>', '<b>' + EscapeHtml(message.tags.latest) + '</b>');
3326 x += '</div>';
3327 if (((message.tags.current == message.tags.latest) && (message.tags.current == message.tags.stable)) || ((features & 2048) == 0)) {
3391 - setModalContent('xxAddAgent', 'MeshCentral Version', x);
3328 + setModalContent('xxAddAgent', "MeshCentral Version", x);
3329 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3330 } else {
3331 x += '<hr />' + "Check and click OK to start server self-update.";
3332 xxdialogTag = message.tags;
3396 - setModalContent('xxAddAgent', 'MeshCentral Version', x);
3333 + setModalContent('xxAddAgent', "MeshCentral Version", x);
3334 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
3335 server_showVersionDlgEx(2, message.tags);
3336 });
@@ -3405,13 +3342,13 @@
3342 case 'servererrors': {
3343 if ((xxdialogMode == 2) && (xxdialogTag == 'MeshCentralServerErrors')) {
3344 if (message.data == null) {
3408 - setModalContent('xxAddAgent', 'Server Errors', 'Server has no error log.');
3345 + setModalContent('xxAddAgent', "Server Errors", "Server has no error log.");
3346 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3347 } else {
3348 var x = '<div class="dialogText dialogTextLog"><pre id=d2ServerErrorsLogPre>' + EscapeHtml(message.data) + '</pre></div>';
3349 x += '<br /><div style=float:right><i role=button class="fa-fw fa-solid fa-download fa-sm" title="' + "Download error log" + '" onclick=d2CopyServerErrorsToClip()></i></div>';
3350 x += '<div><label><input id=d2clearErrorsCheck type=checkbox class="form-check-input me-2" onclick=server_showErrorsDlgUpdate() /> ' + "Check and click OK to clear error log." + '</label></div>';
3414 - setModalContent('xxAddAgent', 'MeshCentral Server Errors', x);
3351 + setModalContent('xxAddAgent', "MeshCentral Server Errors", x);
3352 showModal('xxAddAgentModal', 'idx_dlgOkButton', server_showErrorsDlgEx);
3353 server_showErrorsDlgUpdate();
3354 }
@@ -3421,9 +3358,9 @@
3358 case 'serverconfig': {
3359 if ((xxdialogMode == 2) && (xxdialogTag == 'MeshCentralServerConfig')) {
3360 if (message.data == null) {
3424 - setModalContent('xxAddAgent', 'Server Configuration', 'Server has no config file.', 'extra-large');
3361 + setModalContent('xxAddAgent', "Server Configuration", 'Server has no config file.', 'extra-large');
3362 } else {
3426 - setModalContent('xxAddAgent', 'Server Configuration', 4, 'extra-large');
3363 + setModalContent('xxAddAgent', "Server Configuration", 4, 'extra-large');
3364 QV('d4EncodingButton', false);
3365 QV('d4LineBreakButton', false);
3366 Q('d4editorarea').value = message.data;
@@ -3518,7 +3455,7 @@
3455 var secret = message.secret;
3456 if (secret.length == 52) { secret = secret.split(/(.............)/).filter(Boolean).join(' '); }
3457 else if (secret.length == 32) { secret = secret.split(/(....)/).filter(Boolean).join(' '); secret = secret.substring(0, 20) + '<br/>' + secret.substring(20) }
3521 - QH('d2optinfo', '<table style=width:380px><tr><td style=vertical-align:top>' + format("Install <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\" rel=\"noreferrer noopener\" target=_blank>Google Authenticator</a> or a compatible application and scan the barcode, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank>this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.", message.url) + '<br /><br />' + 'Secret <img src=images/link4.png height=10 width=10 title="' + "Copy Secret to clipboard" + '" style=cursor:pointer onclick=d2CopySecretToClip()>' + '<br /><tt id=d2optsecret secret="' + message.secret + '" style=font-size:12px>' + secret + '</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="' + message.url + '" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />' + "Enter the token here for 2-step login:" + ' <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');
3458 + QH('d2optinfo', '<table style=width:380px><tr><td style=vertical-align:top>' + format("Install" + ' <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>' + "Google Authenticator" + '</a> ' + "or a compatible application and scan the barcode, use <a href=\"{0}\" rel=\"noreferrer noopener\" target=_blank>this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.", message.url) + '<br /><br />' + 'Secret <img src=images/link4.png height=10 width=10 title="' + "Copy Secret to clipboard" + '" style=cursor:pointer onclick=d2CopySecretToClip()>' + '<br /><tt id=d2optsecret secret="' + message.secret + '" style=font-size:12px>' + secret + '</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="' + message.url + '" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />' + "Enter the token here for 2-step login:" + ' <input type=text autocomplete="one-time-code" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');
3459 new QRCode(Q('qrcode'), { text: message.url, width: 128, height: 128, colorDark: '#000000', colorLight: '#EEE', correctLevel: QRCode.CorrectLevel.H });
3460 QV('idx_dlgOkButton', true);
3461 QE('idx_dlgOkButton', false);
@@ -3529,13 +3466,13 @@
3466 }
3467 case 'otpauth-setup': {
3468 if (xxdialogMode) return;
3532 - setModalContent('xxAddAgent', 'Authenticator App', message.success ? ('<b style=color:green>' + "Authenticator app activation successful." + '</b> ' + "You will now need a valid token to login again.") : ('<b style=color:red>' + "2-step login activation failed." + '</b> ' + "Clear the secret from the application and try again. You only have a few minutes to enter the proper code."));
3469 + setModalContent('xxAddAgent', "Authenticator App", message.success ? ('<b style=color:green>' + "Authenticator app activation successful." + '</b> ' + "You will now need a valid token to login again.") : ('<b style=color:red>' + "2-step login activation failed." + '</b> ' + "Clear the secret from the application and try again. You only have a few minutes to enter the proper code."));
3470 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3471 break;
3472 }
3473 case 'otpauth-clear': {
3474 if (xxdialogMode) return;
3538 - setModalContent('xxAddAgent', 'Authenticator App', message.success ? ('<b>' + "Authenticator application removed." + '</b> ' + "You can reactivate this feature at any time.") : ('<b style=color:red>' + "2-step login activation removal failed." + '</b> ' + "Try again."));
3475 + setModalContent('xxAddAgent', "Authenticator App", message.success ? ('<b>' + "Authenticator application removed." + '</b> ' + "You can reactivate this feature at any time.") : ('<b style=color:red>' + "2-step login activation removal failed." + '</b> ' + "Try again."));
3476 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3477 break;
3478 }
@@ -3561,14 +3498,14 @@
3498 x += '<tr><td>' + "No Active Tokens";
3499 }
3500 x += '</table></div></div><br />';
3564 - x += '<div><input type=button value=' + "Close" + ' onclick=setDialogMode(0) style=float:right></input>';
3501 + x += '<div>';
3502 x += '<input type=button value="' + "Generate New Tokens" + '" onclick="account_manageOtp(1);"></input>';
3503 if (message.passwords != null) {
3504 x += '<input type=button value="' + "Clear Tokens" + '" onclick="account_manageOtp(2);"></input>';
3505 x += '&nbsp;<img src=images/link4.png height=10 width=10 title="' + "Copy valid codes to clipboard" + '" style=cursor:pointer onclick=copyTextToClip2("' + encodeURIComponentEx(clipb) + '")>';
3506 }
3507 x += '</div><br />';
3571 - setModalContent('xxAddAgent', 'Manage Backup Codes', x);
3508 + setModalContent('xxAddAgent', "Manage Backup Codes", x);
3509 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3510 break;
3511 }
@@ -3576,7 +3513,7 @@
3513 if (xxdialogMode && (xxdialogTag != 'otpauth-hardware-manage')) return;
3514 var start = '<div style="border-radius:6px;border:2px solid #CCC;background-color:#BBB;width:100%;box-sizing:border-box;margin-bottom:6px"><div style="margin:3px;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold"><table style=width:100%;text-align:left>';
3515 var end = '</table></div></div>';
3579 - var x = "<a href=\"https://www.yubico.com/\" rel=\"noreferrer noopener\" target=\"_blank\">Hardware keys</a> are used as secondary login authentication.";
3516 + var x = '<a href="https://www.yubico.com/" rel="noreferrer noopener" target="_blank">' + "Hardware keys" + '</a> ' + "are used as secondary login authentication.";
3517 x += '<div style="max-height:150px;overflow-y:auto;overflow-x:hidden;margin-top:6px;margin-bottom:6px">';
3518 if (message.keys && message.keys.length > 0) {
3519 for (var i in message.keys) {
@@ -3587,7 +3524,7 @@
3524 x += start + '<tr style=text-align:center><td>' + "No Keys Configured" + end;
3525 }
3526 x += '</div>';
3590 - x += '<div><input type=button value="' + "Close" + '" onclick=setDialogMode(0) style=float:right></input>';
3527 + x += '<div>';
3528 var hkeycount = (typeof userinfo.otphkeys == 'number') ? userinfo.otphkeys : 0;
3529 if ((typeof serverinfo.maxfidokeys != 'number') || (serverinfo.maxfidokeys > hkeycount)) { // Check if we we reached maximum hardware keys
3530 if ((features & 0x00020000) != 0) { x += '<input id=d2addkey3 type=button value="' + "Add Key" + '" onclick="account_addhkey(3);"></input>'; }
@@ -3596,7 +3533,7 @@
3533 x += "Maximum keys reached.";
3534 }
3535 x += '</div><br />';
3599 - setModalContent('xxAddAgent', 'Manage Security Keys', x);
3536 + setModalContent('xxAddAgent', "Manage Security Keys", x);
3537 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3538 if (u2fSupported() == false) { QE('d2addkey1', false); }
3539 break;
@@ -3605,7 +3542,7 @@
3542 if (message.result) {
3543 meshserver.send({ action: 'otp-hkey-get' }); // Success, ask for the full list of keys.
3544 } else {
3608 - setModalContent('xxAddAgent', 'Add Security Key', '<br />' + "Error, Unable to add key." + '<br /><br />');
3545 + setModalContent('xxAddAgent', "Add Security Key", '<br />' + "Error, Unable to add key." + '<br /><br />');
3546 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3547 }
3548 break;
@@ -3615,7 +3552,7 @@
3552 if (message.result == true) {
3553 meshserver.send({ action: 'otp-hkey-get' }); // Success, ask for the full list of keys.
3554 } else {
3618 - setModalContent('xxAddAgent', 'Add Security Key', '<br />' + "Error, Unable to add key." + '<br /><br />');
3555 + setModalContent('xxAddAgent', "Add Security Key", '<br />' + "Error, Unable to add key." + '<br /><br />');
3556 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3557
3558 }
@@ -3624,7 +3561,7 @@
3561 case 'webauthn-startregister': {
3562 if (xxdialogMode && (xxdialogTag != 'otpauth-hardware-manage')) return;
3563 var x = "Press the key button now." + '<br /><br /><div style=width:100%;text-align:center><img width=120 height=117 src="images/hardware-keypress-120.png" /></div><input id=dp1keyname style=display:none value=' + message.name + ' />';
3627 - setModalContent('xxAddAgent', 'Add Security Key', x);
3564 + setModalContent('xxAddAgent', "Add Security Key", x);
3565 var publicKey = message.request;
3566 message.request.challenge = Uint8Array.from(atob(message.request.challenge), function (c) { return c.charCodeAt(0) })
3567 message.request.user.id = Uint8Array.from(atob(message.request.user.id), function (c) { return c.charCodeAt(0) })
@@ -3635,7 +3572,7 @@
3572 }, function (error) {
3573 // Error
3574 console.log("ERROR: " + error);
3638 - setModalContent('xxAddAgent', 'Add Security Key', "ERROR: " + error);
3575 + setModalContent('xxAddAgent', "Add Security Key", "ERROR: " + error);
3576 });
3577 showModal('xxAddAgentModal', 'idx_dlgOkButton');
3578 break;
@@ -3645,7 +3582,7 @@
3582 var x = '<table><tr><td><img src="images/phone80.png" style=padding:8px>';
3583 x += '<td>' + "Check your phone and enter the verification code.";
3584 x += '<br /><br /><div style=width:100%;text-align:center>' + "Verification code:" + ' <input type=tel pattern="[0-9]" inputmode="number" maxlength=6 id=d2phoneCodeInput onKeyUp=account_managePhoneCodeValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneCodeValidate(1)"></div></table>';
3648 - setModalContent('xxAddAgent', 'Phone Notifications', x);
3585 + setModalContent('xxAddAgent', "Phone Notifications", x);
3586 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_managePhoneConfirm(3, message.cookie));
3587 Q('d2phoneCodeInput').focus();
3588 account_managePhoneCodeValidate();
@@ -3656,7 +3593,7 @@
3593 var x = '<table><tr><td><img src="images/messaging40.png" style=padding:8px>';
3594 x += '<td>' + "Check your messaging application and enter the verification code.";
3595 x += '<br /><br /><div style=width:100%;text-align:center>' + "Verification code:" + ' <input type=tel pattern="[0-9]" inputmode="number" maxlength=6 id=d2phoneCodeInput onKeyUp=account_managePhoneCodeValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneCodeValidate(1)"></div></table>';
3659 - setModalContent('xxAddAgent', 'Messaging Notifications', x);
3596 + setModalContent('xxAddAgent', "Messaging Notifications", x);
3597 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_manageMessagingConfirm(3, message.cookie));
3598 Q('d2phoneCodeInput').focus();
3599 account_managePhoneCodeValidate();
@@ -4391,7 +4328,7 @@
4328 x += addHtmlValue("User Consent", y.join(', '));
4329 var type = ''; if (message.p <= 7) { type = ['', "Remote Terminal Link", "Remote Desktop Link", "Remote Desktop + Terminal Link", "Remote Files Link", "Remote Terminal + Files Link", "Remote Desktop + Files Link", "Remote Desktop + Terminal + Files Link"][message.p]; } else if (message.p == 8) { type = format("HTTP/{0} link", message.port); } else if (message.p == 16) { type = format("HTTPS/{0}", message.port); }
4330 x += '<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px"><a href="' + message.url + '" id=agentInvitationLink rel="noreferrer noopener" target="_blank" style=cursor:pointer>' + type + '</a> <i class="fa-regular fa-copy" title="' + "Copy link to clipboard" + '" style=cursor:pointer onclick=d2CopyInviteToClip()></i></div></div>';
4394 - setModalContent('xxAddAgent', 'Share Device', x);
4331 + setModalContent('xxAddAgent', "Share Device", x);
4332 showModal('xxAddAgentModal', 'idx_dlgOkButton');
4333 break;
4334 }
@@ -4410,7 +4347,7 @@
4347 x += addHtmlValue('MPS Cert Hash', '<input style=width:230px readonly value="' + message.mpsCertHash + '" />');
4348 }
4349 */
4413 - setModalContent('xxAddAgent', 'MQTT Credentials', x);
4350 + setModalContent('xxAddAgent', "MQTT Credentials", x);
4351 showModal('xxAddAgentModal', 'idx_dlgOkButton');
4352 break;
4353 }
@@ -4434,7 +4371,7 @@
4371 var vSelect = '<select id="lastPluginVersion">';
4372 message.info.versionList.forEach(function (v) { vSelect += '<option value="' + v.zipball_url + '">' + v.name + '</option>'; });
4373 vSelect += '</select>';
4437 - setModalContent('xxAddAgent', 'Plugin Action', format('Select the version to downgrade the plugin: {0}', message.info.name) + '<hr />' + vSelect + '<hr />' + "Please be aware that downgrading is not recommended. Please only do so in the event that a recent upgrade has broken something." + + '<input id="lastPluginAct" type="hidden" value="downgrade" /><input id="lastPluginId" type="hidden" value="' + message.info.id + '" />');
4374 + setModalContent('xxAddAgent', "Plugin Action", format('Select the version to downgrade the plugin: {0}', message.info.name) + '<hr />' + vSelect + '<hr />' + "Please be aware that downgrading is not recommended. Please only do so in the event that a recent upgrade has broken something." + + '<input id="lastPluginAct" type="hidden" value="downgrade" /><input id="lastPluginId" type="hidden" value="' + message.info.id + '" />');
4375 showModal('xxAddAgentModal', 'idx_dlgOkButton', pluginActionEx);
4376 break;
4377 }
@@ -4447,7 +4384,7 @@
4384 var x = '<img style=float:right src="images/googledrive-48.png" /><div>' + "Nagivate to the URL below, grant access and copy the token code back." + '</div><br />';
4385 x += addHtmlValue("Activation", '<a href=\"' + message.url + '\" rel="noreferrer noopener" target="_blank">Browse to this URL</a>');
4386 x += addHtmlFormFloating("Code", '<input id=gdcode onkeyup=server_setupGoogleDriveBackupCheck3() class=form-control></input>');
4450 - setModalContent('xxAddAgent', 'Google Drive Backup', x);
4387 + setModalContent('xxAddAgent', "Google Drive Backup", x);
4388 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => server_setupGoogleDriveBackupEx(3, 'gd2'));
4389 Q('gdcode').focus();
4390 QE('idx_dlgOkButton', false);
@@ -4456,7 +4393,7 @@
4393 break;
4394 }
4395 case 'pluginError': {
4459 - setModalContent('xxAddAgent', 'Plugin Error', message.msg);
4396 + setModalContent('xxAddAgent', "Plugin Error", message.msg);
4397 showModal('xxAddAgentModal', 'idx_dlgOkButton');
4398 break;
4399 }
@@ -4487,7 +4424,7 @@
4424 }
4425 x += '</table></div>';
4426 }
4490 - setModalContent('xxAddAgent', 'Previous Logins', x);
4427 + setModalContent('xxAddAgent', "Previous Logins", x);
4428 showModal('xxAddAgentModal', 'idx_dlgOkButton');
4429 break;
4430 }
@@ -4500,9 +4437,9 @@
4437 var x = "Take note of this username and password, the password cannot be shown again." + '<br /><br />';
4438 x += addHtmlValue("Name", EscapeHtml(message.name))
4439 if (message.expire != 0) { x += addHtmlValue("Expire", EscapeHtml(printDateTime(new Date(message.expire)))); }
4503 - x += addHtmlValue("Username", '<i class="fa-regular fa-copy" title="' + "Copy link to clipboard..." + '" style="margin:9px;cursor:pointer;float:right" onclick=copyTextToClip2("' + encodeURIComponentEx(message.tokenUser) + '")></i><div class=selecttext style=width:230px;padding:5px;background-color:orange;border-radius:5px;font-size:15px>' + EscapeHtml(message.tokenUser) + '</div>');
4504 - x += addHtmlValue("Password", '<i class="fa-regular fa-copy" title="' + "Copy link to clipboard..." + '" style="margin:9px;cursor:pointer;float:right" onclick=copyTextToClip2("' + encodeURIComponentEx(message.tokenPass) + '")></i><div class=selecttext style=width:230px;padding:5px;background-color:orange;border-radius:5px;font-size:15px>' + EscapeHtml(message.tokenPass) + '</div>');
4505 - setModalContent('xxAddAgent', 'Create Login Token', x);
4440 + x += addHtmlValue("Username", '<i class="fa-regular fa-copy" title="' + "Copy link to clipboard" + '" style="margin:9px;cursor:pointer;float:right" onclick=copyTextToClip2("' + encodeURIComponentEx(message.tokenUser) + '")></i><div class=selecttext style=width:230px;padding:5px;background-color:orange;border-radius:5px;font-size:15px>' + EscapeHtml(message.tokenUser) + '</div>');
4441 + x += addHtmlValue("Password", '<i class="fa-regular fa-copy" title="' + "Copy link to clipboard" + '" style="margin:9px;cursor:pointer;float:right" onclick=copyTextToClip2("' + encodeURIComponentEx(message.tokenPass) + '")></i><div class=selecttext style=width:230px;padding:5px;background-color:orange;border-radius:5px;font-size:15px>' + EscapeHtml(message.tokenPass) + '</div>');
4442 + setModalContent('xxAddAgent', "Create Login Token", x);
4443 showModal('xxAddAgentModal', 'idx_dlgOkButton');
4444 break;
4445 }
@@ -4666,7 +4603,7 @@
4603 x += '<label><input id=d2c7 type=checkbox class="form-check-input me-2"' + ((deviceViewSettings.devsCols.indexOf('lastseen') >= 0) ? ' checked' : '') + '>' + "Last Seen" + '</label><br />';
4604 x += '<label><input id=d2c15 type=checkbox class="form-check-input me-2"' + ((deviceViewSettings.devsCols.indexOf('amthost') >= 0) ? ' checked' : '') + '>' + "Intel&reg; AMT hostname" + '</label><br />';
4605 x += '<label><input id=d2c17 type=checkbox class="form-check-input me-2"' + ((deviceViewSettings.devsCols.indexOf('amtstate') >= 0) ? ' checked' : '') + '>' + "Intel&reg; AMT state" + '</label><br />';
4669 - setModalContent('xxAddAgent', 'Device View Columns', x);
4606 + setModalContent('xxAddAgent', "Device View Columns", x);
4607 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => onDeviceViewSettingsEx());
4608 }
4609
@@ -5437,13 +5374,13 @@
5374 r += '<span style=line-height:20px>' + groupingTags + '</span>';
5375 }
5376 if (deviceViewSettings.devsCols.indexOf('windowsav') >= 0) { // Windows AV
5440 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.antiVirus != null) ? (node.wsc.antiVirus == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
5377 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.antiVirus != null) ? (node.wsc.antiVirus == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
5378 }
5379 if (deviceViewSettings.devsCols.indexOf('windowsupdate') >= 0) {// Windows Update
5443 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.autoUpdate != null) ? (node.wsc.autoUpdate == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
5380 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.autoUpdate != null) ? (node.wsc.autoUpdate == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
5381 }
5382 if (deviceViewSettings.devsCols.indexOf('windowsfirewall') >= 0) { // Windows Firewall
5446 - r += '<td style=text-align:center>' + ((node.wsc && node.wsc.firewall != null) ? (node.wsc.firewall == 'OK' ? "<span style=color:green>OK</span>" : "<span style=color:red>BAD</span>") : "");
5383 + r += '<td style=text-align:center>' + ((node.wsc && node.wsc.firewall != null) ? (node.wsc.firewall == 'OK' ? '<span style=color:green>' + "OK" + '</span>' : '<span style=color:red>' + "BAD" + '</span>') : "");
5384 }
5385 if (deviceViewSettings.devsCols.indexOf('lastbootuptime') >= 0) { // Last Boot Up Time
5386 r += '<td style=text-align:center;font-size:x-small>' + ((node.lastbootuptime != null) ? printDateTime(new Date(node.lastbootuptime)) : "");
@@ -5721,7 +5658,7 @@
5658 }
5659 }
5660 if (count > 8) {
5724 - setModalContent('xxAddAgent', 'Connect All', format("Are you sure you want to connect to {0} devices?", count));
5661 + setModalContent('xxAddAgent', "Connect All", format("Are you sure you want to connect to {0} devices?", count));
5662 var closeFunc = function(event,a) {
5663 document.getElementById('xxAddAgentModal').removeEventListener('hide.bs.modal', closeFunc);
5664 Q('autoConnectDesktopCheckbox').checked = false;
@@ -5780,7 +5717,7 @@
5717 d7bitmapscaling.value = multidesktopsettings.scaling;
5718 d7encoding.value = multidesktopsettings.agentencoding;
5719 if (multidesktopsettings.framerate) { d7framelimiter.value = multidesktopsettings.framerate; } else { d7framelimiter.value = 100; }
5783 - setModalContent('xxAddAgent', 'Remote Desktop Settings', x);
5720 + setModalContent('xxAddAgent', "Remote Desktop Settings", x);
5721 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showMultiDesktopSettingsChanged());
5722 }
5723
@@ -5877,7 +5814,7 @@
5814 x += addHtmlFormFloating("Device Name", '<input id=dp1devicename class=form-control maxlength=32 autocomplete=off onchange=validateLocalDeviceToMesh() onkeyup=validateLocalDeviceToMesh() />');
5815 x += addHtmlFormFloating("Hostname", '<input id=dp1hostname class=form-control maxlength=32 autocomplete=off placeholder="' + "Same as device name" + '" onchange=validateLocalDeviceToMesh() onkeyup=validateLocalDeviceToMesh() />');
5816 x += addHtmlFormFloating("Type", '<select id=dp1type class=form-select><option value=4>' + "Windows (RDP)" + '</option><option value=6>' + "Linux (SSH/SCP/VNC)" + '</option><option value=29>' + "macOS (SSH/SCP/VNC)" + '</option></select>');
5880 - setModalContent('xxAddAgent', 'Add local device', x);
5817 + setModalContent('xxAddAgent', "Add local device", x);
5818 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => addLocalDeviceToMeshEx(3, meshid));
5819 validateLocalDeviceToMesh();
5820 Q('dp1devicename').focus();
@@ -5903,7 +5840,7 @@
5840 x += addHtmlFormFloating("Password", '<input id=dp1password type=password class="form-control" autocomplete=off maxlength=32 onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />');
5841 x += addHtmlFormFloating("Security", '<select id=dp1tls class="form-select"><option value=0>' + "No TLS security" + '</option><option value=1>' + "TLS security required" + '</option></select>');
5842
5906 - setModalContent('xxAddAgent', 'Add Intel&reg; AMT device', x);
5843 + setModalContent('xxAddAgent', "Add Intel&reg; AMT device", x);
5844 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => addDeviceToMeshEx(3, meshid));
5845
5846 validateDeviceToMesh();
@@ -5922,7 +5859,7 @@
5859 function showAmtImport(meshid) {
5860 if (xxdialogMode) return;
5861 var x = "Create many Intel&reg; AMT device at once by importing a JSON file with the following format:" + '<br /><pre>[\r\n {\r\n "fqdn":"mycomputer.com",\r\n "uuid":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",\r\n "version":"12.0.1",\r\n "username":"admin",\r\n "password":"password",\r\n "tls":true\r\n }\r\n]</pre><input type=file id=d4importFile class="form-control" accept=".json" onchange=showAmtImportValidate() />';
5925 - setModalContent('xxAddAgent', 'Intel&reg; AMT Device Import', x);
5862 + setModalContent('xxAddAgent', "Intel&reg; AMT Device Import", x);
5863 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showAmtImportEx(3, meshid));
5864 QE('idx_dlgOkButton', false);
5865 }
@@ -5938,14 +5875,14 @@
5875 try {
5876 j = JSON.parse(r.target.result);
5877 } catch (ex) {
5941 - setModalContent('xxAddAgent', 'Intel&reg; AMT Device Import', format("Invalid JSON file: {0}.", ex));
5878 + setModalContent('xxAddAgent', "Intel&reg; AMT Device Import", format("Invalid JSON file: {0}.", ex));
5879 showModal('xxAddAgentModal', 'idx_dlgOkButton');
5880 return;
5881 }
5882 if (j != null) {
5883 meshserver.send({ action: 'importamtdevices', meshid: meshid, amtdevices: j });
5884 } else {
5948 - setModalContent('xxAddAgent', 'Intel&reg; AMT Device Import', "Invalid JSON file format.");
5885 + setModalContent('xxAddAgent', "Intel&reg; AMT Device Import", "Invalid JSON file format.");
5886 showModal('xxAddAgentModal', 'idx_dlgOkButton');
5887 }
5888 };
@@ -5970,7 +5907,7 @@
5907 if (serverinfo.amtAcmFqdn != null) {
5908 x += ('<div style=margin-top:8px>' + "For ACM activation, Intel&reg; AMT will need to be set to the following trusted FQDN:" + ' <b>' + serverinfo.amtAcmFqdn.join(', ') + '</b></div>');
5909 }
5973 - setModalContent('xxAddAgent', 'Intel&reg; AMT setup', x);
5910 + setModalContent('xxAddAgent', "Intel&reg; AMT setup", x);
5911 showModal('xxAddAgentModal', 'idx_dlgOkButton');
5912 Q('idx_dlgOkButton').focus();
5913 return false;
@@ -5985,7 +5922,7 @@
5922 x += addHtmlFormFloating("New Password*", '<input id=dp1password2 type=password class="form-control" autocomplete=off maxlength=32 onchange=validateAmtAcmSetupEx() onkeyup=validateAmtAcmSetupEx() />');
5923 if ((features2 & 0x00000020) && (currentMesh.mtype == 1) && (serverinfo.amtProvServerMeshId == currentMesh._id)) { x += '<label><input id=dp1lanprov type=checkbox class="form-check-input me-2" /> ' + "Use for bare-metal LAN activation." + '</label>'; } // Intel AMT LAN provisioning server is active.
5924 x += '<div><span id=dp10passNotify style="font-size:10px"> ' + "* 8 characters, 1 upper, 1 lower, 1 numeric, 1 non-alpha numeric." + '</span></div>';
5988 - setModalContent('xxAddAgent', 'Intel&reg; AMT ACM', x);
5925 + setModalContent('xxAddAgent', "Intel&reg; AMT ACM", x);
5926 showModal('xxAddAgentModal', 'idx_dlgOkButton', showAmtAcmSetupEx);
5927 Q('dp1password0').focus();
5928 validateAmtAcmSetupEx();
@@ -6019,7 +5956,7 @@
5956 x += '<input type=hidden id=amtScanMeshId value="' + meshid + '" />';
5957 x += '<div style="padding:10px;margin-bottom:5px"><input id="idx_dlgCancelButton2" type="button" value="' + "Cancel" + '" style="" onclick="dialogclose(0)" /><input id="idx_dlgOkButton2" type="button" value="OK" style="" onclick="dialogclose(1)" /><div><input id="d2scanSelectButton" type="button" value="' + "Select All" + '" onclick="scanSelectAll()" /></div></div>';
5958 xxdialogTag = meshid;
6022 - setModalContent('xxAddAgent', 'Scan for Intel&reg; AMT devices', x);
5959 + setModalContent('xxAddAgent', "Scan for Intel&reg; AMT devices", x);
5960 showModal('xxAddAgentModal', 'idx_dlgOkButton', addAmtScanToMeshEx);
5961 QE('idx_dlgOkButton2', false);
5962 QE('d2scanSelectButton', false);
@@ -6098,7 +6035,7 @@
6035 x += '<div id=d2agentInstallTypeDiv2>';
6036 x += addHtmlFormFloating("Installation Type", '<select id=agentInviteType class=form-select><option value=0>' + "Background and interactive" + '</option><option value=2>' + "Background only" + '</option><option value=1>' + "Interactive only" + '</option></select>');
6037 x += '</div>';
6101 - x += addHtmlFormFloating("Message (optional)", '<textarea id="agentInviteMessage" class="form-control" style="height:100px;resize:none;" maxlength="1024"></textarea>');
6038 + x += addHtmlFormFloating("Message" + ' ' + "(optional)", '<textarea id="agentInviteMessage" class="form-control" style="height:100px;resize:none;" maxlength="1024"></textarea>');
6039 x += '</div>';
6040 }
6041 x += '<div id=urlInviteDiv>' + format("Invite someone to install the mesh agent by sharing an invitation link. This link points the user to installation instructions for the \"{0}\" device group. The link is public and no account for this server is needed.", EscapeHtml(mesh.name)) + '<br /><br />';
@@ -6109,7 +6046,7 @@
6046 x += '</div>';
6047 x += '<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px;display:none"><a href=# id=agentInvitationLink rel="noreferrer noopener" target="_blank" style=cursor:pointer></a> <img src=images/link4.png height=10 width=10 title="' + "Copy link to clipboard" + '" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>';
6048 xxdialogTag = meshid;
6112 - setModalContent('xxAddAgent', 'Invite', x);
6049 + setModalContent('xxAddAgent', "Invite", x);
6050 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
6051 performAgentInvite(3, meshid);
6052 });
@@ -6158,11 +6095,11 @@
6095 if (xxdialogMode) return false;
6096 var mesh = meshes[meshid], x = '', installType = 0, moreoptions = '';
6097
6161 - var opts = '<select id="aginsSelect" onchange="addAgentToMeshClick()" class="form-select"><option value="0">Windows</option><option value="1">Linux / BSD</option><option value="5">Linux / BSD / macOS Binary Installer</option><option value="2">Apple macOS</option>';
6162 - if ((features & 2) == 0) { opts += '<option value="6">Mobile device</option>'; } // Don't display mobile setup in LAN mode.
6163 - opts += '<option value="7">MeshCentral Assistant</option>';
6164 - opts += '<option value="3">Windows (UnInstall)</option><option value="4">Linux / BSD (UnInstall)</option><option value="8">Apple macOS (UnInstall)</option></select>';
6165 - x += addHtmlFormFloating('Operating System', opts);
6098 + var opts = '<select id=aginsSelect onchange=addAgentToMeshClick() class=form-select><option value=0>' + "Windows" + '</option><option value=1>' + "Linux / BSD" + '</option><option value=5>' + "Linux / BSD / macOS Binary Installer" + '</option><option value=2>' + "Apple macOS" + '</option>';
6099 + if ((features & 2) == 0) { opts += '<option value=6>' + "Mobile device" + '</option>'; } // Don't display mobile setup in LAN mode.
6100 + opts += '<option value=7>' + "MeshCentral Assistant" + '</option>';
6101 + opts += '<option value=3>' + "Windows (UnInstall)" + '</option><option value=4>' + "Linux / BSD (UnInstall)" + '</option><option value=8>' + "Apple macOS (UnInstall)" + '</option></select>';
6102 + x += addHtmlFormFloating("Operating System", opts);
6103
6104 var servername = serverinfo.name;
6105 if ((servername.indexOf('.') == -1) || ((features & 2) != 0)) { servername = window.location.hostname; } // If the server name is not set or it's in LAN-only mode, use the URL hostname as server name.
@@ -6174,14 +6111,14 @@
6111 var binaryInstallAgents = { 6: 'Linux x86-64', 5: 'Linux x86-32', 10005: 'Apple OSX Universal', 25: 'Linux ARM-HF, Rasberry Pi', 26: 'Linux ARM64-HF', 28: 'Linux MIPS24KC (OpenWRT)', 30: 'FreeBSD x86-64', 32: 'Linux ARM 64 bit (glibc/2.24 NOKVM)', 36: 'OpenWRT x86-64', 37: 'OpenBSD x86-64', 40: 'Linux MIPSEL24KC (OpenWRT)', 41: 'ARMADA/CORTEX-A53/MUSL (OpenWRT)', 16: 'Apple macOS x86-64', 29: 'Apple macOS ARM-64' };
6112 for (var i in binaryInstallAgentsOrder) { moreoptions += '<option value="' + binaryInstallAgentsOrder[i] + '">' + binaryInstallAgents[binaryInstallAgentsOrder[i]] + '</option>' }
6113 x += '<div id="aginsSysTypeDiv">';
6177 - x += addHtmlFormFloating('System Type', '<select id="aginsSysType" onchange="addAgentToMeshClick()" class="form-select">' + moreoptions + '</select>');
6114 + x += addHtmlFormFloating("System Type", '<select id="aginsSysType" onchange="addAgentToMeshClick()" class="form-select">' + moreoptions + '</select>');
6115 x += '</div>';
6116
6117 // Add agent and assistant installation type option
6118 x += '<div id="aginsTypeDiv">';
6182 - x += addHtmlFormFloating('Installation Type', '<select id="aginsType" onchange="addAgentToMeshClick()" class="form-select"><option value="0">Background & interactive</option><option value="2">Background only</option><option value="1">Interactive only</option></select>');
6119 + x += addHtmlFormFloating("Installation Type", '<select id="aginsType" onchange="addAgentToMeshClick()" class="form-select"><option value="0">' + "Background & interactive" + '</option><option value="2">' + "Background only" + '</option><option value="1">' + "Interactive only" + '</option></select>');
6120 x += '</div><div id="asinsTypeDiv">';
6184 - x += addHtmlFormFloating('Installation Type', '<select id="asinsType" onchange="addAgentToMeshClick()" class="form-select"><option value="2">Application, Connect on user request</option><option value="3">Application, Always connected</option><option value="0">System Tray, Connect on user request</option><option value="1">System Tray, Always connected</option><option value="4">System Tray, Monitor only</option></select>');
6121 + x += addHtmlFormFloating("Installation Type", '<select id="asinsType" onchange="addAgentToMeshClick()" class="form-select"><option value="2">' + "Application, Connect on user request" + '</option><option value="3">' + "Application, Always connected" + '</option><option value="0">' + "System Tray, Connect on user request" + '</option><option value="1">' + "System Tray, Always connected" + '</option><option value="4">' + "System Tray, Monitor only" + '</option></select>');
6122 x += '</div><hr>';
6123
6124 // \/:*?"<>|
@@ -6209,11 +6146,11 @@
6146 x += '</div>';
6147
6148 // QR code agent install
6212 - x += '<div id=agins_qrcode style=display:none;min-height:180px><a id=agins_qrimage_a rel=\"noreferrer noopener\" target=_blank><div id=agins_qrimage style=float:right;margin-left:10px;width:180px;height:180px;cursor:pointer></div></a><div>' + format("To add a mobile device to group \"{0}\", download the MeshAgent application and scan this QR code.", EscapeHtml(mesh.name)) + '</div>';
6213 - x += "<table style=width:180px>";
6214 - x += "<tr><td style=text-align:center><a rel=\"noreferrer noopener\" target=_blank href=\"https://play.google.com/store/apps/details?id=com.meshcentral.agent2\"><img style=cursor:pointer src=\"images/google-play-140.png\" width=140 srcset=\"images/google-play-280.png 2x\" /></a></td></tr>";
6215 - x += "<tr><td style=text-align:center><a rel=\"noreferrer noopener\" target=_blank href=\"https://www.amazon.co.uk/gp/product/B097Z4Q7SK/\"><img style=cursor:pointer src=\"images/amazon-appstore-140.png\" width=140 srcset=\"images/amazon-appstore-280.png 2x\" /></a></td></tr>";
6216 - x += "</table>";
6149 + x += '<div id=agins_qrcode style=display:none;min-height:180px><a id=agins_qrimage_a rel="noreferrer noopener" target=_blank><div id=agins_qrimage style=float:right;margin-left:10px;width:180px;height:180px;cursor:pointer></div></a><div>' + format("To add a mobile device to group \"{0}\", download the MeshAgent application and scan this QR code.", EscapeHtml(mesh.name)) + '</div>';
6150 + x += '<table style=width:180px>';
6151 + x += '<tr><td style=text-align:center><a title="' + "Google Play Store" + '"rel="noreferrer noopener" target=_blank href="https://play.google.com/store/apps/details?id=com.meshcentral.agent2"><img style=cursor:pointer src="images/google-play-140.png" width=140 srcset="images/google-play-280.png 2x" /></a></td></tr>';
6152 + x += '<tr><td style=text-align:center><a title="' + "Amazon App Store" + '" rel="noreferrer noopener" target=_blank href="https://www.amazon.co.uk/gp/product/B097Z4Q7SK/"><img style=cursor:pointer src="images/amazon-appstore-140.png" width=140 srcset="images/amazon-appstore-280.png 2x" /></a></td></tr>';
6153 + x += '</table>';
6154 x += addHtmlValue("Android APK", '<a class=text-decoration-underline onclick=downloadFile("meshagents?id=14' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '",null,true) title="' + "APK version of the MeshAgent" + '">' + "APK" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=14&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '")></i>');
6155 x += '</div>'
6156
@@ -6250,7 +6187,7 @@
6187 x += addHtmlValue("Command" + '&nbsp;<i class="fa-regular fa-clipboard" title="' + "Copy agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentIdValue("aginsbincmd")></i>', '<input id=aginsbincmd type=text class="form-control" readonly value=\'wget -O meshagent' + (((features & 0x80000000) != 0) ? ' --no-check-certificate' : '') + ' \"https://' + servername + portStr + domainUrl + 'meshagents?id=' + meshid.split('/')[2].split('$').join('%24').split('@').join('%40') + '\' />', ['col-md-4 d-flex align-items-center', 'col-md-8']);
6188 x += '</div>';
6189
6253 - setModalContent("xxAddAgent", "Add Mesh Agent", x);
6190 + setModalContent('xxAddAgent', "Add Mesh Agent", x);
6191 showModal('xxAddAgentModal', 'idx_dlgOkButton');
6192
6193 // Create the QR code
@@ -6352,67 +6289,6 @@
6289 };
6290 }
6291
6355 - function account_createMesh() {
6356 - // Check if we are disallowed from creating a device group
6357 - if ((userinfo.siteadmin != 0xFFFFFFFF) && ((userinfo.siteadmin & 64) != 0)) {
6358 - setModalContent('xxAddAgent', 'New Device Group', "This account does not have the rights to create a new device group.");
6359 - return false;
6360 - }
6361 -
6362 - // Remind the user to verify the email address
6363 - if ((userinfo.emailVerified !== true) && (serverinfo.emailcheck == true) && (userinfo.siteadmin != 0xFFFFFFFF)) {
6364 - setModalContent('xxAddAgent', 'Account Security', "Unable to access this feature until an email address is verified. This is required for password recovery. Go to the \"My Account\" tab to change and verify an email address.");
6365 - return false;
6366 - }
6367 -
6368 - // Remind the user to add two-factor authentication
6369 - if ((features & 0x00040000) && (count2factoraAuths() == 0)) {
6370 - setModalContent('xxAddAgent', 'Account Security', "Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the \"My Account\" tab and look at the \"Account Security\" section.");
6371 - return false;
6372 - }
6373 -
6374 - // Look for all relay devices
6375 - var relayDevices = [];
6376 - if ((features & 2) == 0) {
6377 - for (var i in nodes) {
6378 - var node = nodes[i];
6379 - if ((node.mtype == 2) && (node.agent != null) && (GetNodeRights(node) == 0xFFFFFFFF)) {
6380 - relayDevices.push(node);
6381 - }
6382 - }
6383 - }
6384 -
6385 - // We are allowed, let's prompt for information
6386 - var x = "Create a new device group using the options below" + '<br /><br />', localGroupType = '';
6387 - x += addHtmlFormFloating("<label for=dp2meshname class=form-label>Name</>", '<input id=dp2meshname maxlength=128 class=form-control onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) />');
6388 - if ((features & 1) == 0) { localGroupType += '<option value=3>' + "Local devices, no agent" + '</option>'; }
6389 - if (((features & 2) == 0) && (relayDevices.length > 0)) { localGroupType += '<option value=103>' + "No agent devices relayed thru agent" + '</option>'; }
6390 - if (features2 & 0x10000) {
6391 - if ((features & 1) == 0) { localGroupType += '<option value=4>' + "IP-KVM / Power device" + '</option>'; }
6392 - if (((features & 2) == 0) && (relayDevices.length > 0)) { localGroupType += '<option value=104>' + "IP-KVM / Power device relayed thru agent" + '</option>'; }
6393 - }
6394 - x += addHtmlFormFloating("<label for=dp2meshtype class=form-label>Type</label>", '<select id=dp2meshtype class=form-select onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) ><option value=2>' + "Manage using a software agent" + '</option><option value=1>' + "Intel&reg; AMT only, no agent" + '</option>' + localGroupType + '</select>');
6395 - if (relayDevices.length > 0) {
6396 - x += '<div id=d2devrelaydiv style=display:none>';
6397 - relayDevices.sort(nameSort);
6398 - var relayDevices2 = [];
6399 - for (var i in relayDevices) { relayDevices2.push('<option value="' + relayDevices[i]._id + '">' + EscapeHtml(relayDevices[i].name) + '</option>'); }
6400 - x += addHtmlFormFloating('<label for=d2devrelay class="form-label">Relay Device</label>', '<select id=d2devrelay onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) class="form-select" >' + relayDevices2.join('') + '</select>');
6401 - x += '</div>';
6402 - }
6403 - x += addHtmlValue('<label for=dp2meshdesc class="form-label">Description</label>', '<div style=width:230px;margin:0;padding:0><textarea id=dp2meshdesc maxlength=1024 style=width:100%;resize:none class="form-control"></textarea></div>');
6404 - x += '<div id=d2ipkvm style=display:none><hr />';
6405 - x += addHtmlFormFloating("<label for=dp2ipkvmmodel class=form-label>Model</label>", '<select id=dp2ipkvmmodel onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) class="form-select" ><option value=1>' + "Raritan Dominion KX III" + '</option><option value=2>' + "Web Power Switch 7" + '</option></select>');
6406 - x += addHtmlFormFloating("<label for=dp2ipkvmhost class=form-label>Hostname</label>", '<input id=dp2ipkvmhost maxlength=128 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) class="form-control" />');
6407 - x += addHtmlFormFloating("<label for=dp2ipkvmuser class=form-label>Username</label>", '<input id=dp2ipkvmuser maxlength=128 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) class="form-control" />');
6408 - x += addHtmlFormFloating("<label for=dp2ipkvmpass class=form-label>Password</label>", '<input id=dp2ipkvmpass type=password maxlength=128 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) class="form-control" />');
6409 - x += '</div>';
6410 -
6411 - // Inject content into the modal
6412 - setModalContent('xxAddAgent', 'New Device Group', x);
6413 - return true;
6414 - }
6415 -
6292 function copyAgentIdValue(id) {
6293 copyTextToClip(Q(id).value);
6294 // Show notification
@@ -6594,7 +6470,7 @@
6470
6471 // Remind the user to add two factor authentication
6472 if ((features & 0x00040000) && (count2factoraAuths() == 0)) {
6597 - setModalContent('xxAddAgent', 'Account Security', "Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the \"My Account\" tab and look at the \"Account Security\" section.");
6473 + setModalContent('xxAddAgent', "Account Security", "Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the \"My Account\" tab and look at the \"Account Security\" section.");
6474 showModal('xxAddAgentModal', 'idx_dlgOkButton');
6475 return;
6476 }
@@ -6631,7 +6507,7 @@
6507 var x = "Select an operation to perform on all selected devices. Actions will be performed only with proper rights." + '<br /><br />';
6508 x += addHtmlFormFloating("Operation", '<select id=d2groupop class="form-select">' + addedOptionsStr + '</select>');
6509
6634 - setModalContent('xxAddAgent', 'Group Action', x);
6510 + setModalContent('xxAddAgent', "Group Action", x);
6511 showModal('xxAddAgentModal', 'idx_dlgOkButton', groupActionFunctionEx);
6512 }
6513
@@ -6668,7 +6544,7 @@
6544 if (y != '') { x += '<div style=padding:8px>' + y + '</div>'; } else { x += '<br />'; }
6545 }
6546 x += '<label><input id=d2check type=checkbox class="form-check-input me-2" onchange=d2groupActionFunctionDelCheck() />' + "Confirm" + '</label>';
6671 - setModalContent('xxAddAgent', 'Delete Devices', x);
6547 + setModalContent('xxAddAgent', "Delete Devices", x);
6548 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionDelExec());
6549 QE('idx_dlgOkButton', false);
6550 } else if (op == 102) {
@@ -6699,11 +6575,11 @@
6575 for (var i in allTags) { y += '<span style=padding:4px;background-color:#BBB;border-radius:3px;cursor:pointer onclick=showEditNodeValueDialogAddTag("' + encodeURIComponentEx(allTags[i]) + '")>' + EscapeHtml(allTags[i]) + '</span> '; }
6576 x += '<div style=margin-top:8px;width:370px;line-height:26px;max-height:160px;overflow-y:auto>' + y + '</div>';
6577 }
6702 - setModalContent('xxAddAgent', 'Edit Device Tags', x);
6578 + setModalContent('xxAddAgent', "Edit Device Tags", x);
6579 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionTagsExec());
6580 } else if (op == 108) {
6581 // Device notification
6706 - var x = "<div style=margin-bottom:4px>Perform batch device notification</div>";
6582 + var x = '<div style=margin-bottom:4px>'+ "Perform batch device notification" + '</div>';
6583 x += '<select id=d2deviceop class="form-select-sm me-2" style=width:100%;margin-bottom:4px><option value=2>' + "Toast Notification" + '</option><option value=1>' + "Message Box" + '</option><option value=3>' + "Alert Box" + '</option></select>';
6584 x += '<input id=dp2notifyTitle maxlength=256 placeholder="' + "Title" + '" style=width:100%;box-sizing:border-box;margin-bottom:4px />';
6585 x += '<textarea id=d2notifyMsg style=width:100%;height:140px;resize:none;overflow-y:scroll;box-sizing:border-box;margin-bottom:4px></textarea>';
@@ -6715,7 +6591,7 @@
6591 x += '<option value=60>' + "Show for 60 minutes" + '</option>';
6592 x += '<option value=0>' + "Show message until dismissed by user" + '</option>';
6593 x += '</select>';
6718 - setModalContent('xxAddAgent', 'Device Notification', x);
6594 + setModalContent('xxAddAgent', "Device Notification", x);
6595 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionNotifyExec());
6596 Q('d2notifyMsg').focus();
6597 } else if (op == 109) {
@@ -6730,23 +6606,23 @@
6606 if (linuxtype) { x += addHtmlFormFloating("Linux Path", '<input type=text class="form-control" onchange="d2batchUploadValidate()" onkeyup="d2batchUploadValidate()" name=linuxpath id=d2linuxuploadpath placeholder="/tmp" value="" />'); }
6607 x += '<br /><label><input type=checkbox class="form-check-input me-2" name=createFolder />' + "Create folder if it does not exists?" + '</label><br />';
6608 x += '<label><input type=checkbox class="form-check-input me-2" name=overwriteFiles />' + "Overwrite if file exists?" + '</label></form>';
6733 - setModalContent('xxAddAgent', 'Batch File Upload', x);
6609 + setModalContent('xxAddAgent', "Batch File Upload", x);
6610 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2batchUploadValidateOk());
6611 d2batchUploadValidate();
6612 } else if (op == 110) {
6613 // Force agent update
6614 var x = "Force agent update on selected devices?" + '<br /><br />';
6739 - setModalContent('xxAddAgent', 'Force agent update', x);
6615 + setModalContent('xxAddAgent', "Force agent update", x);
6616 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionAgentUpdateExec());
6617 } else if (op == 111) {
6618 // Clear agent core
6619 var x = "Clear agent core on selected devices?" + '<br /><br />';
6744 - setModalContent('xxAddAgent', 'Clear agent core', x);
6620 + setModalContent('xxAddAgent', "Clear agent core", x);
6621 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionAgentClearCoreExec());
6622 } else if (op == 112) {
6623 // Upload default server core
6624 var x = "Upload default server core on selected devices?" + '<br /><br />';
6749 - setModalContent('xxAddAgent', 'Upload default server core', x);
6625 + setModalContent('xxAddAgent', "Upload default server core", x);
6626 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => d2groupActionFunctionAgentDefaultCodeExec());
6627 } else {
6628 // Power operation
@@ -6808,7 +6684,7 @@
6684 x += addHtmlValue("JSON Format", '<a href=# style=cursor:pointer onclick=\'return p2downloadDeviceInfoJSON()\'>' + "devicelist.json" + '</a>');
6685 if (intelamtpresent) { x += addHtmlValue("Intel&reg; AMT JSON", '<a href=# style=cursor:pointer onclick=\'return p2downloadAmtInfoJSON()\'>' + "computerlist.json" + '</a>'); }
6686 x += '<div style=margin-top:8px><label><input type=checkbox class="form-check-input me-2" id=d2DevInfoDetailsCheck />' + "Include device details" + '</label></div>';
6811 - setModalContent('xxAddAgent', 'Device Information Export', x);
6687 + setModalContent('xxAddAgent', "Device Information Export", x);
6688 showModal('xxAddAgentModal', 'idx_dlgOkButton');
6689 }
6690
@@ -6933,7 +6809,7 @@
6809 x += '<div id=d2runfile style=display:none><input id=d2runfileex class="form-control" type=file onchange=d2runCommandValidate() id=d2localFile name=files onchange=d2runCommandValidate() /></div>';
6810 if (userinfo.siteadmin & 8) { x += '<div id=d2runsfile style=display:none><div id=d2serveraction valign=bottom><input type=button id=p2FolderUp disabled="disabled" onclick=d3folderup() value="Up" />&nbsp;<span id=p2CurrentFolder></span></div><div id=d2serverfiles></div></div>'; }
6811 }
6936 - setModalContent('xxAddAgent', 'Run Commands', x);
6812 + setModalContent('xxAddAgent', "Run Commands", x);
6813 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
6814 d2groupActionFunctionRunCommands(3, options);
6815 });
@@ -7364,7 +7240,7 @@
7240 function cmaltportaction(action) {
7241 if (xxdialogMode) return;
7242 var x = "RDP remote connection port:" + '<br /><br /><input type=text placeholder="3389" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10rdpport type=text>';
7367 - setModalContent('xxAddAgent', 'RDP Connection', x);
7243 + setModalContent('xxAddAgent', "RDP Connection", x);
7244 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
7245 // Save the new RDP port to the server
7246 var rdpport = ((Q('d10rdpport').value.length > 0) ? parseInt(Q('d10rdpport').value) : 3389);
@@ -7378,7 +7254,7 @@
7254 function cmsshportaction(action) {
7255 if (xxdialogMode) return;
7256 var x = "SSH remote connection port:" + '<br /><br /><input type=text placeholder="22" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10sshport type=text>';
7381 - setModalContent('xxAddAgent', 'SSH Connection', x);
7257 + setModalContent('xxAddAgent', "SSH Connection", x);
7258 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
7259 // Save the new SSH port to the server
7260 var sshport = ((Q('d10sshport').value.length > 0) ? parseInt(Q('d10sshport').value) : 22);
@@ -7392,7 +7268,7 @@
7268 function cmrfbportaction(action) {
7269 if (xxdialogMode) return;
7270 var x = "VNC remote connection port:" + '<br /><br /><input type=text placeholder="5900" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10rfbport type=text>';
7395 - setModalContent('xxAddAgent', 'VNC Connection', x);
7271 + setModalContent('xxAddAgent', "VNC Connection", x);
7272 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
7273 // Save the new RFB port to the server
7274 var rfbport = ((Q('d10rfbport').value.length > 0) ? parseInt(Q('d10rfbport').value) : 3389);
@@ -7406,7 +7282,7 @@
7282 function cmhttpportaction(action) {
7283 if (xxdialogMode) return;
7284 var x = "HTTP remote connection port:" + '<br /><br /><input type=text placeholder="80" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10httpport type=text>';
7409 - setModalContent('xxAddAgent', 'HTTP Connection', x);
7285 + setModalContent('xxAddAgent', "HTTP Connection", x);
7286 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
7287 // Save the new HTTP port to the server
7288 var httpport = ((Q('d10httpport').value.length > 0) ? parseInt(Q('d10httpport').value) : 80);
@@ -7420,7 +7296,7 @@
7296 function cmhttpsportaction(action) {
7297 if (xxdialogMode) return;
7298 var x = "HTTPS remote connection port:" + '<br /><br /><input type=text placeholder="443" inputmode="numeric" pattern="[0-9]*" onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" maxlength=5 id=d10httpsport type=text>';
7423 - setModalContent('xxAddAgent', 'HTTPS Connection', x);
7299 + setModalContent('xxAddAgent', "HTTPS Connection", x);
7300 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
7301 // Save the new HTTP port to the server
7302 var httpsport = ((Q('d10httpsport').value.length > 0) ? parseInt(Q('d10httpsport').value) : 443);
@@ -7436,7 +7312,7 @@
7312 var filetreexx = p13sort_files(p13filetree.dir);
7313 var file = filetreexx[parseInt(contextelement.attributes.fileindex.nodeValue)];
7314 if (action == 1) { // Rename the file
7439 - setModalContent('xxAddAgent', 'Rename', '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="' + file.n + '" />');
7315 + setModalContent('xxAddAgent', "Rename", '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="' + file.n + '" />');
7316 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13renamefileEx(3, { action: 'rename', path: p13filetreelocation.join('/'), oldname: file.n }));
7317 focusTextBox('p13renameinput');
7318 p13fileNameCheck();
@@ -7446,7 +7322,7 @@
7322 } else { messagebox("File Editor", "Only files less than 200k can be edited."); }
7323 } else if (action == 3) {
7324 // Delete the file
7449 - setModalContent('xxAddAgent', 'Delete', "Delete item?");
7325 + setModalContent('xxAddAgent', "Delete", "Delete item?");
7326 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13deletefileCm(3, file));
7327 }
7328 }
@@ -7941,7 +7817,7 @@
7817 x += '<div class=noselect id=' + nodes[i]._id + '-rowid onclick=selectNodeToPlace(event,\'' + nodes[i]._id + '\') style=background-color:lightgray;margin-bottom:4px;border-radius:2px><input name=PlaceMapDeviceCheckbox id=' + nodes[i]._id + '-checkid type=checkbox class="form-check-input me-2" style=width:16px;display:inline />';
7818 x += '<div class=j' + nodes[i].icon + ' style=width:16px;height:16px;margin-top:2px;margin-right:4px;display:inline-block></div><div style=width:16px;display:inline>' + nodes[i].name + '</div></div>';
7819 }
7944 - setModalContent('xxAddAgent', 'Select a node to place', x + '</div>');
7820 + setModalContent('xxAddAgent', "Select a node to place", x + '</div>');
7821 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => placeNodeEx(3, coords));
7822 onPlaceNodeInputChange();
7823 }
@@ -8161,14 +8037,14 @@
8037 if (event && ((event.which == 3) || (event.button == 2))) return; // ignore right click events here as handled elsewhere
8038 // Remind the user to verify the email address
8039 if ((userinfo.emailVerified !== true) && (serverinfo.emailcheck == true) && (userinfo.siteadmin != 0xFFFFFFFF)) {
8164 - setModalContent('xxAddAgent', 'Account Security', "Unable to access this feature until a email address is verified. This is required for password recovery. Go to the \"My Account\" tab to change and verify an email address.");
8040 + setModalContent('xxAddAgent', "Account Security", "Unable to access this feature until a email address is verified. This is required for password recovery. Go to the \"My Account\" tab to change and verify an email address.");
8041 showModal('xxAddAgentModal', 'idx_dlgOkButton');
8042 return;
8043 }
8044
8045 // Remind the user to add two factor authentication
8046 if ((features & 0x00040000) && (count2factoraAuths() == 0)) {
8171 - setModalContent('xxAddAgent', 'Account Security', "Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the \"My Account\" tab and look at the \"Account Security\" section.");
8047 + setModalContent('xxAddAgent', "Account Security", "Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the \"My Account\" tab and look at the \"Account Security\" section.");
8048 showModal('xxAddAgentModal', 'idx_dlgOkButton');
8049 return;
8050 }
@@ -8739,14 +8615,14 @@
8615 // Show user device permissions
8616 x = '';
8617 if (meshrights & 7) {
8742 - x += '<button class="btn btn-primary btn-sm me-2" onclick="return p20showAddMeshUserDialog(5)" style=cursor:pointer;margin-right:10px><i class="fa-solid fa-plus-circle"></i> ' + "Add User" + '</button>';
8618 + x += '<button class="btn btn-primary btn-sm me-2" onclick="return p20showAddMeshUserDialog(5)" style=cursor:pointer;margin-right:10px><i class="fa-solid fa-circle-plus"></i> ' + "Add User" + '</button>';
8619 if (usergroups != null) {
8620 var userGroupCount = 0, newUserGroup = false;
8621 for (var i in usergroups) {
8622 if ((usergroups[i].membershipType != null) || (usergroups[i]._id.split('/')[1] != nodeid.split('/')[1])) continue;
8623 userGroupCount++; if ((currentNode.links == null) || (currentNode.links[i] == null)) { newUserGroup = true; }
8624 }
8749 - if ((userGroupCount > 0) && (newUserGroup)) { x += '<a href=# onclick="return p20showAddMeshUserDialog(6)" style=cursor:pointer;margin-right:10px><i class="fa-solid fa-plus-circle"></i> ' + "Add User Group" + '</a>'; }
8625 + if ((userGroupCount > 0) && (newUserGroup)) { x += '<a href=# onclick="return p20showAddMeshUserDialog(6)" style=cursor:pointer;margin-right:10px><i class="fa-solid fa-circle-plus"></i> ' + "Add User Group" + '</a>'; }
8626 }
8627 }
8628
@@ -8841,11 +8717,11 @@
8717 function setIpPduState(op) {
8718 if (op == 0) {
8719 // Turn off
8844 - setModalContent('xxAddAgent', 'Power Operation', 'Perform power off?');
8720 + setModalContent('xxAddAgent', "Power Operation", 'Perform power off?');
8721 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: 2 }); });
8722 } else {
8723 // Turn on
8848 - setModalContent('xxAddAgent', 'Power Operation', 'Perform power on?');
8724 + setModalContent('xxAddAgent', "Power Operation", 'Perform power on?');
8725 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'wakedevices', nodeids: [currentNode._id] }); });
8726 }
8727 }
@@ -8870,7 +8746,7 @@
8746 x += '<div><label><input id=p20emsgDeviceDisconnect type=checkbox class="form-check-input me-2" />' + "Device disconnections" + '</label></div>';
8747 x += '<div><label><input id=p20emsgDeviceHelp type=checkbox class="form-check-input me-2" />' + "Help requests" + '</label></div>';
8748 }
8873 - setModalContent('xxAddAgent', 'Notification Settings', x);
8749 + setModalContent('xxAddAgent', "Notification Settings", x);
8750 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p20editDeviceNotifyEx(3, fx));
8751 Q('p20notifyIntelDeviceConnect').checked = (devNotify & 2);
8752 Q('p20notifyIntelDeviceDisconnect').checked = (devNotify & 4);
@@ -8974,7 +8850,7 @@
8850
8851 function writeDeviceEvent(nodeid) {
8852 if (xxdialogMode) return;
8977 - setModalContent('xxAddAgent', 'Add Device Event', '<textarea id=d2devEvent style=width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>' + "This will add an entry to this device's event log." + '<span>');
8853 + setModalContent('xxAddAgent', "Add Device Event", '<textarea id=d2devEvent style=width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>' + "This will add an entry to this device's event log." + '<span>');
8854 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
8855 writeDeviceEventEx(3, nodeid);
8856 });
@@ -8988,8 +8864,8 @@
8864 if (noteid == null) { noteid = encodeURIComponentEx('p' + userinfo._id); }
8865 var x = '<textarea id=d2devNotes ro=' + readonly + ' noteid=' + noteid + ' readonly class="form-control" style=width:100%;height:200px;resize:none;overflow-y:scroll></textarea>';
8866 if (noteid.startsWith('node%2F%2F')) { x += '<span style=font-size:10px>' + "Device group notes can be viewed and changed by other device group administrators." + '<span>'; }
8991 -
8992 - setModalContent('xxAddAgent', 'Notes', x);
8867 + if (showNotesPanel) { x += ' <span style=font-size:10px><a target=_blank href=\'https://www.markdownguide.org/cheat-sheet/\'>' + "Markdown syntax supported" + '</a></span>'; }
8868 + setModalContent('xxAddAgent', "Notes", x);
8869 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
8870 showNotesEx(2, noteid);
8871 });
@@ -9051,7 +8927,7 @@
8927 function deviceUrlFunction() {
8928 if (xxdialogMode) return;
8929 xxdialogButtons = 3;
9054 - setModalContent('xxAddAgent', 'Open Page on Device', '<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll onkeyup=deviceUrlFunctionValidate() onchange=deviceUrlFunctionValidate()></input>');
8930 + setModalContent('xxAddAgent', "Open Page on Device", '<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll onkeyup=deviceUrlFunctionValidate() onchange=deviceUrlFunctionValidate()></input>');
8931 showModal('xxAddAgentModal', 'idx_dlgOkButton', deviceUrlFunctionEx);
8932
8933 Q('d2devurl').focus();
@@ -9079,7 +8955,7 @@
8955 x += '<option value=0>' + "Show message until dismissed by user" + '</option>';
8956 x += '</select>';
8957 xxdialogButtons = 3;
9082 - setModalContent('xxAddAgent', 'Device Message', x);
8958 + setModalContent('xxAddAgent', "Device Message", x);
8959 showModal('xxAddAgentModal', 'idx_dlgOkButton', deviceMessageFunctionEx);
8960 Q('d2devMessage').focus();
8961 }
@@ -9108,7 +8984,7 @@
8984 // Called to lock or unlock remote desktop user input
8985 function deskInputLockFunction(value) {
8986 if (xxdialogMode || desktop == null || desktop.State != 3) return;
9111 - setModalContent('xxAddAgent', 'Remote Input Lock', (value == 1) ? "Lock remote user's mouse and keyboard?" : "Unlock remote user's mouse and keyboard?");
8987 + setModalContent('xxAddAgent', "Remote Input Lock", (value == 1) ? "Lock remote user's mouse and keyboard?" : "Unlock remote user's mouse and keyboard?");
8988 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { try { desktop.m.SendRemoteInputLock(value); } catch (ex) { } });
8989 }
8990
@@ -9142,7 +9018,7 @@
9018 x += '<option value=0>' + "Show message until dismissed by user" + '</option>';
9019 x += '</select>';
9020 xxdialogButtons = 3;
9145 - setModalContent('xxAddAgent', 'Device Notification', x);
9021 + setModalContent('xxAddAgent', "Device Notification", x);
9022 showModal('xxAddAgentModal', 'idx_dlgOkButton', deviceToastFunctionEx);
9023 Q('d2notifyMsg').focus();
9024 }
@@ -9165,7 +9041,7 @@
9041 // Lock desktop
9042 function deviceLockFunction() {
9043 if ((xxdialogMode == null) && (desktop != null) && (desktop.contype == 1)) {
9168 - setModalContent('xxAddAgent', 'Lock Desktop', "Lock user desktop?");
9044 + setModalContent('xxAddAgent', "Lock Desktop", "Lock user desktop?");
9045 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { if ((desktop != null) && (desktop.contype == 1)) { desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"lock"}'); } });
9046 }
9047 }
@@ -9227,7 +9103,7 @@
9103 x += '<div id=d2httpsPortSelector>' + addHtmlFormFloating("Port", '<input id=d2httpsPort class="form-control" value=443 onkeyup=showShareDeviceValidate()></input>') + '</div>';
9104
9105 xxdialogButtons = 3;
9230 - setModalContent('xxAddAgent', 'Share Device', x);
9106 + setModalContent('xxAddAgent', "Share Device", x);
9107 showModal('xxAddAgentModal', 'idx_dlgOkButton', showShareDeviceEx);
9108
9109 showShareDeviceValidate();
@@ -9324,7 +9200,7 @@
9200 x += addHtmlFormFloating("Operation", y);
9201 if (count == 0) { x = "No actions currently available for this device."; }
9202 xxdialogButtons = (count == 0) ? 2 : 3; xxdialogTag = x + z;
9327 - setModalContent('xxAddAgent', 'Device Action', x);
9203 + setModalContent('xxAddAgent', "Device Action", x);
9204 showModal('xxAddAgentModal', 'idx_dlgOkButton', deviceActionFunctionEx);
9205 if (count > 0) { deviceActionFunctionValidate(); }
9206 }
@@ -9360,7 +9236,7 @@
9236 }
9237 x += '<select id=d2cmduser style=width:100%;margin-bottom:4px><option value=0>' + "Run as agent" + '</option><option value=1>' + "Run as user, agent if no user" + '</option><option value=2>' + "Must run as user" + '</option></select>';
9238 x += '<textarea id=d2runcmd style=width:100%;height:200px;resize:none;overflow-y:scroll></textarea>';
9363 - setModalContent('xxAddAgent', 'Run Commands', x);
9239 + setModalContent('xxAddAgent', "Run Commands", x);
9240 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => deviceRunCmdsFunctionEx());
9241 Q('d2runcmd').focus();
9242 //QE('idx_dlgOkButton', true);
@@ -9371,23 +9247,23 @@
9247 Q('d3auth').value = authCookie;
9248 Q('d3filter').value = '.efi';
9249 Q('d3attrib').value = currentNode._id;
9374 - setModalContent('xxAddAgent', 'Intel&reg; AMT One Click Recovery', x);
9250 + setModalContent('xxAddAgent', "Intel&reg; AMT One Click Recovery", x);
9251 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => deviceActionOneClickRecovery());
9252 d3init();
9253 } else if (op == 302) { // Intel AMT power on
9378 - setModalContent('xxAddAgent', 'Intel&reg; AMT Power Operation', "Perform Intel&reg; AMT power on?");
9254 + setModalContent('xxAddAgent', "Intel&reg; AMT Power Operation", "Perform Intel&reg; AMT power on?");
9255 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: parseInt(op) }); });
9256 } else if (op == 308) { // Intel AMT power off
9381 - setModalContent('xxAddAgent', 'Intel&reg; AMT Power Operation', "Perform Intel&reg; AMT power off?<br><br><b>NOTE: If there is an active AMT session, then power off command will be rejected, so you must disconnect from the AMT session first!</b>");
9257 + setModalContent('xxAddAgent', "Intel&reg; AMT Power Operation", "Perform Intel&reg; AMT power off?<br><br><b>NOTE: If there is an active AMT session, then power off command will be rejected, so you must disconnect from the AMT session first!</b>");
9258 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: parseInt(op) }); });
9259 } else if (op == 310) { // Intel AMT reset
9384 - setModalContent('xxAddAgent', 'Intel&reg; AMT Power Operation', "Perform Intel&reg; AMT reset?");
9260 + setModalContent('xxAddAgent', "Intel&reg; AMT Power Operation", "Perform Intel&reg; AMT reset?");
9261 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: parseInt(op) }); });
9262 } else if (op == 311) { // Intel AMT power on to BIOS
9263 setModalContent('xxAddAgent', "Intel&reg; AMT Power Operation", "Perform Intel&reg; AMT power on to BIOS?");
9264 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: parseInt(op) + ((xxcurrentView == 12) ? 2 : 0) }); });
9265 } else if (op == 312) { // Intel AMT reset to BIOS
9390 - setModalContent('xxAddAgent', 'Intel&reg; AMT Power Operation', "Perform Intel&reg; AMT reset to BIOS?");
9266 + setModalContent('xxAddAgent', "Intel&reg; AMT Power Operation", "Perform Intel&reg; AMT reset to BIOS?");
9267 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'poweraction', nodeids: [currentNode._id], actiontype: parseInt(op) + ((xxcurrentView == 12) ? 2 : 0) }); });
9268 } else if ((op == 400) || (op == 401)) {
9269 // Flash / vibrate
@@ -9518,7 +9394,7 @@
9394 // Only display the TLS setting if the Intel AMT manager is not running on the server. With the manager TLS is auto-detected.
9395 if ((features2 & 1) == 0) { x += addHtmlFormFloating("Security", '<select id=dp10tls class="form-select"><option value=0>' + "No TLS security" + '</option><option value=1>' + "TLS security required" + '</option></select>'); }
9396 if ((node.intelamt.user != null) && (node.intelamt.user != '')) { buttons = 7; }
9521 - setModalContent('xxAddAgent', 'Edit Intel&reg; AMT credentials', x);
9397 + setModalContent('xxAddAgent', "Edit Intel&reg; AMT credentials", x);
9398 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => editDeviceAmtSettingsEx(buttons, { node: node, func: func, arg: arg }));
9399 if ((node.intelamt.user != null) && (node.intelamt.user != '')) { Q('dp10username').value = node.intelamt.user; } else { Q('dp10username').value = 'admin'; }
9400 if ((features2 & 1) == 0) { Q('dp10tls').value = node.intelamt.tls; }
@@ -9550,7 +9426,7 @@
9426 if (xxdialogMode) return false;
9427 var x = addHtmlFormFloating("Topic", '<input id=dp2topic class="form-control" maxlength=64 onchange=p10validateSendMqttMsgDialog() onkeyup=p10validateSendMqttMsgDialog(event,1) />');
9428 x += addHtmlFormFloating("Message", '<textarea id=dp2msg class="form-control" maxlength=4096 style=width:100%;height:150px;resize:none onchange=p10validateSendMqttMsgDialog() onkeyup=p10validateSendMqttMsgDialog(event,1)></textarea>');
9553 - setModalContent('xxAddAgent', 'Send MQTT message', x);
9429 + setModalContent('xxAddAgent', "Send MQTT message", x);
9430 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p10showSendMqttMsgDialogEx(3, nodeids));
9431 p10validateSendMqttMsgDialog();
9432 Q('dp2topic').focus();
@@ -9573,7 +9449,7 @@
9449 x += '<br /><br />';
9450 if (nodeids.length > 1) { x += "This will not remove the devices from the server, but the devices will not longer be able to connect to the server. All remote access to the devices will be lost. The devices must be connected for this command to work."; } else { x += "This will not remove this device from the server, but the device will not longer be able to connect to the server. All remote access to the device will be lost. The device must be connect for this command to work."; }
9451 x += '<br /><br /><label style=color:red><input id=p10check type=checkbox class="form-check-input me-2" onchange=p10validateDeleteNodeDialog() />' + "Confirm" + '</label>';
9576 - setModalContent('xxAddAgent', 'Uninstall agent', x);
9452 + setModalContent('xxAddAgent', "Uninstall agent", x);
9453 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p10showSendUninstallAgentDialogEx(3, nodeids));
9454
9455 p10validateSendUninstallAgentDialog();
@@ -9598,10 +9474,10 @@
9474 if (count > 0) {
9475 var x = (nodeids.length == 1) ? ("Select a new group for this device" + '<br /><br />') : ("Select a new group for selected devices" + '<br /><br />');
9476 x += addHtmlFormFloating("New Device Group", y);
9601 - setModalContent('xxAddAgent', 'Change Group', x);
9477 + setModalContent('xxAddAgent', "Change Group", x);
9478 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p10showChangeGroupDialogEx(3, nodeids));
9479 } else {
9604 - setModalContent('xxAddAgent', 'Change Group', 'No other device group of same type exists.');
9480 + setModalContent('xxAddAgent', "Change Group", 'No other device group of same type exists.');
9481 showModal('xxAddAgentModal', 'idx_dlgOkButton');
9482 }
9483 return false;
@@ -9616,7 +9492,7 @@
9492 if (xxdialogMode) return false;
9493 var x = format("Are you sure you want to delete node {0}?", EscapeHtml(currentNode.name)) + '<br /><br /><label><input id=p10check type=checkbox class="form-check-input me-2" onchange=p10validateDeleteNodeDialog() />' + "Confirm" + '</label>';
9494 xxdialogButtons = 3; xxdialogTag = nodeid;
9619 - setModalContent('xxAddAgent', 'Delete Node', x);
9495 + setModalContent('xxAddAgent', "Delete Node", x);
9496 showModal('xxAddAgentModal', 'idx_dlgOkButton', p10showDeleteNodeDialogEx);
9497 p10validateDeleteNodeDialog();
9498 return false;
@@ -9726,7 +9602,7 @@
9602 //var x = '<div><a href="https://www.google.com/maps/preview/@' + lat + ',' + lng + ',12z" rel="noreferrer noopener" target=_blank>Open in Google maps</a></div>';
9603 var x = '<div id=d2map style=width:100%;height:300px></div>';
9604 xxdialogTag = '@xxmap';
9729 - setModalContent('xxAddAgent', 'Device Location', x);
9605 + setModalContent('xxAddAgent', "Device Location", x);
9606 showModal('xxAddAgentModal', 'idx_dlgOkButton');
9607 return false;
9608 }
@@ -9735,7 +9611,7 @@
9611 function p10showNodeNetInfoDialog() {
9612 if (xxdialogMode) return false;
9613 xxdialogButtons = 1; xxdialogTag = 'if' + currentNode._id;
9738 - setModalContent('xxAddAgent', 'Network Interfaces', '<div id=d2netinfo>' + "Loading..." + '</div>');
9614 + setModalContent('xxAddAgent', "Network Interfaces", '<div id=d2netinfo>' + "Loading..." + '</div>');
9615 showModal('xxAddAgentModal', 'idx_dlgOkButton');
9616
9617 meshserver.send({ action: 'getnetworkinfo', nodeid: currentNode._id });
@@ -9802,7 +9678,7 @@
9678 if (mode == 1) { x += addHtmlValue("Action File", '<a onclick=downloadFile("meshagents?meshaction=route&nodeid=' + nodeid + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") class=link-primary>' + "MeshAction (.txt)" + '</a>'); }
9679 x += '</div>';
9680 xxdialogButtons = 9; xxdialogMode = 'fileDownload';
9805 - setModalContent('xxAddAgent', 'Download MeshCmd', x);
9681 + setModalContent('xxAddAgent', "Download MeshCmd", x);
9682 showModal('xxAddAgentModal', 'idx_dlgOkButton');
9683 meshCmdOsClick();
9684 }
@@ -9838,7 +9714,7 @@
9714 x += '<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i7 onclick=p10setIcon(7) onkeypress="if (event.key==\'Enter\') p10setIcon(7)"></div>';
9715 x += '<div tabindex=0 style="display:inline-block;margin:0 10px 0 10px" class=i8 onclick=p10setIcon(8) onkeypress="if (event.key==\'Enter\') p10setIcon(8)"></div>';
9716 x += '<br /><br /></div>';
9841 - setModalContent('xxAddAgent', 'Icon Selection', x);
9717 + setModalContent('xxAddAgent', "Icon Selection", x);
9718 showModal('xxAddAgentModal', 'idx_dlgOkButton');
9719 QV('id_dialogclose', true);
9720 }
@@ -9849,12 +9725,12 @@
9725 }
9726
9727 function showClearSshDialog() {
9852 - setModalContent('xxAddAgent', 'Edit Device', 'Clear SSH credentials?');
9728 + setModalContent('xxAddAgent', "Edit Device", 'Clear SSH credentials?');
9729 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showClearSshDialogEx(3));
9730 }
9731 function showClearSshDialogEx(button, mode) { meshserver.send({ action: 'changedevice', nodeid: currentNode._id, ssh: 0 }); }
9732 function showClearRdpDialog() {
9857 - setModalContent('xxAddAgent', 'Edit Device', 'Clear RDP credentials?');
9733 + setModalContent('xxAddAgent', "Edit Device", 'Clear RDP credentials?');
9734 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showClearRdpDialogEx(3));
9735 }
9736 function showClearRdpDialogEx(button, mode) { meshserver.send({ action: 'changedevice', nodeid: currentNode._id, rdp: 0 }); }
@@ -9884,7 +9760,7 @@
9760 x += y + '</select>'
9761 setModalContent('xxAddAgent', "Edit Tags", x);
9762 $('#dp10devicevalue').select2({
9887 - theme: "bootstrap-5",
9763 + theme: 'bootstrap-5',
9764 width: $( this ).data( 'width' ) ? $( this ).data( 'width' ) : $( this ).hasClass( 'w-100' ) ? '100%' : 'style',
9765 placeholder: showEditNodeValueDialog_modes3[mode],
9766 closeOnSelect: false,
@@ -9894,7 +9770,7 @@
9770 });
9771 } else {
9772 x = addHtmlFormFloating(showEditNodeValueDialog_modes[mode], '<input id=dp10devicevalue class="form-control" maxlength=' + showEditNodeValueDialog_modes4[mode] + ' placeholder="' + showEditNodeValueDialog_modes3[mode] + '" onchange=p10editdevicevalueValidate(' + mode + ',event) onkeyup=p10editdevicevalueValidate(' + mode + ',event) class=form-control/>');
9897 - setModalContent('xxAddAgent', 'Edit Device', x);
9773 + setModalContent('xxAddAgent', "Edit Device", x);
9774 if (Array.isArray(v)) { v = v.join(', '); }
9775 Q('dp10devicevalue').value = v;
9776 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
@@ -10298,7 +10174,7 @@
10174 x += addHtmlFormFloating("Alt Shell", '<input type=text id=d2altshell class="form-control" maxlength=2048 />');
10175 x += addHtmlFormFloating("Working Dir", '<input type=text id=d2workdir class="form-control" maxlength=2048 />');
10176 x += MoreEnd();
10301 - setModalContent('xxAddAgent', 'RDP Credentials', x);
10177 + setModalContent('xxAddAgent', "RDP Credentials", x);
10178 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => askRdpCredentialsEx());
10179 }
10180
@@ -10366,7 +10242,7 @@
10242 }
10243 }
10244 xxdialogTag = 'sessionMetadata' + cid;
10369 - setModalContent('xxAddAgent', 'Session Information', x);
10245 + setModalContent('xxAddAgent', "Session Information", x);
10246 showModal('xxAddAgentModal', 'idx_dlgOkButton');
10247 }
10248 }
@@ -10520,7 +10396,7 @@
10396 }
10397
10398 xxdialogButtons = 3;
10523 - setModalContent('xxAddAgent', 'Remote Desktop Settings', 7);
10399 + setModalContent('xxAddAgent', "Remote Desktop Settings", 7);
10400 showModal('xxAddAgentModal', 'idx_dlgOkButton', showDesktopSettingsChanged);
10401 }
10402
@@ -10840,7 +10716,7 @@
10716 for (var i = 0; i < 26; i++) { x += '<option value=' + (i + 65) + '>' + String.fromCharCode(i + 65) + '</option>'; }
10717 x += '</select> <input type=button value=' + "Add" + ' onclick=addDeskCustomizeKey() /></div>';
10718 x += '<div style=width:100%;padding:2px;text-align:center><input type=button value="' + "Restore Default Keyboard Shortcuts" + '" onclick=restoreDeskCustomizeKey() /></div>';
10843 - setModalContent('xxAddAgent', 'Keyboard Shortcuts Customization', x);
10719 + setModalContent('xxAddAgent', "Keyboard Shortcuts Customization", x);
10720 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => deskCustomizeKeysEx());
10721 deskUpdateShortcutList();
10722 }
@@ -10909,7 +10785,7 @@
10785 x += addHtmlFormFloating("Value", '<input type=text id=d2shortcutvalue class="form-control" maxlength=256 autocomplete=off onkeyup=deskCustomizeStringsUpdate(event) />');
10786 x += addHtmlFormFloating('', '<input id=d2addbutton type=button value=' + "Add" + ' onclick=addDeskCustomizeString() class="form-control" />');
10787 x + '</div>';
10912 - setModalContent('xxAddAgent', 'Keyboard Strings Customization', x);
10788 + setModalContent('xxAddAgent', "Keyboard Strings Customization", x);
10789 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => deskCustomizeStringsEx());
10790 deskUpdateStringsList();
10791 deskCustomizeStringsUpdate();
@@ -11063,7 +10939,7 @@
10939 Q('DeskType').blur();
10940 var x = '<div>' + "Enter text and click OK to remotely type it. Make sure to place the remote cursor at the correct position before proceeding." + '<div>';
10941 x += '<textarea id=d2typeText style="margin-top:5px;width:100%;height:184px;resize:none" maxlength=2000>' + (text ? EscapeHtml(text) : '') + '</textarea>';
11066 - setModalContent('xxAddAgent', 'Remote Keyboard Entry', x);
10942 + setModalContent('xxAddAgent', "Remote Keyboard Entry", x);
10943 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showDeskTypeEx());
10944 Q('d2typeText').focus();
10945 }
@@ -11127,7 +11003,7 @@
11003 x += '<textarea id=d2clipText style="width:100%;height:184px;resize:none" maxlength=65535></textarea>';
11004 x += '<input type=button value="Close" style=width:80px;float:right onclick=dialogclose(0)><div style=height:26px;margin-top:3px><span id=linuxClipWarn style=display:none>' + "Remote clipboard is valid for 60 seconds." + '</span>&nbsp;</div><div></div>';
11005 xxdialogTag = 'clipboard';
11130 - setModalContent('xxAddAgent', 'Remote Clipboard', x);
11006 + setModalContent('xxAddAgent', "Remote Clipboard", x);
11007 showModal('xxAddAgentModal', 'idx_dlgOkButton');
11008 Q('d2clipText').focus();
11009 }
@@ -11329,7 +11205,7 @@
11205 }
11206 x += '<br/><div style=float:right;margin-bottom:12px><input type=button value="' + "Close" + '" onclick=showServiceDetailsDialogEx(0,' + index + ')></div><div style=margin-bottom:12px><input type=button value="' + "Start" + '" onclick=showServiceDetailsDialogEx(1,' + index + ')><input type=button value="' + "Stop" + '" onclick=showServiceDetailsDialogEx(2,' + index + ')><input type=button value="' + "Restart" + '" onclick=showServiceDetailsDialogEx(3,' + index + ')></div>';
11207 xxdialogTag = "service_" + index;
11332 - setModalContent('xxAddAgent', 'Service Details', x);
11208 + setModalContent('xxAddAgent', "Service Details", x);
11209 showModal('xxAddAgentModal', 'idx_dlgOkButton');
11210 }
11211 }
@@ -11341,7 +11217,7 @@
11217 if (service != null) {
11218 meshserver.send({ action: 'msg', type: 'service', nodeid: currentNode._id, serviceName: service.name });
11219 xxdialogTag = "service_" + index;
11344 - setModalContent('xxAddAgent', 'Service Details', 'Requesting Service Details...');
11220 + setModalContent('xxAddAgent', "Service Details", 'Requesting Service Details...');
11221 showModal('xxAddAgentModal', 'idx_dlgOkButton');
11222 }
11223 return false;
@@ -11427,7 +11303,7 @@
11303 function dmousewheel(e) { setSessionActivity(); e.addx = Q('DeskParent').scrollLeft; e.addy = Q('DeskParent').scrollTop; if (!xxdialogMode && desktop != null && Q('DeskControl').checked) { if ((webRtcDesktop != null) && (webRtcDesktop.softdesktop != null)) { webRtcDesktop.softdesktop.m.mousewheel(e); desktop.m.sendKeepAlive(); } else { if (desktop.m.mousewheel) { desktop.m.mousewheel(e); } } haltEvent(e); return true; } return false; }
11304 function drotate(x) { if (!xxdialogMode && desktop != null) { desktop.m.setRotation(desktop.m.rotation + x); deskAdjust(); deskAdjust(); } }
11305 function stopProcess(id, name) {
11430 - setModalContent('xxAddAgent', 'Process Control', format("Stop process #{0} \"{1}\"?", id, name));
11306 + setModalContent('xxAddAgent', "Process Control", format("Stop process #{0} \"{1}\"?", id, name));
11307 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => stopProcessEx(3, id));
11308 return false;
11309 }
@@ -11601,7 +11477,7 @@
11477 x += addHtmlFormFloating("Password", '<input type=password id=dp2keypass2 class="form-control" maxlength=64 autocomplete=off onkeyup=sshAuthUpdate(event) />');
11478 x += '</div>';
11479 }
11604 - setModalContent('xxAddAgent', 'Authentication', x);
11480 + setModalContent('xxAddAgent', "Authentication", x);
11481 var closeFunc = function(event,a) {
11482 document.getElementById('xxAddAgentModal').removeEventListener('hide.bs.modal', closeFunc);
11483 connectTerminal();
@@ -11871,7 +11747,7 @@
11747 function showTermPasteDialog() {
11748 if (!terminal || xxdialogMode) return;
11749 Q('pastebutton').blur();
11874 - setModalContent('xxAddAgent', 'Paste', '<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>');
11750 + setModalContent('xxAddAgent', "Paste", '<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>');
11751 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showTermPasteDialogEx());
11752 Q('d2pasteText').focus();
11753 }
@@ -12058,19 +11934,19 @@
11934 setDialogMode(0); // Close the dialog box
11935 } else if ((data.msg == 'zipping') && ((!xxdialogMode) || (xxdialogTag == 'fileMsgDialog'))) {
11936 // Show the dialog box message
12061 - setModalContent('xxAddAgent', 'File Operation', '<div style=margin:10px>' + "Compressing files..." + '</div>');
11937 + setModalContent('xxAddAgent', "File Operation", '<div style=margin:10px>' + "Compressing files..." + '</div>');
11938 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13fileOperationDialogEx(10));
11939 } else if ((data.msg == 'unzipping') && ((!xxdialogMode) || (xxdialogTag == 'fileMsgDialog'))) {
11940 // Show the dialog box message
12065 - setModalContent('xxAddAgent', 'File Operation', '<div style=margin:10px>' + "Unzipping file..." + '</div>');
11941 + setModalContent('xxAddAgent', "File Operation", '<div style=margin:10px>' + "Unzipping file..." + '</div>');
11942 showModal('xxAddAgentModal', 'idx_dlgOkButton');
11943 } else if ((data.msg == 'unziperror') && ((!xxdialogMode) || (xxdialogTag == 'fileMsgDialog'))) {
11944 // Show the dialog box message
12069 - setModalContent('xxAddAgent', 'File Operation', '<div style=margin:10px>' + "Unzipping Error" + '</div><br />' + EscapeHtml(data.error));
11945 + setModalContent('xxAddAgent', "File Operation", '<div style=margin:10px>' + "Unzipping Error" + '</div><br />' + EscapeHtml(data.error));
11946 showModal('xxAddAgentModal', 'idx_dlgOkButton');
11947 } else if ((data.msg == 'zippingFile') && ((!xxdialogMode) || (xxdialogTag == 'fileMsgDialog'))) {
11948 // Show the dialog box message
12073 - setModalContent('xxAddAgent', 'File Operation', '<div style=margin:10px>' + EscapeHtml(data.file) + '</div><br /><progress value=' + EscapeHtml(data.progress) + ' style=width:100% max=100 />');
11949 + setModalContent('xxAddAgent', "File Operation", '<div style=margin:10px>' + EscapeHtml(data.file) + '</div><br /><progress value=' + EscapeHtml(data.progress) + ' style=width:100% max=100 />');
11950 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13fileOperationDialogEx(10));
11951 }
11952 return;
@@ -12220,7 +12096,7 @@
12096 }
12097
12098 function p13openfilefolder() {
12223 - setModalContent('xxAddAgent', 'Open File/Folder', 'Are you sure you want to open this file/folder on the remote devices desktop ?');
12099 + setModalContent('xxAddAgent', "Open File/Folder", 'Are you sure you want to open this file/folder on the remote devices desktop ?');
12100 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13openfilefolderEx());
12101 }
12102 function p13openfilefolderEx() {
@@ -12236,7 +12112,7 @@
12112
12113 function p13gotofolder() {
12114 xxdialogButtons = 3;
12239 - setModalContent('xxAddAgent', 'Go To Folder', '<input type=text id=p13folderinput style=width:100% placeholder="' + (isWindowsNode(currentNode) ? 'C:\\' : '/var/www') + '" />');
12115 + setModalContent('xxAddAgent', "Go To Folder", '<input type=text id=p13folderinput style=width:100% placeholder="' + (isWindowsNode(currentNode) ? 'C:\\' : '/var/www') + '" />');
12116 showModal('xxAddAgentModal', 'idx_dlgOkButton', p13gotofolderEx);
12117 focusTextBox('p13folderinput');
12118 }
@@ -12275,7 +12151,7 @@
12151 x += '<div id=d2findResults style="width:100%;height:184px;background-color:white;border:1px solid black;padding:3px;overflow:scroll;margin-top:8px"></div>';
12152 x += '<div style=margin-top:8px><input id=filefind_dlgCancelButton type=button value=' + "Close" + ' style=float:right;width:80px;margin-left:5px onclick=p13findfileCancel()>';
12153 x += '<input id=filefind_dlgOkButton type=submit value=' + "Search" + ' style=float:right;width:80px onclick=p13findfileEx()><br /><br /></div>';
12278 - setModalContent('xxAddAgent', 'Find Files', x);
12154 + setModalContent('xxAddAgent', "Find Files", x);
12155 showModal('xxAddAgentModal', 'idx_dlgOkButton');
12156 p13findfileValidate();
12157 Q('d2findFilter').focus();
@@ -12376,14 +12252,14 @@
12252 function p13getFileSelAllowedExt(ext) { var checkboxes = document.getElementsByName('fd'); for (var i = 0; i < checkboxes.length; i++) { if ((checkboxes[i].checked) && (!p13filetree.dir[checkboxes[i].value].n.endsWith(ext))) return false; } return true; }
12253 function p13selectallfile() { var nv = (p13getFileSelCount() == 0), checkboxes = document.getElementsByName('fd'); for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].checked = nv; } p13setActions(); }
12254 function p13createfolder() {
12379 - setModalContent('xxAddAgent', 'New Folder', '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />');
12255 + setModalContent('xxAddAgent', "New Folder", '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />');
12256 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13createfolderEx());
12257 focusTextBox('p13renameinput'); p13fileNameCheck();
12258 }
12259 function p13createfolderEx() { files.sendText({ action: 'mkdir', reqid: 1, path: p13filetreelocation.join('/') + '/' + Q('p13renameinput').value }); p13folderup(999); }
12260 function p13deletefile() {
12261 var cc = p13getFileSelCount(), rec = (p13getFileSelDirCount() > 0) ? '<br /><br /><label><input type=checkbox class="form-check-input me-2" id=p13recdeleteinput>' + "Recursive delete" + '</label><br>' : '<input type=checkbox class="form-check-input me-2" id=p13recdeleteinput style=\'display:none\'>';
12386 - setModalContent('xxAddAgent', 'Delete', (cc > 1) ? (format("Delete {0} selected items?", cc) + rec) : ("Delete selected item?" + rec));
12262 + setModalContent('xxAddAgent', "Delete", (cc > 1) ? (format("Delete {0} selected items?", cc) + rec) : ("Delete selected item?" + rec));
12263 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13deletefileEx());
12264 }
12265 function p13deletefileEx() { var delfiles = [], checkboxes = document.getElementsByName('fd'); for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { delfiles.push(p13filetree.dir[checkboxes[i].value].n); } } files.sendText({ action: 'rm', reqid: 1, path: p13filetreelocation.join('/'), delfiles: delfiles, rec: Q('p13recdeleteinput').checked }); p13folderup(999); }
@@ -12394,7 +12270,7 @@
12270 renamefile = p13filetree.dir[checkboxes[i].value].n;
12271 }
12272 }
12397 - setModalContent('xxAddAgent', 'Rename', '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="' + renamefile + '" />');
12273 + setModalContent('xxAddAgent', "Rename", '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="' + renamefile + '" />');
12274 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13renamefileEx(3, { oldname: renamefile }));
12275 focusTextBox('p13renameinput');
12276 p13fileNameCheck();
@@ -12402,7 +12278,7 @@
12278 function p13renamefileEx(b, t) { t.newname = Q('p13renameinput').value; files.sendText(t); p13folderup(999); }
12279 function p13fileNameCheck(e) { var x = isFilenameValid(Q('p13renameinput').value); QE('idx_dlgOkButton', x); if ((x == true) && (e != null) && (e.keyCode == 13)) { dialogclose(1); } }
12280 function p13uploadFile() {
12405 - setModalContent('xxAddAgent', 'Upload File', '<input type=file name=files id=p13uploadinput class="form-control" multiple=multiple onchange="updateUploadDialogOk(\'p13uploadinput\')" />');
12281 + setModalContent('xxAddAgent', "Upload File", '<input type=file name=files id=p13uploadinput class="form-control" multiple=multiple onchange="updateUploadDialogOk(\'p13uploadinput\')" />');
12282 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13uploadFileEx);
12283 updateUploadDialogOk('p13uploadinput');
12284 }
@@ -12429,7 +12305,7 @@
12305 input = (isWindowsNode(currentNode) ? '' : '/') + p13filetreelocation.join(slash) + slash + p13filetree.dir[checkboxes[i].value].n;
12306 }
12307 }
12432 - setModalContent('xxAddAgent', 'Unzip To Folder', '<input type=text id=p13unzipfolderinput maxlength=64 style=width:100% value="' + dest + '" />');
12308 + setModalContent('xxAddAgent', "Unzip To Folder", '<input type=text id=p13unzipfolderinput maxlength=64 style=width:100% value="' + dest + '" />');
12309 showModal('xxAddAgentModal', 'idx_dlgOkButton', p13unzipFileEx(3, { action: 'unzip', input: input }));
12310 focusTextBox('p13unzipfolderinput');
12311 }
@@ -12442,7 +12318,7 @@
12318 function p13zipFiles() {
12319 var inputFiles = [], checkboxes = document.getElementsByName('fd');
12320 for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { inputFiles.push(p13filetree.dir[checkboxes[i].value].n); } }
12445 - setModalContent('xxAddAgent', 'Zip Filename', '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="" />');
12321 + setModalContent('xxAddAgent', "Zip Filename", '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="" />');
12322 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13zipFilesEx(3, { action: 'zip', path: p13filetreelocation.join('/'), files: inputFiles }));
12323 focusTextBox('p13renameinput');
12324 p13fileNameCheck();
@@ -12465,7 +12341,7 @@
12341 if (p13clipboard.length > 1) { x = format("Confirm move of {0} entries to this location?", p13clipboard.length); } else { x = format("Confirm move of 1 entrie to this location?"); }
12342 }
12343 }
12468 - setModalContent('xxAddAgent', 'Paste', x);
12344 + setModalContent('xxAddAgent', "Paste", x);
12345 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13pasteFileEx);
12346 }
12347 function p13pasteFileEx() { files.sendText({ action: (p13clipboardCut == 0 ? 'copy' : 'move'), reqid: 1, scpath: p13clipboardFolder, dspath: p13targetpath, names: p13clipboard }); p13folderup(999); if (p13clipboardCut == 1) { p13clipboard = null, p13clipboardFolder = null, p13clipboardCut = 0; p13updateClipview(); } }
@@ -12536,7 +12412,7 @@
12412 gdownloadFile = { path: decodeURIComponent(x), file: decodeURIComponent(y), size: z, tsize: 0, data: '', state: 0, id: Math.random(), tag: tag }
12413 //console.log('p13downloadFileCancel', gdownloadFile);
12414 files.sendText({ action: 'download', sub: 'start', id: gdownloadFile.id, path: gdownloadFile.path });
12539 - setModalContent('xxAddAgent', 'Download File', '<div>' + gdownloadFile.file + '</div><br /><progress id=d2progressBar style=width:100% value=0 max=' + z + ' />');
12415 + setModalContent('xxAddAgent', "Download File", '<div>' + gdownloadFile.file + '</div><br /><progress id=d2progressBar style=width:100% value=0 max=' + z + ' />');
12416 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13downloadFileCancel);
12417 }
12418
@@ -12678,7 +12554,7 @@
12554 p13uploadFileContinue(1, files);
12555 } else {
12556 // Otherwise, prompt for confirmation
12681 - setModalContent('xxAddAgent', 'Upload File', p13uploadFileContinue, format((overWriteCount == 1) ? "Upload will overwrite 1 file. Continue?" : "Upload will overwrite {0} files. Continue?", overWriteCount));
12557 + setModalContent('xxAddAgent', "Upload File", p13uploadFileContinue, format((overWriteCount == 1) ? "Upload will overwrite 1 file. Continue?" : "Upload will overwrite {0} files. Continue?", overWriteCount));
12558 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13uploadFileContinue(3, files));
12559 }
12560 }
@@ -12688,7 +12564,7 @@
12564 uploadFile.xpath = p13filetreelocation.join('/');
12565 uploadFile.xfiles = files;
12566 uploadFile.xfilePtr = -1;
12691 - setModalContent('xxAddAgent', 'Upload File', '<div id=p13dfileName>' + "Connecting..." + '</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />');
12567 + setModalContent('xxAddAgent', "Upload File", '<div id=p13dfileName>' + "Connecting..." + '</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />');
12568 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13uploadFileCancel(10));
12569 p13uploadNextFile();
12570 }
@@ -12904,7 +12780,7 @@
12780 }
12781 x += '</div>';
12782
12907 - setModalContent('xxAddAgent', 'Event Details', x);
12783 + setModalContent('xxAddAgent', "Event Details", x);
12784 showModal('xxAddAgentModal', 'idx_dlgOkButton');
12785 }
12786 }
@@ -13173,7 +13049,7 @@
13049 }
13050 if (hardware.network && hardware.network.dns) {
13051 x += '<tr><td><div class=style10 style=border-radius:5px;padding:8px>';
13176 - x += addDetailItem("<b>DNS Servers</b>", hardware.network.dns.join(", "));
13052 + x += addDetailItem('<b>' + "DNS Servers" + '</b>', hardware.network.dns.join(", "));
13053 x += '</div></td></tr>';
13054 }
13055 x += '</table>';
@@ -13635,7 +13511,7 @@
13511 else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [consoleNode._id], type: 'clear' }); } // Clear the core
13512 else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
13513 else {
13638 - setModalContent('xxAddAgent', 'Perform Agent Action', addHtmlFormFloating("Action", '<select id=d3coreMode class="form-select me-2"><option value=1>' + "Upload default server core" + '</option><option value=2>' + "Clear the core" + '</option><option value=6>' + "Upload recovery core" + '</option><option value=7>' + "Upload tiny core" + '</option><option value=3>' + "Upload a core file" + '</option><option value=4>' + "Soft disconnect agent" + '</option><option value=5>' + "Hard disconnect agent" + '</option></select>'));
13514 + setModalContent('xxAddAgent', "Perform Agent Action", addHtmlFormFloating("Action", '<select id=d3coreMode class="form-select me-2"><option value=1>' + "Upload default server core" + '</option><option value=2>' + "Clear the core" + '</option><option value=6>' + "Upload recovery core" + '</option><option value=7>' + "Upload tiny core" + '</option><option value=3>' + "Upload a core file" + '</option><option value=4>' + "Soft disconnect agent" + '</option><option value=5>' + "Hard disconnect agent" + '</option><option value=8>' + "Restart agent service" + '</select>'));
13515 showModal('xxAddAgentModal', 'idx_dlgOkButton', p15uploadCoreEx);
13516 }
13517 }
@@ -13662,6 +13538,9 @@
13538 } else if (Q('d3coreMode').value == 7) {
13539 // Upload a tiny core
13540 meshserver.send({ action: 'uploadagentcore', nodeids: [consoleNode._id], type: 'tiny' });
13541 + } else if (Q('d3coreMode').value == 8) {
13542 + // Restart MeshAgent service
13543 + meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
13544 }
13545 }
13546
@@ -13672,7 +13551,7 @@
13551 Q('d3auth').value = authCookie;
13552 Q('d3filter').value = '.js';
13553 Q('d3attrib').value = currentNode._id;
13675 - setModalContent('xxAddAgent', 'Upload Mesh Agent Core', '');
13554 + setModalContent('xxAddAgent', "Upload Mesh Agent Core", '');
13555 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p15uploadCoreEx2);
13556 d3init();
13557 }
@@ -13696,7 +13575,7 @@
13575 function account_viewPreviousLogins() {
13576 if (xxdialogMode) return;
13577 xxdialogTag = 'previousLogins';
13699 - setModalContent('xxAddAgent', 'Previous Logins', 'Loading...');
13578 + setModalContent('xxAddAgent', "Previous Logins", 'Loading...');
13579 showModal('xxAddAgentModal', 'idx_dlgOkButton');
13580 meshserver.send({ action: 'previousLogins' });
13581 }
@@ -13706,7 +13585,7 @@
13585 var user = (mode == 0) ? userinfo : currentUser;
13586 var x = '<input id=p2file type=file class="form-control" accept="image/*" onchange=account_manageImageEx()><div style=width:100%><canvas id=p2canvas width=256 height=256 style="width:256px;height:256px;margin-left:60px;margin-top:8px;border-radius:16px;background: var(--sub-menu-bg);border: 1px solid #cfcdcd; cursor: pointer;" onclick=account_canvasClick() /></div>';
13587
13709 - setModalContent('xxAddAgent', 'Manage Account Image', x);
13588 + setModalContent('xxAddAgent', "Manage Account Image", x);
13589 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_manageImageEx2);
13590
13591 var ctx = Q('p2canvas').getContext('2d');
@@ -13753,7 +13632,7 @@
13632 x = '<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>';
13633 x += '<td style=text-align:center><div style=padding:6px>' + "Verified phone number" + '</div><div style=font-size:20px>' + EscapeHtml(userinfo.phone) + '</div>';
13634 x += '<div style=margin:10px><label><input id=d2delPhone type=checkbox class="form-check-input me-2" onclick=account_managePhoneRemoveValidate() />' + "Remove phone number" + '</label></div>';
13756 - setModalContent('xxAddAgent', 'Phone Notifications', x);
13635 + setModalContent('xxAddAgent', "Phone Notifications", x);
13636 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_managePhoneRemove);
13637 account_managePhoneRemoveValidate();
13638 } else {
@@ -13761,7 +13640,7 @@
13640 x += '<td>' + "Enter your SMS capable phone number. Once verified, the number may be used for login verification and other notifications.";
13641 x += '<br /><br /><div style=width:100%;text-align:center>' + "Phone number:" + ' <input type=tel pattern="[0-9]" autocomplete="tel" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=account_managePhoneValidate() onkeypress="if (event.key==\'Enter\') account_managePhoneValidate(1)"></div></table>';
13642 xxdialogTag = 'verifyPhone';
13764 - setModalContent('xxAddAgent', 'Phone Notifications', x);
13643 + setModalContent('xxAddAgent', "Phone Notifications", x);
13644 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_managePhoneAdd);
13645 Q('d2phoneinput').focus();
13646 account_managePhoneValidate();
@@ -13783,7 +13662,7 @@
13662 x = '<table style=width:100%><tr><td style=width:56px><img src="images/messaging40.png" style=padding:8px>';
13663 x += '<td style=text-align:center><div style=padding:6px>' + "Verified handle" + '</div><div style=font-weight:bold>' + EscapeHtml(userinfo.msghandle) + '</div>';
13664 x += '<div style=margin:10px><label><input id=d2delPhone type=checkbox class="form-check-input me-2" onclick=account_managePhoneRemoveValidate() />' + "Remove messaging" + '</label></div>';
13786 - setModalContent('xxAddAgent', 'Messaging Notifications', x);
13665 + setModalContent('xxAddAgent', "Messaging Notifications", x);
13666 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_manageMessagingRemove);
13667 account_managePhoneRemoveValidate();
13668 } else {
@@ -13809,7 +13688,7 @@
13688 x += '<div id=d2ntfyinfo style=display:none><br /><a href="' + (serverinfo.userMsgNftyUrl ? serverinfo.userMsgNftyUrl : 'https://ntfy.sh/') + '" target="_ntfy">' + "Free service at ntfy.sh" + '</a></div>';
13689 x += '<div id=d2slackinfo style=display:none><br /><a href=https://api.slack.com/messaging/webhooks target="_slack">' + "Slack Webhook Setup" + '</a></div>';
13690 xxdialogTag = 'VerifyMessaging';
13812 - setModalContent('xxAddAgent', 'Messaging Notifications', x);
13691 + setModalContent('xxAddAgent', "Messaging Notifications", x);
13692 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_manageMessagingAdd());
13693 Q('d2handleinput').focus();
13694 account_manageMessagingValidate();
@@ -13839,31 +13718,22 @@
13718 function account_manageAuthEmail() {
13719 if (xxdialogMode || ((features & 0x00800000) == 0)) return;
13720 var emailU2Fenabled = ((userinfo.otpekey == 1) && (userinfo.email != null) && (userinfo.emailVerified == true));
13842 - setModalContent('xxAddAgent', 'Email Authentication', "When enabled, on each login, you will be given the option to receive a login token to you email account for added security." + '<br /><br /><label><input id=email2facheck type=checkbox class="form-check-input me-2" ' + (emailU2Fenabled ? 'checked' : '') + '/>' + "Enable email two-factor authentication." + '</label>');
13721 + setModalContent('xxAddAgent', "Email Authentication", "When enabled, on each login, you will be given the option to receive a login token to you email account for added security." + '<br /><br /><label><input id=email2facheck type=checkbox class="form-check-input me-2" ' + (emailU2Fenabled ? 'checked' : '') + '/>' + "Enable email two-factor authentication." + '</label>');
13722 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
13723 if (emailU2Fenabled != Q('email2facheck').checked) { meshserver.send({ action: 'otpemail', enabled: Q('email2facheck').checked }); }
13724 });
13725 }
13726
13848 - function account_manageAuthDuo() {
13849 - if (xxdialogMode || ((features2 & 0x20000000) == 0)) return;
13850 - var duoU2Fenabled = ((userinfo.otpduo == 1));
13851 - setModalContent('xxAddAgent', 'Duo Authentication', "When enabled, on each login, you will be given the option to use Duo for added security." + '<br /><br /><label><input id=duo2facheck type=checkbox class="form-check-input me-2" ' + (duoU2Fenabled ? 'checked' : '') + '/>' + "Enable Duo two-factor authentication." + '</label>');
13852 - showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
13853 - if (duoU2Fenabled != Q('duo2facheck').checked) { meshserver.send({ action: 'otpduo', enabled: Q('duo2facheck').checked }); }
13854 - });
13855 - }
13856 -
13727 function account_manageAuthDuo() {
13728 if (xxdialogMode || ((features2 & 0x20000000) == 0)) return;
13729 var duoU2Fenabled = ((userinfo.otpduo == 1));
13730 if (duoU2Fenabled == false) {
13861 - setModalContent('xxAddAgent', 'Duo Authentication', "Confirm enabling of Duo 2FA login security. Once enabled you will be given the option to use Duo at login for added security. Click ok to go thru the steps to enable Duo." + '<p style="text-align:center;margin-top:10px"><img src="images/duo-2fa-250.png"></p>');
13731 + setModalContent('xxAddAgent', "Duo Authentication", "Confirm enabling of Duo 2FA login security. Once enabled you will be given the option to use Duo at login for added security. Click ok to go thru the steps to enable Duo." + '<p style="text-align:center;margin-top:10px"><img src="images/duo-2fa-250.png"></p>');
13732 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
13733 window.location.href = '/add-duo?rurl=' + encodeURIComponentEx(window.location.href) + ((urlargs.key)?('&key=' + urlargs.key):'');
13734 });
13735 } else {
13866 - setModalContent('xxAddAgent', 'Duo Authentication', '<p><label><input id=duo2facheck type=checkbox onclick=account_manageAuthDuoConfirm() />' + ' ' + "Confirm disabling 2FA Duo login security." + '</label></p>' + '<p style="text-align: center"><img src="images/duo-2fa-250-disable.png"></p>');
13736 + setModalContent('xxAddAgent', "Duo Authentication", '<p><label><input id=duo2facheck type=checkbox onclick=account_manageAuthDuoConfirm() />' + ' ' + "Confirm disabling 2FA Duo login security." + '</label></p>' + '<p style="text-align: center"><img src="images/duo-2fa-250-disable.png"></p>');
13737 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
13738 meshserver.send({ action: 'otpduo', enabled: false });
13739 });
@@ -13884,7 +13754,7 @@
13754 function account_addOtp() {
13755 if (xxdialogMode || (userinfo.otpsecret == 1) || ((features & 4096) == 0)) return;
13756 xxdialogTag = 'otpauth-request';
13887 - setModalContent('xxAddAgent', 'Authenticator App', ('<div id=d2optinfo>' + "Loading..." + '</div>'));
13757 + setModalContent('xxAddAgent', "Authenticator App", ('<div id=d2optinfo>' + "Loading..." + '</div>'));
13758 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'otpauth-setup', secret: Q('d2optsecret').attributes.secret.value, token: Q('d2otpauthinput').value }); });
13759 meshserver.send({ action: 'otpauth-request' });
13760 }
@@ -13897,7 +13767,7 @@
13767
13768 function account_removeOtp() {
13769 if (xxdialogMode || (userinfo.otpsecret != 1) || ((features & 4096) == 0)) return;
13900 - setModalContent('xxAddAgent', 'Authenticator App', 'Confirm removal of authenticator application 2-step login?');
13770 + setModalContent('xxAddAgent', "Authenticator App", "Confirm removal of authenticator application 2-step login?");
13771 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'otpauth-clear' }); });
13772 }
13773
@@ -13912,7 +13782,7 @@
13782 if (xxdialogMode || ((features2 & 0x40) == 0)) return;
13783 if (userinfo.otpdev == 1) {
13784 // Remove the 2FA device
13915 - setModalContent('xxAddAgent', 'Authentication Device', 'Confirm removal of push authentication device?');
13785 + setModalContent('xxAddAgent', "Authentication Device", "Confirm removal of push authentication device?");
13786 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'otpdev-clear' }); });
13787 } else {
13788 // Create a list of all mobile devices
@@ -13920,7 +13790,7 @@
13790 for (var i in nodes) { var node = nodes[i]; if ((node.agent != null) && (node.agent.id == 14) && (node.pmt == 1) && (GetNodeRights(node) == 0xFFFFFFFF)) { mobileDevices.push(node); } }
13791 if (mobileDevices.length == 0) {
13792 // No mobile devices found
13923 - setModalContent('xxAddAgent', 'Authentication Device', 'In order to use push notification authentication, a mobile device must be setup in your account with full rights.');
13793 + setModalContent('xxAddAgent', "Authentication Device", 'In order to use push notification authentication, a mobile device must be setup in your account with full rights.');
13794 showModal('xxAddAgentModal', 'idx_dlgOkButton');
13795 } else {
13796 // Set a 2FA device
@@ -13929,7 +13799,7 @@
13799 for (var i in mobileDevices) { y += '<option value="' + mobileDevices[i]._id + '">' + EscapeHtml(mobileDevices[i].name) + '</option>'; }
13800 y += '</select>';
13801 x += addHtmlFormFloating("Device", y);
13932 - setModalContent('xxAddAgent', 'Authentication Device', x);
13802 + setModalContent('xxAddAgent', "Authentication Device", x);
13803 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () { meshserver.send({ action: 'otpdev-set', nodeid: Q('d2devselect').value }); });
13804 }
13805 }
@@ -13952,7 +13822,7 @@
13822 x += addHtmlFormFloating("Key Name", '<input id=dp1keyname class="form-control" maxlength=20 autocomplete=off placeholder="' + "MyKey" + '" onkeyup=account_addhkeyValidate(event,1) />');
13823 x += addHtmlFormFloating("YubiKey&trade; OTP", '<input id=dp1key class="form-control" autocomplete=off onkeyup=account_addhkeyValidate(event,2) />');
13824 }
13955 - setModalContent('xxAddAgent', 'Add Security Key', x);
13825 + setModalContent('xxAddAgent', "Add Security Key", x);
13826 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_addhkeyEx(3, type));
13827 Q('dp1keyname').focus();
13828 }
@@ -13967,7 +13837,7 @@
13837 if (type == 2) {
13838 meshserver.send({ action: 'otp-hkey-yubikey-add', name: name, otp: Q('dp1key').value });
13839 xxdialogTag = 'otpauth-hardware-manage';
13970 - setModalContent('xxAddAgent', 'Add Security Key', '<br />' + "Checking..." + '<br /><br /><br />');
13840 + setModalContent('xxAddAgent', "Add Security Key", '<br />' + "Checking..." + '<br /><br /><br />');
13841 showModal('xxAddAgentModal', 'idx_dlgOkButton');
13842 } else if (type == 3) {
13843 meshserver.send({ action: 'webauthn-startregister', name: name });
@@ -14003,7 +13873,7 @@
13873 y += '<br /><a rel="noreferrer noopener" target="_blank" href="translator.htm">' + "Help translate MeshCentral" + '</a>';
13874 }
13875
14006 - setModalContent('xxAddAgent', 'Localization Settings', y);
13876 + setModalContent('xxAddAgent', "Localization Settings", y);
13877 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_showLocalizationSettingsEx);
13878 return false;
13879 }
@@ -14036,12 +13906,12 @@
13906 var options = { 0: "Unlimited", 1: "1 minute", 5: "5 minutes", 10: "10 minutes", 15: "15 minutes", 30: "30 minutes", 45: "45 minutes", 60: "60 minutes", 120: "2 hours", 240: "4 hours", 480: "8 hours", 720: "12 hours", 960: "16 hours", 1440: "24 hours", 2880: "2 days", 5760: "4 days", 10080: "7 days" }
13907 for (var i in options) { y += '<option value=' + i + '>' + options[i] + '</option>'; }
13908 x += '<div class="form-floating mb-3">';
14039 - x += '<input type=text class="boxsize form-control" id=d2tokenName maxlength="100" placeholder="Token Name" onchange=account_createLoginTokenValidate() onkeyup=account_createLoginTokenValidate()>';
14040 - x += '<label for=d2tokenName>Token Name</label>';
13909 + x += '<input type=text class="boxsize form-control" id=d2tokenName maxlength="100" placeholder="' + "Token Name" + '" onchange=account_createLoginTokenValidate() onkeyup=account_createLoginTokenValidate()>';
13910 + x += '<label for=d2tokenName>' + "Token Name" + '</label>';
13911 x += '</div>';
14042 - x += addHtmlFormFloating('Expire Time', '<select class="boxsize form-select" id=d2tokenExpire>' + y + '</select>')
13912 + x += addHtmlFormFloating("Expire Time", '<select class="boxsize form-select" id=d2tokenExpire>' + y + '</select>')
13913
14044 - setModalContent('xxAddAgent', 'Create Login Token', x);
13914 + setModalContent('xxAddAgent', "Create Login Token", x);
13915 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_createLoginTokenEx);
13916
13917 QE('idx_dlgOkButton', false);
@@ -14065,7 +13935,7 @@
13935 x += '<div class="form-check"><label><input id=p2notifyIntelDeviceDisconnect class="form-check-input me-2" type=checkbox />' + "Device disconnections" + '</label></div>';
13936 x += '<div class="form-check"><label><input id=p2notifyIntelAmtKvmActions class="form-check-input me-2" type=checkbox />' + "Intel&reg; AMT desktop and serial events" + '</label></div>';
13937
14068 - setModalContent('xxAddAgent', 'Notification Settings', x);
13938 + setModalContent('xxAddAgent', "Notification Settings", x);
13939 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_showAccountNotifySettingsEx);
13940
13941 var n = getstore('notifications', 0);
@@ -14090,7 +13960,7 @@
13960 function account_showVerifyEmail() {
13961 if (xxdialogMode || (userinfo.emailVerified == true) || (serverinfo.emailcheck != true)) return false;
13962 var x = "Click ok to send a verification mail to:" + '<br /><div style=padding:8px><b>' + EscapeHtml(userinfo.email) + '</b></div>' + "Please wait a few minute to receive the verification.";
14093 - setModalContent('xxAddAgent', 'Email Verification', x);
13963 + setModalContent('xxAddAgent', "Email Verification", x);
13964 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => account_showVerifyEmailEx);
13965 return false;
13966 }
@@ -14104,7 +13974,7 @@
13974 var x = "Change your account email address here." + '<br /><br />';
13975 x += '<div class="form-floating"><input id=dp2email class="form-control" maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) placeholder=Email /> <label for=dp2email>Email</label></div>';
13976
14107 - setModalContent('xxAddAgent', 'Email Address Change', x);
13977 + setModalContent('xxAddAgent', "Email Address Change", x);
13978 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_changeEmail);
13979
13980 if (userinfo.email != null) { Q('dp2email').value = userinfo.email; }
@@ -14140,7 +14010,7 @@
14010 x += '</div>';
14011 x += '</form>';
14012
14143 - setModalContent('xxAddAgent', 'Delete Account', x);
14013 + setModalContent('xxAddAgent', "Delete Account", x);
14014 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
14015 dialogclose(1);
14016 });
@@ -14189,7 +14059,7 @@
14059 //x += '<input id=account_dlgOkButton type=submit value=OK style="float:right;width:80px" onclick=dialogclose(1)>';
14060 //x += '</div><br /></form>';
14061
14192 - setModalContent('xxAddAgent', 'Change Password', x);
14062 + setModalContent('xxAddAgent', "Change Password", x);
14063 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_showChangePasswordEx);
14064
14065 Q('apassword0').focus();
@@ -14208,29 +14078,29 @@
14078 function account_showThemesSwitcher() {
14079 if (xxdialogMode) return false;
14080 var themes = [
14211 - { value: "default", label: "Default" },
14212 - { value: "cerulean", label: "Cerulean" },
14213 - { value: "cosmo", label: "Cosmo" },
14214 - { value: "cyborg", label: "Cyborg" },
14215 - { value: "darkly", label: "Darkly" },
14216 - { value: "flatly", label: "Flatly" },
14217 - { value: "journal", label: "Journal" },
14218 - { value: "litera", label: "Litera" },
14219 - { value: "lumen", label: "Lumen" },
14220 - { value: "lux", label: "Lux" },
14221 - { value: "materia", label: "Materia" },
14222 - { value: "minty", label: "Minty" },
14223 - { value: "morph", label: "Morph" },
14224 - { value: "pulse", label: "Pulse" },
14225 - { value: "sandstone", label: "Sandstone" },
14226 - { value: "simplex", label: "Simplex" },
14227 - { value: "sketchy", label: "Sketchy" },
14228 - { value: "solar", label: "Solar" },
14229 - { value: "spacelab", label: "Spacelab" },
14230 - { value: "united", label: "United" },
14231 - { value: "vapor", label: "Vapor" },
14232 - { value: "yeti", label: "Yeti" },
14233 - { value: "zephyr", label: "Zephyr" }
14081 + { value: 'default', label: "Default" },
14082 + { value: 'cerulean', label: "Cerulean" },
14083 + { value: 'cosmo', label: "Cosmo" },
14084 + { value: 'cyborg', label: "Cyborg" },
14085 + { value: 'darkly', label: "Darkly" },
14086 + { value: 'flatly', label: "Flatly" },
14087 + { value: 'journal', label: "Journal" },
14088 + { value: 'litera', label: "Litera" },
14089 + { value: 'lumen', label: "Lumen" },
14090 + { value: 'lux', label: "Lux" },
14091 + { value: 'materia', label: "Materia" },
14092 + { value: 'minty', label: "Minty" },
14093 + { value: 'morph', label: "Morph" },
14094 + { value: 'pulse', label: "Pulse" },
14095 + { value: 'sandstone', label: "Sandstone" },
14096 + { value: 'simplex', label: "Simplex" },
14097 + { value: 'sketchy', label: "Sketchy" },
14098 + { value: 'solar', label: "Solar" },
14099 + { value: 'spacelab', label: "Spacelab" },
14100 + { value: 'united', label: "United" },
14101 + { value: 'vapor', label: "Vapor" },
14102 + { value: 'yeti', label: "Yeti" },
14103 + { value: 'zephyr', label: "Zephyr" }
14104 ];
14105
14106 var currentTheme = getstore('theme') || 'default';
@@ -14238,11 +14108,11 @@
14108
14109 // Create a set of themes already in "Recent Themes" to avoid duplicates
14110 var recentThemesSet = new Set(lastThemes);
14241 - var x = '<div class="form-group"><label for="theme-switcher">Select a theme:</label>';
14111 + var x = '<div class="form-group"><label for="theme-switcher">' + "Select a theme" + ':</label>';
14112 x += '<select id="theme-switcher" class="form-select" onchange="account_switchThemeEx()">';
14113 // Add "Recent Themes" optgroup
14114 if (lastThemes.length > 0) {
14245 - x += '<optgroup label="Recent Themes">';
14115 + x += '<optgroup label="' + "Recent Themes" + '"">';
14116 lastThemes.forEach(function (theme) {
14117 var selected = theme === currentTheme ? ' selected' : '';
14118 x += `<option value="${theme}"${selected}>${theme.charAt(0).toUpperCase() + theme.slice(1)}</option>`;
@@ -14250,7 +14120,7 @@
14120 x += '</optgroup>';
14121 }
14122 // Add "All Themes" optgroup, excluding duplicates
14253 - x += '<optgroup label="All Themes">';
14123 + x += '<optgroup label="' + "All Themes" + '">';
14124 themes.forEach(function (theme) {
14125 if (!recentThemesSet.has(theme.value)) {
14126 var selected = theme.value === currentTheme ? ' selected' : '';
@@ -14260,16 +14130,16 @@
14130 x += '</optgroup>';
14131 x += '</select></div>';
14132
14263 - setModalContent('xxAddAgent', 'Switch Theme', x);
14133 + setModalContent('xxAddAgent', "Switch theme", x);
14134 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14135 return false;
14136 }
14137
14138 function account_switchThemeEx() {
14269 - var themeSwitcher = document.getElementById("theme-switcher");
14139 + var themeSwitcher = document.getElementById('theme-switcher');
14140 const selectedTheme = themeSwitcher.value;
14141 const safeTheme = encodeURIComponent(selectedTheme);
14272 - var themeStylesheet = document.getElementById("theme-stylesheet");
14142 + var themeStylesheet = document.getElementById('theme-stylesheet');
14143 var newThemeStylesheet = `styles/themes/${safeTheme}/bootstrap.min.css`;
14144 themeStylesheet.href = newThemeStylesheet;
14145 // Save selected theme
@@ -14291,21 +14161,21 @@
14161 function account_createMesh() {
14162 // Check if we are disallowed from creating a device group
14163 if ((userinfo.siteadmin != 0xFFFFFFFF) && ((userinfo.siteadmin & 64) != 0)) {
14294 - setModalContent('xxAddAgent', 'New Device Group', 'This account does not have the rights to create a new device group.');
14164 + setModalContent('xxAddAgent', "New Device Group", 'This account does not have the rights to create a new device group.');
14165 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14166 return false;
14167 }
14168
14169 // Remind the user to verify the email address
14170 if ((userinfo.emailVerified !== true) && (serverinfo.emailcheck == true) && (userinfo.siteadmin != 0xFFFFFFFF)) {
14301 - setModalContent('xxAddAgent', 'Account Security', 'Unable to access this feature until an email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');
14171 + setModalContent('xxAddAgent', "Account Security", 'Unable to access this feature until a email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');
14172 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14173 return false;
14174 }
14175
14176 // Remind the user to add two-factor authentication
14177 if ((features & 0x00040000) && (count2factoraAuths() == 0)) {
14308 - setModalContent('xxAddAgent', 'Account Security', 'Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');
14178 + setModalContent('xxAddAgent', "Account Security", 'Unable to access this feature until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');
14179 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14180 return false;
14181 }
@@ -14322,7 +14192,7 @@
14192 }
14193
14194 // Prepare the modal content
14325 - var x = "Create a new device group using the options below" + '<br /><br />';
14195 + var x = "Create a new device group using the options below." + '<br /><br />';
14196 var localGroupType = '';
14197
14198 x += addHtmlFormFloating("Name", '<input id=dp2meshname maxlength=128 placeholder="Name" class=form-control onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) />');
@@ -14350,7 +14220,7 @@
14220 x += '</div>';
14221
14222 // Inject content into the modal
14353 - setModalContent('xxAddAgent', 'New Device Group', x);
14223 + setModalContent('xxAddAgent', "New Device Group", x);
14224
14225 // Show the modal
14226 showModal('xxAddAgentModal', 'idx_dlgOkButton', account_createMeshEx);
@@ -14491,7 +14361,7 @@
14361 function updateLoginTokens() {
14362 var x = '', count = 1;
14363 if ((loginTokens != null) && (loginTokens.length > 0)) {
14494 - x += '<p><strong>' + "Active Login Tokens" + '</strong> - <span id="p2createMeshLink1"> <button class="btn btn-primary btn-sm" onclick="return account_createLoginToken()"><i class="fa-fw fa-solid fa-plus-circle"></i> ' + "New" + '</button></span></p>';
14364 + x += '<p><strong>' + "Active Login Tokens" + '</strong> - <span id="p2createMeshLink1"> <button class="btn btn-primary btn-sm" onclick="return account_createLoginToken()"><i class="fa-fw fa-solid fa-circle-plus"></i> ' + "New" + '</button></span></p>';
14365 x += '<div style=margin-left:40px><table class="table table-hover table-striped"><tbody><tr class="table-active"><th scope=col style=text-align:left;width:430px>' + "Name" + '</th><th scope=col style=text-align:left>' + "Username" + '</th></tr>';
14366 for (var i = 0; i < loginTokens.length; i++) {
14367 var ltoken = loginTokens[i];
@@ -14517,7 +14387,7 @@
14387 var x = "Confirm removal of this login token?" + '<br /><br />';
14388 x += addHtmlValue("Name", EscapeHtml(token.name));
14389 x += addHtmlValue("Username", EscapeHtml(token.tokenUser));
14520 - setModalContent('xxAddAgent', 'Remove Login Token', x);
14390 + setModalContent('xxAddAgent', "Remove Login Token", x);
14391 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => function (b, tokenUser) { meshserver.send({ action: 'loginTokens', remove: [tokenUser] }); });
14392 }
14393
@@ -14536,14 +14406,14 @@
14406 x += addHtmlValue("Credentials", '<a href="https://console.developers.google.com/apis/api/drive.googleapis.com/credentials" rel="noreferrer noopener" target="_blank">' + "Google Drive Console" + '</a>');
14407 x += addHtmlFormFloating("Client ID", '<input id=gdclientid class="form-control" placeholder="xxxxxxxx.apps.googleusercontent.com" onkeyup=server_setupGoogleDriveBackupCheck1()></input>');
14408 x += addHtmlFormFloating("Client Secret", '<input id=gdclientsecret class="form-control" onkeyup=server_setupGoogleDriveBackupCheck1()></input>');
14539 - setModalContent('xxAddAgent', 'Google Drive Backup', x);
14409 + setModalContent('xxAddAgent', "Google Drive Backup", x);
14410 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => server_setupGoogleDriveBackupEx(3, 'gd1'));
14411 Q('gdclientid').focus();
14412 QE('idx_dlgOkButton', false);
14413 } else if (gd.state == 3) {
14414 var x = '<img style=float:right src="images/googledrive-48.png" /><div>' + "Google Drive backup is currently active." + '</div>';
14415 x += '<br /><label><input id=gdcheck type=checkbox class="form-check-input me-2" onchange=server_setupGoogleDriveBackupCheck2() />' + "Remove Configuration" + '</label>';
14546 - setModalContent('xxAddAgent', 'Google Drive Backup', x);
14416 + setModalContent('xxAddAgent', "Google Drive Backup", x);
14417 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => server_setupGoogleDriveBackupEx(3, 'gd0'));
14418 QE('idx_dlgOkButton', false);
14419 }
@@ -14561,28 +14431,26 @@
14431
14432 function server_showRestoreDlg() {
14433 if (xxdialogMode) return false;
14564 - var x = "Restore the server using a backup, <span style=color:red>this will delete the existing server data</span>. Only do this if you know what you are doing." + '<br /><br />';
14434 + var x = "Restore the server using a backup," + ' <span style=color:red>' + "this will delete the existing server data." + '</span> ' + "Only do this if you know what you are doing." + '<br /><br />';
14435 x += '<form action="/restoreserver.ashx' + ((urlargs.key) ? ('?key=' + urlargs.key) : '') + '" enctype="multipart/form-data" method="post"><div>';
14436 x += '<input type=hidden name=auth value=' + authCookie + '>';
14567 - x += '<input id=account_dlgFileInput type=file name=datafile class="form-control" accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()><br /><br />';
14568 - x += '<input id=account_dlgCancelButton type=button value=' + "Cancel" + ' style=float:right;width:80px;margin-left:5px>';
14569 - x += '<input id=account_dlgOkButton type=submit value=' + "OK" + ' style=float:right;width:80px onclick=dialogclose(1)>';
14570 - x += '</div><br /><br /></form>';
14437 + x += '<input id=account_dlgFileInput type=file name=datafile class="form-control" accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()>';
14438 + x += '</div></form>';
14439
14572 - setModalContent('xxAddAgent', 'Restore Server', x);
14440 + setModalContent('xxAddAgent', "Restore Server", x);
14441 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14442 account_validateServerRestore();
14443 return false;
14444 }
14445
14446 function account_validateServerRestore() {
14579 - QE('account_dlgOkButton', Q('account_dlgFileInput').files.length == 1);
14447 + QE('idx_dlgOkButton', Q('account_dlgFileInput').files.length == 1);
14448 }
14449
14450 function server_showVersionDlg() {
14451 if (xxdialogMode) return false;
14452 xxdialogMode = 2; xxdialogTag = 'MeshCentralServerUpdate';
14585 - setModalContent('xxAddAgent', 'MeshCentral Version', 'Loading...');
14453 + setModalContent('xxAddAgent', "MeshCentral Version", "Loading...");
14454 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14455 meshserver.send({ action: 'serverversion' });
14456 return false;
@@ -14604,7 +14472,7 @@
14472 function server_showErrorsDlg() {
14473 if (xxdialogMode) return false;
14474 xxdialogMode = 2; xxdialogTag = 'MeshCentralServerErrors';
14607 - setModalContent('xxAddAgent', 'Server Errors', 'Loading...');
14475 + setModalContent('xxAddAgent', "Server Errors", "Loading...");
14476 meshserver.send({ action: 'servererrors' });
14477 return false;
14478 }
@@ -14759,7 +14627,7 @@
14627 if (meshrights & 1) { x += '<br><input type=button class="btn btn-primary btn-sm mb-1" value=' + "Notes" + ' title="' + "View notes about this device group" + '" onclick=showNotes(false,"' + encodeURIComponentEx(currentMesh._id) + '") />'; }
14628 x += '<br style=clear:both><br>';
14629 if (meshrights & 2) {
14762 - x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog()"><i class="fa-solid fa-plus-circle"></i> ' + "Add Users" + '</button>';
14630 + x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog()"><i class="fa-solid fa-circle-plus"></i> ' + "Add Users" + '</button>';
14631 if (usergroups != null) {
14632 var userGroupCount = 0, newUserGroup = false;
14633 for (var i in usergroups) {
@@ -14767,7 +14635,7 @@
14635 userGroupCount++;
14636 if ((currentMesh.links == null) || (currentMesh.links[i] == null)) { newUserGroup = true; }
14637 }
14770 - if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(2)"><i class="fa-solid fa-plus-circle"></i> ' + "Add User Group" + '</button>'; }
14638 + if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(2)"><i class="fa-solid fa-circle-plus"></i> ' + "Add User Group" + '</button>'; }
14639 }
14640 }
14641
@@ -14780,15 +14648,15 @@
14648 }
14649 */
14650 if ((currentMesh.amt != null) && (currentMesh.amt.type > 0)) { // CCM Deactivate, CCM or ACM activation
14783 - x += '<button class="btn btn-primary btn-sm me-2" title="' + "Perform Intel&reg; AMT activation and configuration." + '" onclick=\'return showAmtSetup("' + currentMesh._id + '")\'><i class="fa-solid fa-gear"></i> ' + "Setup" + '</button>';
14651 + x += '<button class="btn btn-primary btn-sm me-2 mb-1" title="' + "Perform Intel&reg; AMT activation and configuration." + '" onclick=\'return showAmtSetup("' + currentMesh._id + '")\'><i class="fa-solid fa-gear"></i> ' + "Setup" + '</button>';
14652 }
14653 }
14654 if ((currentMesh.mtype == 2) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) {
14787 - x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick=\'return addAgentToMesh("' + currentMesh._id + '")\' title="' + "Add a new computer to this device group by installing the mesh agent." + '"><i class="fa-solid fa-plus-circle"></i> ' + "Add Agent" + '</button>';
14655 + x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick=\'return addAgentToMesh("' + currentMesh._id + '")\' title="' + "Add a new computer to this device group by installing the mesh agent." + '"><i class="fa-solid fa-circle-plus"></i> ' + "Add Agent" + '</button>';
14656 x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick=\'return inviteAgentToMesh("' + currentMesh._id + '")\' title="' + "Invite someone to install the mesh agent on this device group." + '"><i class="fa-solid fa-user-plus"></i> ' + "Invite" + '</button>';
14657 }
14658 if ((currentMesh.mtype == 3) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) {
14791 - x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick=\'return addLocalDeviceToMesh("' + currentMesh._id + '")\' title="' + "Add device located on the local network." + '"><i class="fa-solid fa-plus-circle"></i> ' + "Add Device" + '</button>';
14659 + x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick=\'return addLocalDeviceToMesh("' + currentMesh._id + '")\' title="' + "Add device located on the local network." + '"><i class="fa-solid fa-circle-plus"></i> ' + "Add Device" + '</button>';
14660 }
14661 if (currentMesh.amt && (currentMesh.amt.type > 2) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) { // ACM activation or Full Automatic
14662 x += '<button class="btn btn-primary btn-sm me-2 mb-1" title="' + "Switch Intel AMT to Admin Control Mode (ACM)." + '" onclick=\'return showAmtAcmSetup()\'><i class="fa-solid fa-circle-arrow-down"></i> ' + "ACM" + '</button>';
@@ -14927,7 +14795,7 @@
14795 function meshImportDeviceList() {
14796 if (xxdialogMode) return;
14797 var x = "Import a list of local Intel&reg; AMT devices in MeshCommander JSON format." + '<br /><br /><input type=file id=d4importFile class="form-control" accept=".json" onchange=meshImportDeviceListValidate() />';
14930 - setModalContent('xxAddAgent', 'Import Intel&reg; AMT Devices', x);
14798 + setModalContent('xxAddAgent', "Import Intel&reg; AMT Devices", x);
14799 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => meshImportDeviceListEx());
14800 QE('idx_dlgOkButton', false);
14801 }
@@ -14943,7 +14811,7 @@
14811 try {
14812 j = JSON.parse(r.target.result);
14813 } catch (ex) {
14946 - setModalContent('xxAddAgent', 'Import Intel&reg; AMT Devices', format("Invalid JSON file: {0}.", ex));
14814 + setModalContent('xxAddAgent', "Import Intel&reg; AMT Devices", format("Invalid JSON file: {0}.", ex));
14815 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14816 return;
14817 }
@@ -14962,10 +14830,10 @@
14830 }
14831 }
14832 if (ok == 0) {
14965 - setModalContent('xxAddAgent', 'User Account Import', 'Unable to import any device.');
14833 + setModalContent('xxAddAgent', "User Account Import", 'Unable to import any device.');
14834 }
14835 } else {
14968 - setModalContent('xxAddAgent', 'Import Intel&reg; AMT Devices', 'Invalid JSON file format.');
14836 + setModalContent('xxAddAgent', "Import Intel&reg; AMT Devices", 'Invalid JSON file format.');
14837 }
14838 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14839 };
@@ -14976,10 +14844,10 @@
14844 if (xxdialogMode) return;
14845 var x = '', acmoption = '';
14846 if ((features & 0x100000) != 0) { acmoption = '<option value=3>' + "Simple Admin Control Mode (ACM)" + '</option>'; }
14979 - x += addHtmlFormFloating('Type', '<select id=dp20amtpolicy class="form-select" onchange=p20editMeshAmtChange()><option value=0>' + "No Policy" + '</option><option value=1>' + "Deactivate" + '</option><option value=2>' + "Simple Client Control Mode (CCM)" + '</option>' + acmoption + '<option value=4>' + "Fully Automatic" + '</option></select>')
14847 + x += addHtmlFormFloating("Type", '<select id=dp20amtpolicy class="form-select" onchange=p20editMeshAmtChange()><option value=0>' + "No Policy" + '</option><option value=1>' + "Deactivate" + '</option><option value=2>' + "Simple Client Control Mode (CCM)" + '</option>' + acmoption + '<option value=4>' + "Fully Automatic" + '</option></select>')
14848 x += '<div id=dp20amtpolicydiv></div>';
14849
14982 - setModalContent('xxAddAgent', 'Intel&reg; AMT Policy', x);
14850 + setModalContent('xxAddAgent', "Intel&reg; AMT Policy", x);
14851 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editMeshAmtEx);
14852
14853 if (currentMesh.amt) { Q('dp20amtpolicy').value = currentMesh.amt.type; }
@@ -15002,22 +14870,22 @@
14870 var ptype = Q('dp20amtpolicy').value, x = '';
14871 if ((ptype == 2) || (ptype == 3)) {
14872 var keeppass = ((currentMesh.amt != null) && (currentMesh.amt.password == 1)) ? '<option value=1 selected>' + "Keep existing password" + '</option>' : '';
15005 - x += addHtmlFormFloating('Password', '<select id=dp20amtpass class="form-select" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy()><option value=0>' + "Randomize password" + '</option>' + keeppass + '<option value=2>' + "Select new password" + '</option></select>')
14873 + x += addHtmlFormFloating("Password", '<select id=dp20amtpass class="form-select" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy()><option value=0>' + "Randomize password" + '</option>' + keeppass + '<option value=2>' + "Select new password" + '</option></select>')
14874 x += '<div id=dp20amtpassdiv style=display:none>';
15007 - x += addHtmlFormFloating('New password*', '<input id=dp20amtpolicypass type=password class="form-control" maxlength=32 placeholder="New password*" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />');
15008 - x += addHtmlFormFloating('New password*', '<input id=dp20amtpolicypass2 type=password class="form-control" maxlength=32 placeholder="New password*" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />');
14875 + x += addHtmlFormFloating("New password*", '<input id=dp20amtpolicypass type=password class="form-control" maxlength=32 placeholder="New password*" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />');
14876 + x += addHtmlFormFloating("New password*", '<input id=dp20amtpolicypass2 type=password class="form-control" maxlength=32 placeholder="New password*" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />');
14877 x += '</div>';
15010 - if (ptype == 3) { x += addHtmlFormFloating('CCM mode', '<select id=dp20amtccmmode class="form-select" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy()><option value=0>' + "Don't change, keep CCM if setup" + '</option><option value=1>' + "Deactivate CCM if setup" + '</option><option value=2>' + "Activate to CCM, if ACM fails" + '</option></select>'); }
14878 + if (ptype == 3) { x += addHtmlFormFloating("CCM mode", '<select id=dp20amtccmmode class="form-select" onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy()><option value=0>' + "Don't change, keep CCM if setup" + '</option><option value=1>' + "Deactivate CCM if setup" + '</option><option value=2>' + "Activate to CCM, if ACM fails" + '</option></select>'); }
14879 x += '<div id=dp20amtbadpassdiv style=display:none>';
15012 - x += addHtmlFormFloating('Unknown password', '<select id=dp20amtbadpass class="form-select"><option value=0>' + "Do nothing" + '</option><option value=1>' + "If in CCM, reactivate Intel&reg; AMT" + '</option></select>');
14880 + x += addHtmlFormFloating("Unknown password", '<select id=dp20amtbadpass class="form-select"><option value=0>' + "Do nothing" + '</option><option value=1>' + "If in CCM, reactivate Intel&reg; AMT" + '</option></select>');
14881 x += '</div>';
15014 - if ((features & 0x400) == 0) { x += addHtmlFormFloating('CIRA setup', '<select id=dp20amtcira class="form-select" title="Client Initiated Remote Access"><option value=0>' + "Do nothing" + '</option><option value=1>' + "Don't connect to server" + '</option><option value=2>' + "Connect to server" + '</option></select>'); }
14882 + if ((features & 0x400) == 0) { x += addHtmlFormFloating("CIRA setup", '<select id=dp20amtcira class="form-select" title="' + "Client Initiated Remote Access" + '"><option value=0>' + "Do nothing" + '</option><option value=1>' + "Don't connect to server" + '</option><option value=2>' + "Connect to server" + '</option></select>'); }
14883 x += '<span id=dp10passNotify style="font-size:10px"> ' + "* 8 characters, 1 upper, 1 lower, 1 numeric, 1 non-alpha numeric." + '</span>';
14884 if ((currentMesh.mtype == 2) && (ptype == 2)) { x += '<span style="font-size:10px"> ' + "This policy will not impact devices with Intel&reg; AMT in ACM mode." + '</span>'; }
14885 }
15018 - if (ptype == 0) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-times-circle text-danger" style="padding-right:8px; font-size:60px;"></i></div><div class="col-10">When this policy is selected, Intel&reg; AMT is not managed by this server. Intel AMT can still be used by manually activating and configuring it.</div></div>'; }
15019 - if (ptype == 1) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-times-circle text-danger" style="font-size:60px; padding-right:8px; color:green;"></i></div><div class="col-10">When this policy is selected, any Intel&reg; AMT in Client Control Mode (CCM) will be deactivated. Other devices will have CIRA cleared and can still be managed manually.</div></div>'; }
15020 - if (ptype == 4) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-check-circle text-success" style="font-size:60px; padding-right:8px; color:blue;"></i></div><div class="col-10">This is the recommended policy. Intel&reg; AMT activation and management is completely automated and the server will attempt to make best possible use of hardware management.</div></div>'; }
14886 + if (ptype == 0) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-times-circle text-danger" style="padding-right:8px; font-size:60px;"></i></div><div class="col-10">' + "When this policy is selected, Intel&reg; AMT is not managed by this server. Intel AMT can still be used by manually activating and configuring it." + '</div></div>'; }
14887 + if (ptype == 1) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-times-circle text-danger" style="font-size:60px; padding-right:8px; color:green;"></i></div><div class="col-10">' + "When this policy is selected, any Intel&reg; AMT in Client Control Mode (CCM) will be deactivated. Other devices will have CIRA cleared and can still be managed manually." + '</div></div>'; }
14888 + if (ptype == 4) { x = '<div class="row"><div class="col-2"><i class="fa-solid fa-check-circle text-success" style="font-size:60px; padding-right:8px; color:blue;"></i></div><div class="col-10">' + "This is the recommended policy. Intel&reg; AMT activation and management is completely automated and the server will attempt to make best possible use of hardware management." + '</div></div>'; }
14889 QH('dp20amtpolicydiv', x);
14890 setTimeout(dp20amtValidatePolicy, 500);
14891 }
@@ -15058,7 +14926,7 @@
14926 if (xxdialogMode) return false;
14927 var x = format("Are you sure you want to delete group {0}? Deleting the device group will also delete all information about devices within this group.", EscapeHtml(currentMesh.name)) + '<br /><br />';
14928 x += '<label class=form-check-label><input id=p20check type=checkbox class="form-check-input m-2" onchange=p20validateDeleteMeshDialog() />' + "Confirm" + '</label>';
15061 - setModalContent('xxAddAgent', 'Delete Group', x);
14929 + setModalContent('xxAddAgent', "Delete Group", x);
14930 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
14931 p20showDeleteMeshDialogEx(3, '');
14932 });
@@ -15085,13 +14953,13 @@
14953 if (relayDevices.length == 0) {
14954 // Relay relay devices available
14955 x = "No relay devices available.";
15088 - setModalContent('xxAddAgent', 'Edit Device Group', "No relay devices available.");
14956 + setModalContent('xxAddAgent', "Edit Device Group", "No relay devices available.");
14957 showModal('xxAddAgentModal', 'idx_dlgOkButton');
14958 } else {
14959 var relayDevices2 = [];
14960 for (var i in relayDevices) { relayDevices2.push('<option value="' + (relayDevices[i]._id + '"' + ((currentMesh.relayid == relayDevices[i]._id) ? ' selected' : '')) + '>' + EscapeHtml(relayDevices[i].name) + '</option>'); }
14961 var x = addHtmlFormFloating("Relay Device", '<select id=d2devrelay class="form-select">' + relayDevices2.join('') + '</select>');
15094 - setModalContent('xxAddAgent', 'Edit Device Group', x);
14962 + setModalContent('xxAddAgent', "Edit Device Group", x);
14963 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshrelayEx);
14964 }
14965 }
@@ -15103,15 +14971,15 @@
14971 function p20editmesh(focus) {
14972 if (xxdialogMode) return;
14973 var x = '<div class="form-floating mb-2">';
15106 - x += '<input type=text class="form-control" id=dp20meshname maxlength=128 placeholder=Name onchange=p20editmeshValidate() onkeyup=p20editmeshValidate(event) />';
15107 - x += '<label for=dp20meshname>Name</label>';
14974 + x += '<input type=text class="form-control" id=dp20meshname maxlength=128 placeholder="' + "Name" + '" onchange=p20editmeshValidate() onkeyup=p20editmeshValidate(event) />';
14975 + x += '<label for=dp20meshname>' + "Name" + '</label>';
14976 x += '</div>';
14977
14978 x += '<div class="form-floating mb-2">';
15111 - x += '<textarea id=dp20meshdesc class="form-control" maxlength=1024 placeholder=Description></textarea>';
15112 - x += '<label for=dp20meshdesc>Description</label>';
14979 + x += '<textarea id=dp20meshdesc class="form-control" maxlength=1024 placeholder="' + "Description" + '"></textarea>';
14980 + x += '<label for=dp20meshdesc>' + "Description" + '</label>';
14981 x += '</div>';
15114 - setModalContent('xxAddAgent', 'Edit Device Group', x);
14982 + setModalContent('xxAddAgent', "Edit Device Group", x);
14983 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshEx);
14984
14985 Q('dp20meshname').value = currentMesh.name;
@@ -15209,7 +15077,7 @@
15077 }
15078 }
15079
15212 - setModalContent('xxAddAgent', 'Edit Device Group Features', x);
15080 + setModalContent('xxAddAgent', "Edit Device Group Features", x);
15081 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshfeaturesEx);
15082 p20editmeshfeaturesValidate();
15083 }
@@ -15345,7 +15213,7 @@
15213
15214 if (userid == null) {
15215 xxdialogButtons = 3; xxdialogTag = '';
15348 - setModalContent('xxAddAgent', 'Add Users to Device Group', x);
15216 + setModalContent('xxAddAgent', "Add Users to Device Group", x);
15217 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
15218 p20showAddMeshUserDialogEx(xxdialogButtons, xxdialogTag);
15219 });
@@ -15713,7 +15581,7 @@
15581
15582 x += addHtmlValue("Permissions", r.join(", "));
15583 if (((userinfo._id) != xuserid) && (cmeshrights == 0xFFFFFFFF || (((cmeshrights & 2) != 0) && (meshrights != 0xFFFFFFFF)))) buttons += 4;
15716 - setModalContent('xxAddAgent', 'Device Group User', x);
15584 + setModalContent('xxAddAgent', "Device Group User", x);
15585 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p20viewuserEx(buttons, xuserid));
15586 }
15587 }
@@ -15725,10 +15593,10 @@
15593 if (usergroups && usergroups[userid]) { uname = usergroups[userid].name; }
15594 if (userinfo._id == userid) { uname = userinfo.name; }
15595 if (userid.startsWith('user/')) {
15728 - setModalContent('xxAddAgent', 'Remove User Permissions', format("Confirm removal of rights for user \"{0}\"?", EscapeHtml(decodeURIComponent(uname))));
15596 + setModalContent('xxAddAgent', "Remove User Permissions", format("Confirm removal of rights for user \"{0}\"?", EscapeHtml(decodeURIComponent(uname))));
15597 }
15598 if (userid.startsWith('ugrp/')) {
15731 - setModalContent('xxAddAgent', 'Remove User Group Permissions', format("Confirm removal of rights for user group \"{0}\"?", EscapeHtml(decodeURIComponent(uname))), userid);
15599 + setModalContent('xxAddAgent', "Remove User Group Permissions", format("Confirm removal of rights for user group \"{0}\"?", EscapeHtml(decodeURIComponent(uname))), userid);
15600 }
15601 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p20viewuserEx2(3, userid));
15602 }
@@ -15760,7 +15628,7 @@
15628 x += '<div id=d2agentInstallTypeDiv>';
15629 x += addHtmlFormFloating("Installation Type", '<select id=agentInviteType class="form-select"><option value=0>' + "Background and interactive" + '</option><option value=2>' + "Background only" + '</option><option value=1>' + "Interactive only" + '</option></select>');
15630 x += '</div>';
15763 - setModalContent('xxAddAgent', 'Invite Codes', x);
15631 + setModalContent('xxAddAgent', "Invite Codes", x);
15632 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshInviteCodeEx);
15633 if (currentMesh.invite != null) {
15634 Q('agentJoinCheck').checked = true;
@@ -15775,7 +15643,7 @@
15643 x += '<div style=width:100%;text-align:center><a rel="noreferrer noopener" target=_blank href="' + url + '">' + url + '</a></div><br />';
15644 x += addHtmlValue("Invite Codes", currentMesh.invite.codes.join(', '));
15645 x += addHtmlValue("Installation Type", ["Background and interactive", "Interactive only", "Background only"][currentMesh.invite.flags & 3]);
15778 - setModalContent('xxAddAgent', 'Invite Codes', x);
15646 + setModalContent('xxAddAgent', "Invite Codes", x);
15647 showModal('xxAddAgentModal', 'idx_dlgOkButton');
15648 }
15649 }
@@ -15826,7 +15694,7 @@
15694 x += '<div class="form-check"><label><input id=p20emsgDeviceHelp class="form-check-input me-2" type=checkbox />' + "Help requests" + '</label></div>';
15695 }
15696
15829 - setModalContent('xxAddAgent', 'Notification Settings', x);
15697 + setModalContent('xxAddAgent', "Notification Settings", x);
15698 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editMeshNotifyEx);
15699
15700 Q('p20notifyIntelDeviceConnect').checked = (meshNotify & 2);
@@ -16136,7 +16004,7 @@
16004 }
16005
16006 function p5showPublicLink(u) {
16139 - setModalContent('xxAddAgent', 'Public Link', '<input type=text style=width:350px value="' + u + '" readonly /> <i class="fa-regular fa-copy" title="' + "Copy link to clipboard" + '" style="cursor:pointer" onclick=copyTextToClip2("' + encodeURIComponentEx(u) + '")></i>');
16007 + setModalContent('xxAddAgent', "Public Link", '<input type=text style=width:350px value="' + u + '" readonly /> <i class="fa-regular fa-copy" title="' + "Copy link to clipboard" + '" style="cursor:pointer" onclick=copyTextToClip2("' + encodeURIComponentEx(u) + '")></i>');
16008 showModal('xxAddAgentModal', 'idx_dlgOkButton');
16009 return false;
16010 }
@@ -16181,7 +16049,7 @@
16049 function p5folderup(x) { if (x == null) { filetreelocation.pop(); } else { while (filetreelocation.length > x) { filetreelocation.pop(); } } updateFiles(); return false; }
16050 function p5folderset(x) { filetreelocation.push(decodeURIComponent(x)); updateFiles(); return false; }
16051 function p5createfolder() {
16184 - setModalContent('xxAddAgent', 'New Folder', '<input type=text id=p5renameinput class="form-control" maxlength=64 onkeyup=p5fileNameCheck(event) />');
16052 + setModalContent('xxAddAgent', "New Folder", '<input type=text id=p5renameinput class="form-control" maxlength=64 onkeyup=p5fileNameCheck(event) />');
16053 showModal('xxAddAgentModal', 'idx_dlgOkButton', p5createfolderEx);
16054 focusTextBox('p5renameinput');
16055 p5fileNameCheck();
@@ -16189,7 +16057,7 @@
16057 function p5createfolderEx() { meshserver.send({ action: 'fileoperation', fileop: 'createfolder', path: filetreelocation, newfolder: Q('p5renameinput').value }); }
16058 function p5deletefile() {
16059 var cc = getFileSelCount(), rec = (getFileSelDirCount() > 0) ? '<br /><br /><label><input type=checkbox class="form-check-input me-2" id=p5recdeleteinput>' + "Recursive delete" + '</label><br>' : '<input type=checkbox id=p5recdeleteinput class="form-check-input me-2" style=\'display:none\'>';
16192 - setModalContent('xxAddAgent', 'Delete', (cc > 1) ? (format("Delete {0} selected items?", cc) + rec) : ("Delete selected item?" + rec));
16060 + setModalContent('xxAddAgent', "Delete", (cc > 1) ? (format("Delete {0} selected items?", cc) + rec) : ("Delete selected item?" + rec));
16061 showModal('xxAddAgentModal', 'idx_dlgOkButton', p5deletefileEx);
16062 }
16063 function p5deletefileEx() { var delfiles = [], checkboxes = document.getElementsByName('fc'); for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { delfiles.push(checkboxes[i].value); } } meshserver.send({ action: 'fileoperation', fileop: 'delete', path: filetreelocation, delfiles: delfiles, rec: Q('p5recdeleteinput').checked }); }
@@ -16198,7 +16066,7 @@
16066 for (var i = 0; i < checkboxes.length; i++) {
16067 if (checkboxes[i].checked) { renamefile = checkboxes[i].value; }
16068 }
16201 - setModalContent('xxAddAgent', 'Rename', '<input type=text id=p5renameinput class="form-control" maxlength=64 onkeyup=p5fileNameCheck(event) value="' + renamefile + '" />');
16069 + setModalContent('xxAddAgent', "Rename", '<input type=text id=p5renameinput class="form-control" maxlength=64 onkeyup=p5fileNameCheck(event) value="' + renamefile + '" />');
16070 showModal('xxAddAgentModal', 'idx_dlgOkButton', p5renamefileEx);
16071 focusTextBox('p5renameinput'); p5fileNameCheck();
16072 }
@@ -16206,7 +16074,7 @@
16074 function p5fileNameCheck(e) { var x = isFilenameValid(Q('p5renameinput').value); QE('idx_dlgOkButton', x); if ((x == true) && (e && e.keyCode == 13)) { dialogclose(1); } }
16075 var isFilenameValid = (function () { var x1 = /^[^\\/:\*\?"<>\|]+$/, x2 = /^\./, x3 = /^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i; return function isFilenameValid(fname) { return x1.test(fname) && !x2.test(fname) && !x3.test(fname) && (fname[0] != '.'); } })();
16076 function p5uploadFile() {
16209 - setModalContent('xxAddAgent', 'Upload File', '<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="' + encodeURIComponentEx(filetreelinkpath) + '" /><input type=file name=files id=p5uploadinput class="form-control" multiple=multiple onchange="p5updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value=' + authCookie + ' /><input type=submit id=p5loginSubmit class="btn btn-outline-success mt-2" style=display:none/><span id=p5confirmOverwriteSpan style=display:none><br/><label><input type=checkbox class="form-check-input me-2" id=p5confirmOverwrite onchange="p5updateUploadDialogOk(\'p5uploadinput\')" />' + "Confirm overwrite?" + '</label></span></ >');
16077 + setModalContent('xxAddAgent', "Upload File", '<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="' + encodeURIComponentEx(filetreelinkpath) + '" /><input type=file name=files id=p5uploadinput class="form-control" multiple=multiple onchange="p5updateUploadDialogOk(\'p5uploadinput\')" /><input type=hidden name=authCookie value=' + authCookie + ' /><input type=submit id=p5loginSubmit class="btn btn-outline-success mt-2" style="display:none" /><span id=p5confirmOverwriteSpan style=display:none><br/><label><input type=checkbox class="form-check-input me-2" id=p5confirmOverwrite onchange="p5updateUploadDialogOk(\'p5uploadinput\')" />' + "Confirm overwrite?" + '</label></span></ >');
16078 showModal('xxAddAgentModal', 'idx_dlgOkButton', p5uploadFileEx);
16079 p5updateUploadDialogOk('p5uploadinput');
16080 }
@@ -16257,7 +16125,7 @@
16125 }
16126 function p5pasteFile() {
16127 var x = ''; if ((p5clipboard != null) && (p5clipboard.length > 0)) { x = format("Confirm {0} of {1} entrie{2} to this location?", (p5clipboardCut == 0 ? 'copy' : 'move'), p5clipboard.length, ((p5clipboard.length > 1) ? 's' : '')) }
16260 - setModalContent('xxAddAgent', 'Paste', x);
16128 + setModalContent('xxAddAgent', "Paste", x);
16129 showModal('xxAddAgentModal', 'idx_dlgOkButton', p5pasteFileEx);
16130
16131 }
@@ -16295,7 +16163,7 @@
16163 p5PerformUpload(1, e.dataTransfer.files);
16164 } else {
16165 // Otherwise, prompt for confirmation
16298 - setModalContent('xxAddAgent', 'Upload File', format((overWriteCount == 1) ? "Upload will overwrite 1 file. Continue?" : "Upload will overwrite {0} files. Continue?", overWriteCount));
16166 + setModalContent('xxAddAgent', "Upload File", format((overWriteCount == 1) ? "Upload will overwrite 1 file. Continue?" : "Upload will overwrite {0} files. Continue?", overWriteCount));
16167 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p5PerformUpload(3, e.dataTransfer.files));
16168 }
16169 }
@@ -16655,7 +16523,7 @@
16523 x += addHtmlFormFloating("Group By", '<select id=d2reportGroupBy class="form-select" onchange=p3showReportValidation()><option value=1>' + "None" + '</option><option value=2>' + "Device Group" + '</option><option value=3>' + "User" + '</option>');
16524 x += addHtmlFormFloating("Format", '<select id=d2reportFormat class="form-select" onchange=p3showReportValidation()><option value=1>' + "CSV" + '</option><option value=2>' + "JSON" + '</option>');
16525 x += '</div>';
16658 - setModalContent('xxAddAgent', 'Download Report', x);
16526 + setModalContent('xxAddAgent', "Download Report", x);
16527 showModal('xxAddAgentModal', 'idx_dlgOkButton');
16528 p3showReportValidation();
16529 Q('d2reportType').focus();
@@ -16680,7 +16548,7 @@
16548 var x = "Download the list of events with one of the file formats below." + '<br /><br />';
16549 x += addHtmlValue("CSV Format", '<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogCSV(' + mode + ')">' + "eventslist.csv" + '</a>');
16550 x += addHtmlValue("JSON Format", '<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogJSON(' + mode + ')">' + "eventslist.json" + '</a>');
16683 - setModalContent('xxAddAgent', 'Event List Export', x);
16551 + setModalContent('xxAddAgent', "Event List Export", x);
16552 showModal('xxAddAgentModal', 'idx_dlgOkButton');
16553 }
16554
@@ -16997,7 +16865,7 @@
16865
16866 function showSendSMS(userid) {
16867 if (xxdialogMode) return;
17000 - setModalContent('xxAddAgent', 'Send SMS', '<textarea id=d2smsText maxlength=160 style=background-color:#fcf3cf;width:100%;height:100px;resize:none onKeyUp=showSendSMSValidate()></textarea><span style=font-size:10px><span>');
16868 + setModalContent('xxAddAgent', "Send SMS", '<textarea id=d2smsText maxlength=160 style=width:100%;height:100px;resize:none onKeyUp=showSendSMSValidate()></textarea><span style=font-size:10px><span>');
16869 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showSendSMSEx(3, userid));
16870 Q('d2smsText').focus();
16871 showSendSMSValidate();
@@ -17008,7 +16876,7 @@
16876
16877 function showSendMessage(userid) {
16878 if (xxdialogMode) return;
17011 - setModalContent('xxAddAgent', 'Send Message', '<textarea id=d2smsText maxlength=160 style=background-color:#fcf3cf;width:100%;height:100px;resize:none onKeyUp=showSendSMSValidate()></textarea><span style=font-size:10px><span>');
16879 + setModalContent('xxAddAgent', "Send Message", '<textarea id=d2smsText maxlength=160 style=width:100%;height:100px;resize:none onKeyUp=showSendSMSValidate()></textarea><span style=font-size:10px><span>');
16880 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showSendMessageEx(3, userid));
16881
16882 Q('d2smsText').focus();
@@ -17019,10 +16887,10 @@
16887
16888 function showSendEmail(userid) {
16889 if (xxdialogMode) return;
17022 - var x = '<input id=d2emailSubject style=background-color:#fcf3cf;width:100% placeholder="' + "Subject" + '"></input>';
17023 - x += '<textarea id=d2emailText maxlength=10000 style="background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:auto" onKeyUp=showSendEmailValidate()></textarea>';
16890 + var x = '<input id=d2emailSubject style=width:100% placeholder="' + "Subject" + '"></input>';
16891 + x += '<textarea id=d2emailText maxlength=10000 style="width:100%;height:200px;resize:none;overflow-y:auto" onKeyUp=showSendEmailValidate()></textarea>';
16892
17025 - setModalContent('xxAddAgent', 'Send Email', x);
16893 + setModalContent('xxAddAgent', "Send Email", x);
16894 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => showSendEmailEx(3, userid));
16895
16896 Q('d2emailSubject').focus();
@@ -17035,7 +16903,7 @@
16903 function showUserAlertDialog(e, userid) {
16904 if (xxdialogMode) return;
16905 haltEvent(e);
17038 - var x = '<div style=margin-bottom:6px>' + "Send a text notification to this user." + '</div><textarea id=d2notifyText maxlength=2048 style="width:100%;height:184px;resize:none;background-color:#fcf3cf"></textarea>';
16906 + var x = '<div style=margin-bottom:6px>' + "Send a text notification to this user." + '</div><textarea id=d2notifyText maxlength=2048 style="width:100%;height:184px;resize:none"></textarea>';
16907 x += '<select style=width:100% id=broadcastMessageMaxTime>';
16908 x += '<option value=0>' + "Show message until dismissed by user" + '</option>';
16909 x += '<option value=10>' + "Show for 10 seconds" + '</option>';
@@ -17061,7 +16929,7 @@
16929 // Display the dialog box
16930 var x = '';
16931 x += '<label><input id=d2c1 type=checkbox class="form-check-input me-2"' + (userViewSettings.noViewLimit ? '' : ' checked') + '>' + "Only display first 100 users" + '</label><br />';
17064 - setModalContent('xxAddAgent', 'Users View', x);
16932 + setModalContent('xxAddAgent', "Users View", x);
16933 showModal('xxAddAgentModal', 'idx_dlgOkButton', onUsersViewSettingsEx);
16934 }
16935
@@ -17079,7 +16947,7 @@
16947 x += "CSV file format is as follows:" + '<br />';
16948 x += '<pre>user,pass,email,resetNextLogin\r\nx1,x,x1@x,\r\nx2,x,,true\r\n</pre><br />';
16949 x += '<input type=file id=d4importFile class="form-control" accept=".json,.csv" onchange=p4batchAccountCreateValidate() />';
17082 - setModalContent('xxAddAgent', 'User Account Import', x);
16950 + setModalContent('xxAddAgent', "User Account Import", x);
16951 showModal('xxAddAgentModal', 'idx_dlgOkButton', p4batchAccountCreateEx);
16952 //QE('idx_dlgOkButton', false);
16953 }
@@ -17132,18 +17000,18 @@
17000 if ((j[i].email != null) && ((typeof j[i].email != 'string') || (j[i].email.length < 1) || (j[i].email.length > 128))) { ok = false; }
17001 }
17002 if (ok == false) {
17135 - setModalContent('xxAddAgent', 'User Account Import', "Invalid CSV file format.");
17003 + setModalContent('xxAddAgent', "User Account Import", "Invalid CSV file format.");
17004 } else {
17005 meshserver.send({ action: 'adduserbatch', users: j });
17006 }
17007 } else {
17140 - setModalContent('xxAddAgent', 'User Account Import', "Invalid CSV file format.");
17008 + setModalContent('xxAddAgent', "User Account Import", "Invalid CSV file format.");
17009 }
17010 } else {
17011 try {
17012 j = JSON.parse(r.target.result);
17013 } catch (ex) {
17146 - setModalContent('xxAddAgent', 'User Account Import', format("Invalid JSON file: {0}.", ex));
17014 + setModalContent('xxAddAgent', "User Account Import", format("Invalid JSON file: {0}.", ex));
17015 showModal('xxAddAgentModal', 'idx_dlgOkButton');
17016 return;
17017 }
@@ -17156,12 +17024,12 @@
17024 if ((j[i].email != null) && ((typeof j[i].email != 'string') || (j[i].email.length < 1) || (j[i].email.length > 128))) { ok = false; }
17025 }
17026 if (ok == false) {
17159 - setModalContent('xxAddAgent', 'User Account Import', "Invalid JSON file format.");
17027 + setModalContent('xxAddAgent', "User Account Import", "Invalid JSON file format.");
17028 } else {
17029 meshserver.send({ action: 'adduserbatch', users: j });
17030 }
17031 } else {
17164 - setModalContent('xxAddAgent', 'User Account Import', "Invalid JSON file format.");
17032 + setModalContent('xxAddAgent', "User Account Import", "Invalid JSON file format.");
17033 }
17034 showModal('xxAddAgentModal', 'idx_dlgOkButton');
17035 }
@@ -17174,7 +17042,7 @@
17042 var x = "Download the list of users with one of the file formats below." + '<br /><br />';
17043 x += addHtmlValue("CSV Format", '<a href=# style=cursor:pointer onclick=\'return p4downloadUserInfoCSV()\'>' + "userlist.csv" + '</a>');
17044 x += addHtmlValue("JSON Format", '<a href=# style=cursor:pointer onclick=\'return p4downloadUserInfoJSON()\'>' + "userlist.json" + '</a>');
17177 - setModalContent('xxAddAgent', 'User List Export', x);
17045 + setModalContent('xxAddAgent', "User List Export", x);
17046 showModal('xxAddAgentModal', 'idx_dlgOkButton');
17047 }
17048
@@ -17207,14 +17075,14 @@
17075
17076 function showUserBroadcastDialog(targetid) {
17077 if (xxdialogMode) return;
17210 - var x = '<div style=margin-bottom:6px>' + "Broadcast a message to all connected users." + '</div><textarea id=broadcastMessage class="form-control mb-2" style="width:100%;height:184px;resize:none;background-color:#fcf3cf" value="" maxlength=2048 /></textarea>';
17078 + var x = '<div style=margin-bottom:6px>' + "Broadcast a message to all connected users." + '</div><textarea id=broadcastMessage class="form-control mb-2" style="width:100%;height:184px;resize:none" value="" maxlength=2048 /></textarea>';
17079 x += '<select style=width:100% class="form-select" id=broadcastMessageMaxTime>';
17080 x += '<option value=0>' + "Show message until dismissed by user" + '</option>';
17081 x += '<option value=10>' + "Show for 10 seconds" + '</option>';
17082 x += '<option value=60>' + "Show for 1 minute" + '</option>';
17083 x += '<option value=300>' + "Show for 5 minutes" + '</option>';
17084 x += '</select>';
17217 - setModalContent('xxAddAgent', 'Broadcast Message', x);
17085 + setModalContent('xxAddAgent', "Broadcast Message", x);
17086 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
17087 showUserBroadcastDialogEx(3, targetid ? decodeURIComponent(targetid) : null);
17088 });
@@ -17255,7 +17123,7 @@
17123 if (rc > 0) { x += '<div style=font-size:x-small;padding:6px>' + format("Requirements: {0}.", r.join(', ')) + '</div>'; }
17124 }
17125
17258 - setModalContent('xxAddAgent', 'Create Account', x);
17126 + setModalContent('xxAddAgent', "Create Account", x);
17127 showModal('xxAddAgentModal', 'idx_dlgOkButton', showCreateNewAccountDialogEx);
17128 showCreateNewAccountDialogValidate();
17129 if ((features & 0x200000) == 0) { Q('p4name').focus(); } else { Q('p4email').focus(); }
@@ -17307,7 +17175,7 @@
17175 if (user.groups != null) { groups = user.groups.join(', ') }
17176 var x = "Enter a comma seperate list of administrative realms names." + '<br /><br />';
17177 x += `<div class="form-floating mb-2"><input id=dp4usergroups value="${groups}" class="form-control" placeholder="Name1, Name2, Name3" maxlength=256 onchange=p4validateUserGroups() onkeyup=p4validateUserGroups() /><label for=dp4usergroups>Realms</label></div>`;
17310 - setModalContent('xxAddAgent', 'Administrative Realms', x);
17178 + setModalContent('xxAddAgent', "Administrative Realms", x);
17179 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
17180 showUserGroupDialogEx(e, user);
17181 });
@@ -17338,7 +17206,7 @@
17206 if (user == null) return;
17207 var uself = (userinfo._id == user._id);
17208 var x = '';
17341 - x += '<div class="d-inline-flex align-items-center"><label class="form-label me-2"><input type=checkbox onchange=showUserAdminDialogValidate() class="form-check-input me-2" id=ua_fileaccess>' + "Server Files, " + '</label><input type=number class="me-1 form-control" onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>' + "k max, blank for default" + '</div><br><hr/>';
17209 + x += '<div class="d-inline-flex align-items-center"><label class="form-label me-2"><input type=checkbox onchange=showUserAdminDialogValidate() class="form-check-input me-2" id=ua_fileaccess>' + "Server Files" + '</label>, <input type=number class="me-1 form-control" onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>' + "k max, blank for default" + '</div><br><hr/>';
17210 x += '<label><input type=checkbox onchange=showUserAdminDialogValidate() class="form-check-input me-2" id=ua_fulladmin>' + "Full Administrator" + '</label><br>';
17211 x += '<label><input type=checkbox onchange=showUserAdminDialogValidate() class="form-check-input me-2" id=ua_serverbackup>' + "Server Backup" + '</label><br>';
17212 x += '<label><input type=checkbox onchange=showUserAdminDialogValidate() class="form-check-input me-2" id=ua_serverrestore>' + "Server Restore" + '</label><br>';
@@ -17581,7 +17449,7 @@
17449 x += addHtmlFormFloating("Domain", y);
17450 }
17451 x += addHtmlFormFloating("Name", '<input id=p4name class=form-control maxlength=64 onchange=showCreateUserGroupDialogValidate() onkeyup=showCreateUserGroupDialogValidate() />');
17584 - x += addHtmlFormFloating("Description", '<textarea id=p4desc class=form-control value="" style=width:345px;height:60px;resize:none maxlength=1024 /></textarea>');
17452 + x += addHtmlFormFloating("Description", '<textarea id=p4desc class=form-control value="" maxlength=1024 /></textarea>');
17453 setModalContent('xxAddAgent', (mode == 1) ? "Create User Group" : "Duplicate User Group", x);
17454 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
17455 showCreateUserGroupDialogEx(3, mode);
@@ -17682,7 +17550,7 @@
17550
17551 x = '<br />';
17552 if ((currentUserGroup.membershipType == null) && ((userinfo.siteadmin & 256) != 0)) {
17685 - x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p51showAddUserDialog()"><i class="fa-solid fa-plus-circle"></i> ' + " Add Users" + '</button>';
17553 + x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p51showAddUserDialog()"><i class="fa-solid fa-circle-plus"></i> ' + "Add Users" + '</button>';
17554 }
17555 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Group Members" + '</th><th scope=col></th></tr>';
17556
@@ -17715,7 +17583,7 @@
17583 count = 1;
17584 var deviceGroupCount = 0, newDeviceGroup = false;
17585 for (var i in meshes) { if (currentUserGroup._id.split('/')[1] != meshes[i]._id.split('/')[1]) continue; deviceGroupCount++; if ((currentUserGroup.links == null) || (currentUserGroup.links[i] == null)) { newDeviceGroup = true; } }
17718 - if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1"onclick="return p20showAddMeshUserDialog(3)"><i class="fa-solid fa-plus-circle"></i> ' + " Add Device Group" + '</button>'; }
17586 + if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1"onclick="return p20showAddMeshUserDialog(3)"><i class="fa-solid fa-circle-plus"></i> ' + "Add Device Group" + '</button>'; }
17587 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Device Groups" + '</th><th scope=col></th></tr>';
17588 if (currentUserGroup.links) {
17589 var omeshes = [];
@@ -17739,7 +17607,7 @@
17607 // Display all devices for this user group
17608 count = 1;
17609 x += '<br />';
17742 - if (currentUserGroup._id.split('/')[1] == userinfo._id.split('/')[1]) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(7)"><i class="fa-solid fa-plus-circle"></i> ' + " Add Device" + '</button>'; }
17610 + if (currentUserGroup._id.split('/')[1] == userinfo._id.split('/')[1]) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(7)"><i class="fa-solid fa-circle-plus"></i> ' + "Add Device" + '</button>'; }
17611 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Devices" + '</th><th scope=col></th></tr>';
17612 if (currentUserGroup.links) {
17613 var onodes = [];
@@ -17782,7 +17650,7 @@
17650 x += '<div><label><input type=checkbox class="form-check-input me-2" id=d51flag1 ' + ((flags & 2) ? 'checked' : '') + '>' + "Record sessions" + '</label><br></div>';
17651 }
17652 xxdialogButtons = 3;
17785 - setModalContent('xxAddAgent', 'Edit User Group Features', x);
17653 + setModalContent('xxAddAgent', "Edit User Group Features", x);
17654 showModal('xxAddAgentModal', 'idx_dlgOkButton', p51edituserGroupFeaturesEx);
17655 }
17656
@@ -17798,7 +17666,7 @@
17666 if (xxdialogMode) return;
17667 var node = getNodeFromId(decodeURIComponent(nodeid));
17668 if (node == null) return;
17801 - setModalContent('xxAddAgent', 'Remove Device Permissions', format("Confirm removal of access rights for device \"{0}\"?", node.name));
17669 + setModalContent('xxAddAgent', "Remove Device Permissions", format("Confirm removal of access rights for device \"{0}\"?", node.name));
17670 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p51removeDeviceFromUserGroupEx(3, node._id));
17671 }
17672
@@ -17810,7 +17678,7 @@
17678 if (xxdialogMode) return;
17679 var mesh = meshes[decodeURIComponent(meshid)];
17680 if (mesh == null) return;
17813 - setModalContent('xxAddAgent', 'Remove Device Group Permissions', format("Confirm removal of access rights for device group \"{0}\"?", mesh.name));
17681 + setModalContent('xxAddAgent', "Remove Device Group Permissions", format("Confirm removal of access rights for device group \"{0}\"?", mesh.name));
17682 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p51removeMeshFromUserGroupEx(3, mesh._id));
17683 }
17684 function p51editgroup(focus, nameReadOnly) {
@@ -17819,7 +17687,7 @@
17687 x += addHtmlFormFloating("Description", '<textarea id=dp51desc class="form-control" maxlength=1024 style=width:100%;resize:none></textarea>');
17688
17689 xxdialogButtons = 3;
17822 - setModalContent('xxAddAgent', 'Edit User Group', x);
17690 + setModalContent('xxAddAgent', "Edit User Group", x);
17691 showModal('xxAddAgentModal', 'idx_dlgOkButton', p51editgroupEx);
17692
17693 Q('dp51name').value = currentUserGroup.name;
@@ -17842,7 +17710,7 @@
17710 x += '<label><input id=p51check type=checkbox class="form-check-input me-2" onchange=p51validateDeleteGroupDialog() />' + "Confirm" + '</label>';
17711
17712 xxdialogButtons = 3;
17845 - setModalContent('xxAddAgent', 'Delete User Group', x);
17713 + setModalContent('xxAddAgent', "Delete User Group", x);
17714 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
17715 p51showDeleteUserGroupDialogEx(xxdialogButtons, xxdialogTag);
17716 });
@@ -17870,7 +17738,7 @@
17738 var uname = userid.split('/')[2];
17739 if (users && users[userid]) { uname = users[userid].name; }
17740 if (userinfo._id == userid) { uname = userinfo.name; }
17873 - setModalContent('xxAddAgent', 'Remove User Membership', format("Confirm membership removal of user \"{0}\"?", EscapeHtml(decodeURIComponent(uname))));
17741 + setModalContent('xxAddAgent', "Remove User Membership", format("Confirm membership removal of user \"{0}\"?", EscapeHtml(decodeURIComponent(uname))));
17742 showModal('xxAddAgentModal', 'idx_dlgOkButton', p51viewuserEx2(3, userid));
17743 }
17744 function p51viewuserEx2(button, userid) { meshserver.send({ action: 'removeuserfromusergroup', ugrpid: currentUserGroup._id, userid: userid }); }
@@ -17884,7 +17752,7 @@
17752 x += '<div id=dp51usersuggest class=suggestionBox style=\'top:30px;left:130px;display:none\'></div>';
17753 x += '</div><br>';
17754
17887 - setModalContent('xxAddAgent', 'Add Users to User Group', x);
17755 + setModalContent('xxAddAgent', "Add Users to User Group", x);
17756 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
17757 p51showAddUserDialogEx(3, xxdialogTag)
17758 });
@@ -18112,18 +17980,18 @@
17980 x += '</table></div><br />';
17981
17982 // Add action buttons
18115 - x += '<input type=button class="btn btn-primary btn-sm" value="' + "Notes" + '" title="' + "View notes about this user" + '" onclick=showNotes(false,"' + encodeURIComponentEx(user._id) + '") />';
18116 - if (user.phone && (features & 0x02000000)) { x += '<input type=button class="btn btn-primary btn-sm" value="' + "SMS" + '" title="' + "Send a SMS message to this user" + '" onclick=showSendSMS("' + encodeURIComponentEx(user._id) + '") />'; }
18117 - if (user.msghandle && (features2 & 0x02000000)) { x += '<input type=button class="btn btn-primary btn-sm" value="' + "Message" + '" title="' + "Send a message to this user" + '" onclick=showSendMessage("' + encodeURIComponentEx(user._id) + '") />'; }
18118 - if ((typeof user.email == 'string') && (user.emailVerified === true) && (features & 0x00000040)) { x += '<input type=button class="btn btn-primary btn-sm" value="' + "Email" + '" title="' + "Send a email message to this user" + '" onclick=showSendEmail("' + encodeURIComponentEx(user._id) + '") />'; }
17983 + x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "Notes" + '" title="' + "View notes about this user" + '" onclick=showNotes(false,"' + encodeURIComponentEx(user._id) + '") />';
17984 + if (user.phone && (features & 0x02000000)) { x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "SMS" + '" title="' + "Send a SMS message to this user" + '" onclick=showSendSMS("' + encodeURIComponentEx(user._id) + '") />'; }
17985 + if (user.msghandle && (features2 & 0x02000000)) { x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "Message" + '" title="' + "Send a message to this user" + '" onclick=showSendMessage("' + encodeURIComponentEx(user._id) + '") />'; }
17986 + if ((typeof user.email == 'string') && (user.emailVerified === true) && (features & 0x00000040)) { x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "Email" + '" title="' + "Send a email message to this user" + '" onclick=showSendEmail("' + encodeURIComponentEx(user._id) + '") />'; }
17987 if (!self && ((activeSessions > 0) || ((features2 & 8) && (user.webpush)))) {
18120 - x += '<input type=button class="btn btn-primary btn-sm" value="' + "Notify" + '" title="' + "Send user notification" + '" onclick=showUserAlertDialog(event,"' + encodeURIComponentEx(user._id) + '") />';
18121 - x += '<input type=button class="btn btn-primary btn-sm" value="' + "Chat" + '" title="' + "Chat" + '" onclick=userChat(event,"' + encodeURIComponentEx(user._id) + '","' + encodeURIComponentEx(user.name) + '") />';
17988 + x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "Notify" + '" title="' + "Send user notification" + '" onclick=showUserAlertDialog(event,"' + encodeURIComponentEx(user._id) + '") />';
17989 + x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + "Chat" + '" title="' + "Chat" + '" onclick=userChat(event,"' + encodeURIComponentEx(user._id) + '","' + encodeURIComponentEx(user.name) + '") />';
17990 if ((activeSessions > 0) && (serverinfo != null) && (serverinfo.altmessenging != null)) {
17991 for (var i in serverinfo.altmessenging) {
17992 var am = serverinfo.altmessenging[i];
17993 if ((am.type == null) || (am.type == 'user')) {
18126 - x += '<input type=button class="btn btn-primary btn-sm" value="' + EscapeHtml(am.name) + '" onclick=altUserChat(event,"' + encodeURIComponentEx(user._id) + '","' + encodeURIComponentEx(user.name) + '",' + i + ') />';
17994 + x += '<input type=button class="btn btn-primary btn-sm me-1" value="' + EscapeHtml(am.name) + '" onclick=altUserChat(event,"' + encodeURIComponentEx(user._id) + '","' + encodeURIComponentEx(user.name) + '",' + i + ') />';
17995 }
17996 }
17997 }
@@ -18175,8 +18043,8 @@
18043 var x = '<table style=width:100%><tr><td style=width:56px><img src="images/phone80.png" style=padding:8px>';
18044 x += '<td style=width:100%;text-align:center>' + "SMS capable phone number for this user." + '<br />' + "Leave blank for none.";
18045 x += '<br /><br /><div style=width:100%;text-align:center>' + "Phone number:" + ' <input type=tel pattern="[0-9]" autocomplete="tel" value="' + (currentUser.phone ? currentUser.phone : '') + '" inputmode="tel" maxlength=18 id=d2phoneinput onKeyUp=p30editPhoneValidate() onkeypress="if (event.key==\'Enter\') p30editPhoneValidate(1)"></div></table>';
18178 - xxdialogButtons = 3; xxdialogTag = "verifyPhone";
18179 - setModalContent('xxAddAgent', 'Phone Notifications', x);
18046 + xxdialogButtons = 3; xxdialogTag = 'verifyPhone';
18047 + setModalContent('xxAddAgent', "Phone Notifications", x);
18048 showModal('xxAddAgentModal', 'idx_dlgOkButton', p30editPhoneEx);
18049 Q('d2phoneinput').focus();
18050 p30editPhoneValidate();
@@ -18205,7 +18073,7 @@
18073 x += '<div id=d2ntfyinfo style=display:none><br /><a href="' + (serverinfo.userMsgNftyUrl ? serverinfo.userMsgNftyUrl : 'https://ntfy.sh/') + '" target="_ntfy">' + "Free service at ntfy.sh" + '</a></div>';
18074 x += '<div id=d2slackinfo style=display:none><br /><a href=https://api.slack.com/messaging/webhooks target="_slack">' + "Slack Webhook Setup" + '</a></div>';
18075 xxdialogButtons = 3; xxdialogTag = 'verifyMessaging';
18208 - setModalContent('xxAddAgent', 'Messaging Notifications', x);
18076 + setModalContent('xxAddAgent', "Messaging Notifications", x);
18077 showModal('xxAddAgentModal', 'idx_dlgOkButton', p30editMessagingEx);
18078 Q('d2handleinput').focus();
18079 if (currentUser.msghandle) {
@@ -18279,7 +18147,7 @@
18147 x += '<div><label><input type=checkbox id=d20flag10 class="form-check-input me-2" onchange=p20edituserfeaturesValidate() ' + ((removeRights & 0x00000040) ? 'checked' : '') + '>' + "No Wake" + '</label><br></div>';
18148 x += '<div><label><input type=checkbox id=d20flag11 class="form-check-input me-2" onchange=p20edituserfeaturesValidate() ' + ((removeRights & 0x00040000) ? 'checked' : '') + '>' + "No Reset/Off" + '</label><br></div>';
18149
18282 - setModalContent('xxAddAgent', 'Edit User Features', x);
18150 + setModalContent('xxAddAgent', "Edit User Features", x);
18151 showModal('xxAddAgentModal', 'idx_dlgOkButton', p20edituserfeaturesEx);
18152
18153 p20edituserfeaturesValidate();
@@ -18377,7 +18245,7 @@
18245 // Display the previous logins of this user
18246 function p30viewPreviousLogins() {
18247 if (xxdialogMode) return;
18380 - setModalContent('xxAddAgent', 'Previous Logins', 'Loading...');
18248 + setModalContent('xxAddAgent', "Previous Logins", 'Loading...');
18249 meshserver.send({ action: 'previousLogins', userid: currentUser._id });
18250 }
18251
@@ -18445,7 +18313,7 @@
18313 // Display common device groups
18314 var deviceGroupCount = 0, newDeviceGroup = false;
18315 for (var i in meshes) { if (meshes[i]._id.split('/')[1] != currentUser._id.split('/')[1]) continue; deviceGroupCount++; if ((currentUser.links == null) || (currentUser.links[i] == null)) { newDeviceGroup = true; } }
18448 - if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(1)"><i class="fa-solid fa-plus-circle"></i> ' + "Add Device Group" + '</button>'; }
18316 + if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(1)"><i class="fa-solid fa-circle-plus"></i> ' + "Add Device Group" + '</button>'; }
18317 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Device Groups" + '</th><th scope=col></th></tr>';
18318 if (currentUser.links) {
18319 var omeshes = [];
@@ -18478,7 +18346,7 @@
18346 userGroupCount++;
18347 if ((currentUser.links == null) || (currentUser.links[i] == null)) { newUserGroup = true; }
18348 }
18481 - if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p30showAddUserGroupDialog()"><i class="fa-solid fa-plus-circle"></i> ' + "Add User Group" + '</button>'; }
18349 + if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p30showAddUserGroupDialog()"><i class="fa-solid fa-circle-plus"></i> ' + "Add User Group" + '</button>'; }
18350 }
18351 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "User Group Memberships" + '</th><th scope=col></th></tr>';
18352 if (currentUser.links) {
@@ -18503,7 +18371,7 @@
18371 // Display common devices
18372 count = 1;
18373 x += '<br />';
18506 - if (currentUser._id.split('/')[1] == userinfo._id.split('/')[1]) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(4)"><i class="fa-solid fa-plus-circle"></i> ' + "Add Device" + '</button>'; }
18374 + if (currentUser._id.split('/')[1] == userinfo._id.split('/')[1]) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(4)"><i class="fa-solid fa-circle-plus"></i> ' + "Add Device" + '</button>'; }
18375 x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Devices" + '</th><th scope=col></th></tr>';
18376 if (currentUser.links) {
18377 // Sort the list of devices to display
@@ -18530,14 +18398,14 @@
18398
18399 function p30removeDeviceSharing(event, nodeid, publicid, guestname) {
18400 if (xxdialogMode) return;
18533 - setModalContent('xxAddAgent', 'Remove Device Share', format("Confirm removal of device share \"{0}\"?", decodeURIComponent(guestname)));
18401 + setModalContent('xxAddAgent', "Remove Device Share", format("Confirm removal of device share \"{0}\"?", decodeURIComponent(guestname)));
18402 showModal('xxAddAgentModal', 'idx_dlgOkButton', function (b, tag) { meshserver.send({ action: 'removeDeviceShare', nodeid: tag[0], publicid: tag[1] }); }, 3, [decodeURIComponent(nodeid), decodeURIComponent(publicid)]);
18403 }
18404
18405 function p30removeNodeFromUser(event, nodeid) {
18406 if (xxdialogMode) return;
18407 var node = getNodeFromId(decodeURIComponent(nodeid));
18540 - setModalContent('xxAddAgent', 'Remove Device Permissions', format("Confirm removal of access rights for device \"{0}\"?", node.name));
18408 + setModalContent('xxAddAgent', "Remove Device Permissions", format("Confirm removal of access rights for device \"{0}\"?", node.name));
18409 showModal('xxAddAgentModal', 'idx_dlgOkButton', function (b, node) { meshserver.send({ action: 'adddeviceuser', nodeid: node._id, nodename: node.name, userids: [currentUser._id], rights: 0, remove: true }); }, 3, node);
18410 }
18411
@@ -18548,11 +18416,11 @@
18416 xxdialogButtons = 3; xxdialogTag = user;
18417 if (userid.startsWith('user/')) {
18418 if (users) { user = users[userid]; if (user != null) { name = user.name; } }
18551 - setModalContent('xxAddAgent', 'Remove User Permissions', name ? format("Confirm removal of access rights for user \"{0}\"?", name) : "Confirm removal of access rights?");
18419 + setModalContent('xxAddAgent', "Remove User Permissions", name ? format("Confirm removal of access rights for user \"{0}\"?", name) : "Confirm removal of access rights?");
18420 showModal('xxAddAgentModal', 'idx_dlgOkButton', function (b, user) { meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [userid], rights: 0, remove: true }); });
18421 } else if (userid.startsWith('ugrp/')) {
18422 if (usergroups) { user = usergroups[userid]; if (user != null) { name = user.name; } }
18555 - setModalContent('xxAddAgent', 'Remove User Group Permissions', name ? format("Confirm removal of access rights for user group \"{0}\"?", name) : "Confirm removal of access rights?");
18423 + setModalContent('xxAddAgent', "Remove User Group Permissions", name ? format("Confirm removal of access rights for user group \"{0}\"?", name) : "Confirm removal of access rights?");
18424 showModal('xxAddAgentModal', 'idx_dlgOkButton', function (b, user) {
18425 meshserver.send({ action: 'adddeviceuser', nodeid: currentNode._id, nodename: currentNode.name, userids: [userid], rights: 0, remove: true });
18426 });
@@ -18564,7 +18432,7 @@
18432 if (xxdialogMode || (usergroups == null)) return;
18433 var groupid = decodeURIComponent(ugrpid), group = usergroups[groupid];
18434 var name = (group != null) ? EscapeHtml(group.name) : ('<i>' + "Unknown" + '</i>');
18567 - setModalContent('xxAddAgent', 'Remove User Group Membership', format("Confirm membership removal of user group \"{0}\"?", name));
18435 + setModalContent('xxAddAgent', "Remove User Group Membership", format("Confirm membership removal of user group \"{0}\"?", name));
18436 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
18437 p30RemoveUserGroupEx(3, groupid);
18438 });
@@ -18583,7 +18451,7 @@
18451 }
18452 var x = addHtmlFormFloating("User Group", '<select id=dp2groupid class="form-select">' + y + '</select>');
18453 xxdialogButtons = 3;
18586 - setModalContent('xxAddAgent', 'Add Membership', x);
18454 + setModalContent('xxAddAgent', "Add Membership", x);
18455 showModal('xxAddAgentModal', 'idx_dlgOkButton', p30showAddUserGroupDialogEx);
18456 Q('dp2groupid').focus();
18457 return false;
@@ -18598,7 +18466,7 @@
18466 var mesh = meshes[decodeURIComponent(meshid)];
18467 if (mesh == null) return;
18468
18601 - setModalContent('xxAddAgent', 'Remove Device Group Permissions', format("Confirm removal of access rights for device group \"{0}\"?", mesh.name));
18469 + setModalContent('xxAddAgent', "Remove Device Group Permissions", format("Confirm removal of access rights for device group \"{0}\"?", mesh.name));
18470 showModal('xxAddAgentModal', 'idx_dlgOkButton', function () {
18471 p30removeMeshFromUserEx(3, mesh._id);
18472 });
@@ -18796,7 +18664,7 @@
18664 if (rec.userids) { for (var i in rec.userids) { x += addHtmlValue4("User", rec.userids[i].split('/')[2]); } }
18665
18666 xxdialogButtons = 9;
18799 - setModalContent('xxAddAgent', 'Recording Details', x);
18667 + setModalContent('xxAddAgent', "Recording Details", x);
18668 showModal('xxAddAgentModal', 'idx_dlgOkButton', null);
18669 }
18670
@@ -18970,7 +18838,7 @@
18838 x += addHtmlValue("", '<div style=width:250px><label><input type=checkbox class="form-check-input me-2" id=d2showTraffic ' + ((settings.showTraffic) ? 'checked' : '') + '>' + "Show Traffic" + '</label><div>');
18839 x += '</div>';
18840
18973 - setModalContent('xxAddAgent', 'Generate Report', x);
18841 + setModalContent('xxAddAgent', "Generate Report", x);
18842 showModal('xxAddAgentModal', 'idx_dlgOkButton', generateReportDialogEx);
18843 generateReportDialogValidate();
18844
@@ -19857,7 +19725,7 @@
19725 if (typeof e.args[i] == 'object') { x += EscapeHtml(JSON.stringify(e.args[i])) + '<br /><br />'; } else { x += EscapeHtml(e.args[i]) + '<br /><br />'; }
19726 }
19727 xxdialogButtons = 1;
19860 - setModalContent('xxAddAgent', 'Server Tracing Event', '<div class=selecttext style=max-height:300px;overflow-y:auto>' + x + '</div>');
19728 + setModalContent('xxAddAgent', "Server Tracing Event", '<div class=selecttext style=max-height:300px;overflow-y:auto>' + x + '</div>');
19729 showModal('xxAddAgentModal', 'idx_dlgOkButton', null);
19730 }
19731
@@ -19892,7 +19760,7 @@
19760 //x += '<div><label><input type=checkbox id=p41c13 ' + ((serverTraceSources.indexOf('swarmcmd') >= 0) ? 'checked' : '') + ">' + "Legacy Swarm Server Commands" + '</label></div>";
19761 x += '</div>';
19762 //setDialogMode(2, "Server Tracing", 7, setServerTracingEx, x);
19895 - setModalContent('xxAddAgent', 'Server Tracing', x);
19763 + setModalContent('xxAddAgent', "Server Tracing", x);
19764 showModal('xxAddAgentModal', 'idx_dlgOkButton', setServerTracingEx);
19765 }
19766
@@ -20021,7 +19889,7 @@
19889 // Remind the user to add two factor authentication
19890 if ((features & 0x00040000) && (count2factoraAuths() == 0) && (x > 2)) {
19891 x = 2;
20024 - setModalContent('xxAddAgent', 'Account Security', 'Unable to access this feature until two - factor authentication is enabled.This is required for extra security.Go to the \"My Account\" tab and look at the \"Account Security\" section.');
19892 + setModalContent('xxAddAgent', "Account Security", 'Unable to access this feature until two - factor authentication is enabled.This is required for extra security.Go to the \"My Account\" tab and look at the \"Account Security\" section.');
19893 showModal('xxAddAgentModal', 'idx_dlgOkButton');
19894 }
19895
@@ -20337,7 +20205,7 @@
20205 } else {
20206 var plugin = null;
20207 for (var i in installedPluginList) { if (installedPluginList[i]._id == id) { plugin = installedPluginList[i]; } }
20340 - setModalContent('xxAddAgent', 'Plugin Action', format("Are you sure you want to {0} the plugin: {1}", elem.value, plugin.name) + '<input id="lastPluginAct" type="hidden" value="' + elem.value + '" /><input id="lastPluginId" type="hidden" value="' + id + '" /><input id="lastPluginVersion" type="hidden" value="" />');
20208 + setModalContent('xxAddAgent', "Plugin Action", format("Are you sure you want to {0} the plugin: {1}", elem.value, plugin.name) + '<input id="lastPluginAct" type="hidden" value="' + elem.value + '" /><input id="lastPluginId" type="hidden" value="' + id + '" /><input id="lastPluginVersion" type="hidden" value="" />');
20209 showModal('xxAddAgentModal', 'idx_dlgOkButton', () => pluginActionEx());
20210 }
20211 elem.value = '';
views/login2.handlebars
+1 -1
@@ -412,7 +412,7 @@
412 var showLanguageSelect = '{{{showLanguageSelect}}}';
413
414 function startup() {
415 - if (decodeURIComponent('{{{loginpicture}}}') == 'true') { Q('loginPicture').src = "loginlogo.png"; }
415 + if (decodeURIComponent('{{{loginpicture}}}') == 'true') { Q('loginPicture').src = 'loginlogo.png'; }
416
417 QV('welcomeTextRow', welcomeText != '');
418 QH('welcomeText', welcomeText);