Fixed context menus in web application.

Ylian Saint-Hilaire committed Dec 23, 2019 at 15:46 UTC 2da3061efb7a10c1c27484937f9c36611a37ed6f
3 files changed +18 -19
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.4.6-k",
3 + "version": "0.4.6-l",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
public/styles/style.css
-2
@@ -1840,8 +1840,6 @@ a {
1840 /*border-radius: 4px;*/
1841 display: none;
1842 position: absolute;
1843 - top: 0;
1844 - left: 0;
1843 list-style: none;
1844 margin: 0;
1845 padding: 5px;
views/default.handlebars
+17 -16
@@ -1170,7 +1170,7 @@
1170 document.onkeyup = ondockeyup;
1171 //window.addEventListener('focus', ondocfocus, false);
1172 window.addEventListener('blur', ondocblur, false);
1173 - window.onresize = function () { masterUpdate(512); }
1173 + window.onresize = function () { hideContextMenu(); masterUpdate(512); }
1174 setTimeout(function() { masterUpdate(512); }, 200);
1175
1176 // Connect to the mesh server
@@ -3691,35 +3691,26 @@
3691 if (elem && elem != null && elem.id == 'connectbutton2' && currentNode && currentNode.agent && (currentNode.agent.id > 0) && (currentNode.agent.id < 5)) {
3692 contextelement = elem;
3693 var contextmenudiv = document.getElementById('termShellContextMenu');
3694 - contextmenudiv.style.left = event.pageX + 'px';
3695 - contextmenudiv.style.top = event.pageY + 'px';
3696 - contextmenudiv.style.display = 'block';
3694 + showContextMenuDiv(contextmenudiv, event.pageX, event.pageY);
3695 } else if (elem && elem != null && elem.id == 'connectbutton2' && currentNode && currentNode.agent && (currentNode.agent.id > 4)) {
3696 contextelement = elem;
3697 var contextmenudiv = document.getElementById('termShellContextMenuLinux');
3700 - contextmenudiv.style.left = event.pageX + 'px';
3701 - contextmenudiv.style.top = event.pageY + 'px';
3702 - contextmenudiv.style.display = 'block';
3698 + showContextMenuDiv(contextmenudiv, event.pageX, event.pageY);
3699 } else if (elem && elem != null && elem.id == 'MxMESH') {
3700 contextelement = elem;
3701 var contextmenudiv = document.getElementById('meshContextMenu');
3706 - contextmenudiv.style.left = event.pageX + 'px';
3707 - contextmenudiv.style.top = event.pageY + 'px';
3708 - contextmenudiv.style.display = 'block';
3702 + showContextMenuDiv(contextmenudiv, event.pageX, event.pageY);
3703 /*} else if (elem && elem != null && elem.classList.contains('pluginTab')) {
3704 contextelement = elem;
3705 var contextmenudiv = document.getElementById('pluginTabContextMenu');
3712 - contextmenudiv.style.left = event.pageX + 'px';
3713 - contextmenudiv.style.top = event.pageY + 'px';
3714 - contextmenudiv.style.display = 'block';*/
3706 + showContextMenuDiv(contextmenudiv, event.pageX, event.pageY);
3707 + */
3708 } else {
3709 while (elem && elem != null && elem.id != 'devs') { elem = elem.parentElement; }
3710 if (!elem || elem == null) return true;
3711 contextelement = elem;
3712 var contextmenudiv = document.getElementById('contextMenu');
3720 - contextmenudiv.style.left = event.pageX + 'px';
3721 - contextmenudiv.style.top = event.pageY + 'px';
3722 - contextmenudiv.style.display = 'block';
3713 + showContextMenuDiv(contextmenudiv, event.pageX, event.pageY);
3714
3715 // Get the node and set the menu options
3716 var nodeid = contextelement.children[1].attributes.onclick.value;
@@ -3743,6 +3734,16 @@
3734 return haltEvent(event);
3735 }
3736
3737 + function showContextMenuDiv(element, x, y) {
3738 + var clientRect = document.documentElement.getBoundingClientRect();
3739 + var docHeight = clientRect.height;
3740 + var docWidth = clientRect.width;
3741 + element.style.left = element.style.right = element.style.top = element.style.bottom = null;
3742 + if (x > (docWidth / 2)) { element.style.right = (docWidth - event.pageX) + 'px'; } else { element.style.left = event.pageX + 'px'; }
3743 + if (y > (docHeight / 2)) { element.style.bottom = (docHeight - event.pageY) + 'px'; } else { element.style.top = event.pageY + 'px'; }
3744 + element.style.display = 'block';
3745 + }
3746 +
3747 function cmaction(action,event) {
3748 var nodeid = contextelement.children[1].attributes.onclick.value;
3749 nodeid = nodeid.substring(12, nodeid.length - 18);