diff --git a/LEAF_Nexus/css/editor.css b/LEAF_Nexus/css/editor.css
index 9b02159cc..369609f77 100644
--- a/LEAF_Nexus/css/editor.css
+++ b/LEAF_Nexus/css/editor.css
@@ -91,4 +91,32 @@
#editor_tools>span:hover {
background-color: #2372b0;
color: white;
+}
+
+#visual_alert_box_container {
+ max-width: 354px;
+ box-sizing: border-box;
+ margin-left: auto;
+}
+#visual_alert_box {
+ text-align: left;
+ position: relative;
+ padding: 0.25em;
+ background-color:#fff;
+}
+#visual_alert_box_container label {
+ display: flex;
+ justify-content:flex-end;
+ padding-top: 0.25rem;
+}
+#visual_alert_box.hide, #visual_alert_box_container label.hide {
+ display: none;
+}
+
+#visual_alert_box_container label input {
+ margin: 0 0 0 0.25rem;
+}
+
+#visual_alert_box_title {
+ font-weight: bolder;
}
\ No newline at end of file
diff --git a/LEAF_Nexus/js/ui/position.js b/LEAF_Nexus/js/ui/position.js
index a4a956f5b..3fb289027 100644
--- a/LEAF_Nexus/js/ui/position.js
+++ b/LEAF_Nexus/js/ui/position.js
@@ -47,7 +47,8 @@ position.prototype.initialize = function (parentContainerID) {
$("#" + prefixedPID + "_title").on("click keydown mouseenter", function(ev) {
//if they are newly focusing an open card just update the tab focus
const isNewFocus = document.activeElement !== ev.currentTarget;
- if (ev.type === "click" && isNewFocus) {
+ const cardDataAttr = ev.currentTarget.parentNode.getAttribute('data-moving');
+ if (ev.type === "click" && isNewFocus || cardDataAttr === "true") {
ev.currentTarget.focus();
return;
}
diff --git a/LEAF_Nexus/templates/editor.tpl b/LEAF_Nexus/templates/editor.tpl
index 3b7c4c3db..028c54b3c 100644
--- a/LEAF_Nexus/templates/editor.tpl
+++ b/LEAF_Nexus/templates/editor.tpl
@@ -19,9 +19,19 @@ placeholder
+
Loading...
@@ -120,6 +130,17 @@ function applyZoomLevel() {
}
}
+function toggleHideClass( elementID = '') {
+ let el = document.getElementById(elementID);
+ if(el !== null) {
+ if(el.classList.contains('hide')) {
+ el.classList.remove('hide');
+ } else {
+ el.classList.add('hide');
+ }
+ }
+}
+
function viewSupervisor() {
$.ajax({
url: './api/position//supervisor',
@@ -134,7 +155,7 @@ function viewSupervisor() {
});
}
-function saveLayout(positionID) {
+function saveLayout(positionID, repaint = false) {
const position = $('#' + positions[positionID].getDomID()).offset();
let newPosition = new Object();
newPosition.x = parseInt(position.left);
@@ -153,6 +174,9 @@ function saveLayout(positionID) {
if (+res === 1) {
positions[positionID].x = newPosition.x;
positions[positionID].y = newPosition.y;
+ if(repaint === true) {
+ jsPlumb.repaintEverything();
+ }
}
$('#busyIndicator').css('visibility', 'hidden');
},
@@ -259,72 +283,78 @@ function addSupervisor(positionID) {
}
function moveCoordinates(prefix, position) {
+ let card = document.getElementById(prefix + position);
+ const cardStyle = window.getComputedStyle(card);
+ const originalTopOrg = cardStyle.getPropertyValue('top');
+ const originalLeftOrg = cardStyle.getPropertyValue('left');
+
const moveCard = (e) => {
if (e.key === "Tab") {
- saveLayout(position);
+ saveLayout(position, true);
$('#' + prefix + position).css('box-shadow', 'none');
- $('#visual_alert_box').css('opacity', '0');
+ $('#visual_alert_box').addClass('hide');
document.removeEventListener('keydown', moveCard);
return;
} else if (controlKeys.includes(e.key)) {
e.preventDefault();
+ const cardStyle = window.getComputedStyle(card);
+ const topValue = Number(cardStyle.getPropertyValue('top').replace("px", ""));
+ const leftValue = Number(cardStyle.getPropertyValue('left').replace("px", ""));
+ //only show extra info if keyboard is being used to move the card
+ if(['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(e.key)) {
+ card.setAttribute("data-moving", "true");
+ if( $('#visual_alert_box_container label').hasClass('hide')) {
+ $('#visual_alert_box_container label').removeClass('hide');
+ $('#visual_alert_box').removeClass('hide');
+ } else {
+ if(document.getElementById('MovementInfoToggle').checked !== true) {
+ $('#visual_alert_box').removeClass('hide');
+ }
+ }
+ } else {
+ card.removeAttribute("data-moving");
+ }
switch (e.key) {
case "ArrowLeft":
- leftValue = (Number(leftValue) - 10);
- card.style.left = leftValue + "px";
+ card.style.left = leftValue - 10 + "px";
break;
case "ArrowRight":
- leftValue = (Number(leftValue) + 10);
- card.style.left = leftValue + "px";
+ card.style.left = leftValue + 10 + "px";
break;
case "ArrowUp":
- topValue = (Number(topValue) - 10);
- card.style.top = topValue + "px";
+ card.style.top = topValue - 10 + "px";
break;
case "ArrowDown":
- topValue = (Number(topValue) + 10);
- card.style.top = topValue + "px";
+ card.style.top = topValue + 10 + "px";
break;
case "Enter":
// save the coordinates as they are now
- saveLayout(position);
- abort = true;
+ saveLayout(position, true);
break;
case "Escape":
// revert coordinates back to original
- card.style.top = topOrg;
- card.style.left = leftOrg;
- abort = true;
+ card.style.top = originalTopOrg;
+ card.style.left = originalLeftOrg
+ $('#' + prefix + position).css('box-shadow', 'none');
+ $('#visual_alert_box').addClass('hide');
+ document.removeEventListener('keydown', moveCard);
break;
}
-
- if (abort) {
- $('#' + prefix + position).css('box-shadow', 'none');
- $('#visual_alert_box').css('opacity', '0');
- document.removeEventListener('keydown', moveCard);
- return;
- }
}
};
$('div.positionSmall').css('box-shadow', 'none');
$('#' + prefix + position).css('box-shadow', ' 0 0 6px #c00');
- let alert_box = document.getElementById('visual_alert_box');
+ let alert_box_card_title = document.getElementById('visual_alert_box_title');
let title = document.getElementById(prefix + position + '_title');
let titleText = title.innerHTML;
- alert_box.innerHTML = "You are moving the " + titleText + " card
Esc - return to original location
Enter - save current location
Tab - Save and move to next card";
- $('#visual_alert_box').css('opacity', '100');
+ alert_box_card_title.textContent = titleText;
- let card = document.getElementById(prefix + position);
- let cardStyle = window.getComputedStyle(card);
- let topOrg = cardStyle.getPropertyValue('top');
- let leftOrg = cardStyle.getPropertyValue('left');
- let topValue = cardStyle.getPropertyValue('top').replace("px", "");
- let leftValue = cardStyle.getPropertyValue('left').replace("px", "");
- let key;
- let abort = false;
const controlKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Enter', 'Escape'];
document.addEventListener('keydown', moveCard);
- title.addEventListener('blur', () => document.removeEventListener('keydown', moveCard));
+ title.addEventListener('blur', () => {
+ card.removeAttribute("data-moving");
+ document.removeEventListener('keydown', moveCard)
+ });
}
function addSubordinate(parentID) {