Improved user interface, new MeshAgent

Ylian Saint-Hilaire committed Sep 14, 2018 at 17:42 UTC 3d98fe3770c92e396815d49aa3b5244b1d12a5e5
21 files changed +237 -77
agents/MeshCmd-signed.exe
Binary files a/agents/MeshCmd-signed.exe and b/agents/MeshCmd-signed.exe differ
agents/MeshCmd64-signed.exe
Binary files a/agents/MeshCmd64-signed.exe and b/agents/MeshCmd64-signed.exe differ
agents/MeshService-signed.exe
Binary files a/agents/MeshService-signed.exe and b/agents/MeshService-signed.exe differ
agents/MeshService.exe
Binary files a/agents/MeshService.exe and b/agents/MeshService.exe differ
agents/MeshService64-signed.exe
Binary files a/agents/MeshService64-signed.exe and b/agents/MeshService64-signed.exe differ
agents/MeshService64.exe
Binary files a/agents/MeshService64.exe and b/agents/MeshService64.exe differ
agents/meshagent_arm
Binary files a/agents/meshagent_arm and b/agents/meshagent_arm differ
agents/meshagent_pi
Binary files a/agents/meshagent_pi and b/agents/meshagent_pi differ
agents/meshagent_pogo
Binary files a/agents/meshagent_pogo and b/agents/meshagent_pogo differ
agents/meshagent_poky
Binary files a/agents/meshagent_poky and b/agents/meshagent_poky differ
agents/meshagent_poky64
Binary files a/agents/meshagent_poky64 and b/agents/meshagent_poky64 differ
agents/meshagent_x86
Binary files a/agents/meshagent_x86 and b/agents/meshagent_x86 differ
agents/meshagent_x86-64
Binary files a/agents/meshagent_x86-64 and b/agents/meshagent_x86-64 differ
agents/meshagent_x86-64_nokvm
Binary files a/agents/meshagent_x86-64_nokvm and b/agents/meshagent_x86-64_nokvm differ
agents/meshagent_x86_nokvm
Binary files a/agents/meshagent_x86_nokvm and b/agents/meshagent_x86_nokvm differ
agents/meshcore.js
+6 -3
@@ -16,7 +16,8 @@ limitations under the License.
16
17 function createMeshCore(agent) {
18 var obj = {};
19 -
19 +
20 + /*
21 function borderController() {
22 this.container = null;
23 this.Start = function Start(user) {
@@ -45,7 +46,7 @@ function createMeshCore(agent) {
46 }
47 }
48 }
48 -
49 + */
50
51 require('events').EventEmitter.call(obj, true).createEvent('loggedInUsers_Updated');
52 obj.on('loggedInUsers_Updated', function ()
@@ -57,7 +58,7 @@ function createMeshCore(agent) {
58 }
59 sendConsoleText('LogOn Status Changed. Active Users => [' + users.join(', ') + ']');
60 });
60 - obj.borderManager = new borderController();
61 + //obj.borderManager = new borderController();
62
63 // MeshAgent JavaScript Core Module. This code is sent to and running on the mesh agent.
64 obj.meshCoreInfo = "MeshCore v5";
@@ -910,6 +911,7 @@ function createMeshCore(agent) {
911 response = 'Available commands: help, info, args, print, type, dbget, dbset, dbcompact, eval, parseuri, httpget,\r\nwslist, wsconnect, wssend, wsclose, notify, ls, ps, kill, amt, netinfo, location, power, wakeonlan, scanwifi,\r\nscanamt, setdebug, smbios, rawsmbios, toast, lock, users, border.';
912 break;
913 }
914 + /*
915 case 'border':
916 {
917 if ((args['_'].length == 1) && (args['_'][0] == 'on')) {
@@ -927,6 +929,7 @@ function createMeshCore(agent) {
929 }
930 }
931 break;
932 + */
933 case 'users':
934 {
935 var retList = [];
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.2.0-i",
3 + "version": "0.2.0-k",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
public/images/leftbar-62.png
Binary files /dev/null and b/public/images/leftbar-62.png differ
public/images/leftbar-90.png
Binary files /dev/null and b/public/images/leftbar-90.png differ
public/styles/style.css
+66
@@ -170,6 +170,72 @@ a {
170 border: none;
171 }
172
173 +.lbbutton {
174 + width:74px;
175 + height:74px;
176 + border-radius:5px;
177 + background-color:white;
178 + margin-left:8px;
179 + margin-top:8px;
180 + position:relative;
181 + cursor:pointer;
182 + opacity:0.5;
183 +}
184 +
185 +.lbbutton:hover {
186 + opacity:1;
187 +}
188 +
189 +.lbbuttonsel {
190 + opacity:0.9;
191 +}
192 +
193 +.lbbuttonsel2 {
194 + width:82px;
195 + border-radius:5px 0px 0px 5px;
196 + opacity:1;
197 +}
198 +
199 +.lb1 {
200 + background: url(../images/leftbar-62.png) -0px 0px;
201 + height: 62px;
202 + width: 62px;
203 + cursor: pointer;
204 + border: none;
205 +}
206 +
207 +.lb2 {
208 + background: url(../images/leftbar-62.png) -75px 0px;
209 + height: 62px;
210 + width: 62px;
211 + cursor: pointer;
212 + border: none;
213 +}
214 +
215 +.lb3 {
216 + background: url(../images/leftbar-62.png) -150px 0px;
217 + height: 62px;
218 + width: 62px;
219 + cursor: pointer;
220 + border: none;
221 +}
222 +
223 +.lb4 {
224 + background: url(../images/leftbar-62.png) -225px 0px;
225 + height: 62px;
226 + width: 62px;
227 + cursor: pointer;
228 + border: none;
229 +}
230 +
231 +.lb5 {
232 + background: url(../images/leftbar-62.png) -294px 0px;
233 + height: 62px;
234 + width: 62px;
235 + cursor: pointer;
236 + border: none;
237 +}
238 +
239 .m0 { background : url(../images/images16.png) -32px 0px; height : 16px; width : 16px; border:none; float:left }
240 .m1 { background : url(../images/images16.png) -16px 0px; height : 16px; width : 16px; border:none; float:left }
241 .m2 { background : url(../images/images16.png) -96px 0px; height : 16px; width : 16px; border:none; float:left }
views/default.handlebars
+164 -73
@@ -28,7 +28,7 @@
28 <script keeplink=1 type="text/javascript" src="scripts/ol3-contextmenu.js"></script>
29 <title>MeshCentral</title>
30 </head>
31 -<body onload="if (typeof(startup) !== 'undefined') startup();" oncontextmenu="handleContextMenu(event)">
31 +<body id="body" onload="if (typeof(startup) !== 'undefined') startup();" oncontextmenu="handleContextMenu(event)" style="display:none">
32 <!-- right click menu -->
33 <div id="contextMenu" class="contextMenu" style="display: none">
34 <div id="cxinfo" class="cmtext" onclick="cmaction(1)"><b>Information</b></div>
@@ -62,56 +62,82 @@
62 </div>
63 <p id="logoutControl">{{{logoutControl}}}</p>
64 </div>
65 - <div id=topbarmaster>
66 - <div id=topbar class=noselect style=display:none>
67 - <div>
65 + <div id="page_leftbar" style="height:calc(100vh - 66px);width:90px;position:absolute;z-index:1000;background:#113962;background:linear-gradient(to bottom, #104893 0%,#113962 100%);color:white;display:none">
66 + <div style="height:16px"></div>
67 + <div id=LeftMenuMyDevices class="lbbutton lbbuttonsel" title="My Devices" onclick=go(1)>
68 + <div class="lb2" style="position:absolute;top:6px;left:6px"></div>
69 + </div>
70 + <div id=LeftMenuMyAccount class="lbbutton" title="My Account" onclick=go(2)>
71 + <div class="lb1" style="position:absolute;top:6px;left:6px"></div>
72 + </div>
73 + <div id=LeftMenuMyEvents class="lbbutton" title="My Events" onclick=go(3)>
74 + <div class="lb3" style="position:absolute;top:6px;left:6px"></div>
75 + </div>
76 + <div id=LeftMenuMyFiles class="lbbutton" title="My Files" onclick=go(5)>
77 + <div class="lb4" style="position:absolute;top:6px;left:6px"></div>
78 + </div>
79 + <div id=LeftMenuMyUsers class="lbbutton" title="My Users" onclick=go(4)>
80 + <div class="lb5" style="position:absolute;top:6px;left:6px"></div>
81 + </div>
82 + </div>
83 + <div id="page_content" style="max-height:calc(100vh - 130px)">
84 + <div id=topbarmaster>
85 + <div id=topbar class=noselect style=display:none>
86 <div>
69 - <table style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
70 - <tr>
71 - <td id=MainMenuMyDevices style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(1)>My Devices</td>
72 - <td id=MainMenuMyAccount style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(2)>My Account</td>
73 - <td id=MainMenuMyEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(3)>My Events</td>
74 - <td id=MainMenuMyFiles style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(5)>My Files</td>
75 - <td id=MainMenuMyUsers style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(4)>My Users</td>
76 - <td class=style3 style="text-align:right;height:24px"><span title="Toggle full width" style="cursor:pointer;opacity:0.2" onclick="toggleFullScreen(1)">&harr;</span>&nbsp;</td>
77 - </tr>
78 - </table>
79 - <div id=MainSubMenuSpan style=display:none>
80 - <table id=MainSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
81 - <tr>
82 - <td id=MainDev style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(10)>General</td>
83 - <td id=MainDevDesktop style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(11)>Desktop</td>
84 - <td id=MainDevTerminal style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(12)>Terminal</td>
85 - <td id=MainDevFiles style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(13)>Files</td>
86 - <td id=MainDevEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(16)>Events</td>
87 - <td id=MainDevAmt style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(14)>Intel&reg; AMT</td>
88 - <td id=MainDevConsole style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(15)>Console</td>
89 - <td class=style3 style=height:24px>&nbsp;</td>
90 - </tr>
91 - </table>
92 - </div>
93 - <div id=MeshSubMenuSpan style=display:none>
94 - <table id=MeshSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
95 - <tr>
96 - <td id=MeshGeneral style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(20)>General</td>
97 - <td class=style3 style=height:24px>&nbsp;</td>
98 - </tr>
99 - </table>
100 - </div>
101 - <div id=UserSubMenuSpan style=display:none>
102 - <table id=UserSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
87 + <div style="position:relative">
88 + <div style="position:absolute;top:3px;right:6px">
89 + <span title="Toggle full width" style="cursor:pointer;color:white" onclick="toggleFullScreen(1)">&harr;</span>
90 + </div>
91 + <table id=MainMenuSpan style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
92 <tr>
104 - <td id=UserGeneral style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(30)>General</td>
105 - <td id=UserEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(31)>Events</td>
106 - <td class=style3 style=height:24px>&nbsp;</td>
93 + <td id=MainMenuMyDevices style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(1)>My Devices</td>
94 + <td id=MainMenuMyAccount style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(2)>My Account</td>
95 + <td id=MainMenuMyEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(3)>My Events</td>
96 + <td id=MainMenuMyFiles style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(5)>My Files</td>
97 + <td id=MainMenuMyUsers style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(4)>My Users</td>
98 + <td class=style3 style="text-align:right;height:24px">&nbsp;</td>
99 </tr>
100 </table>
101 + <div id=MainSubMenuSpan style=display:none>
102 + <table id=MainSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
103 + <tr>
104 + <td id=MainDev style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(10)>General</td>
105 + <td id=MainDevDesktop style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(11)>Desktop</td>
106 + <td id=MainDevTerminal style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(12)>Terminal</td>
107 + <td id=MainDevFiles style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(13)>Files</td>
108 + <td id=MainDevEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(16)>Events</td>
109 + <td id=MainDevAmt style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(14)>Intel&reg; AMT</td>
110 + <td id=MainDevConsole style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(15)>Console</td>
111 + <td class=style3 style=height:24px>&nbsp;</td>
112 + </tr>
113 + </table>
114 + </div>
115 + <div id=MeshSubMenuSpan style=display:none>
116 + <table id=MeshSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
117 + <tr>
118 + <td id=MeshGeneral style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(20)>General</td>
119 + <td class=style3 style=height:24px>&nbsp;</td>
120 + </tr>
121 + </table>
122 + </div>
123 + <div id=UserSubMenuSpan style=display:none>
124 + <table id=UserSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
125 + <tr>
126 + <td id=UserGeneral style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(30)>General</td>
127 + <td id=UserEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(31)>Events</td>
128 + <td class=style3 style=height:24px>&nbsp;</td>
129 + </tr>
130 + </table>
131 + </div>
132 + <div id=UserDummyMenuSpan style=display:none>
133 + <table id=UserDummyMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
134 + <tr><td class=style3 style="text-align:right;height:24px">&nbsp;</td></tr>
135 + </table>
136 + </div>
137 </div>
138 </div>
139 </div>
140 </div>
113 - </div>
114 - <div id="page_content" style="max-height:calc(100vh - 138px)">
141 <div id="column_l">
142 <div id=p0 style=display:none>
143 <div id=p0message style=margin:50px;text-align:center>Server disconnected, <href onclick=reload() style=cursor:pointer><u>click to reconnect</u></href>.</div>
@@ -182,8 +208,8 @@
208 </tr>
209 </table>
210 </div>
185 - <div id="xdevices" style="max-height:calc(100vh - 242px);overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch"></div>
186 - <div id="xdevicesmap" style="height:500px;width:100%;overflow:hidden;position:relative">
211 + <div id="xdevices" style="max-height:calc(100vh - 239px);overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch"></div>
212 + <div id="xdevicesmap" style="height:calc(100vh - 239px);width:100%;overflow:hidden;position:relative">
213 <div id=xmapSearchResultsDlg style="position:absolute;display:none;max-height:280px;left:5px;top:5px;max-width:250px;z-index:1000;background-color:#EEE;box-shadow:0px 0px 15px #666">
214 <div style="width:100%;background-color:#003366;color:#FFF;border-radius:5px 5px 0 0">
215 <div id=xmapSearchClose style=float:right;padding:5px;cursor:pointer onclick=mapCloseSearchWindow()><b>X</b></div>
@@ -195,7 +221,7 @@
221 </div>
222 <div id="xmap-info-window" style="text-shadow: 0px 0px 15px #FFF"></div>
223 </div>
198 - <div id=p2 style=display:none>
224 + <div id=p2 style="display:none">
225 <h1>My Account</h1>
226 <div id="p2AccountActions">
227 <p><strong><img alt="" width=150 height=103 src=images/mainaccount.png style=margin-bottom:10px;margin-right:20px;float:right />Account actions</strong></p>
@@ -239,7 +265,7 @@
265 <div class="h2" style="height:100%;float:right;">&nbsp;</div>
266 </div>
267 </div>
242 - <div id=p3events style="max-height:600px;overflow-y:scroll"></div>
268 + <div id=p3events style="height:calc(100vh - 243px);overflow-y:scroll"></div>
269 </div>
270 <div id=p4 style=display:none>
271 <h1>My Users</h1>
@@ -256,11 +282,11 @@
282 <div class=h2 style="height:100%;float:right">&nbsp;</div>
283 </div>
284 </div>
259 - <div id="p3users" style="max-height:600px;overflow-y:auto"></div>
285 + <div id="p3users" style="max-height:calc(100vh - 243px);overflow-y:auto"></div>
286 </div>
287 <div id=p5 style=display:none>
288 <h1>My Files</h1>
263 - <table id="p5toolbar" style="width: 100%" cellpadding="0" cellspacing="0">
289 + <table id="p5toolbar" style="width:100%" cellpadding="0" cellspacing="0">
290 <tr>
291 <td style="width:100%;background-color:#d3d9d6;text-align:left;padding:4px" valign=bottom>
292 <div id="p5rightOfButtons" style="float:right;margin-top:3px"></div>
@@ -293,7 +319,7 @@
319 </td>
320 </tr>
321 </table>
296 - <div id="p5filetable" style="width:100%;height:500px;overflow:auto;-webkit-user-select:none;position:relative">
322 + <div id="p5filetable" style="width:100%;height:calc(100vh - 294px);overflow:auto;-webkit-user-select:none;position:relative">
323 <!--
324 <form id=p5fileCatchAll method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame>
325 <input type=file id=p5fileCatchAllInput name=files style="position:absolute;left:0;width:100%;top:0;bottom:0;opacity:0;display:none" onchange="p5fileCatchAllInputChanged(event)" />
@@ -310,7 +336,7 @@
336 <tr><td class=style6 style="text-align:left;padding:3px">&nbsp;<span id="p5bottomstatus"></span></td></tr>
337 </table>
338 </div>
313 - <div id=p10 style=display:none>
339 + <div id=p10 style="display:none">
340 <table style="width:100%" cellpadding="0" cellspacing="0">
341 <tr>
342 <td style=width:auto valign=top>
@@ -410,7 +436,7 @@
436 </tr>
437 </table>
438 </div>
413 - <div id=p12 style=display:none>
439 + <div id=p12 style="display:none">
440 <div id="p12title"><h1>Terminal - <span id=p12deviceName></span></h1></div>
441 <div id="p12warning" style='max-width:100%;display:none;cursor:pointer;margin-bottom:5px' onclick=showFeaturesDlg()>
442 <div class="icon2" style="float:left;margin:7px"></div>
@@ -513,7 +539,7 @@
539 </td>
540 </tr>
541 </table>
516 - <div id="p13filetable" style="width:100%;height:500px;overflow:auto;-webkit-user-select:none">
542 + <div id="p13filetable" style="width:100%;height:calc(100vh - 346px);overflow:auto;-webkit-user-select:none">
543 <div id="p13bigok" style="width:256px;overflow:hidden;position:absolute;left:337px;top:200px;text-align:center;font-size:1600%;color:#AAAAAA;display:none"><b>&checkmark;</b></div>
544 <div id="p13bigfail" style="width:256px;overflow:hidden;position:absolute;left:337px;top:200px;text-align:center;font-size:1600%;color:#AAAAAA;display:none"><b>&#10007;</b></div>
545 <span id="p13files"></span>
@@ -524,7 +550,7 @@
550 </div>
551 <div id=p14 style=display:none>
552 <div id="p14title"><h1>Intel&reg; AMT - <span id=p14deviceName></span></h1></div>
527 - <iframe id=p14iframe style="width:100%;height:650px;border:0;overflow:hidden" src="/commander.htm"></iframe>
553 + <iframe id=p14iframe style="width:100%;height:calc(100vh - 242px);border:0;overflow:hidden" src="/commander.htm"></iframe>
554 </div>
555 <div id=p15 style=display:none>
556 <div id="p15title"><h1>Console - <span id=p15deviceName></span></h1></div>
@@ -544,8 +570,8 @@
570 </td>
571 </tr>
572 <tr>
547 - <td style="background:black;text-align:center;height:500px;position:relative">
548 - <div id=p15agentConsole style="background:black;margin:0;padding:0;color:lightgray;width:100%;max-width:930px;height:100%;text-align:left;overflow-y:scroll"><pre id=p15agentConsoleText></pre></div>
573 + <td id=p15agentConsole style="background:black;margin:0;padding:0;color:lightgray;width:100%;height:calc(100vh - 296px);max-height:500px;position:relative">
574 + <pre id=p15agentConsoleText style="position:absolute;margin:0;padding:0;top:0;bottom:0;left:0;right:0;overflow-y:scroll;overflow-x:auto"></pre>
575 </td>
576 </tr>
577 <tr>
@@ -583,9 +609,9 @@
609 <div class=h2 style=height:100%;float:right>&nbsp;</div>
610 </div>
611 </div>
586 - <div id=p16events style="max-height:600px;overflow-y:scroll"></div>
612 + <div id=p16events style="max-height:calc(100vh - 267px);overflow-y:auto"></div>
613 </div>
588 - <div id=p20 style=display:none>
614 + <div id=p20 style="display:none">
615 <img id=MainMeshImage src="images/mesh-200.png" style=border-width:0px;height:200px;width:200px;float:right>
616 <h1><span id=p20meshName></span> - General</h1>
617 <p id=p20info></p>
@@ -629,7 +655,7 @@
655 <div class="h2" style="height:100%;float:right;">&nbsp;</div>
656 </div>
657 </div>
632 - <div id=p31events style="max-height:600px;overflow-y:scroll"></div>
658 + <div id=p31events style="max-height:calc(100vh - 267px);overflow-y:scroll"></div>
659 </div>
660 <br id="column_l_bottomgap" />
661 </div>
@@ -784,8 +810,9 @@
810 var debugmode = false;
811 var clickOnce = (((features & 256) != 0) && detectClickOnce());
812 var attemptWebRTC = ((features & 128) != 0);
787 - var webPageFullScreen = getstore('webPageFullScreen', false);;
813 + var webPageFullScreen = getstore('webPageFullScreen', true);
814 if (webPageFullScreen == 'false') { webPageFullScreen = false; }
815 + if (webPageFullScreen == 'true') { webPageFullScreen = true; }
816
817 function startup() {
818 if ((features & 32) == 0) {
@@ -885,17 +912,41 @@
912 QS('container')['border-right'] = '1px solid #b7b7b7';
913 QS('container')['border-left'] = '1px solid #b7b7b7';
914 QS('container')['min-width'] = '960px';
888 - //QS('column_l').padding = '0 15px';
915 + QS('container')['overflow'] = '';
916 QS('column_l').width = '930px';
917 + QS('column_l').height = '';
918 + QS('column_l')['margin-left'] = '';
919 + QS('column_l')["overflow-y"] = '';
920 + QS('column_l')["max-height"] = (xxcurrentView >= 10) ? 'calc(100vh - 159px)' : 'calc(100vh - 135px)';
921 + QS('container').position = '';
922 + QS('page_content').position = '';
923 + QV('MainMenuSpan', true);
924 + QV('UserDummyMenuSpan', false);
925 + QV('page_leftbar', false);
926 } else {
927 + QS('container').position = 'absolute';
928 QS('container').width = '100%';
929 + QS('container').top = '0px';
930 + QS('container').bottom = '0px';
931 QS('container')['border-right'] = '0';
932 QS('container')['border-left'] = '0';
933 QS('container')['min-width'] = '700px';
895 - //QS('column_l').padding = '0';
934 + QS('container')['overflow'] = 'hidden';
935 + QS('page_content').position = 'absolute';
936 + QS('page_content').top = '66px';
937 + QS('page_content').left = '90px';
938 + QS('page_content').right = '0px';
939 + QS('page_content').bottom = '0px';
940 + QS('column_l').height = 'calc(100vh - 135px)';
941 QS('column_l').width = 'calc(100% - 30px)';
942 + QS('column_l')["overflow-y"] = 'auto';
943 + QS('column_l')["max-height"] = 'calc(100vh - 135px)';
944 + QV('MainMenuSpan', false);
945 + QV('UserDummyMenuSpan', (xxcurrentView < 10) && webPageFullScreen);
946 + QV('page_leftbar', true);
947 }
948 drawDeviceTimeline();
949 + QV('body', true);
950 }
951
952 function getNodeFromId(id) { for (var i in nodes) { if (nodes[i]._id == id) return nodes[i]; } return null; }
@@ -1682,7 +1733,7 @@
1733 r += '<div style=border-top-style:solid;border-top-width:1px;border-top-color:#DDDDDD;cursor:pointer;font-size:10px>';
1734 if ((view < 3) && (sort == 0) && (meshcount > 0)) { r += '<a onclick=account_createMesh() title="Create a new group of computers." style=cursor:pointer>Add Mesh</a>&nbsp'; }
1735 r += '<a onclick=p10showMeshCmdDialog(0) style=cursor:pointer title="Download MeshCmd, a command line tool that performs many functions.">MeshCmd</a></div>';
1685 - r += '</div>';
1736 + r += '</div><br/>';
1737
1738 QH('xdevices', r);
1739 deviceHeaderSet();
@@ -3578,12 +3629,21 @@
3629 QV('column_l_bottomgap', !fullscreen);
3630 QV('idx_deskFullBtn2', fullscreen);
3631 QV('deskFullBtn', !fullscreen);
3632 + QV('page_leftbar', !fullscreen);
3633 if (fullscreen) {
3634 + QS('column_l').width = '930px';
3635 + QS('column_l').height = '';
3636 + QS('column_l')['margin-left'] = '';
3637 + QS('column_l')['overflow-y'] = '';
3638 + QS('container').position = '';
3639 + QS('page_content').position = '';
3640 + QV('MainMenuSpan', true);
3641 QS('container').width = '100%';
3642 QS('container')['border-right'] = '0';
3643 QS('container')['border-left'] = '0';
3644 QS('column_l').padding = '0';
3645 QS('column_l').width = '100%';
3646 + QS('column_l')["max-height"] = '';
3647 } else {
3648 QS('container').width = '960px';
3649 QS('container')['border-right'] = '1px solid #b7b7b7';
@@ -4358,7 +4418,7 @@
4418 var time = new Date(event.time);
4419 if (time.toLocaleDateString() != dateHeader) {
4420 if (dateHeader != null) x += '</table>';
4361 - x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td class=DevSt>' + time.toLocaleDateString() + '</td></tr>';
4421 + x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td class=DevSt colspan=4>' + time.toLocaleDateString() + '</td></tr>';
4422 dateHeader = time.toLocaleDateString();
4423 }
4424 var icon = 'si3';
@@ -4367,10 +4427,7 @@
4427
4428 var msg = event.msg.split('(R)').join('&reg;');
4429 //if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
4370 - x += '<tr><td><div class=bar18 style=height:18px;width:100%;font-size:medium>';
4371 - x += '<div style=float:left;height:18px;width:18px;background-color:white><div class=' + icon + ' style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';
4372 - x += '<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>';
4373 - x += '<div style=font-size:14px><span style=width:300px>' + time.toLocaleTimeString() + ' - ' + msg + '</span></div></div></td></tr>';
4430 + x += '<tr><td style=width:18px><div class=' + icon + '></div></td><td class=g1 style=float:none>&nbsp;</td><td style=background-color:#C9C9C9>' + time.toLocaleTimeString() + ' - ' + msg + '</td><td class=g2 style=float:none>&nbsp;</td></tr><tr style=height:2px></tr>';
4431 }
4432 if (dateHeader != null) x += '</table>';
4433 if (x == '') x = "<br><i>No Events Found</i><br><br>";
@@ -5149,7 +5206,7 @@
5206 var time = new Date(event.time);
5207 if (time.toLocaleDateString() != dateHeader) {
5208 if (dateHeader != null) x += '</table>';
5152 - x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td class=DevSt>' + time.toLocaleDateString() + '</td></tr>';
5209 + x += '<table style=width:100% cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>' + time.toLocaleDateString() + '</td></tr>';
5210 dateHeader = time.toLocaleDateString();
5211 }
5212 var icon = 'si3';
@@ -5158,10 +5215,7 @@
5215
5216 var msg = event.msg.split('(R)').join('&reg;');
5217 if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
5161 - x += '<tr><td><div class=bar18 style=height:18px;width:100%;font-size:medium>';
5162 - x += '<div style=float:left;height:18px;width:18px;background-color:white><div class=' + icon + ' style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';
5163 - x += '<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>';
5164 - x += '<div style=font-size:14px><span style=width:300px>' + time.toLocaleTimeString() + ' - ' + msg + '</span></div></div></td></tr>';
5218 + x += '<tr><td style=width:18px><div class=' + icon + '></div></td><td class=g1 style=float:none>&nbsp;</td><td style=background-color:#C9C9C9>' + time.toLocaleTimeString() + ' - ' + msg + '</td><td class=g2 style=float:none>&nbsp;</td></tr><tr style=height:2px></tr>';
5219 }
5220 if (dateHeader != null) x += '</table>';
5221 if (x == '') x = "<br><i>No Events Found</i><br><br>";
@@ -5194,6 +5248,7 @@
5248
5249 function updateUsers() {
5250 QV('MainMenuMyUsers', (users != null) && ((features & 4) == 0));
5251 + QV('LeftMenuMyUsers', (users != null) && ((features & 4) == 0));
5252 if ((users == null) || ((features & 4) != 0)) { QH('p3users', ''); return; }
5253
5254 // Sort the list of user id's
@@ -5830,13 +5885,49 @@
5885 for (var i = 0; i < 32; i++) { QV('p' + i, i == x); }
5886 xxcurrentView = x;
5887
5888 + // Remove left bar selection
5889 + var leftBarItems = ['LeftMenuMyDevices', 'LeftMenuMyAccount', 'LeftMenuMyEvents', 'LeftMenuMyFiles', 'LeftMenuMyUsers'];
5890 + for (var i in leftBarItems) { Q(leftBarItems[i]).classList.remove('lbbuttonsel', 'lbbuttonsel2'); }
5891 +
5892 + // My Devices
5893 QV('topbar', x != 0);
5894 if (x >= 10 && x < 20) { QS('MainMenuMyDevices').backgroundColor = "#606060"; } else { QS('MainMenuMyDevices').backgroundColor = ((x == 1) ? "#003366" : "#808080"); }
5895 + if (x == 1 || (x >= 10 && x < 20)) { Q('LeftMenuMyDevices').classList.add('lbbuttonsel'); }
5896 + if (x == 1) { Q('LeftMenuMyDevices').classList.add('lbbuttonsel2'); }
5897 +
5898 + // My Account
5899 if (x >= 20 && x < 30) { QS('MainMenuMyAccount').backgroundColor = "#606060"; } else { QS('MainMenuMyAccount').backgroundColor = ((x == 2) ? "#003366" : "#808080"); }
5900 + if (x == 2 || (x >= 20 && x < 30)) { Q('LeftMenuMyAccount').classList.add('lbbuttonsel'); }
5901 + if (x == 2) { Q('LeftMenuMyAccount').classList.add('lbbuttonsel2'); }
5902 +
5903 + // My Events
5904 QS('MainMenuMyEvents').backgroundColor = ((x == 3) ? "#003366" : "#808080");
5905 + if (x == 3) { Q('LeftMenuMyEvents').classList.add('lbbuttonsel', 'lbbuttonsel2'); }
5906 +
5907 + // My Users
5908 if (x >= 30 && x < 40) { QS('MainMenuMyUsers').backgroundColor = "#606060"; } else { QS('MainMenuMyUsers').backgroundColor = ((x == 4) ? "#003366" : "#808080"); }
5909 + if (x == 4 || (x >= 30 && x < 40)) { Q('LeftMenuMyUsers').classList.add('lbbuttonsel'); }
5910 + if (x == 4) { Q('LeftMenuMyUsers').classList.add('lbbuttonsel2'); }
5911 +
5912 + // My Files
5913 QS('MainMenuMyFiles').backgroundColor = ((x == 5) ? "#003366" : "#808080");
5914 + if (x == 5) { Q('LeftMenuMyFiles').classList.add('lbbuttonsel', 'lbbuttonsel2'); }
5915 +
5916 + // column_l max-height
5917 + if (webPageFullScreen) {
5918 + QS('column_l')["max-height"] = 'calc(100vh - 135px)';
5919 + } else {
5920 + QS('column_l')["max-height"] = (x >= 10) ? 'calc(100vh - 159px)' : 'calc(100vh - 135px)';
5921 + }
5922 + if ((x == 0) && (webPageFullScreen)) {
5923 + QS('page_content').position = '';
5924 + QV('page_leftbar', false);
5925 + QS('column_l').height = 'calc(100vh - 110px)';
5926 + QS('column_l')["max-height"] = '';
5927 + }
5928 +
5929 QV('MainSubMenuSpan', x >= 10 && x < 20);
5930 + QV('UserDummyMenuSpan', (x < 10) && webPageFullScreen);
5931 QS('MainDev').backgroundColor = ((x == 10) ? "#003366" : "#808080");
5932 QS('MainDevDesktop').backgroundColor = ((x == 11) ? "#003366" : "#808080");
5933 QS('MainDevTerminal').backgroundColor = ((x == 12) ? "#003366" : "#808080");