few more bootstrap fixes

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

si458 committed Oct 31, 2024 at 13:31 UTC 438289b2edcc35ed287b6a83601510d35d38072e
2 files changed +150 -147
public/styles/style-bootstrap.css
+2 -1
@@ -731,7 +731,6 @@ body {
731
732 #devListToolbarSpan {
733 width: 100%;
734 - height: 24px;
734 background: var(--sub-menu-bg);
735 vertical-align: middle;
736 border-spacing: 0;
@@ -2919,11 +2918,13 @@ nav .lbbuttonsel2 {
2918 .viewSelectorSel {
2919 background-color: #BBB;
2920 opacity: 0.8;
2921 + color: black;
2922 }
2923
2924 .viewSelector:hover {
2925 opacity: 0.5;
2926 background-color: #AAA;
2927 + color: black;
2928 }
2929
2930
views/default3.handlebars
+148 -146
@@ -406,128 +406,124 @@
406 title="Go to last page" style="display:none;margin-right:12px">
407 <div class="viewSelector8"></div>
408 </div>
409 - <div tabindex=0 id=devViewButton1 class=viewSelector onclick=onDeviceViewChange(1)
410 - onkeypress="if (event.key == 'Enter') { onDeviceViewChange(1); }" title="Columns">
411 - <div class="viewSelector2"></div>
412 - </div>
413 - <div tabindex=0 id=devViewButton2 class=viewSelector onclick=onDeviceViewChange(2)
414 - onkeypress="if (event.key == 'Enter') { onDeviceViewChange(2); }" title="List">
415 - <div class="viewSelector1"></div>
416 - </div>
417 - <div tabindex=0 id=devViewButton3 class=viewSelector onclick=onDeviceViewChange(3)
418 - onkeypress="if (event.key == 'Enter') { onDeviceViewChange(3); }" title="Desktops">
419 - <div class="viewSelector3"></div>
420 - </div>
421 - <div tabindex=0 id=devViewButton5 class=viewSelector onclick=onDeviceViewChange(5)
422 - onkeypress="if (event.key == 'Enter') { onDeviceViewChange(5); }" title="Desktops">
423 - <div class="viewSelector7"></div>
424 - </div>
425 - <div tabindex=0 id=devViewButton4 class=viewSelector onclick=onDeviceViewChange(4)
426 - onkeypress="if (event.key == 'Enter') { onDeviceViewChange(4); }" title="Map"
427 - style="display:none">
428 - <div class="viewSelector4"></div>
429 - </div>
409 + <span role=button tabindex=0 id=devViewButton1 class="fa-layers fa-fw fa-xl" onclick=onDeviceViewChange(1) onkeypress="if (event.key == 'Enter') { onDeviceViewChange(1); }" title="Columns">
410 + <i class="fa-solid fa-bars" data-fa-transform="shrink-8 right-4 up-2"></i>
411 + <i class="fa-solid fa-bars" data-fa-transform="shrink-8 left-4 up-2"></i>
412 + <i class="fa-solid fa-bars" data-fa-transform="shrink-8 right-4 down-3"></i>
413 + <i class="fa-solid fa-bars" data-fa-transform="shrink-8 left-4 down-3"></i>
414 + </span>
415 + <span role=button tabindex=0 id=devViewButton2 class="fa-layers fa-fw fa-xl" onclick=onDeviceViewChange(2) onkeypress="if (event.key == 'Enter') { onDeviceViewChange(2); }" title="List">
416 + <i class="fa-solid fa-bars"></i>
417 + </span>
418 + <span role=button tabindex=0 id=devViewButton3 class="fa-layers fa-fw fa-xl" onclick=onDeviceViewChange(3) onkeypress="if (event.key == 'Enter') { onDeviceViewChange(3); }" title="Desktops">
419 + <i class="fa-solid fa-square" data-fa-transform="shrink-9 up-4 left-4"></i>
420 + <i class="fa-solid fa-square" data-fa-transform="shrink-9 up-4 right-4"></i>
421 + <i class="fa-solid fa-square" data-fa-transform="shrink-9 down-4 left-4"></i>
422 + <i class="fa-solid fa-square" data-fa-transform="shrink-9 down-4 right-4"></i>
423 + </span>
424 + <span role=button tabindex=0 id=devViewButton5 class="fa-layers fa-fw fa-xl" onclick=onDeviceViewChange(5) onkeypress="if (event.key == 'Enter') { onDeviceViewChange(5); }" title="Desktops">
425 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 up-4 left-6"></i>
426 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 up-4 right-1"></i>
427 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 up-4 right-5"></i>
428 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 down-4 left-1"></i>
429 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 down-4 left-5"></i>
430 + <i class="fa-solid fa-square" data-fa-transform="shrink-10 down-4 right-6"></i>
431 + </span>
432 + <span role=button tabindex=0 id=devViewButton4 class="fa-layers fa-fw fa-xl" onclick=onDeviceViewChange(4) onkeypress="if (event.key == 'Enter') { onDeviceViewChange(4); }" title="Map" style="display:none">
433 + <i class="fa-solid fa-map-location-dot"></i>
434 + </span>
435 </div>
436 </div>
432 - <table id="devListToolbarSpan" class="noselect">
433 - <tr>
434 - <td id="devListToolbar" style="background: linear-gradient(180deg,#fff,#fff,#e9ecef);padding:5px;">
435 - <div>
436 - <span class="fa-layers fa-fw" role="button" style="display:none" title="Collapse All" id="CollapseAllButton" onclick="cmexpandaction(2)">
437 - <i class="fa-solid fa-chevron-up" data-fa-transform="down-6"></i>
438 - <i class="fa-solid fa-chevron-down" data-fa-transform="up-6"></i>
439 - </span>
440 - <span class="fa-layers fa-fw" role="button" style="display:none" title="Expand All" id="ExpandAllButton" onclick="cmexpandaction(1)">
441 - <i class="fa-solid fa-chevron-up" data-fa-transform="up-6"></i>
442 - <i class="fa-solid fa-chevron-down" data-fa-transform="down-6"></i>
443 - </span>
444 - <input type=button class="btn btn-outline-primary me-2 mb-1 btn-sm" id=SelectAllButton onclick="selectallButtonFunction();" value="Select All" />
445 - <input type=button class="btn btn-outline-primary me-2 mb-1 btn-sm" id=GroupActionButton disabled="disabled" value="Group Action" onclick=groupActionFunction() />
446 - <input type=button id=ScrollToTopButton onclick="onDevicesScroll(true);" class="btn btn-outline-primary me-2 mb-1 btn-sm" value="Scroll To Top" />
447 - <input type="text" id=SearchInput class="form-control-sm me-2 mb-1 btn-sm" style="width: auto;" placeholder="Filter">
448 - <select class="form-select-sm me-2 mb-1" style="width: auto;" id=DevFilterSelect onchange=onOnlineCheckBox(event) title="Device Filter">
449 - <option value=0 selected>All</option>
450 - <option value=1>Online</option>
451 - <option value=5>Offline</option>
452 - <option value=2>Sessions</option>
453 - <option value=3>Starred</option>
454 - <option value=4>Intel&reg; AMT</option>
455 - <option value=6>Help</option>
456 - <option value=7>Tagged</option>
457 - <option value=8>Untagged</option>
458 - </select>
459 - <label><input class="form-check-input me-2" type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox() /> &nbsp; <span title="Show devices operating system name">OS Name</span></label>
460 - <label style="display:none"><input type=checkbox id=OnlineCheckBox class="form-check-input me-2" onclick=onOnlineCheckBox(event) /><span title="Only show devices that are online">Online</span></label>
461 - <span id="devsCustomUIBar"></span>
462 - </div>
463 - </td>
464 - <td id=kvmListToolbar class=style14 style="display:none">
465 - <span class="fa-layers fa-fw" role="button" style="display:none" title="Collapse All" id="CollapseAllButton2" onclick="cmexpandaction(2)">
437 + <div id="devListToolbarSpan" class="noselect d-flex align-items-center">
438 + <div id=devListToolbar class=me-auto style="display:none"></td>
439 + <div>
440 + <span class="fa-layers fa-fw" role="button" style="display:none" title="Collapse All" id="CollapseAllButton" onclick="cmexpandaction(2)">
441 <i class="fa-solid fa-chevron-up" data-fa-transform="down-6"></i>
442 <i class="fa-solid fa-chevron-down" data-fa-transform="up-6"></i>
443 </span>
469 - <span class="fa-layers fa-fw" role="button" style="display:none" title="Expand All" id="ExpandAllButton2" onclick="cmexpandaction(1)">
444 + <span class="fa-layers fa-fw" role="button" style="display:none" title="Expand All" id="ExpandAllButton" onclick="cmexpandaction(1)">
445 <i class="fa-solid fa-chevron-up" data-fa-transform="up-6"></i>
446 <i class="fa-solid fa-chevron-down" data-fa-transform="down-6"></i>
447 </span>
473 - <input type="button" onclick="connectAllKvmFunction()" value="Connect All" />&nbsp;
474 - <input type="button" onclick="disconnectAllKvmFunction()" value="Disconnect All" />&nbsp;
475 - <input type="button" onclick="onDevicesScroll(true);" value="Scroll To Top" />&nbsp;
476 - <label><input type="checkbox" id="autoConnectDesktopCheckbox" class="form-check-input me-2"
477 - onclick="autoConnectDesktops(event)" title="Automatic connect" />Auto&nbsp;</label>
478 - <input type="button" onclick="showMultiDesktopSettings()" value="Settings" />&nbsp;
479 - <input id=KvmSearchInput type=search placeholder=Filter
480 - onchange=onDeviceSearchChanged(event) onclick=onDeviceSearchChanged(event)
481 - onkeyup=onDeviceSearchChanged(event) autocomplete=off onfocus=onSearchFocus(1)
482 - onblur=onSearchFocus(0) />&nbsp;
483 - <span id=KvmSearchInputClearButton style="display:none;position:relative"><img
484 - src="images/x16.png" type="button" onclick="clearDeviceSearch()"
485 - style="position:absolute;cursor:pointer;left:-18px;top:-8px"
486 - srcset="images/x32.png 2x" /></span>
487 - </td>
488 - <td id=devMapToolbar class=style14 style="display:none">
489 - &nbsp;&nbsp;<input type=search id=mapSearchLocation placeholder="Search Location"
490 - onfocus=onMapSearchFocus(1) onblur=onMapSearchFocus(0) />
491 - <input type=button value=Search title="Search for location" onclick=getSearchLocation() />
492 - <input type=button id=refreshmap title="Reset map view" value=Reset
493 - onclick=refreshMap(false,true) />
494 - </td>
495 - <td class="d-flex justify-content-end align-items-center" style=height:100%>
496 - <div style="display:none" id=devListToolbarView>
497 - View
498 - <select id=viewselect onchange=onDeviceViewChange()>
499 - <option value=1>Columns</option>
500 - <option value=2>List</option>
501 - <option value=3>Desktops Fixed Width</option>
502 - <option id=viewselectmapoption value=4 style="display:none">Map</option>
503 - <option value=5>Desktops</option>
504 - </select>
505 - </div>
506 - <div style="display:none" id=devListToolbarSize>
507 - Size
508 - <select id=sizeselect class="form-select-sm me-2" onchange=onDeviceViewChange()>
509 - <option value=0>Small</option>
510 - <option value=1>Medium</option>
511 - <option value=2>Large</option>
512 - </select>
513 - &nbsp;
514 - </div>
515 - <div style="display:none" id=devListToolbarSort>
516 - Sort
517 - <select id=sortselect class="form-select-sm me-2" onchange=mainUpdate(6)>
518 - <option>Group</option>
519 - <option>Power</option>
520 - <option>Device</option>
521 - <option>Tags</option>
522 - <option>Group-Tags</option>
523 - <option>Last Seen</option>
524 - </select>
525 - &nbsp;
526 - </div>
527 - <i class="fa-solid fa-gear" role="button" id=devListToolbarSettings onclick="onDeviceViewSettings()"></i>
528 - </td>
529 - </tr>
530 - </table>
448 + <input type=button class="btn btn-outline-primary me-2 btn-sm" id=SelectAllButton onclick="selectallButtonFunction();" value="Select All" />
449 + <input type=button class="btn btn-outline-primary me-2 btn-sm" id=GroupActionButton disabled="disabled" value="Group Action" onclick=groupActionFunction() />
450 + <input type=button id=ScrollToTopButton onclick="onDevicesScroll(true);" class="btn btn-outline-primary me-2 mb-1 btn-sm" value="Scroll To Top" />
451 + <input type="text" id=SearchInput class="form-control-sm me-2 btn-sm" style="width: auto;" placeholder="Filter">
452 + <select class="form-select-sm me-2" style="width: auto;" id=DevFilterSelect onchange=onOnlineCheckBox(event) title="Device Filter">
453 + <option value=0 selected>All</option>
454 + <option value=1>Online</option>
455 + <option value=5>Offline</option>
456 + <option value=2>Sessions</option>
457 + <option value=3>Starred</option>
458 + <option value=4>Intel&reg; AMT</option>
459 + <option value=6>Help</option>
460 + <option value=7>Tagged</option>
461 + <option value=8>Untagged</option>
462 + </select>
463 + <label><input class="form-check-input me-2" type=checkbox id=RealNameCheckBox onclick=onRealNameCheckBox() /> &nbsp; <span title="Show devices operating system name">OS Name</span></label>
464 + <label style="display:none"><input type=checkbox id=OnlineCheckBox class="form-check-input me-2" onclick=onOnlineCheckBox(event) /><span title="Only show devices that are online">Online</span></label>
465 + <span id="devsCustomUIBar"></span>
466 + </div>
467 + </div>
468 + <div id=kvmListToolbar class=style14 style="display:none">
469 + <span class="fa-layers fa-fw" role="button" style="display:none" title="Collapse All" id="CollapseAllButton2" onclick="cmexpandaction(2)">
470 + <i class="fa-solid fa-chevron-up" data-fa-transform="down-6"></i>
471 + <i class="fa-solid fa-chevron-down" data-fa-transform="up-6"></i>
472 + </span>
473 + <span class="fa-layers fa-fw" role="button" style="display:none" title="Expand All" id="ExpandAllButton2" onclick="cmexpandaction(1)">
474 + <i class="fa-solid fa-chevron-up" data-fa-transform="up-6"></i>
475 + <i class="fa-solid fa-chevron-down" data-fa-transform="down-6"></i>
476 + </span>
477 + <input type="button" onclick="connectAllKvmFunction()" value="Connect All" />&nbsp;
478 + <input type="button" onclick="disconnectAllKvmFunction()" value="Disconnect All" />&nbsp;
479 + <input type="button" onclick="onDevicesScroll(true);" value="Scroll To Top" />&nbsp;
480 + <label><input type="checkbox" id="autoConnectDesktopCheckbox" class="form-check-input me-2" onclick="autoConnectDesktops(event)" title="Automatic connect" />Auto&nbsp;</label>
481 + <input type="button" onclick="showMultiDesktopSettings()" value="Settings" />&nbsp;
482 + <input id=KvmSearchInput type=search placeholder=Filter onchange=onDeviceSearchChanged(event) onclick=onDeviceSearchChanged(event) onkeyup=onDeviceSearchChanged(event) autocomplete=off onfocus=onSearchFocus(1) onblur=onSearchFocus(0) />&nbsp;
483 + <span id=KvmSearchInputClearButton style="display:none;position:relative">
484 + <img src="images/x16.png" type="button" onclick="clearDeviceSearch()" style="position:absolute;cursor:pointer;left:-18px;top:-8px" srcset="images/x32.png 2x" />
485 + </span>
486 + </div>
487 + <div id=devMapToolbar class=style14 style="display:none">
488 + &nbsp;&nbsp;<input type=search id=mapSearchLocation placeholder="Search Location" onfocus=onMapSearchFocus(1) onblur=onMapSearchFocus(0) />
489 + <input type=button value=Search title="Search for location" onclick=getSearchLocation() />
490 + <input type=button id=refreshmap title="Reset map view" value=Reset onclick=refreshMap(false,true) />
491 + </div>
492 + <div class="d-flex align-items-center">
493 + <div style="display:none" id=devListToolbarView>
494 + View
495 + <select id=viewselect onchange=onDeviceViewChange()>
496 + <option value=1>Columns</option>
497 + <option value=2>List</option>
498 + <option value=3>Desktops Fixed Width</option>
499 + <option id=viewselectmapoption value=4 style="display:none">Map</option>
500 + <option value=5>Desktops</option>
501 + </select>
502 + </div>
503 + <div style="display:none" id=devListToolbarSize>
504 + Size
505 + <select id=sizeselect class="form-select-sm me-2" onchange=onDeviceViewChange()>
506 + <option value=0>Small</option>
507 + <option value=1>Medium</option>
508 + <option value=2>Large</option>
509 + </select>
510 + &nbsp;
511 + </div>
512 + <div style="display:none" id=devListToolbarSort>
513 + Sort
514 + <select id=sortselect class="form-select-sm me-2" onchange=mainUpdate(6)>
515 + <option>Group</option>
516 + <option>Power</option>
517 + <option>Device</option>
518 + <option>Tags</option>
519 + <option>Group-Tags</option>
520 + <option>Last Seen</option>
521 + </select>
522 + &nbsp;
523 + </div>
524 + <i class="fa-solid fa-gear" role="button" id=devListToolbarSettings onclick="onDeviceViewSettings()"></i>
525 + </div>
526 + </div>
527 <div id=NoMeshesPanel style="display:none">
528 <table>
529 <tr>
@@ -642,7 +638,7 @@
638 </div>
639 <div id=p2logintokens></div>
640 <strong>Device Groups</strong>
645 - <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>
641 + <span id="p2createMeshLink1"> - <button class="btn btn-primary btn-sm" onclick="return account_createMesh()"> <i class="fa-fw fa-solid fa-plus-circle"></i>New</button></span>
642 <br /><br />
643 <div id=p2meshes></div>
644 <div id=p2noMeshFound style="display:none">No device groups.<span id="p2createMeshLink2"> <a href=#
@@ -896,14 +892,10 @@
892 <td style=width:20px></td>
893 <td style=width:200px;vertical-align:top;position:relative valign=top>
894 <div class="deviceNotifyLargeDot">
899 - <div id="p10deviceMsg" onclick=showDeviceMessages(null,null,event)
900 - class=deviceNotifyDotSub></div>
901 - <img id="p10deviceStar" class=deviceNotifyDotSub src=images/icon-star-notify-16.png
902 - width=16 height=16>
903 - <img id="p10deviceNotify" onclick=showDeviceSessions(null,null,event)
904 - class=deviceNotifyDotSub src=images/icon-relay-notify.png width=16 height=16>
905 - <img id="p10deviceHelp" onclick=showDeviceHelpRequests(null,null,event)
906 - class=deviceNotifyDotSub src=images/icon-help-notify-16.png width=16 height=16>
895 + <div id="p10deviceMsg" onclick=showDeviceMessages(null,null,event) class=deviceNotifyDotSub></div>
896 + <i title="Starred" role=button class="fa-solid fa-star" id="p10deviceStar" onclick=showDeviceSessions(null,null,event) data-fa-transform="shrink-5" data-fa-mask="fa-solid fa-circle"></i>
897 + <i title="List of remote sessions active on this computer." role=button class="fa-solid fa-arrow-right-arrow-left" id="p10deviceNotify" onclick=showDeviceSessions(null,null,event) data-fa-transform="shrink-5" data-fa-mask="fa-solid fa-circle"></i>
898 + <i title="Help Requested" role=button class="fa-solid fa-question" id="p10deviceHelp" onclick=showDeviceHelpRequests(null,null,event) data-fa-transform="shrink-5" data-fa-mask="fa-solid fa-circle"></i>
899 </div>
900 <div id="p10deviceBattery" class="deviceBatteryLarge deviceBatteryLarge1"></div>
901 <a href=# onclick=p10showiconselector()><img id=MainComputerImage></a>
@@ -1482,7 +1474,7 @@
1474 <i class="fa-solid fa-chart-line fa-xl fa-border" role="button" onclick=deskToggleCpuGraph(event) title="Show device CPU and memory usage."></i>
1475 </div>
1476 </div>
1485 - <div id=p17info style="overflow-y:auto">
1477 + <div id=p17info class="ps-0 pb-5 overflow-y-auto container-fluid">
1478 <div id=p17graph style="width:100%">
1479 <table style=width:100%>
1480 <tr>
@@ -5727,7 +5719,7 @@
5719 for (var j in node.sessions.kvm) {
5720 if (j.startsWith('user/')) {
5721 var trash = '';
5730 - if (((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF))) { trash = ' <a href=# onclick=\'return endDeviceSession("kvm", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5722 + if (((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF))) { trash = ' <i role=button onclick=\'return endDeviceSession("kvm", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger" ></i>'; }
5723 x += addHtmlValue2(getUserName(j), ((node.sessions.kvm[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.kvm[j]))) + trash);
5724 } else if (j == 'busy') {
5725 x += addHtmlValue2("Device is busy", ((node.sessions.kvm[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.kvm[j]))));
@@ -5737,35 +5729,35 @@
5729 x += '<u>' + "Remote Desktop" + '</u>';
5730 for (var j in node.sessions.multidesk) {
5731 var trash = '';
5740 - if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <a href=# onclick=\'return endDeviceSession("multidesk", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5732 + if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <i role=button onclick=\'return endDeviceSession("multidesk", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger"></i>'; }
5733 x += addHtmlValue2(getUserName(j), ((node.sessions.multidesk[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.multidesk[j]))) + trash);
5734 }
5735 } else if (i == 'terminal') {
5736 x += '<u>' + "Terminal" + '</u>';
5737 for (var j in node.sessions.terminal) {
5738 var trash = '';
5747 - if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <a href=# onclick=\'return endDeviceSession("terminal", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5739 + if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <i role=button onclick=\'return endDeviceSession("terminal", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger"></i>'; }
5740 x += addHtmlValue2(getUserName(j), ((node.sessions.terminal[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.terminal[j]))) + trash);
5741 }
5742 } else if (i == 'files') {
5743 x += '<u>' + "Files" + '</u>';
5744 for (var j in node.sessions.files) {
5745 var trash = '';
5754 - if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <a href=# onclick=\'return endDeviceSession("files", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5746 + if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <i role=button onclick=\'return endDeviceSession("files", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger"></i>'; }
5747 x += addHtmlValue2(getUserName(j), ((node.sessions.files[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.files[j]))) + trash);
5748 }
5749 } else if (i == 'tcp') {
5750 x += '<u>' + "TCP Routing" + '</u>';
5751 for (var j in node.sessions.tcp) {
5752 var trash = '';
5761 - if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <a href=# onclick=\'return endDeviceSession("tcp", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5753 + if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <i role=button onclick=\'return endDeviceSession("tcp", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger"></i>'; }
5754 x += addHtmlValue2(getUserName(j), ((node.sessions.tcp[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.tcp[j]))) + trash);
5755 }
5756 } else if (i == 'udp') {
5757 x += '<u>' + "UDP Routing" + '</u>';
5758 for (var j in node.sessions.udp) {
5759 var trash = '';
5768 - if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <a href=# onclick=\'return endDeviceSession("udp", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'; }
5760 + if ((j == userinfo._id) || (GetNodeRights(node) == 0xFFFFFFFF)) { trash = ' <i role=button onclick=\'return endDeviceSession("udp", "' + encodeURIComponentEx(node._id) + '", "' + encodeURIComponentEx(j) + '")\' title="' + "Disconnect this session" + '" class="fa-fw fa-solid fa-trash text-danger"></i>'; }
5761 x += addHtmlValue2(getUserName(j), ((node.sessions.udp[j] == 1) ? "1 session" : nobreak(format("{0} sessions", node.sessions.udp[j]))) + trash);
5762 }
5763 }
@@ -8960,7 +8952,7 @@
8952 for (var i = 0; i < deviceShares.length; i++) {
8953 var dshare = deviceShares[i], trash = '';
8954 if (dshare.url != null) { trash += '<a href="' + dshare.url + '" rel="noreferrer noopener" target=_blank title="' + "Device Sharing Link" + '" style=cursor:pointer><img src=images/link2.png border=0 height=10 width=10></a> '; }
8963 - trash += '<a href=# onclick=\'return p30removeDeviceSharing(event,"' + encodeURIComponentEx(currentNode._id) + '","' + encodeURIComponentEx(dshare.publicid) + '","' + encodeURIComponentEx(dshare.guestName) + '")\' title="' + "Remove device sharing" + '" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>';
8955 + trash += '<i role=button onclick=\'return p30removeDeviceSharing(event,"' + encodeURIComponentEx(currentNode._id) + '","' + encodeURIComponentEx(dshare.publicid) + '","' + encodeURIComponentEx(dshare.guestName) + '")\' title="' + "Remove device sharing" + '" class="fa-fw fa-solid fa-trash text-danger"></i>';
8956 var type = ''; if (dshare.p <= 7) { type = ['', "Terminal", "Desktop", "Desktop + Terminal", "Files", "Terminal + Files", "Desktop + Files", "Desktop + Terminal + Files"][dshare.p]; } else if (dshare.p == 8) { type = "HTTP/" + dshare.port; } else if (dshare.p == 16) { type = "HTTPS/" + dshare.port; }
8957 var details = type;
8958 if ((dshare.startTime != null) && (dshare.expireTime != null)) { details = format("{0}, {1} to {2}", type, printFlexDateTime(new Date(dshare.startTime)), printFlexDateTime(new Date(dshare.expireTime))); }
@@ -12974,9 +12966,9 @@
12966 dateHeader = printDate(time);
12967 x += '<table class="table table-hover p3eventsTable" cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>' + dateHeader + '</td></tr>';
12968 }
12977 - var icon = 'si3';
12978 - if (event.etype == 'user') icon = 'm2';
12979 - if (event.etype == 'server') icon = 'si3';
12969 + var icon = 'fa-mobile-screen';
12970 + if (event.etype == 'user') icon = 'fa-user';
12971 + if (event.etype == 'server') icon = 'fa-server';
12972
12973 var msg;
12974 if ((event.msgid == null) || (eventsMessageId[event.msgid] == null)) {
@@ -13000,8 +12992,8 @@
12992 msg = EscapeHtml(event.username) + guestname + ' &rarr; ' + msg;
12993 }
12994 }
13003 - if (event.etype == 'relay' || event.action == 'relaylog') icon = 'relayIcon16';
13004 - x += '<tr onclick=showEventDetails(' + event.h + ',1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1>&nbsp;</td><td class=style10>' + printTime(time) + ' - ' + msg + '</td></tr><tr></tr>';
12995 + if (event.etype == 'relay' || event.action == 'relaylog') icon = 'fa-arrow-right-arrow-left';
12996 + x += '<tr onclick=showEventDetails(' + event.h + ',1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) role="button"><td style=width:18px><i class="fa-solid ' + icon + '"></i></td><td class=g1>&nbsp;</td><td class=style10>' + printTime(time) + ' - ' + msg + '</td></tr><tr></tr>';
12997 }
12998 }
12999 if (dateHeader != null) x += '</table>';
@@ -16588,8 +16580,7 @@
16580 e.children[1].classList.remove('g1s');
16581 e.children[2].classList.remove('style10s');
16582 //e.children[2].style['background-color'] = ((over == 0) ? '#c9c9c9' : '#b9b9b9');
16591 - e.children[3].classList.remove('g2s');
16592 - if (over == 1) { e.children[1].classList.add('g1s'); e.children[2].classList.add('style10s'); e.children[3].classList.add('g2s'); }
16583 + if (over == 1) { e.children[1].classList.add('g1s'); e.children[2].classList.add('style10s'); }
16584 }
16585
16586 function eventsUpdate() {
@@ -16603,10 +16594,10 @@
16594 dateHeader = printDate(time);
16595 x += '<table class="table table-hover p3eventsTable" cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>' + dateHeader + '</td></tr>';
16596 }
16606 - var icon = 'si3';
16607 - if (event.etype == 'ugrp') icon = 'm4';
16608 - if (event.etype == 'user') icon = 'm2';
16609 - if (event.etype == 'server') icon = 'si3';
16597 + var icon = 'fa-mobile-screen';
16598 + if (event.etype == 'ugrp') icon = 'fa-users';
16599 + if (event.etype == 'user') icon = 'fa-user';
16600 + if (event.etype == 'server') icon = 'fa-server';
16601
16602 var msg;
16603 if ((event.msgid == null) || (eventsMessageId[event.msgid] == null)) {
@@ -16632,7 +16623,18 @@
16623 if (event.nodeid) {
16624 var node = getNodeFromId(event.nodeid);
16625 if (node != null) {
16635 - icon = 'si' + node.icon;
16626 + console.log(node);
16627 + switch(node.icon){
16628 + case 1:
16629 + icon = 'fa-computer';
16630 + break;
16631 + case 2:
16632 + icon = 'fa-laptop';
16633 + break;
16634 + case 8:
16635 + icon = 'fa-laptop-code';
16636 + break;
16637 + }
16638 msg = '<a href=# onclick=\'gotoDevice("' + event.nodeid + '",10);haltEvent(event);\'>' + EscapeHtml(node.name) + '</a> &rarr; ' + msg;
16639 }
16640 }
@@ -16646,8 +16648,8 @@
16648 }
16649 }
16650 if (event.remoteaddr) { msg += ' (' + event.remoteaddr + ')'; }
16649 - if (event.etype == 'relay' || event.action == 'relaylog') icon = 'relayIcon16';
16650 - x += '<tr onclick=showEventDetails(' + event.h + ',2) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class=' + icon + '></div></td><td class=g1>&nbsp;</td><td class=style10>' + printTime(time) + ' - ' + msg + '</td></tr><tr></tr>';
16651 + if (event.etype == 'relay' || event.action == 'relaylog') icon = 'fa-arrow-right-arrow-left';
16652 + x += '<tr onclick=showEventDetails(' + event.h + ',2) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) role=button><td style=width:18px><i class="fa-fw fa-solid ' + icon + '"></i></td><td class=g1>&nbsp;</td><td class=style10>' + printTime(time) + ' - ' + msg + '</td></tr><tr></tr>';
16653 }
16654 }
16655 if (dateHeader != null) x += '</table>';
@@ -20602,7 +20604,7 @@
20604 // 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>'; }
20605 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>'; }
20606 function addLinkConditional(x, f, c) { if (c) return addLink(x, f); return x; }
20605 - 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>'; }
20607 + function addKeyLink(x, f) { return '<span tabindex=0 role=button onclick=' + f + ' onkeypress="if (event.key==\'Enter\') { ' + f + ' } ">' + x + ' <i class="fa-solid fa-key"></i></span>'; }
20608 function addKeyLinkConditional(x, f, c) { if (c) return addKeyLink(x, f); return x; }
20609 function haltEvent(e) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); return false; }
20610 function addOption(q, t, i) { var option = document.createElement('option'); option.text = t; option.value = i; Q(q).add(option); }