improve bootstrap icons and formatting
Signed-off-by: si458 <simonsmith5521@gmail.com>
si458 committed
Oct 24, 2024 at 15:56 UTC
e10f5277e9249ad2c295a88c8a14c1be6d0fdbd8
2 files changed
+213
-307
public/styles/style-bootstrap.css
+7
-3
@@ -1540,8 +1540,12 @@ a {
1540
opacity: 1;
1541
}
1542
1543
-.lbbuttonsel {
1543
+nav .lbbuttonsel {
1544
+ width: 100%;
1545
+ border-radius: 5px 0px 0px 5px;
1546
opacity: 0.9;
1547
+ background-color: #ffffff;
1548
+ color: #113962 !important;
1549
}
1550
1551
nav .lbbuttonsel2 {
@@ -3252,14 +3256,14 @@ nav .lbbuttonsel2 {
3256
color: #000;
3257
}
3258
3255
-.desktopButtons {
3259
+/* .desktopButtons {
3260
padding-top: 2px;
3261
}
3262
3263
.night .desktopButtons {
3264
filter: invert(60%);
3265
-webkit-filter: invert(60%);
3262
- }
3266
+ } */
3267
3268
3269
.dtab {
views/default3.handlebars
+206
-304
@@ -186,36 +186,22 @@
186
style="position:absolute;right:0;top:10px;color:#c8c8c8;font-size:44px;margin-right:8px;cursor:pointer;display:none"
187
onclick=topMenu() src="/images/3bars-30.png" width=30 height=30 />
188
</div>
189
- <div class="sidebar d-flex flex-column" id="page_leftbar">
189
+ <div class="sidebar flex-column" id="page_leftbar">
190
<div style="height:24px"></div>
191
<nav class="nav flex-column">
192
- <a class="nav-link active text-center text-white lbbuttonsel" id="LeftMenuMyDevices" href="#"
193
- data-target="general" onmouseup=go(1,event) onkeypress="if (event.key=='Enter') { go(1); }"><i
194
- class="fas fa-computer me-2"></i></a>
195
- <a class="nav-link text-center text-white" id="LeftMenuMyAccount" href="#" data-target="account"
196
- onmouseup=go(2,event) onkeypress="if (event.key=='Enter') { go(2); }"><i
197
- class="fas fa-user-gear me-2"></i></a>
198
- <a class="nav-link text-center text-white" id="LeftMenuMyEvents" href="#" data-target="events"
199
- onmouseup=go(3,event) onkeypress="if (event.key=='Enter') { go(3); }"><i
200
- class="fas fa-calendar-alt me-2"></i></a>
201
- <a class="nav-link text-center text-white" id="LeftMenuMyFiles" href="#" data-target="files"
202
- onmouseup=go(5,event) onkeypress="if (event.key=='Enter') { go(5); }"><i
203
- class="fas fa-folder-open me-2"></i></a>
204
- <a class="nav-link text-center text-white" id="LeftMenuMyUsers" href="#" data-target="users"
205
- onmouseup=go(4,event) onkeypress="if (event.key=='Enter') { go(4); }"><i
206
- class="fas fa-users me-2"></i></a>
207
- <a class="nav-link text-center text-white" id="LeftMenuMyServer" href="#" data-target="server"
208
- onmouseup=go(6,event) onkeypress="if (event.key=='Enter') { go(6); }"><i
209
- class="fas fa-server me-2"></i></a>
192
+ <a class="nav-link active text-center text-white lbbuttonsel" id="LeftMenuMyDevices" href="#" data-target="general" onmouseup=go(1,event) onkeypress="if (event.key=='Enter') { go(1); }"><i class="fa-solid fa-computer me-2"></i></a>
193
+ <a class="nav-link text-center text-white" id="LeftMenuMyAccount" href="#" data-target="account" onmouseup=go(2,event) onkeypress="if (event.key=='Enter') { go(2); }"><i class="fa-solid fa-user-gear me-2"></i></a>
194
+ <a class="nav-link text-center text-white" id="LeftMenuMyEvents" href="#" data-target="events" onmouseup=go(3,event) onkeypress="if (event.key=='Enter') { go(3); }"><i class="fa-solid fa-calendar-alt me-2"></i></a>
195
+ <a class="nav-link text-center text-white" id="LeftMenuMyFiles" href="#" data-target="files" onmouseup=go(5,event) onkeypress="if (event.key=='Enter') { go(5); }"><i class="fa-solid fa-folder-open me-2"></i></a>
196
+ <a class="nav-link text-center text-white" id="LeftMenuMyUsers" href="#" data-target="users" onmouseup=go(4,event) onkeypress="if (event.key=='Enter') { go(4); }"><i class="fa-solid fa-users me-2"></i></a>
197
+ <a class="nav-link text-center text-white" id="LeftMenuMyServer" href="#" data-target="server" onmouseup=go(6,event) onkeypress="if (event.key=='Enter') { go(6); }"><i class="fa-solid fa-server me-2"></i></a>
198
</nav>
199
</div>
200
<div id=topbar class=noselect>
201
<div>
202
<div style="position:relative">
203
<span id=logoutControlSpan2></span>
216
- <div tabindex=0 id=uiMenuButton title="User interface selection"
217
- onclick="showUserInterfaceSelectMenu()"
218
- onkeypress="if (event.key == 'Enter') showUserInterfaceSelectMenu()">
204
+ <div tabindex=0 id=uiMenuButton title="User interface selection" onclick="showUserInterfaceSelectMenu()" onkeypress="if (event.key == 'Enter') showUserInterfaceSelectMenu()">
205
♦
206
<div id=uiMenu style="display:none">
207
<table>
@@ -388,7 +374,7 @@
374
</div>
375
</div>
376
</div>
391
- <div id="column_l">
377
+ <div id="column_l" class='pt-3'>
378
<div id=p0 style="display:none">
379
<div id=p0message><span id=p0span>Server disconnected</span>, <href onclick=reload()
380
style=cursor:pointer><u>click to reconnect</u></href>.</div>
@@ -652,9 +638,7 @@
638
</div>
639
<div id=p2logintokens></div>
640
<strong>Device Groups</strong>
655
- <span id="p2createMeshLink1"> - <button class="btn btn-primary btn-sm me-2"
656
- onclick="return account_createMesh()"> <i class="fas fa-plus-circle"></i>
657
- New</button></span>
641
+ <span id="p2createMeshLink1"> - <button class="btn btn-primary btn-sm me-2" onclick="return account_createMesh()"> <i class="fa-solid fa-plus-circle"></i>New</button></span>
642
<br /><br />
643
<div id=p2meshes></div>
644
<div id=p2noMeshFound style="display:none">No device groups.<span id="p2createMeshLink2"> <a href=#
@@ -701,8 +685,7 @@
685
<option value="">No limit</option>
686
</select>
687
</div>
704
- <a href=# onclick=p3showDownloadEventsDialog(2)><i class="fas fa-download"
705
- title="Download Events"></i></a>
688
+ <a href=# onclick=p3showDownloadEventsDialog(2)><i class="fa-solid fa-download" title="Download Events"></i></a>
689
</td>
690
{{!-- <td class="h2"></td> --}}
691
</tr>
@@ -720,13 +703,9 @@
703
<div style="float:right">
704
<input type=button class="btn btn-outline-primary btn-sm m-1"
705
onclick=showUserBroadcastDialog() style=margin-right:6px value="Broadcast" />
723
- <a href=# onclick=p4downloadUserInfo()><i class="fas fa-download"
724
- title="Download user information" style="cursor:pointer"></i></a>
725
- <a href=# onclick=p4batchAccountCreate()><img id=p4UserBatchCreate
726
- style="cursor:pointer;display:none" title="Batch create many user accounts"
727
- src="images/link6.png" /></a>
728
- <i style="cursor:pointer;margin-top:3px;margin-left:6px" id=usersListToolbarSettings
729
- class="fas fa-cog" title="Settings" onclick="onUsersViewSettings()"></i>
706
+ <a href=# onclick=p4downloadUserInfo()><i class="fa-solid fa-download" title="Download user information" style="cursor:pointer"></i></a>
707
+ <a href=# onclick=p4batchAccountCreate()><img id=p4UserBatchCreate style="cursor:pointer;display:none" title="Batch create many user accounts" src="images/link6.png" /></a>
708
+ <i style="cursor:pointer;margin-top:3px;margin-left:6px" id=usersListToolbarSettings class="fa-solid fa-cog" title="Settings" onclick="onUsersViewSettings()"></i>
709
</div>
710
<div>
711
<input type=button id=UsersSelectAllButton class="btn btn-outline-primary btn-sm m-1"
@@ -884,16 +863,13 @@
863
</div>
864
</div>
865
<div id=p10 style="display:none">
887
- <div id=p10title>
888
- <div id="p10BackButton">
889
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
890
- onkeypress="if (event.key == 'Enter') goBack()">
891
- <div class="backButtonEx"></div>
892
- </div>
866
+ <div id=p10title class="d-flex align-items-center">
867
+ <div id="p10BackButton" class="pe-2">
868
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
869
</div>
894
- <h1>General - <span id=p10deviceName></span></h1>
870
+ <div class='fs-4 fw-bold'>General - <span id=p10deviceName></span></div>
871
</div>
896
- <div id=p10info style="overflow-y:auto">
872
+ <div id=p10info style="overflow-y:auto" class="pt-3">
873
<table style="width:100%" cellpadding="0" cellspacing="0">
874
<tr>
875
<td style=width:auto valign=top>
@@ -940,27 +916,18 @@
916
</div>
917
</div>
918
<div id=p11 class="noselect" style="display:none">
943
- <div id="p11title">
944
- <div id=p11deviceNameHeader>
945
- <div id="p11BackButton">
946
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
947
- onkeypress="if (event.key == 'Enter') goBack()">
948
- <div class="backButtonEx"></div>
949
- </div>
950
- </div>
951
- <div id="devListToolbarViewIcons">
952
- <div class="viewSelector" onclick=deskToggleFull(event)
953
- title="Full Screen. Hold shift to browser full screen.">
954
- <div class="viewSelector5"></div>
955
- </div>
956
- </div>
957
- <h1>Desktop - <span id=p11deviceName></span></h1>
919
+ <div id="p11title" class="d-flex align-items-center">
920
+ <div id="p11BackButton" class="pe-2">
921
+ <i class="fa-solid fa-2xl fa-square-caret-left" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
922
+ </div>
923
+ <div class='fs-4 fw-bold'>Desktop - <span id=p11deviceName></span></div>
924
+ <div id="devListToolbarViewIcons" class="ms-auto">
925
+ <i class="fa-solid fa-xl fa-maximize fa-border" role="button" onclick=deskToggleFull(event) title="Full Screen. Hold shift to browser full screen."></i>
926
</div>
927
</div>
928
<div id="p11warning" onclick="showFeaturesDlg()">
929
<div class="icon2"></div>
962
- <div class="warningbox">Redirection port or KVM feature is disabled<span id="p11warninga">, click
963
- here to enable it.</span></div>
930
+ <div class="warningbox">Redirection port or KVM feature is disabled<span id="p11warninga">, click here to enable it.</span></div>
931
</div>
932
<div id="p11warning2" onclick="showPowerActionDlg()">
933
<div class="icon2"></div>
@@ -968,34 +935,19 @@
935
</div>
936
</div>
937
<div style="position:absolute;right:16px;margin-top:-14px;font-size:x-small;color:black">
971
- <div id="p11capslock"
972
- style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">
973
- CAPS
974
- </div>
975
- <div id="p11scrolllock"
976
- style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">
977
- SCROLL
978
- </div>
979
- <div id="p11numlock"
980
- style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">
981
- NUM
982
- </div>
938
+ <div id="p11capslock" style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">CAPS</div>
939
+ <div id="p11scrolllock" style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">SCROLL</div>
940
+ <div id="p11numlock" style="display:inline-block;margin-left:1px;border-radius:5px;background-color:#A3FFB8;padding:2px">NUM</div>
941
</div>
942
<div id=deskarea0 cellpadding=0 cellspacing=0>
943
<div id=deskarea1 class="areaHead">
944
<div class="toright2">
987
- <div id="idx_deskFullBtn2" onclick=deskToggleFull(event) style="float:right"> ✖
988
- </div>
945
+ <div id="idx_deskFullBtn2" onclick=deskToggleFull(event) style="float:right"> ✖</div>
946
<span id="p11power"></span>
990
- <div class='deskareaicon' title="Toggle View Mode" onclick="toggleAspectRatio(1)">⇲
991
- </div>
992
- <div class='deskareaicon' title="Rotate Left" onclick="drotate(-1)"><i
993
- class="fas fa-rotate-left"></i></div>
994
- <div class='deskareaicon' title="Rotate Right" onclick="drotate(1)"><i
995
- class="fas fa-rotate-right"></i></div>
996
- <div id="deskRecordIcon" class='deskareaicon' title="Server is recording this session"
997
- style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px">
998
- </div>
947
+ <div class='deskareaicon' title="Toggle View Mode" onclick="toggleAspectRatio(1)">⇲</div>
948
+ <div class='deskareaicon' title="Rotate Left" onclick="drotate(-1)"><i class="fa-solid fa-rotate-left"></i></div>
949
+ <div class='deskareaicon' title="Rotate Right" onclick="drotate(1)"><i class="fa-solid fa-rotate-right"></i></div>
950
+ <div id="deskRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px"></div>
951
<input id="deskFocusBtn" type="button"
952
title="Toggle focus mode, when active only the region around the mouse is updated"
953
onkeypress="return false" onkeydown="return false" value="Focus All"
@@ -1021,19 +973,19 @@
973
id=connectbutton1 cmenu="deskConnectButton"
974
title="Connect using MeshAgent remote desktop" onclick=connectDesktop(event,3)
975
onkeypress="return false" onkeydown="return false" disabled="disabled"><i
1024
- class="fas fa-circle-play"></i> Connect</button></span>
976
+ class="fa-solid fa-circle-play"></i> Connect</button></span>
977
<span id=connectbutton1rspan><button class="btn btn-primary btn-sm me-2" type=button
978
id=connectbutton1r cmenu="altPortContextMenu" title="Connect using RDP"
979
onclick=askRdpCredentials() onkeypress="return false" onkeydown="return false"
1028
- disabled="disabled"><i class="fas fa-circle-play"></i> RDP Connect</button></span>
980
+ disabled="disabled"><i class="fa-solid fa-circle-play"></i> RDP Connect</button></span>
981
<span id=connectbutton1hspan><button class="btn btn-primary btn-sm me-2" type=button
982
id=connectbutton1h title="Connect using hardware KVM"
983
onclick=connectDesktop(event,2) onkeypress="return false" onkeydown="return false"
1032
- disabled="disabled"><i class="fas fa-circle-play"></i> HW Connect</button></span>
984
+ disabled="disabled"><i class="fa-solid fa-circle-play"></i> HW Connect</button></span>
985
<span id=disconnectbutton1span><button class="btn btn-primary btn-sm me-2" type=button
986
id=disconnectbutton1 cmenu="deskDisconnectButton" value="Disconnect"
987
onclick=connectDesktop(event,0) onkeypress="return false"
1036
- onkeydown="return false"><i class="fas fa-power-off"></i> Disconnect</button></span>
988
+ onkeydown="return false"><i class="fa-solid fa-power-off"></i> Disconnect</button></span>
989
<span id="deskstatus" style="line-height:22px">Disconnected</span><span
990
id="deskmetadata"></span>
991
</div>
@@ -1050,7 +1002,7 @@
1002
</div>
1003
<div id=DeskTools>
1004
<div id=deskToolsAreaTop>
1053
- <a id=DeskToolsRefreshButton style="right:2px" onclick="refreshDeskTools()">Refresh</a>
1005
+ <a id=DeskToolsRefreshButton class="link-underline-primary" style="right:2px" onclick="refreshDeskTools()">Refresh</a>
1006
<div id=deskToolsTopTabProcess class="deskToolsTopTab" onclick="changeDeskToolTab(0)"
1007
style="left:0px;bottom:0px">Processes</div>
1008
<div id=deskToolsTopTabService class="deskToolsTopTab" onclick="changeDeskToolTab(1)"
@@ -1083,57 +1035,52 @@
1035
</div>
1036
<div id=deskarea4 class="areaFoot">
1037
<div class="toright2">
1086
- <span id="DeskLatency" style="line-height:22px;width:50px"
1087
- title="Desktop Session Latency"></span>
1038
+ <span id="DeskLatency" style="line-height:22px;width:50px" title="Desktop Session Latency"></span>
1039
<span id="DeskTimer" style="line-height:22px" title="Session time"></span>
1089
- <input id=DeskToolsButton type=button class="btn btn-outline-primary btn-sm m-1" value=Tools
1090
- title="Toggle tools view" onkeypress="return false" onkeydown="return false"
1091
- onclick="toggleDeskTools()" />
1040
+ <input id=DeskToolsButton type=button class="btn btn-outline-primary btn-sm m-1" value=Tools title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()" />
1041
<span> </span>
1093
- <span id=DeskRunButton cmenu="deskPreConfigScriptContextMenu" class="deskarea"
1094
- title="Run a script on this computer"><i class="fas fa-play desktopButtons"
1095
- onclick=runDeviceCmd() height=16 width=16 style=padding-top:2px></i></span>
1096
- <span id=DeskChatButton class="deskarea" title="Open chat window to this computer"><i
1097
- class="fas fa-message desktopButtons" onclick=deviceChat(event) height=16 width=16
1098
- style=padding-top:2px></i></span>
1099
- <span id=DeskNotifyButton title="Display a notification on the remote computer"><i
1100
- class="fas fa-bell desktopButtons" onclick=deviceToastFunction() height=16 width=16
1101
- style=padding-top:2px></i></span>
1102
- <span id=DeskLockButton title="Lock the remote computer"><img src='images/icon-lock.png'
1103
- class="desktopButtons" onclick=deviceLockFunction() height=16 width=16 /></span>
1104
- <span id=DeskOpenWebButton title="Open a web address on the remote computer"><i
1105
- class="desktopButtons fas fa-globe" onclick=deviceUrlFunction() height=16
1106
- width=16></i></span>
1107
- <span id=DeskBackgroundButton title="Toggle remote desktop background"><img
1108
- class="desktopButtons" id=DeskBackgroundButtonImage src='images/icon-background.png'
1109
- onclick=deviceToggleBackground(event) height=16 width=16 /></span>
1110
- <span id=DeskSaveImageButton title="Save a screenshot of the remote desktop"><img
1111
- class="desktopButtons" src='images/icon-camera.png' onclick=deskSaveImage()
1112
- height=16 width=16 /></span>
1113
- <span id=DeskRecordButton cmenu=deskPlayerContextMenu
1114
- title="Record remote desktop session to file" style="display:none"><img
1115
- class="desktopButtons" id=DeskRecordButtonImage src='images/icon-film.png'
1116
- onclick=deskRecordSession() height=16 width=16 /></span>
1117
- <span id=DeskClipboardInButton title="Download remote clipboard to local clipboard"
1118
- style="display:none"><img class="desktopButtons" id=DeskClipboardInButtonImage
1119
- src='images/icon-clipboard-in.png' onclick=deskClipboardInFunction() height=16
1120
- width=16 /></span>
1121
- <span id=DeskClipboardOutButton title="Upload local clipboard to remote device"><img
1122
- class="desktopButtons" id=DeskClipboardOutButtonImage
1123
- src='images/icon-clipboard-out.png' onclick=deskClipboardOutFunction() height=16
1124
- width=16 /></span>
1125
- <span id=DeskRefreshButton title="Refresh the desktop"><img class="desktopButtons"
1126
- id=DeskRefreshButtonImage src='images/icon-refresh.png'
1127
- onclick=deskRefreshFunction() height=16 width=16 /></span>
1128
- <span id=DeskInputLockedButton title="Remote input is locked"><img class="desktopButtons"
1129
- id=DeskInputLockedButtonImage src='images/icon-keylock-red.png'
1130
- onclick=deskInputLockFunction(0) height=16 width=16 /></span>
1131
- <span id=DeskInputUnLockedButton title="Remote input is unlocked"><img
1132
- class="desktopButtons" id=DeskInputUnLockedButtonImage src='images/icon-keylock.png'
1133
- onclick=deskInputLockFunction(1) height=16 width=16 /></span>
1134
- <span id=DeskGuestShareButton title="Share the device with a guest"><i
1135
- class="desktopButtons fas fa-share-nodes" id=DeskInputUnLockedButtonImage
1136
- onclick=showShareDevice() height=16 width=16></i></span>
1042
+ <span id=DeskRunButton cmenu="deskPreConfigScriptContextMenu" class="deskarea" title="Run a script on this computer" role="button">
1043
+ <i class="fa-solid fa-fw fa-play" onclick=runDeviceCmd()></i>
1044
+ </span>
1045
+ <span id=DeskChatButton class="deskarea" title="Open chat window to this computer" role="button">
1046
+ <i class="fa-solid fa-fw fa-message" onclick=deviceChat(event)></i>
1047
+ </span>
1048
+ <span id=DeskNotifyButton title="Display a notification on the remote computer" role="button">
1049
+ <i class="fa-solid fa-fw fa-bell" onclick=deviceToastFunction()></i>
1050
+ </span>
1051
+ <span id=DeskLockButton title="Lock the remote computer" role="button">
1052
+ <i class="fa-solid fa-fw fa-lock" onclick=deviceLockFunction()></i>
1053
+ </span>
1054
+ <span id=DeskOpenWebButton title="Open a web address on the remote computer" role="button">
1055
+ <i class="fa-solid fa-fw fa-globe" onclick=deviceUrlFunction()></i>
1056
+ </span>
1057
+ <span id=DeskBackgroundButton title="Toggle remote desktop background" role="button">
1058
+ <i class="fa-solid fa-fw fa-image" onclick=deviceToggleBackground(event) id=DeskBackgroundButtonImage >></i>
1059
+ </span>
1060
+ <span id=DeskSaveImageButton title="Save a screenshot of the remote desktop" role="button">
1061
+ <i class="fa-solid fa-fw fa-camera" onclick=deskSaveImage()></i>
1062
+ </span>
1063
+ <span id=DeskRecordButton cmenu=deskPlayerContextMenu title="Record remote desktop session to file" style="display:none" role="button">
1064
+ <i class="fa-solid fa-fw fa-video" onclick=deskRecordSession() id=DeskRecordButtonImage></i>
1065
+ </span>
1066
+ <span id=DeskClipboardInButton title="Download remote clipboard to local clipboard" style="display:none">
1067
+ <i class="fa-solid fa-fw fa-down-long" data-fa-transform="shrink-9 down-4" data-fa-mask="fa-solid fa-clipboard" onclick=deskClipboardInFunction()></i>
1068
+ </span>
1069
+ <span id=DeskClipboardOutButton title="Upload local clipboard to remote device">
1070
+ <i class="fa-solid fa-fw fa-up-long" data-fa-transform="shrink-9 down-4" data-fa-mask="fa-solid fa-clipboard" onclick=deskClipboardOutFunction()></i>
1071
+ </span>
1072
+ <span id=DeskRefreshButton title="Refresh the desktop" role="button">
1073
+ <i class="fa-solid fa-fw fa-rotate" onclick=deskRefreshFunction()></i>
1074
+ </span>
1075
+ <span id=DeskInputLockedButton title="Remote input is locked">
1076
+ <i class="fa-solid fa-fw fa-keyboard" style=color:red onclick=deskInputLockFunction(0)></i>
1077
+ </span>
1078
+ <span id=DeskInputUnLockedButton title="Remote input is unlocked" role="button">
1079
+ <i class="fa-solid fa-fw fa-keyboard" onclick=deskInputLockFunction(1)></i>
1080
+ </span>
1081
+ <span id=DeskGuestShareButton title="Share the device with a guest">
1082
+ <i class="fa-solid fa-fw fa-share-nodes" id=DeskInputUnLockedButtonImage onclick=showShareDevice()></i>
1083
+ </span>
1084
</div>
1085
<div class="toright2"><span id=DeskMonitorSelectionSpan></span></div>
1086
<div>
@@ -1158,20 +1105,14 @@
1105
</div>
1106
</div>
1107
<div id=p12 style="display:none">
1161
- <div id="p12title">
1162
- <div id="p12BackButton">
1163
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1164
- onkeypress="if (event.key == 'Enter') goBack()">
1165
- <div class="backButtonEx"></div>
1166
- </div>
1108
+ <div id="p12title" class="d-flex align-items-center">
1109
+ <div id="p12BackButton" class="pe-2">
1110
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1111
</div>
1168
- <div id="devListToolbarViewIcons2" style="float:right">
1169
- <div class="viewSelector" onclick=deskToggleFull(event)
1170
- title="Full Screen. Hold shift to browser full screen.">
1171
- <i class="fas fa-maximize"></i>
1172
- </div>
1112
+ <div class='fs-4 fw-bold'>Terminal - <span id=p12deviceName></span></div>
1113
+ <div id="devListToolbarViewIcons2" class="ms-auto">
1114
+ <i class="fa-solid fa-xl fa-maximize fa-border" role="button" onclick=deskToggleFull(event) title="Full Screen. Hold shift to browser full screen."></i>
1115
</div>
1174
- <h1>Terminal - <span id=p12deviceName></span></h1>
1116
</div>
1117
<div id="p12warning" onclick=showFeaturesDlg()>
1118
<div class="icon2"></div>
@@ -1203,28 +1144,28 @@
1144
<div>
1145
<button type="button" id="autoconnectbutton2" class="btn btn-primary btn-sm me-2"
1146
onclick=autoConnectTerminal(event) onkeypress="return false"
1206
- onkeydown="return false" style="display:none"><i class="fas fa-play"></i>
1147
+ onkeydown="return false" style="display:none"><i class="fa-solid fa-play"></i>
1148
AutoConnect</button><span id="connectbutton2span"
1149
style="margin-right:4px"><button type="button" id="connectbutton2"
1150
class="btn btn-primary btn-sm me-2" cmenu="termConnectButton"
1151
onclick=connectTerminal(event,1) onkeypress="return false"
1211
- onkeydown="return false" disabled="disabled"><i class="fas fa-play"></i>
1152
+ onkeydown="return false" disabled="disabled"><i class="fa-solid fa-play"></i>
1153
Connect</button></span><span id="connectbutton2sspan"
1154
style="margin-right:4px"><button type="button" id="connectbutton2s"
1155
cmenu=sshPortContextMenu class="btn btn-primary btn-sm me-2"
1156
onclick=connectTerminal(event,3) onkeypress="return false"
1216
- onkeydown="return false" disabled="disabled"><i class="fas fa-play"></i> SSH
1157
+ onkeydown="return false" disabled="disabled"><i class="fa-solid fa-play"></i> SSH
1158
Connect</button></span><span id="connectbutton2hspan"
1159
style="margin-right:4px"><button type="button"
1160
class="btn btn-primary btn-sm me-2" id="connectbutton2h"
1161
title="Connect using Intel® AMT hardware KVM"
1162
onclick=connectTerminal(event,2) onkeypress="return false"
1222
- onkeydown="return false" disabled="disabled"><i class="fas fa-play"></i> HW
1163
+ onkeydown="return false" disabled="disabled"><i class="fa-solid fa-play"></i> HW
1164
Connect</button></span><span id="disconnectbutton2span"
1165
style="margin-right:4px"><button type="button"
1166
class="btn btn-primary btn-sm me-2" id="disconnectbutton2"
1167
onclick=connectTerminal(event,0) onkeypress="return false"
1227
- onkeydown="return false"><i class="fas fa-play"></i>
1168
+ onkeydown="return false"><i class="fa-solid fa-play"></i>
1169
Disconnect</button></span>
1170
<span id="termstatus" style="line-height:22px">Disconnected</span><span
1171
id="termtitle"></span>
@@ -1298,14 +1239,11 @@
1239
</div>
1240
</div>
1241
<div id=p13 style="display:none">
1301
- <div id="p13title">
1302
- <div id="p13BackButton" style="float:left">
1303
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1304
- onkeypress="if (event.key == 'Enter') goBack()">
1305
- <div class="backButtonEx"></div>
1306
- </div>
1242
+ <div id="p13title" class="d-flex align-items-center">
1243
+ <div id="p13BackButton" class="pe-2">
1244
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1245
</div>
1308
- <h1>Files - <span id=p13deviceName></span></h1>
1246
+ <div class='fs-4 fw-bold'>Files - <span id=p13deviceName></span></div>
1247
</div>
1248
<table id="p13toolbar" cellpadding="0" cellspacing="0">
1249
<tr>
@@ -1323,14 +1261,14 @@
1261
<div>
1262
<button id=p13AutoConnect onclick=autoConnectFiles(event)
1263
class="btn btn-primary btn-sm me-2" type="button" style="display:none"><i
1326
- class="fas fa-play"></i> AutoConnect</button>
1264
+ class="fa-solid fa-play"></i> AutoConnect</button>
1265
<button id=p13Connect cmenu="filesConnectButton" class="btn btn-primary btn-sm me-2"
1328
- onclick=connectFiles(event,1) type="button"><i class="fas fa-play"></i>
1266
+ onclick=connectFiles(event,1) type="button"><i class="fa-solid fa-play"></i>
1267
Connect</button>
1268
<button id=p13Disconnect class="btn btn-primary btn-sm me-2" onclick=connectFiles(event)
1331
- type="button"><i class="fas fa-play"></i> Disconnect</button>
1269
+ type="button"><i class="fa-solid fa-play"></i> Disconnect</button>
1270
<button id=p13Connects class="btn btn-primary btn-sm me-2" cmenu=sshPortContextMenu
1333
- onclick=connectFiles(event,2) type="button"><i class="fas fa-play"></i> SFTP
1271
+ onclick=connectFiles(event,2) type="button"><i class="fa-solid fa-play"></i> SFTP
1272
Connect</button>
1273
<span id=p13Status>Disconnected</span>
1274
</div>
@@ -1426,43 +1364,31 @@
1364
</table>
1365
</div>
1366
<div id=p14 style="display:none">
1429
- <div id="p14title">
1430
- <div id="p14BackButton" style="float:left">
1431
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1432
- onkeypress="if (event.key == 'Enter') goBack()">
1433
- <div class="backButtonEx"></div>
1434
- </div>
1367
+ <div id="p14title" class="d-flex align-items-center">
1368
+ <div id="p14BackButton" class="pe-2">
1369
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1370
</div>
1436
- <div id="devListToolbarViewIcons">
1437
- <div class="viewSelector" onclick=deskToggleFull(event)
1438
- title="Full Screen. Hold shift to browser full screen.">
1439
- <div class="viewSelector5"></div>
1440
- </div>
1371
+ <div class='fs-4 fw-bold'><span id=p14deviceNamePrefix>Intel® AMT</span> - <span id=p14deviceName></span></div>
1372
+ <div id="devListToolbarViewIcons" class="ms-auto">
1373
+ <i class="fa-solid fa-xl fa-maximize fa-border" role="button" onclick=deskToggleFull(event) title="Full Screen. Hold shift to browser full screen."></i>
1374
</div>
1442
- <h1><span id=p14deviceNamePrefix>Intel® AMT</span> - <span id=p14deviceName></span></h1>
1375
</div>
1376
<iframe id=p14iframe src="{{{domainurl}}}commander.ashx"></iframe>
1377
</div>
1378
<div id=p15 style="display:none">
1447
- <div id="p15title">
1448
- <div id="p15BackButton" style="float:left">
1449
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1450
- onkeypress="if (event.key == 'Enter') goBack()">
1451
- <div class="backButtonEx"></div>
1452
- </div>
1379
+ <div id="p15title" class="d-flex align-items-center">
1380
+ <div id="p15BackButton" class="pe-2">
1381
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1382
</div>
1454
- <h1><span id=p15deviceName></span></h1>
1383
+ <div class='fs-4 fw-bold'><span id=p15deviceName></span></div>
1384
</div>
1385
<table id="consoleTable" cellpadding=0 cellspacing=0>
1386
<tr>
1387
<td class="areaHead">
1388
<div class="toright2">
1389
<div id=p15coreName title="Information about current core running on this agent"></div>
1461
- <input type=button id=p15uploadCore class="btn btn-outline-primary me-2 btn-sm"
1462
- value="Agent Action" onclick=p15uploadCore(event)
1463
- title="Change the agent Java Script code module" />
1464
- <i onclick=p15downloadConsoleText() style="cursor:pointer;margin-top:6px"
1465
- title="Download console text" class="fas fa-download"></i>
1390
+ <input type=button id=p15uploadCore class="btn btn-outline-primary me-2 btn-sm" value="Agent Action" onclick=p15uploadCore(event) title="Change the agent Java Script code module" />
1391
+ <i onclick=p15downloadConsoleText() style="margin-top:6px" title="Download console text" class="fa-solid fa-download"></i>
1392
</div>
1393
<div id="p15statetext"></div>
1394
</td>
@@ -1505,14 +1431,11 @@
1431
</table>
1432
</div>
1433
<div id=p16 style="display:none">
1508
- <div id="p16title">
1509
- <div id="p16BackButton" style="float:left">
1510
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1511
- onkeypress="if (event.key == 'Enter') goBack()">
1512
- <div class="backButtonEx"></div>
1513
- </div>
1434
+ <div id="p16title" class="d-flex align-items-center">
1435
+ <div id="p16BackButton" class="pe-2">
1436
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1437
</div>
1515
- <h1>Events - <span id=p16deviceName></span></h1>
1438
+ <div class='fs-4 fw-bold'>Events - <span id=p16deviceName></span></div>
1439
</div>
1440
<table class="pTable">
1441
<tr>
@@ -1540,8 +1463,7 @@
1463
<option value=500>Last 500</option>
1464
<option value=1000>Last 1000</option>
1465
</select>
1543
- <a href=# onclick=p3showDownloadEventsDialog(1)><i class="fas fa-download"
1544
- title="Download Events" style=cursor:pointer></i></a>
1466
+ <i onclick=p3showDownloadEventsDialog(1) class="fa-solid fa-download" title="Download Events" style=cursor:pointer></i>
1467
</td>
1468
{{!-- <td class="h2"></td> --}}
1469
</tr>
@@ -1549,20 +1471,14 @@
1471
<div id=p16events></div>
1472
</div>
1473
<div id=p17 style="display:none;">
1552
- <div id="p17title" style="margin-left:18px">
1553
- <div id="p17BackButton" style="float:left">
1554
- <div class="backButton" tabindex=0 onclick=goBack() title="Back"
1555
- onkeypress="if (event.key == 'Enter') goBack()">
1556
- <div class="backButtonEx"></div>
1557
- </div>
1474
+ <div id="p17title" class="d-flex align-items-center">
1475
+ <div id="p17BackButton" class="pe-2">
1476
+ <i class="fa-solid fa-square-caret-left fa-2xl" role="button" tabindex=0 onclick=goBack() title="Back" onkeypress="if (event.key == 'Enter') goBack()"></i>
1477
</div>
1559
- <div id="devListToolbarViewIcons3">
1560
- <div class="viewSelector" onclick=deskToggleCpuGraph(event)
1561
- title="Show device CPU and memory usage.">
1562
- <div class="viewSelector6"></div>
1563
- </div>
1478
+ <div class='fs-4 fw-bold'>Details - <span id=p17deviceName></span></div>
1479
+ <div id="devListToolbarViewIcons3" class="ms-auto">
1480
+ <i class="fa-solid fa-chart-line fa-xl fa-border" role="button" onclick=deskToggleCpuGraph(event) title="Show device CPU and memory usage."></i>
1481
</div>
1565
- <h1>Details - <span id=p17deviceName></span></h1>
1482
</div>
1483
<div id=p17info style="overflow-y:auto">
1484
<div id=p17graph style="width:100%">
@@ -1765,8 +1681,7 @@
1681
<option value="">No limit</option>
1682
</select>
1683
</div>
1768
- <a href=# onclick=p3showDownloadEventsDialog(3)><i class="fas fa-download"
1769
- title="Download Events" style=cursor:pointer></i></a>
1684
+ <a href=# onclick=p3showDownloadEventsDialog(3)><i class="fa-solid fa-download" title="Download Events" style=cursor:pointer></i></a>
1685
</td>
1686
{{!-- <td class="h2"></td> --}}
1687
</tr>
@@ -1799,7 +1714,7 @@
1714
<option value=720>Last 30 days</option>
1715
</select>
1716
</div>
1802
- <i class="fas fa-download" title="Download data points (.csv)" style=cursor:pointer
1717
+ <i class="fa-solid fa-download" title="Download data points (.csv)" style=cursor:pointer
1718
onclick=p40downloadEvents()></i>
1719
</div>
1720
<div>
@@ -1828,7 +1743,7 @@
1743
</div>
1744
<input value="Clear" type="button" class="btn btn-secondary btn-sm m-1"
1745
onclick="clearServerTracing()" />
1831
- <i class="fas fa-download" title="Download trace (.csv)" style=cursor:pointer
1746
+ <i class="fa-solid fa-download" title="Download trace (.csv)" style=cursor:pointer
1747
onclick=p41downloadServerTrace()></i>
1748
</div>
1749
<div>
@@ -1998,11 +1913,11 @@
1913
<td class="style14">
1914
<div style="float:right;line-height:22px">
1915
<a id="p60downloadReportDiv" style="display:none" href=# onclick=p60downloadReport()><i
2001
- class="fas fa-download" title="Download Report"></i></a>
1916
+ class="fa-solid fa-download" title="Download Report"></i></a>
1917
</div>
1918
<div>
1919
<button class="btn btn-primary btn-sm me-2 m-1" onclick=generateReportDialog()><i
2005
- class="far fa-file-alt"></i> Generate Report...</button>
1920
+ class="fa-regular fa-file-alt"></i> Generate Report...</button>
1921
</div>
1922
</td>
1923
{{!-- <td class="h2"></td> --}}
@@ -2081,18 +1996,13 @@
1996
<input id="d4SizeButton" type="button" value="Small" onclick="d4ToggleSize()" />
1997
<input id="d4EncodingButton" type="button" value="Raw" onclick="d4ToggleEncoding()" />
1998
<input id="d4LineBreakButton" type="button" value="Windows" onclick="d4ToggleLineBreak()" />
2084
- <textarea id=d4editorarea autocomplete="off"
2085
- style="height:calc(100vh - 286px);width:100%;overflow:scroll;resize:none;white-space:pre"></textarea>
1999
+ <textarea id=d4editorarea autocomplete="off" style="height:calc(100vh - 286px);width:100%;overflow:scroll;resize:none;white-space:pre"></textarea>
2000
</div>
2001
<div id=dialog7 style="">
2002
<div class="dtab">
2089
- <button id="td7meshkvm" class="tablinks"
2090
- onclick="changeDesktopSettingsTab(event, 'd7meshkvm')">Agent</button>
2091
- <button id="td7rdpkvm" class="tablinks"
2092
- onclick="changeDesktopSettingsTab(event, 'd7rdpkvm')">RDP</button>
2093
- <button id="td7amtkvm" class="tablinks"
2094
- onclick="changeDesktopSettingsTab(event, 'd7amtkvm')">Intel®
2095
- AMT</button>
2003
+ <button id="td7meshkvm" class="tablinks" onclick="changeDesktopSettingsTab(event, 'd7meshkvm')">Agent</button>
2004
+ <button id="td7rdpkvm" class="tablinks" onclick="changeDesktopSettingsTab(event, 'd7rdpkvm')">RDP</button>
2005
+ <button id="td7amtkvm" class="tablinks" onclick="changeDesktopSettingsTab(event, 'd7amtkvm')">Intel® AMT</button>
2006
</div>
2007
<div id="d7meshkvm" class="tabcontent">
2008
<!--<h4>Agent Remote Desktop</h4>-->
@@ -2253,28 +2163,19 @@
2163
class="btn btn-outline-success" /><input type=submit id=p13loginSubmit2 style="display:none"
2164
class="btn btn-outline-success" /></form>
2165
2256
- <div id=topMenu
2257
- style="z-index:1000;background-color:#ffffff;box-shadow:0px 0px 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:0px 0px 5px 5px;position:fixed;top:50px;right:5px;width:170px;display:none">
2258
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(1)>My Devices
2259
- </div>
2260
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(2)>My Account
2261
- </div>
2262
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(3)>My Events
2263
- </div>
2264
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(5)>My Files
2265
- </div>
2266
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(4)>My Users
2267
- </div>
2268
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(6)>My Server
2166
+ <div id=topMenu style="z-index:1000;background-color:#ffffff;box-shadow:0px 0px 15px #666;font-family:Arial,Helvetica,sans-serif;border-radius:0px 0px 5px 5px;position:fixed;top:50px;right:5px;width:170px;display:none">
2167
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(1)>My Devices</div>
2168
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(2)>My Account</div>
2169
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(3)>My Events</div>
2170
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(5)>My Files</div>
2171
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(4)>My Users</div>
2172
+ <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer" onclick=topMenu(6)>My Server</div>
2173
+ <div id="logoutMenuOption">
2174
+ <a id="logoutMenuOptionRef" href=/logout><div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer">Logout</div></a>
2175
</div>
2270
- <div id="logoutMenuOption"><a id="logoutMenuOptionRef" href=/logout>
2271
- <div style="padding:12px;border-top:1px solid gray;color:black;cursor:pointer">Logout</div>
2272
- </a></div>
2176
</div>
2177
2275
- <audio id="chimes">
2276
- <source src="sounds/chimes.mp3" type="audio/mp3" />
2277
- </audio>
2178
+ <audio id="chimes"><source src="sounds/chimes.mp3" type="audio/mp3" /></audio>
2179
<iframe style=display:none name="fileDownloadFrame"></iframe>
2180
</div>
2181
<script type="text/javascript">
@@ -3555,9 +3456,9 @@
3456
}
3457
} else if (message.type === 'deskBackground') {
3458
if (message.data != "") {
3558
- Q('DeskBackgroundButtonImage').src = 'images/icon-background.png';
3459
+ Q('DeskBackgroundButtonImage').style.color = '';
3460
} else {
3560
- Q('DeskBackgroundButtonImage').src = 'images/icon-background-red.png';
3461
+ Q('DeskBackgroundButtonImage').style.color = 'red';
3462
}
3463
}
3464
}
@@ -6440,22 +6341,22 @@
6341
6342
// Windows agent install
6343
x += '<div id=agins_windows>' + format("To add a new computer to device group \"{0}\", download the mesh agent and install it the computer to manage. This agent has server and device group information embedded within it.", EscapeHtml(mesh.name)) + '<br /><br />';
6443
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw32lnk name="meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 32bit version of the MeshAgent" + '">' + "Windows x86-32 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows x86 32bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6444
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw64lnk name="meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 64bit version of the MeshAgent" + '">' + "Windows x86-64 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows x86 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6445
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginswa64lnk name="meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "ARM 64bit version of the MeshAgent" + '">' + "Windows ARM-64 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows ARM 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6344
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw32lnk name="meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 32bit version of the MeshAgent" + '">' + "Windows x86-32 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows x86 32bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6345
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw64lnk name="meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 64bit version of the MeshAgent" + '">' + "Windows x86-64 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows x86 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6346
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginswa64lnk name="meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "ARM 64bit version of the MeshAgent" + '">' + "Windows ARM-64 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows ARM 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6347
if (debugmode > 0) { x += addHtmlValue("Settings File", '<a id=aginswmshlnk name="meshsettings?id=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '">' + format("{0} settings (.msh)", EscapeHtml(mesh.name)) + '</a>'); }
6348
x += '</div>';
6349
6350
// Linux agent install
6351
x += '<div id=agins_linux style=display:none>' + format("To add a computer to \"{0}\" run the following command. Root credentials will be needed.", EscapeHtml(mesh.name)) + '<br />';
6352
x += '<textarea id=agins_linux_area rows=2 cols=20 readonly=readonly style=border-radius:4px;padding:6px;margin-top:4px;margin-bottom:4px;background-color:#FFF9D3;border:0;width:100%;resize:none;height:160px;overflow:auto;font-size:12px class=form-control></textarea>';
6452
- x += '<div style=font-size:x-small;float:right>' + "* For BSD, run \"pkg install wget sudo bash\" first." + '</div><a style=text-decoration:none title="' + "Copy to clipboard" + '" onclick=copyAgentIdValue("agins_linux_area")>' + "Copy" + ' <i class="far fa-clipboard" style=cursor:pointer></i></a></div>';
6353
+ x += '<div style=font-size:x-small;float:right>' + "* For BSD, run \"pkg install wget sudo bash\" first." + '</div><a style=text-decoration:none title="' + "Copy to clipboard" + '" onclick=copyAgentIdValue("agins_linux_area")>' + "Copy" + ' <i class="fa-regular fa-clipboard" style=cursor:pointer></i></a></div>';
6354
6355
// macOS agent install
6356
x += '<div id=agins_osx style=display:none>' + format("To add a new computer to device group \"{0}\", download the mesh agent and install it the computer to manage. This agent installer has server and device group information embedded within it.", EscapeHtml(mesh.name)) + '<br /><br />';
6456
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=16&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "x86-64bit version of macOS Mesh Agent" + '">' + "macOS x86-64bit" + '</a> <i class="far fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=16&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6457
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=29&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "ARM 64bit version of macOS Mesh Agent" + '">' + "macOS ARM (64bit)" + '</a> <i class="far fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=29&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6458
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "Universal version of macOS Mesh Agent" + '">' + "macOS (Universal)" + '</a> <i class="far fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6357
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=16&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "x86-64bit version of macOS Mesh Agent" + '">' + "macOS x86-64bit" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=16&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6358
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=29&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "ARM 64bit version of macOS Mesh Agent" + '">' + "macOS ARM (64bit)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=29&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6359
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "Universal version of macOS Mesh Agent" + '">' + "macOS (Universal)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6360
x += '</div>';
6361
6362
// QR code agent install
@@ -6464,40 +6365,40 @@
6365
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>";
6366
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>";
6367
x += "</table>";
6467
- 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="far 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>');
6368
+ 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>');
6369
x += '</div>'
6370
6371
// MeshCentral Assistant
6372
x += '<div id=agins_assistant style=display:none><table><tr><td style=vertical-align:top><div>' + format("MeshCentral Assistant is a Windows tool that users can use to ask for help. Use the link below to download a version that will connect to device group \"{0}\".", EscapeHtml(mesh.name)) + '</div><div></div><br />';
6472
- x += '<a class=text-decoration-underline id=asinslnk name="meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "MeshCentral Assistant for Windows" + '">' + "Assistant for Windows (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '")></i>';
6373
+ x += '<a class=text-decoration-underline id=asinslnk name="meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "MeshCentral Assistant for Windows" + '">' + "Assistant for Windows (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '")></i>';
6374
x += '</td><td><img id=agass_img1 src=images/assistant-100.png width=74 height=100 srcset="images/assistant-200.png 2x"><img id=agass_img2 src=images/assistant2-100.png width=74 height=100 srcset="images/assistant2-200.png 2x"></td></tr></table></div>';
6375
6376
// MeshCentral Assistant2
6377
x += '<div id=agins_assistant2 style=display:none><table><tr><td style=vertical-align:top><div>' + "MeshCentral Assistant is a Windows tool that users can use to ask for help. Use the link below to download a version that will monitor the background agent." + '</div><div></div><br />';
6477
- x += '<a class=text-decoration-underline id=asinslnk2 name="meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "MeshCentral Assistant for Windows" + '">' + "Assistant for Windows (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '")></i>';
6378
+ x += '<a class=text-decoration-underline id=asinslnk2 name="meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "MeshCentral Assistant for Windows" + '">' + "Assistant for Windows (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=10006&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '")></i>';
6379
x += '</td><td><img src=images/assistant-100.png width=74 height=100 srcset="images/assistant-200.png 2x"></td></tr></table></div>';
6380
6381
// Windows agent uninstall
6382
x += '<div id=agins_windows_un style=display:none>' + "To remove a mesh agent, download the file below, run it and click \"uninstall\"." + '<br /><br />';
6482
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw32unlnk name="meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 32bit version of the MeshAgent" + '">' + "Windows x86-32 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows x86 32bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6483
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw64unlnk name="meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 64bit version of the MeshAgent" + '">' + "Windows x86-64 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows x86 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6484
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginswa64unlnk name="meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "ARM 64bit version of the MeshAgent" + '">' + "Windows ARM-64 (.exe)" + '</a> <i class="far fa-clipboard" title="' + "Copy Windows ARM 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6383
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw32unlnk name="meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 32bit version of the MeshAgent" + '">' + "Windows x86-32 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows x86 32bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6384
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsw64unlnk name="meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "x86 64bit version of the MeshAgent" + '">' + "Windows x86-64 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows x86 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6385
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginswa64unlnk name="meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '" title="' + "ARM 64bit version of the MeshAgent" + '">' + "Windows ARM-64 (.exe)" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy Windows ARM 64bit agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=43&meshid=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6386
x += '</div>';
6387
6388
// Linux agent uninstall
6389
x += '<div id=agins_linux_un style=display:none>' + "To remove a mesh agent, run the following command. Root credentials will be needed." + '<br />';
6390
x += '<textarea id=agins_linux_area_un rows=2 cols=20 readonly=readonly style=border-radius:4px;padding:6px;margin-top:4px;margin-bottom:4px;background-color:#FFF9D3;border:0;width:100%;resize:none;height:160px;overflow:auto;font-size:12px class=form-control></textarea>';
6490
- x += '<a style=text-decoration:none title="' + "Copy to clipboard" + '" onclick=copyAgentIdValue("agins_linux_area_un")>Copy <i class="far fa-clipboard" style=cursor:pointer></i></a></div>';
6391
+ x += '<a style=text-decoration:none title="' + "Copy to clipboard" + '" onclick=copyAgentIdValue("agins_linux_area_un")>Copy <i class="fa-regular fa-clipboard" style=cursor:pointer></i></a></div>';
6392
6393
// macOS agent uninstall
6394
x += '<div id=agins_osx_un style=display:none>' + "To remove a mesh agent, download the file below, right click on the \".mpkg\" file and click \"Show Package Contents\", then right click on \"Uninstall.command\" and click \"Open\"" + '<br /><br />';
6494
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "Universal version of macOS Mesh Agent" + '">macOS Agent (Universal)</a> <i class="far fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6395
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline onclick=downloadFile("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + (urlargs.key ? ('&key=' + urlargs.key) : '') + '") title="' + "Universal version of macOS Mesh Agent" + '">macOS Agent (Universal)</a> <i class="fa-regular fa-clipboard" title="' + "Copy macOS agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=10005&meshid=' + meshid.split('/')[2] + '",0)></i>', ['col-md-4', 'col-md-8']);
6396
x += '</div>';
6397
6398
// Linux binary installer
6399
x += '<div id=agins_linux_inst style=display:none>' + "This is a executable on OS's with graphical user interfaces" + '<br /><br />' + "Apple macOS executables will need to be removed from quarantine to run 'xattr -r -d com.apple.quarantine meshagent'" + '<br /><br />' + "You need to 'chmod +x meshagent' and run this file" + '<br /><br />';
6499
- x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsbinlnk name="meshagents?id=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '">' + "meshagent" + '</a> <i class="far fa-clipboard" title="' + "Copy agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6500
- x += addHtmlValue("Command" + ' <i class="far 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']);
6400
+ x += addHtmlValue("Mesh Agent", '<a class=text-decoration-underline id=aginsbinlnk name="meshagents?id=' + meshid.split('/')[2] + '&installflags=0' + (urlargs.key ? ('&key=' + urlargs.key) : '') + '">' + "meshagent" + '</a> <i class="fa-regular fa-clipboard" title="' + "Copy agent URL to clipboard" + '" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=' + meshid.split('/')[2] + '&installflags=",1)></i>', ['col-md-4', 'col-md-8']);
6401
+ x += addHtmlValue("Command" + ' <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']);
6402
x += '</div>';
6403
6404
setModalContent("xxAddAgent", "Add Mesh Agent", x);
@@ -8479,7 +8380,7 @@
8380
// Add node name
8381
var nname = EscapeHtml(node.name), nnameEx;
8382
if (nname.length == 0) { nname = '<i>' + "None" + '</i>'; }
8482
- if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>' + nname + ' <img class=hoverButton src="images/link5.png" /></span>'; }
8383
+ if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" role="button">' + nname + ' <i class=\'fa-solid fa-pencil fa-2xs\'/></i></span>'; }
8384
nnameEx = nname;
8385
if (mesh) { nname += '<span style=color:#AAA;font-size:small> - ' + EscapeHtml(mesh.name) + '</span>'; }
8386
QH('p10deviceName', nname);
@@ -8506,13 +8407,13 @@
8407
8408
// Attribute: Host
8409
if ((((features & 1) == 0) && (node.mtype != 4)) || (node.mtype == 3)) { // If not WAN-only, local hostname is in use
8509
- x += addDeviceAttribute("Hostname", addLinkConditional('<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>' + (node.host ? EscapeHtml(node.host) : ('<i>' + "None" + '</i>')) + '</span>', 'showEditNodeValueDialog(1)', meshrights & 4));
8410
+ x += addDeviceAttribute("Hostname", addLinkConditional((node.host ? EscapeHtml(node.host) : ('<i>' + "None" + '</i>')), 'showEditNodeValueDialog(1)', meshrights & 4));
8411
}
8412
8413
// Attribute: Description
8414
var description = node.desc ? EscapeHtml(node.desc) : ('<i>' + "None" + '</i>');
8415
if ((meshrights & 4) != 0) {
8515
- x += addDeviceAttribute("Description", '<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>' + description + ' <img class=hoverButton src="images/link5.png" /></span>');
8416
+ x += addDeviceAttribute("Description", '<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>' + description + ' <i class="fa-solid fa-pencil fa-xs" role="button"></i></span>');
8417
} else {
8418
x += addDeviceAttribute("Description", description);
8419
}
@@ -8700,7 +8601,7 @@
8601
var groupingTags = '<i>' + "None" + '</i>';
8602
if (node.tags != null) { groupingTags = ''; for (var i in node.tags) { groupingTags += '<span class=tagSpan>' + EscapeHtml(node.tags[i]) + '</span> '; } }
8603
if ((meshrights & 4) != 0) {
8703
- x += addDeviceAttribute("Tags", '<span onclick=showEditNodeValueDialog(3) style=line-height:26px;cursor:pointer>' + groupingTags + ' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>');
8604
+ x += addDeviceAttribute("Tags", '<span onclick=showEditNodeValueDialog(3) style=line-height:26px;cursor:pointer>' + groupingTags + ' <i class="fa-solid fa-pencil fa-xs" role="button"></i></span>');
8605
} else {
8606
x += addDeviceAttribute("Tags", '<span style=line-height:26px>' + groupingTags + '</span>');
8607
}
@@ -8709,8 +8610,8 @@
8610
if ((node.ssh != null) || (node.rdp != null)) {
8611
var y = [];
8612
if ((meshrights & 4) != 0) {
8712
- if (node.ssh != null) { y.push('<span onclick=showClearSshDialog(3) style=cursor:pointer>' + ((node.ssh == 1) ? "SSH-User+Pass" : ((node.ssh == 2) ? "SSH-User+Key+Pass" : "SSH-User+Key")) + ' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>'); }
8713
- if (node.rdp != null) { y.push('<span onclick=showClearRdpDialog(3) style=cursor:pointer>' + "RDP" + ' <img class=hoverButton src="images/link5.png" width=10 height=10 /></span>'); }
8613
+ if (node.ssh != null) { y.push('<span onclick=showClearSshDialog(3) style=cursor:pointer>' + ((node.ssh == 1) ? "SSH-User+Pass" : ((node.ssh == 2) ? "SSH-User+Key+Pass" : "SSH-User+Key")) + ' <i class="fa-solid fa-pencil fa-xs" role="button"></i></span>'); }
8614
+ if (node.rdp != null) { y.push('<span onclick=showClearRdpDialog(3) style=cursor:pointer>' + "RDP" + ' <i class="fa-solid fa-pencil fa-xs" role="button"></i></span>'); }
8615
} else {
8616
if (node.ssh != null) { y.push(((node.ssh == 1) ? "SSH-User+Pass" : ((node.ssh == 2) ? "SSH-User+Key+Pass" : "SSH-User+Key"))); }
8617
if (node.rdp != null) { y.push("RDP"); }
@@ -8990,14 +8891,14 @@
8891
// Show user device permissions
8892
x = '';
8893
if (meshrights & 7) {
8993
- x += '<button class="btn btn-primary btn-sm me-2" onclick="return p20showAddMeshUserDialog(5)" style=cursor:pointer;margin-right:10px><i class="fas fa-plus-circle"></i> ' + "Add User" + '</button>';
8894
+ 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>';
8895
if (usergroups != null) {
8896
var userGroupCount = 0, newUserGroup = false;
8897
for (var i in usergroups) {
8898
if ((usergroups[i].membershipType != null) || (usergroups[i]._id.split('/')[1] != nodeid.split('/')[1])) continue;
8899
userGroupCount++; if ((currentNode.links == null) || (currentNode.links[i] == null)) { newUserGroup = true; }
8900
}
9000
- if ((userGroupCount > 0) && (newUserGroup)) { x += '<a href=# onclick="return p20showAddMeshUserDialog(6)" style=cursor:pointer;margin-right:10px><i class="fas fa-plus-circle"></i> ' + "Add User Group" + '</a>'; }
8901
+ 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>'; }
8902
}
8903
}
8904
@@ -9016,10 +8917,10 @@
8917
if ((usergroups != null) && (usergroups[userid] != null)) { username = EscapeHtml(usergroups[userid].name); ugroup = true; }
8918
if ((meshrights & 2) != 0) {
8919
if (ugroup) {
9019
- trash = '<a href=# onclick=\'return p30removeUserFromNode(event,"' + encodeURIComponentEx(userid) + '")\' title="' + "Remove user group rights to this device group" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>';
8920
+ trash = '<a href=# onclick=\'return p30removeUserFromNode(event,"' + encodeURIComponentEx(userid) + '")\' title="' + "Remove user group rights to this device group" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>';
8921
rights = '<span style=cursor:pointer onclick=p20showAddMeshUserDialog(6,"' + encodeURIComponentEx(userid) + '")>' + rights + ' <img class=hoverButton style=cursor:pointer src=images/link5.png></span>';
8922
} else {
9022
- trash = '<a href=# onclick=\'return p30removeUserFromNode(event,"' + encodeURIComponentEx(userid) + '")\' title="' + "Remove user rights to this device group" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>';
8923
+ trash = '<a href=# onclick=\'return p30removeUserFromNode(event,"' + encodeURIComponentEx(userid) + '")\' title="' + "Remove user rights to this device group" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>';
8924
rights = '<span style=cursor:pointer onclick=p20showAddMeshUserDialog(5,"' + encodeURIComponentEx(userid) + '")>' + rights + ' <img class=hoverButton style=cursor:pointer src=images/link5.png></span>';
8925
}
8926
}
@@ -9740,7 +9641,7 @@
9641
// Add the language and timezone of the browser to the server so the server can localize the time correctly.
9642
var tz = '';
9643
try { tz = '&tz=' + encodeURIComponentEx(Intl.DateTimeFormat().resolvedOptions().timeZone); } catch (ex) { }
9743
- QH('p10html2', '<table class="table table-hover table-light" cellpadding=2 cellspacing=0><thead><tr style=><th scope=col style=text-align:center;width:150px>' + "Day" + '</th><th scope=col style=text-align:center><a onclick=downloadFile("devicepowerevents.ashx?id=' + currentNode._id + '&tf=' + new Date().getTimezoneOffset() + '&l=' + encodeURIComponentEx(getLang()) + tz + (urlargs.key ? ('&key=' + urlargs.key) : '') + '",null,true)><img title="' + "Download power events" + '" src="images/link4.png" /></a>' + "7 Day Power State" + '</th></tr></thead><tbody>' + x + '</tbody></table>');
9644
+ QH('p10html2', '<table class="table table-striped align-middle text-center" cellpadding=2 cellspacing=0><thead><tr><th scope=col style=width:150px>' + "Day" + '</th><th scope=col>' + "7 Day Power State" + '<div class="float-end pe-1"><i role="button" onclick=downloadFile("devicepowerevents.ashx?id=' + currentNode._id + '&tf=' + new Date().getTimezoneOffset() + '&l=' + encodeURIComponentEx(getLang()) + tz + (urlargs.key ? ('&key=' + urlargs.key) : '') + '",null,true) title="' + "Download power events" + '" class="fas fa-download"></i></div></th></tr></thead><tbody>' + x + '</tbody></table>');
9645
}
9646
9647
// Return a color for the given power state
@@ -11452,11 +11353,11 @@
11353
for (var i in p) {
11354
if (p[i].p != 0) {
11355
var c = p[i].c;
11455
- x += '<div onclick=showProcessDetails(' + p[i].p + ') class=deskToolsBar>';
11456
- x += '<div style=width:50px;float:left;text-align:right;padding-right:5px>' + EscapeHtml(p[i].p) + '</div>';
11457
- x += '<a href=# style=float:right;padding-right:5px;cursor:pointer title="' + "Stop process" + '" onclick=\'return stopProcess(' + EscapeHtml(p[i].p) + ',"' + EscapeHtml(p[i].c) + '")\'><img width=10 height=10 src="images/trash.png"></a>';
11458
- x += '<div style=float:right;padding-right:5px>' + (p[i].u ? EscapeHtml(p[i].u) : '') + '</div>';
11459
- x += '<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:5px" title="' + EscapeHtml(c) + '">' + c + '</div>';
11356
+ x += '<div onclick=showProcessDetails(' + p[i].p + ') class="deskToolsBar d-flex">';
11357
+ x += '<div class="pe-1 text-start" style=width:50px;>' + EscapeHtml(p[i].p) + '</div>';
11358
+ x += '<div style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;" title="' + EscapeHtml(c) + '">' + c + '</div>';
11359
+ x += '<div class="ms-auto">' + (p[i].u ? EscapeHtml(p[i].u) : '');
11360
+ x += '<i class="ps-1 fa-solid fa-trash-can" role="button" title="' + "Stop process" + '" onclick=\'return stopProcess(' + EscapeHtml(p[i].p) + ',"' + EscapeHtml(p[i].c) + '")\'></i></div>';
11361
x += '</div>';
11362
}
11363
}
@@ -11584,11 +11485,11 @@
11485
if (desktop == null) return;
11486
if (desktop.m.recordedData == null) {
11487
// Start recording
11587
- Q('DeskRecordButtonImage').src = 'images/icon-film-red.png';
11488
+ Q('DeskRecordButtonImage').style.color = 'red';
11489
desktop.m.StartRecording();
11490
} else {
11491
// Stop recording
11591
- Q('DeskRecordButtonImage').src = 'images/icon-film.png';
11492
+ Q('DeskRecordButtonImage').style.color = '';
11493
var d = new Date(), n = "DesktopSession" + '-' + currentNode.name + '-' + d.getFullYear() + '-' + ('0' + (d.getMonth() + 1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2) + '-' + ('0' + d.getHours()).slice(-2) + '-' + ('0' + d.getMinutes()).slice(-2);
11494
saveAs(data2blob(desktop.m.StopRecording().join('')), n + '.mcrec');
11495
}
@@ -14598,7 +14499,7 @@
14499
x += '<p><strong>' + "Active Login Tokens" + '</strong> - <span id="p2createMeshLink1"> <a href=# onclick="return account_createLoginToken()" class="newMeshBtn"> ' + "New" + '</a></span></p><div style=margin-left:40px><table class="table table-hover"><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>';
14500
for (var i = 0; i < loginTokens.length; i++) {
14501
var ltoken = loginTokens[i];
14601
- var trash = '<a href=# onclick=\'return p2removeLoginToken(event,"' + encodeURIComponentEx(ltoken.tokenUser) + '")\' title="' + "Remove login token" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>';
14502
+ var trash = '<a href=# onclick=\'return p2removeLoginToken(event,"' + encodeURIComponentEx(ltoken.tokenUser) + '")\' title="' + "Remove login token" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>';
14503
var details = '';
14504
if (ltoken.expire != 0) { details = EscapeHtml(format("Expires {0}", printDateTime(new Date(ltoken.expire)))) + ' '; }
14505
x += '<tr ' + (((++count % 2) == 0) ? 'style=background-color:#DDD' : '') + '><td style=width:30%><div class=m' + 2 + '></div><div> ' + EscapeHtml(ltoken.name) + '<div></div></div></td><td style=width:70%><div style=float:right>' + details + trash + '</div><div>' + EscapeHtml(ltoken.tokenUser) + '</div></td></tr>';
@@ -14861,7 +14762,7 @@
14762
if (meshrights & 1) { x += '<br><input type=button class="btn btn-outline-primary btn-sm mb-1" value=' + "Notes" + ' title="' + "View notes about this device group" + '" onclick=showNotes(false,"' + encodeURIComponentEx(currentMesh._id) + '") />'; }
14763
x += '<br style=clear:both><br>';
14764
if (meshrights & 2) {
14864
- x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog()"><i class="fas fa-plus-circle"></i> ' + "Add Users" + '</button>';
14765
+ 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>';
14766
if (usergroups != null) {
14767
var userGroupCount = 0, newUserGroup = false;
14768
for (var i in usergroups) {
@@ -14869,7 +14770,7 @@
14770
userGroupCount++;
14771
if ((currentMesh.links == null) || (currentMesh.links[i] == null)) { newUserGroup = true; }
14772
}
14872
- if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(2)"><i class="fas fa-plus-circle"></i> ' + "Add User Group" + '</button>'; }
14773
+ 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>'; }
14774
}
14775
}
14776
@@ -14886,11 +14787,11 @@
14787
}
14788
}
14789
if ((currentMesh.mtype == 2) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) {
14889
- 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="fas fa-plus-circle"></i> ' + "Add Agent" + '</button>';
14890
- 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="fas fa-user-plus"></i> ' + "Invite" + '</button>';
14790
+ 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>';
14791
+ 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>';
14792
}
14793
if ((currentMesh.mtype == 3) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) {
14893
- 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="fas fa-plus-circle"></i> ' + "Add Device" + '</button>';
14794
+ 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>';
14795
}
14796
if (currentMesh.amt && (currentMesh.amt.type > 2) && ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 4096) == 0))) { // ACM activation or Full Automatic
14797
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>';
@@ -14914,9 +14815,9 @@
14815
var trash = '', r = sortedusers[i].rights, rights = makeDeviceGroupRightsString(r), icon = 2;
14816
if ((sortedusers[i].id != userinfo._id) && (meshrights == 0xFFFFFFFF || (((meshrights & 2) != 0)))) {
14817
if ((meshrights == 0xFFFFFFFF) || (currentMesh.links[sortedusers[i].id].rights != 0xFFFFFFFF)) {
14917
- trash = '<a href=# onclick=\'return p20deleteUser(event,"' + encodeURIComponentEx(sortedusers[i].id) + '")\' title="' + "Remove user rights to this device group" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>';
14818
+ trash = '<a href=# onclick=\'return p20deleteUser(event,"' + encodeURIComponentEx(sortedusers[i].id) + '")\' title="' + "Remove user rights to this device group" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>';
14819
}
14919
- rights = '<span tabindex=0 style=cursor:pointer onclick=p20viewuser("' + encodeURIComponentEx(sortedusers[i].id) + '") onkeypress="if (event.key==\'Enter\') p20viewuser(\'' + encodeURIComponentEx(sortedusers[i].id) + '\')">' + rights + ' <i class="fas fa-pencil hoverButton"></i></span>';
14820
+ rights = '<span tabindex=0 style=cursor:pointer onclick=p20viewuser("' + encodeURIComponentEx(sortedusers[i].id) + '") onkeypress="if (event.key==\'Enter\') p20viewuser(\'' + encodeURIComponentEx(sortedusers[i].id) + '\')">' + rights + ' <i class="fa-solid fa-pencil hoverButton"></i></span>';
14821
}
14822
if (sortedusers[i].id.startsWith('ugrp/')) { icon = 4; }
14823
var username = EscapeHtml(decodeURIComponent(sortedusers[i].name));
@@ -15117,9 +15018,9 @@
15018
x += '<span id=dp10passNotify style="font-size:10px"> ' + "* 8 characters, 1 upper, 1 lower, 1 numeric, 1 non-alpha numeric." + '</span>';
15019
if ((currentMesh.mtype == 2) && (ptype == 2)) { x += '<span style="font-size:10px"> ' + "This policy will not impact devices with Intel® AMT in ACM mode." + '</span>'; }
15020
}
15120
- if (ptype == 0) { x = '<div class="row"><div class="col-2"><i class="fas fa-times-circle text-danger" style="padding-right:8px; font-size:60px;"></i></div><div class="col-10">When this policy is selected, Intel® AMT is not managed by this server. Intel AMT can still be used by manually activating and configuring it.</div></div>'; }
15121
- if (ptype == 1) { x = '<div class="row"><div class="col-2"><i class="fas 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® AMT in Client Control Mode (CCM) will be deactivated. Other devices will have CIRA cleared and can still be managed manually.</div></div>'; }
15122
- if (ptype == 4) { x = '<div class="row"><div class="col-2"><i class="fas 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® AMT activation and management is completely automated and the server will attempt to make best possible use of hardware management.</div></div>'; }
15021
+ 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® AMT is not managed by this server. Intel AMT can still be used by manually activating and configuring it.</div></div>'; }
15022
+ 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® AMT in Client Control Mode (CCM) will be deactivated. Other devices will have CIRA cleared and can still be managed manually.</div></div>'; }
15023
+ 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® AMT activation and management is completely automated and the server will attempt to make best possible use of hardware management.</div></div>'; }
15024
QH('dp20amtpolicydiv', x);
15025
setTimeout(dp20amtValidatePolicy, 500);
15026
}
@@ -17773,7 +17674,7 @@
17674
17675
x = '<br />';
17676
if ((currentUserGroup.membershipType == null) && ((userinfo.siteadmin & 256) != 0)) {
17776
- x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p51showAddUserDialog()"><i class="fas fa-plus-circle"></i> ' + " Add Users" + '</button>';
17677
+ 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>';
17678
}
17679
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Group Members" + '</th><th scope=col></th></tr>';
17680
@@ -17806,7 +17707,7 @@
17707
count = 1;
17708
var deviceGroupCount = 0, newDeviceGroup = false;
17709
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; } }
17809
- if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1"onclick="return p20showAddMeshUserDialog(3)"><i class="fas fa-plus-circle"></i> ' + " Add Device Group" + '</button>'; }
17710
+ 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>'; }
17711
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Device Groups" + '</th><th scope=col></th></tr>';
17712
if (currentUserGroup.links) {
17713
var omeshes = [];
@@ -17818,7 +17719,7 @@
17719
var meshname = '<i>' + "Unknown Device Group" + '</i>';
17720
if (mesh) { meshname = '<a href=# onclick=\'gotoMesh("' + mesh._id + '");haltEvent(event);\'>' + mesh.name + '</a>'; } else { }
17721
if ((cr & 2) != 0) {
17821
- trash = '<a href=# onclick=\'return p51removeMeshFromUserGroup(event,"' + encodeURIComponentEx(mesh._id) + '")\' title="' + "Remove user group rights to this device group" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>';
17722
+ trash = '<a href=# onclick=\'return p51removeMeshFromUserGroup(event,"' + encodeURIComponentEx(mesh._id) + '")\' title="' + "Remove user group rights to this device group" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>';
17723
rights = '<span style=cursor:pointer onclick=p20showAddMeshUserDialog(3,"' + encodeURIComponentEx(mesh._id) + '")>' + rights + ' <img class=hoverButton style=cursor:pointer src=images/link5.png></span>';
17724
}
17725
x += '<tr ' + (((++count % 2) == 0) ? 'style=background-color:#DDD' : '') + '><td style=width:30%><div title="' + "Device Group" + '" class=m99></div><div> ' + meshname + '<div></div></div></td><td style=width:70%><div style=float:right>' + trash + '</div><div>' + rights + '</div></td></tr>';
@@ -17830,7 +17731,7 @@
17731
// Display all devices for this user group
17732
count = 1;
17733
x += '<br />';
17833
- 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="fas fa-plus-circle"></i> ' + " Add Device" + '</button>'; }
17734
+ 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>'; }
17735
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Devices" + '</th><th scope=col></th></tr>';
17736
if (currentUserGroup.links) {
17737
var onodes = [];
@@ -18535,7 +18436,7 @@
18436
// Display common device groups
18437
var deviceGroupCount = 0, newDeviceGroup = false;
18438
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; } }
18538
- if ((deviceGroupCount > 0) && (newDeviceGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p20showAddMeshUserDialog(1)"><i class="fas fa-plus-circle"></i> ' + "Add Device Group" + '</button>'; }
18439
+ 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>'; }
18440
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Device Groups" + '</th><th scope=col></th></tr>';
18441
if (currentUser.links) {
18442
var omeshes = [];
@@ -18568,7 +18469,7 @@
18469
userGroupCount++;
18470
if ((currentUser.links == null) || (currentUser.links[i] == null)) { newUserGroup = true; }
18471
}
18571
- if ((userGroupCount > 0) && (newUserGroup)) { x += '<button class="btn btn-primary btn-sm me-2 mb-1" onclick="return p30showAddUserGroupDialog()"><i class="fas fa-plus-circle"></i> ' + "Add User Group" + '</button>'; }
18472
+ 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>'; }
18473
}
18474
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "User Group Memberships" + '</th><th scope=col></th></tr>';
18475
if (currentUser.links) {
@@ -18582,7 +18483,7 @@
18483
groupname = EscapeHtml(group.name);
18484
if (usergroups != null) { groupname = '<a href=# onclick=\'gotoUserGroup("' + encodeURIComponentEx(ougroups[i]._id) + '");haltEvent(event);\'>' + groupname + '</a>'; }
18485
}
18585
- if ((group.membershipType == null) && ((userinfo.siteadmin & 256) != 0)) { trash = '<a href=# onclick=\'return p30RemoveUserGroup(event,"' + encodeURIComponentEx(ougroups[i]._id) + '")\' title="' + "Remove user group membership" + '" style=cursor:pointer><i class="fas fa-trash text-danger hoverButton"></i></a>'; }
18486
+ if ((group.membershipType == null) && ((userinfo.siteadmin & 256) != 0)) { trash = '<a href=# onclick=\'return p30RemoveUserGroup(event,"' + encodeURIComponentEx(ougroups[i]._id) + '")\' title="' + "Remove user group membership" + '" style=cursor:pointer><i class="fa-solid fa-trash text-danger hoverButton"></i></a>'; }
18487
x += '<tr ' + (((++count % 2) == 0) ? 'style=background-color:#DDD' : '') + '><td><div title="' + "User Group" + '" class=m4></div><div> ' + groupname + '<div></div></div></td><td><div style=float:right>' + trash + '</div></td></tr>';
18488
}
18489
}
@@ -18593,7 +18494,7 @@
18494
// Display common devices
18495
count = 1;
18496
x += '<br />';
18596
- 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="fas fa-plus-circle"></i> ' + "Add Device" + '</button>'; }
18497
+ 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>'; }
18498
x += '<table class="table table-hover"><tbody><tr class="table-active"><th scope=col>' + "Common Devices" + '</th><th scope=col></th></tr>';
18499
if (currentUser.links) {
18500
// Sort the list of devices to display
@@ -19249,16 +19150,16 @@
19150
if (user != null) {
19151
var name = user.name;
19152
if (user.realname != null) { name += ', ' + user.realname; }
19252
- return '<div onclick=\'gotoUser("' + user._id + '",10);haltEvent(event);\' style=float:left;margin-right:4px;cursor:pointer><i class="fas fa-user-circle"></i></div>' + EscapeHtml(name);
19153
+ return '<div onclick=\'gotoUser("' + user._id + '",10);haltEvent(event);\' style=float:left;margin-right:4px;cursor:pointer><i class="fa-solid fa-user-circle"></i></div>' + EscapeHtml(name);
19154
} else {
19155
return '<i>' + "Unknown User" + '</i>';
19156
}
19157
}
19158
if (f == 'msg') {
19258
- if (v == 107) return '<div style=float:left;margin-right:4px;cursor:pointer><i class="fas fa-check-circle text-success"></i></div>' + "Succesful login";
19159
+ if (v == 107) return '<div style=float:left;margin-right:4px;cursor:pointer><i class="fa-solid fa-check-circle text-success"></i></div>' + "Succesful login";
19160
if (v == 108) return '<div style=float:left;margin-right:4px;cursor:pointer class="NotifyIconTiny2"></div>' + "Incorrect 2nd factor";
19161
if (v == 109) return '<div style=float:left;margin-right:4px;cursor:pointer class="NotifyIconTiny4"></div>' + "Locked account";
19261
- if (v == 110) return '<div style=float:left;margin-right:4px;cursor:pointer><i class="fas fa-exclamation-triangle text-warning"></i></div>' + "Invalid login attempt";
19162
+ if (v == 110) return '<div style=float:left;margin-right:4px;cursor:pointer><i class="fa-solid fa-exclamation-triangle text-warning"></i></div>' + "Invalid login attempt";
19163
}
19164
if (f == '2fa') {
19165
if (v == '') { return "None"; }
@@ -20673,7 +20574,8 @@
20574
function getLang() { if (navigator.languages != undefined) { return navigator.languages[0]; } return navigator.language; }
20575
function getNodeAmtVersion(node) { if ((node == null) || (node.intelamt == null) || (typeof node.intelamt.ver != 'string')) return 0; var verSplit = node.intelamt.ver.split('.'); if (verSplit.length < 2) return 0; return parseInt(verSplit[0]) + (parseInt(verSplit[1]) / 100); }
20576
function getstore(name, val) { try { if (typeof (localStorage) === 'undefined') return val; var v = localStorage.getItem(name); if ((v == null) || (v == null)) return val; return v; } catch (e) { return val; } }
20676
- function addLink(x, f) { return '<span tabindex=0 style=cursor:pointer;text-decoration:none onclick=\'' + f + '\' onkeypress="if (event.key==\'Enter\') {' + f + '} ">' + x + ' <img class=hoverButton src=images/link5.png></span>'; }
20577
+ // function addLink(x, f) { return '<span tabindex=0 style=cursor:pointer;text-decoration:none onclick=\'' + f + '\' onkeypress="if (event.key==\'Enter\') {' + f + '} ">' + x + ' <img class=hoverButton src=images/link5.png></span>'; }
20578
+ function addLink(x, f) { return '<span tabindex=0 role="button" onclick=\'' + f + '\' onkeypress="if (event.key==\'Enter\') {' + f + '} ">' + x + ' <i class="fa-solid fa-pencil fa-xs"></i></span>'; }
20579
function addLinkConditional(x, f, c) { if (c) return addLink(x, f); return x; }
20580
function addKeyLink(x, f) { return '<span tabindex=0 style=cursor:pointer;text-decoration:none onclick=' + f + ' onkeypress="if (event.key==\'Enter\') { ' + f + ' } ">' + x + ' <img class=hoverButton src=images/key16.png></span>'; }
20581
function addKeyLinkConditional(x, f, c) { if (c) return addKeyLink(x, f); return x; }