From 1ce338d972712d6eea6fca00598750839b0fea45 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 22:55:09 -0500
Subject: [PATCH 01/19] Support for "Rotate as the Next Clicked Surface"

Support for "Rotate as the Next Clicked Surface"
Add "surfaceNormal" in the returned data.
---
 scripts/system/controllers/controllerModules/inEditMode.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js
index 5709b19efe..5bef8ec11a 100644
--- a/scripts/system/controllers/controllerModules/inEditMode.js
+++ b/scripts/system/controllers/controllerModules/inEditMode.js
@@ -2,6 +2,9 @@
 
 //  inEditMode.js
 //
+//  Copyright 2014 High Fidelity, Inc.
+//  Copyright 2020 Vircadia contributors.
+//
 //  Distributed under the Apache License, Version 2.0.
 //  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
 
@@ -80,7 +83,8 @@ Script.include("/~/system/libraries/utils.js");
                             Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({
                                 method: "selectEntity",
                                 entityID: this.selectedTarget.objectID,
-                                hand: hand
+                                hand: hand,
+                                surfaceNormal: this.selectedTarget.surfaceNormal
                             }));
                         } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) {
                             Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({

From 79b34ae54150635436a30531d3400ccf0b4d4c5f Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 22:57:49 -0500
Subject: [PATCH 02/19] Add "Rotate as the Next Clicked Surface"

Add "Rotate as the Next Clicked Surface"
---
 scripts/system/create/edit.js                 | 97 +++++++++++++++----
 .../entitySelectionTool.js                    | 64 +++++++++++-
 2 files changed, 140 insertions(+), 21 deletions(-)

diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js
index 9e94b68ba1..92a6206100 100644
--- a/scripts/system/create/edit.js
+++ b/scripts/system/create/edit.js
@@ -109,6 +109,8 @@ var entityIconOverlayManager = new EntityIconOverlayManager(["Light", "ParticleE
 });
 
 var hmdMultiSelectMode = false;
+var expectingRotateAsClickedSurface = false;
+var keepSelectedOnNextClick = false;
 
 var cameraManager = new CameraManager();
 
@@ -1106,25 +1108,41 @@ function findClickedEntity(event) {
     }
 
     var result;
-
-    if (iconResult.intersects) {
-        result = iconResult;
-    } else if (entityResult.intersects) {
-        result = entityResult;
+    if (expectingRotateAsClickedSurface) {
+        if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
+                audioFeedback.rejection();
+                Window.notifyEditError("You have nothing selected, or the selection is locked.");
+                expectingRotateAsClickedSurface = false;
+        } else {
+                //Rotate Selection according the Surface Normal
+                selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP));
+                selectionManager._update(false, this);
+                pushCommandForSelections();
+                expectingRotateAsClickedSurface = false;
+                audioFeedback.action();
+        }
+        keepSelectedOnNextClick = true;
+        return null;
     } else {
-        return null;
-    }
+        if (iconResult.intersects) {
+            result = iconResult;
+        } else if (entityResult.intersects) {
+            result = entityResult;
+        } else {
+            return null;
+        }
 
-    if (!result.accurate) {
-        return null;
-    }
+        if (!result.accurate) {
+            return null;
+        }
 
-    var foundEntity = result.entityID;
-    return {
-        pickRay: pickRay,
-        entityID: foundEntity,
-        intersection: result.intersection
-    };
+        var foundEntity = result.entityID;
+        return {
+            pickRay: pickRay,
+            entityID: foundEntity,
+            intersection: result.intersection
+        };
+    }
 }
 
 // Handles selections on overlays while in edit mode by querying entities from
@@ -1295,7 +1313,10 @@ function mouseClickEvent(event) {
 
         if (result === null || result === undefined) {
             if (!event.isShifted) {
-                selectionManager.clearSelections(this);
+                if (!keepSelectedOnNextClick) {
+                    selectionManager.clearSelections(this);
+                }
+                keepSelectedOnNextClick = false;
             }
             return;
         }
@@ -2052,6 +2073,26 @@ function gridToAvatarKey(value) {
         alignGridToAvatar();
     }
 }
+function rotateAsNextClickedSurfaceKey(value) {
+    if (value === 0) { // on release
+        rotateAsNextClickedSurface();
+    }
+}
+function quickRotate90xKey(value) {
+    if (value === 0) { // on release
+        selectionDisplay.rotate90degreeSelection("X");
+    }
+}
+function quickRotate90yKey(value) {
+    if (value === 0) { // on release
+        selectionDisplay.rotate90degreeSelection("Y");
+    }
+}
+function quickRotate90zKey(value) {
+    if (value === 0) { // on release
+        selectionDisplay.rotate90degreeSelection("Z");
+    }
+}
 function recursiveAdd(newParentID, parentData) {
     if (parentData.children !== undefined) {
         var children = parentData.children;
@@ -2819,6 +2860,10 @@ mapping.from([Controller.Hardware.Keyboard.J]).to(gridKey);
 mapping.from([Controller.Hardware.Keyboard.G]).to(viewGridKey);
 mapping.from([Controller.Hardware.Keyboard.H]).to(snapKey);
 mapping.from([Controller.Hardware.Keyboard.K]).to(gridToAvatarKey);
+mapping.from([Controller.Hardware.Keyboard["0"]]).to(rotateAsNextClickedSurfaceKey);
+mapping.from([Controller.Hardware.Keyboard["7"]]).to(quickRotate90xKey);
+mapping.from([Controller.Hardware.Keyboard["8"]]).to(quickRotate90yKey);
+mapping.from([Controller.Hardware.Keyboard["9"]]).to(quickRotate90zKey);
 mapping.from([Controller.Hardware.Keyboard.X])
     .when([Controller.Hardware.Keyboard.Control])
     .to(whenReleased(function() { selectionManager.cutSelectedEntities() }));
@@ -2867,6 +2912,14 @@ keyUpEventFromUIWindow = function(keyUpEvent) {
         snapKey(pressedValue);    
     } else if (keyUpEvent.keyCodeString === "K") {
         gridToAvatarKey(pressedValue);
+    } else if (keyUpEvent.keyCodeString === "0") {
+        rotateAsNextClickedSurfaceKey(pressedValue);
+    } else if (keyUpEvent.keyCodeString === "7") {
+        quickRotate90xKey(pressedValue);
+    } else if (keyUpEvent.keyCodeString === "8") {
+        quickRotate90yKey(pressedValue);
+    } else if (keyUpEvent.keyCodeString === "9") {
+        quickRotate90zKey(pressedValue);        
     } else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "X") {
         selectionManager.cutSelectedEntities();
     } else if (keyUpEvent.controlKey && keyUpEvent.keyCodeString === "C") {
@@ -3015,4 +3068,14 @@ function toggleGridVisibility() {
     }
 }
 
+function rotateAsNextClickedSurface() {
+    if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
+        audioFeedback.rejection();
+        Window.notifyEditError("You have nothing selected, or the selection is locked.");
+        expectingRotateAsClickedSurface = false;
+    } else {
+        expectingRotateAsClickedSurface = true;
+    }
+}
+
 }()); // END LOCAL_SCOPE
diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
index f9a30ef6a5..8941ff24f2 100644
--- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js
+++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
@@ -103,10 +103,25 @@ SelectionManager = (function() {
                 if (wantDebug) {
                     print("setting selection to " + messageParsed.entityID);
                 }
-                if (hmdMultiSelectMode) {
-                    that.addEntity(messageParsed.entityID, true, that);
+                if (expectingRotateAsClickedSurface) {
+                    if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
+                            audioFeedback.rejection();
+                            Window.notifyEditError("You have nothing selected, or the selection is locked.");
+                            expectingRotateAsClickedSurface = false;
+                    } else {
+                            //Rotate Selection according the Surface Normal
+                            selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP));
+                            that._update(false, this);
+                            pushCommandForSelections();
+                            expectingRotateAsClickedSurface = false;
+                            audioFeedback.action();
+                    }
                 } else {
-                    that.setSelections([messageParsed.entityID], that);
+                    if (hmdMultiSelectMode) {
+                        that.addEntity(messageParsed.entityID, true, that);
+                    } else {
+                        that.setSelections([messageParsed.entityID], that);
+                    }
                 }
             }
         } else if (messageParsed.method === "clearSelection") {
@@ -2377,7 +2392,48 @@ SelectionDisplay = (function() {
         }
         debugPickPlaneHits = [];
     };
-    
+
+    that.rotateSelection = function(rotation) {
+        SelectionManager.saveProperties();
+        if (SelectionManager.selections.length === 1) {
+            SelectionManager.savedProperties[SelectionManager.selections[0]].rotation = Quat.IDENTITY;
+        }
+        updateSelectionsRotation(rotation, SelectionManager.worldPosition);
+    };
+
+    that.rotate90degreeSelection = function(axis) {
+        //axis is a string and expect "X", "Y" or "Z"
+        if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
+            audioFeedback.rejection();
+            Window.notifyEditError("You have nothing selected, or the selection is locked.");
+        } else {
+            var currentRotation, axisRotation;
+            SelectionManager.saveProperties();
+            if (selectionManager.selections.length === 1 && spaceMode === SPACE_LOCAL) {
+                currentRotation = SelectionManager.localRotation;
+            }else{
+                 currentRotation = SelectionManager.worldRotation;
+            }
+            switch(axis) {
+                case "X":
+                    axisRotation = Quat.angleAxis(90.0, Quat.getRight(currentRotation));
+                    break;
+                case "Y":
+                    axisRotation = Quat.angleAxis(90.0, Quat.getUp(currentRotation));
+                    break;
+                case "Z":
+                    axisRotation = Quat.angleAxis(90.0, Quat.getForward(currentRotation));
+                    break;
+                default:
+                    return;
+                }
+            updateSelectionsRotation(axisRotation, SelectionManager.worldPosition);
+            SelectionManager._update(false, this);
+            pushCommandForSelections();
+            audioFeedback.action();
+        }
+    };
+
     function addUnlitMaterialOnToolEntity(toolEntityParentID) {
         var toolEntitiesMaterialData = "{\n  \"materialVersion\": 1,\n  \"materials\": [\n    {\n      \"name\": \"0\",\n      \"defaultFallthrough\": true,\n      \"unlit\": true,\n      \"model\": \"hifi_pbr\"\n    }\n  ]\n}";
         var materialEntityID = Entities.addEntity({

From adf4249b3225f63a271475dc84b0ba33b7e2485c Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 22:59:30 -0500
Subject: [PATCH 03/19] Add "action" sound.

Add "action" sound.
---
 scripts/system/create/audioFeedback/audioFeedback.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/scripts/system/create/audioFeedback/audioFeedback.js b/scripts/system/create/audioFeedback/audioFeedback.js
index f1900d5716..67af004844 100644
--- a/scripts/system/create/audioFeedback/audioFeedback.js
+++ b/scripts/system/create/audioFeedback/audioFeedback.js
@@ -15,6 +15,7 @@ audioFeedback = (function() {
     
     var confirmationSound = SoundCache.getSound(Script.resolvePath("./sounds/confirmation.mp3"));
     var rejectionSound = SoundCache.getSound(Script.resolvePath("./sounds/rejection.mp3"));
+    var actionSound = SoundCache.getSound(Script.resolvePath("./sounds/action.mp3"));
     
     that.confirmation = function() { //Play a confirmation sound
         var injector = Audio.playSound(confirmationSound, {
@@ -30,5 +31,12 @@ audioFeedback = (function() {
         });
     }
 
+    that.action = function() { //Play an action sound
+        var injector = Audio.playSound(actionSound, {
+             "volume": 0.3,
+            "localOnly": true           
+        });
+    }
+
     return that;
 })();

From eeecf4861c22b0ba4d1727a94f12a057eedd11d7 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 23:00:09 -0500
Subject: [PATCH 04/19] Add "action" sound.

Add "action" sound.
---
 .../create/audioFeedback/sounds/action.mp3      | Bin 0 -> 10448 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 scripts/system/create/audioFeedback/sounds/action.mp3

diff --git a/scripts/system/create/audioFeedback/sounds/action.mp3 b/scripts/system/create/audioFeedback/sounds/action.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..fd004847b05da3ce5db46eb29f4df7dc08148308
GIT binary patch
literal 10448
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

literal 0
HcmV?d00001


From c8a0ebdcd66c6408882cacbf0200b01c07ed3e80 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 23:02:57 -0500
Subject: [PATCH 05/19] Add "Rotate As Next Clicked Surface"

Add "Rotate As Next Clicked Surface"
Add also "Rotate 90 degree on X axis", "Rotate 90 degree on Z axis" and "Rotate 90 degree on Z axis"
---
 scripts/system/create/entityList/entityList.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js
index a4d4decedb..5119d7d3da 100644
--- a/scripts/system/create/entityList/entityList.js
+++ b/scripts/system/create/entityList/entityList.js
@@ -383,6 +383,14 @@ EntityListTool = function(shouldUseEditTabletApp) {
             SelectionManager.selectTopFamily();
         } else if (data.type === 'teleportToEntity') {
             SelectionManager.teleportToEntity();
+        } else if (data.type === 'rotateAsTheNextClickedSurface') {
+            rotateAsNextClickedSurface();
+        } else if (data.type === 'quickRotate90x') {
+            selectionDisplay.rotate90degreeSelection("X");
+        } else if (data.type === 'quickRotate90y') {
+            selectionDisplay.rotate90degreeSelection("Y");
+        } else if (data.type === 'quickRotate90z') {
+            selectionDisplay.rotate90degreeSelection("Z");
         } else if (data.type === 'moveEntitySelectionToAvatar') {
             SelectionManager.moveEntitiesSelectionToAvatar();
         } else if (data.type === 'loadConfigSetting') {

From cd0293d635b39772d9d51b0873edd00ad804cf8e Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 23:03:55 -0500
Subject: [PATCH 06/19] Add "Rotate As Next Clicked Surface"

Add "Rotate As Next Clicked Surface"
Add also "Rotate 90 degree on X axis", "Rotate 90 degree on Z axis" and "Rotate 90 degree on Z axis"
---
 .../create/entityList/html/entityList.html    | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html
index 9817f9ddf9..99dc213cf1 100644
--- a/scripts/system/create/entityList/html/entityList.html
+++ b/scripts/system/create/entityList/html/entityList.html
@@ -156,6 +156,31 @@
                     <div class = "menu-item-shortcut"></div>
                 </div>
             </button>
+            <div class="menu-separator"></div>
+            <button class="menu-button" id="rotateAsTheNextClickedSurface" >
+                <div class = "menu-item">
+                    <div class = "menu-item-caption">Rotate As The Next Clicked Surface</div>
+                    <div class = "menu-item-shortcut">0</div>
+                </div>
+            </button>
+            <button class="menu-button" id="quickRotate90x" >
+                <div class = "menu-item">
+                    <div class = "menu-item-caption">Rotate 90&deg; on X axis</div>
+                    <div class = "menu-item-shortcut">7</div>
+                </div>
+            </button>
+            <button class="menu-button" id="quickRotate90y" >
+                <div class = "menu-item">
+                    <div class = "menu-item-caption">Rotate 90&deg; on Y axis</div>
+                    <div class = "menu-item-shortcut">8</div>
+                </div>
+            </button>
+            <button class="menu-button" id="quickRotate90z" >
+                <div class = "menu-item">
+                    <div class = "menu-item-caption">Rotate 90&deg; on Z axis</div>
+                    <div class = "menu-item-shortcut">9</div>
+                </div>
+            </button>
         </div>
         <div class="entity-list-menu" id="selection-menu" >
             <button class="menu-button" id="selectall" >

From ec55884daec399782ffd83172fb98a0b8ea3f9af Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 24 Dec 2020 23:05:06 -0500
Subject: [PATCH 07/19] Add "Rotate As Next Clicked Surface"

Add "Rotate As Next Clicked Surface"
Add also "Rotate 90 degree on X axis", "Rotate 90 degree on Z axis" and "Rotate 90 degree on Z axis"
---
 .../create/entityList/html/js/entityList.js   | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js
index 9ba258b801..c610795bc9 100644
--- a/scripts/system/create/entityList/html/js/entityList.js
+++ b/scripts/system/create/entityList/html/js/entityList.js
@@ -238,6 +238,10 @@ let elEntityTable,
     elParent,
     elUnparent,    
     elDelete,
+    elRotateAsTheNextClickedSurface,
+    elQuickRotate90x,
+    elQuickRotate90y,
+    elQuickRotate90z,
     elMoveEntitySelectionToAvatar,
     elSelectAll,
     elSelectInverse,
@@ -320,6 +324,10 @@ function loaded() {
         elParent = document.getElementById("parent");
         elUnparent = document.getElementById("unparent");
         elDelete = document.getElementById("delete");
+        elRotateAsTheNextClickedSurface = document.getElementById("rotateAsTheNextClickedSurface");
+        elQuickRotate90x = document.getElementById("quickRotate90x");
+        elQuickRotate90y = document.getElementById("quickRotate90y");
+        elQuickRotate90z = document.getElementById("quickRotate90z");
         elMoveEntitySelectionToAvatar = document.getElementById("moveEntitySelectionToAvatar"); 
         elSelectAll = document.getElementById("selectall");
         elSelectInverse = document.getElementById("selectinverse");
@@ -430,6 +438,22 @@ function loaded() {
             EventBridge.emitWebEvent(JSON.stringify({ type: "delete" }));
             closeAllEntityListMenu();
         };
+        elRotateAsTheNextClickedSurface.onclick = function() {
+            EventBridge.emitWebEvent(JSON.stringify({ type: "rotateAsTheNextClickedSurface" }));
+            closeAllEntityListMenu();
+        };
+        elQuickRotate90x.onclick = function() {
+            EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90x" }));
+            closeAllEntityListMenu();
+        };
+        elQuickRotate90y.onclick = function() {
+            EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90y" }));
+            closeAllEntityListMenu();
+        };
+        elQuickRotate90z.onclick = function() {
+            EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90z" }));
+            closeAllEntityListMenu();
+        };
         elMoveEntitySelectionToAvatar.onclick = function() {
             EventBridge.emitWebEvent(JSON.stringify({ type: "moveEntitySelectionToAvatar" }));
             closeAllEntityListMenu();

From 0db2d6f0415b621621ef4cbc39ebe6af86af00b0 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Tue, 29 Dec 2020 22:19:11 -0500
Subject: [PATCH 08/19] Minor Code Adjustments

Minor Code Adjustments
---
 scripts/system/create/edit.js                 | 18 ++++++++---------
 .../entitySelectionTool.js                    | 20 +++++++++----------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js
index 92a6206100..23292cd85c 100644
--- a/scripts/system/create/edit.js
+++ b/scripts/system/create/edit.js
@@ -1110,16 +1110,16 @@ function findClickedEntity(event) {
     var result;
     if (expectingRotateAsClickedSurface) {
         if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
-                audioFeedback.rejection();
-                Window.notifyEditError("You have nothing selected, or the selection is locked.");
-                expectingRotateAsClickedSurface = false;
+            audioFeedback.rejection();
+            Window.notifyEditError("You have nothing selected, or the selection is locked.");
+            expectingRotateAsClickedSurface = false;
         } else {
-                //Rotate Selection according the Surface Normal
-                selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP));
-                selectionManager._update(false, this);
-                pushCommandForSelections();
-                expectingRotateAsClickedSurface = false;
-                audioFeedback.action();
+            //Rotate Selection according the Surface Normal
+            selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP));
+            selectionManager._update(false, this);
+            pushCommandForSelections();
+            expectingRotateAsClickedSurface = false;
+            audioFeedback.action();
         }
         keepSelectedOnNextClick = true;
         return null;
diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
index 8941ff24f2..b1ce7f801c 100644
--- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js
+++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
@@ -105,16 +105,16 @@ SelectionManager = (function() {
                 }
                 if (expectingRotateAsClickedSurface) {
                     if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {
-                            audioFeedback.rejection();
-                            Window.notifyEditError("You have nothing selected, or the selection is locked.");
-                            expectingRotateAsClickedSurface = false;
+                        audioFeedback.rejection();
+                        Window.notifyEditError("You have nothing selected, or the selection is locked.");
+                        expectingRotateAsClickedSurface = false;
                     } else {
-                            //Rotate Selection according the Surface Normal
-                            selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP));
-                            that._update(false, this);
-                            pushCommandForSelections();
-                            expectingRotateAsClickedSurface = false;
-                            audioFeedback.action();
+                        //Rotate Selection according the Surface Normal
+                        selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP));
+                        that._update(false, this);
+                        pushCommandForSelections();
+                        expectingRotateAsClickedSurface = false;
+                        audioFeedback.action();
                     }
                 } else {
                     if (hmdMultiSelectMode) {
@@ -2411,7 +2411,7 @@ SelectionDisplay = (function() {
             SelectionManager.saveProperties();
             if (selectionManager.selections.length === 1 && spaceMode === SPACE_LOCAL) {
                 currentRotation = SelectionManager.localRotation;
-            }else{
+            } else {
                  currentRotation = SelectionManager.worldRotation;
             }
             switch(axis) {

From ff7cf2fcd63f1af662dab3dfb8f5664fee76273d Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Wed, 30 Dec 2020 00:23:28 -0500
Subject: [PATCH 09/19] Adjust menu Item name

Action "Rotate as the Next Clicked Surface"
has been changed for:
"Rotate as Next Clicked Surface"

For now, it will be that.
This feature might evolve soon to include a translation to the clicked surface.
So the name will eventually change again.
---
 scripts/system/create/entityList/html/entityList.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html
index 99dc213cf1..4c84f7ed4d 100644
--- a/scripts/system/create/entityList/html/entityList.html
+++ b/scripts/system/create/entityList/html/entityList.html
@@ -159,7 +159,7 @@
             <div class="menu-separator"></div>
             <button class="menu-button" id="rotateAsTheNextClickedSurface" >
                 <div class = "menu-item">
-                    <div class = "menu-item-caption">Rotate As The Next Clicked Surface</div>
+                    <div class = "menu-item-caption">Rotate as Next Clicked Surface</div>
                     <div class = "menu-item-shortcut">0</div>
                 </div>
             </button>

From 5b40ac4c1ebb28d5f6061bdd5eefaede4754677e Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Wed, 20 Jan 2021 23:13:47 -0500
Subject: [PATCH 10/19] Transmitting Intersection to Create App

Transmitting Intersection to Create App
---
 scripts/system/controllers/controllerModules/inEditMode.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js
index 5bef8ec11a..992a76614a 100644
--- a/scripts/system/controllers/controllerModules/inEditMode.js
+++ b/scripts/system/controllers/controllerModules/inEditMode.js
@@ -84,7 +84,8 @@ Script.include("/~/system/libraries/utils.js");
                                 method: "selectEntity",
                                 entityID: this.selectedTarget.objectID,
                                 hand: hand,
-                                surfaceNormal: this.selectedTarget.surfaceNormal
+                                surfaceNormal: this.selectedTarget.surfaceNormal,
+                                intersection: this.selectedTarget.intersection,
                             }));
                         } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) {
                             Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({

From aedce21007e68cf8812161f04d8b903d58dd002e Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Wed, 20 Jan 2021 23:17:06 -0500
Subject: [PATCH 11/19] Snap to Next Clicked Surface

This adds the move in addition to the rotation
to the "Rotate as Next Clicked Surface" action.
Which is now become: "Snap to Next Clicked Surface"
---
 scripts/system/create/edit.js                 | 11 ++++++-
 .../entitySelectionTool.js                    | 31 ++++++++++++++++++-
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js
index 23292cd85c..05bc7d2381 100644
--- a/scripts/system/create/edit.js
+++ b/scripts/system/create/edit.js
@@ -1115,7 +1115,16 @@ function findClickedEntity(event) {
             expectingRotateAsClickedSurface = false;
         } else {
             //Rotate Selection according the Surface Normal
-            selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1), Vec3.UP));
+            var normalRotation = Quat.lookAtSimple(Vec3.ZERO, Vec3.multiply(entityResult.surfaceNormal, -1));
+            selectionDisplay.rotateSelection(normalRotation);
+            //Translate Selection according the clicked Surface
+            var distanceFromSurface;
+            if (selectionDisplay.getSpaceMode() === "world"){
+                distanceFromSurface = SelectionManager.worldDimensions.z / 2;
+            } else {
+                distanceFromSurface = SelectionManager.localDimensions.z / 2;
+            }
+            selectionDisplay.moveSelection(Vec3.sum(entityResult.intersection, Vec3.multiplyQbyV( normalRotation, {"x": 0.0, "y":0.0, "z": distanceFromSurface})));
             selectionManager._update(false, this);
             pushCommandForSelections();
             expectingRotateAsClickedSurface = false;
diff --git a/scripts/system/create/entitySelectionTool/entitySelectionTool.js b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
index b1ce7f801c..f4d6117bd1 100644
--- a/scripts/system/create/entitySelectionTool/entitySelectionTool.js
+++ b/scripts/system/create/entitySelectionTool/entitySelectionTool.js
@@ -110,7 +110,16 @@ SelectionManager = (function() {
                         expectingRotateAsClickedSurface = false;
                     } else {
                         //Rotate Selection according the Surface Normal
-                        selectionDisplay.rotateSelection(Quat.lookAt(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1), Vec3.UP));
+                        var normalRotation = Quat.lookAtSimple(Vec3.ZERO, Vec3.multiply(messageParsed.surfaceNormal, -1));
+                        selectionDisplay.rotateSelection(normalRotation);
+                        //Translate Selection according the clicked Surface
+                        var distanceFromSurface;
+                        if (selectionDisplay.getSpaceMode() === SPACE_WORLD){
+                            distanceFromSurface = SelectionManager.worldDimensions.z / 2;
+                        } else {
+                            distanceFromSurface = SelectionManager.localDimensions.z / 2;
+                        }
+                        selectionDisplay.moveSelection(Vec3.sum(messageParsed.intersection, Vec3.multiplyQbyV( normalRotation, {"x": 0.0, "y":0.0, "z": distanceFromSurface})));
                         that._update(false, this);
                         pushCommandForSelections();
                         expectingRotateAsClickedSurface = false;
@@ -2401,6 +2410,26 @@ SelectionDisplay = (function() {
         updateSelectionsRotation(rotation, SelectionManager.worldPosition);
     };
 
+    that.moveSelection = function(targetPosition) {
+        SelectionManager.saveProperties();
+        // editing a parent will cause all the children to automatically follow along, so don't
+        // edit any entity who has an ancestor in SelectionManager.selections
+        var toMove = SelectionManager.selections.filter(function (selection) {
+            if (SelectionManager.selections.indexOf(SelectionManager.savedProperties[selection].parentID) >= 0) {
+                return false; // a parent is also being moved, so don't issue an edit for this entity
+            } else {
+                return true;
+            }
+        });
+
+        for (var i = 0; i < toMove.length; i++) {
+            var id = toMove[i];
+            var properties = SelectionManager.savedProperties[id];
+            var newPosition = Vec3.sum(targetPosition, Vec3.subtract(properties.position, SelectionManager.worldPosition));
+            Entities.editEntity(id, { position: newPosition });
+        }
+    };
+
     that.rotate90degreeSelection = function(axis) {
         //axis is a string and expect "X", "Y" or "Z"
         if (!SelectionManager.hasSelection() || !SelectionManager.hasUnlockedSelection()) {

From a9c2a3d46a64808948678e6ff2267c3c9d3a8304 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Wed, 20 Jan 2021 23:19:43 -0500
Subject: [PATCH 12/19] Snap to Next Clicked Surface

Rename the action: "Rotate as Next Clicked Surface"
for "Snap to Next Clicked Surface"
since it is now doing the rotation and the move to the clicked surface.
---
 scripts/system/create/entityList/html/entityList.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html
index 4c84f7ed4d..cc30c6d6df 100644
--- a/scripts/system/create/entityList/html/entityList.html
+++ b/scripts/system/create/entityList/html/entityList.html
@@ -159,7 +159,7 @@
             <div class="menu-separator"></div>
             <button class="menu-button" id="rotateAsTheNextClickedSurface" >
                 <div class = "menu-item">
-                    <div class = "menu-item-caption">Rotate as Next Clicked Surface</div>
+                    <div class = "menu-item-caption">Snap To Next Clicked Surface</div>
                     <div class = "menu-item-shortcut">0</div>
                 </div>
             </button>

From 22b935ee656733a11c0bec262a019dabf3d0d544 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 28 Jan 2021 23:55:09 -0500
Subject: [PATCH 13/19] Add Icon for Radius Search of the Create App

Add Icon for Radius Search of the Create App
---
 interface/resources/fonts/vircadia_glyphs.ttf | Bin 4000 -> 4432 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/interface/resources/fonts/vircadia_glyphs.ttf b/interface/resources/fonts/vircadia_glyphs.ttf
index 7d3fe9d913a85bcbfc00162d1ebf1617c40c1b48..ed89c2719a81b17a18c252a9ec306d35f2741678 100644
GIT binary patch
delta 1777
zcmcgtU2GIp6#mYgnR{n<c4xY?v$I=VcDK9RnPN+e`!}V9-PWHfl1f2ReGp8A(h5`v
zR)xfLd4fLF#L}eEga;!$n1~4#OpGz{fd>u2U?Pb^KtU598iMgb)I`xtDJk&aBXcsj
z-#OpC=X~enX6C*0H`x*hKo|!hVW6*XbN`VuZ~g;BN&u2iKK?`>R^WXgVgX2Pc($W3
zvU%XA=~A{H2?0<?b|2WWf9m*KfHDQhe~%6iZEvjSPXM?KpfWl-JS6>yO91&9@}pzp
z`;{2!0DTJ3qr3NP8=84)`ZGWt0H|whX#ZaPf>D4v0c2ho8XMkqq`nIXP6E<%d-uFL
z{_?<~KhcWtRX}=pK|TSE%g_GxqOs<8Xbk>y+57F#o%IOSXn3ZFw$aU*<20tF7j^&+
zx@MZ#4>MOuIrT3)O7(rXK%m*%#@g7#gSGmDEypGRFjxS6!j3`0%)3f^-9|H3U?n_s
z175ipb91p`yi$nUF-!1V)^*CI=6l^5#fAU!O2M`S&$^C(Zt~a6++361qU*X5wRHW~
z<t4m!&>B2y4O$;2TavmT&fAyf=g-ZJ>vg>$YUzfdTTxSA!uF1ak?jpTB2qHh;<Kwp
zM*$V<V9_bM0SN*cmSF`tu?9U$!d<_Cd(}$!y7%=`kGo#njSF}7+wAo8V5Ybv`oJQL
z>INm2aAR+x_iUm!F?;^}$+u5z+&FQU>|5{Lal)}^!yT+!(O|#TzuxM%02!0$q}S=I
z+fCH5?0?ly-bl~Qjid{U^<!bZbAJBZ$ukoZ$L>n+UvP#r@^poMMhsg4(kW)e?V{~f
z$*YtruH&1icooNWxX{UMC$CENxE&V`7d%B3?|yQD)5(t86|dqhoD{jm0DT-bwO~lo
zm`a>vP5~Bdvcrm^3RBKcRclTzH&xR`rfp{?Z9cy<6O~B|s0Q(_e6E!%U3p7uie&1+
zXe5$Rhz@cRhE9E__nCdYA5b&dAwvriCzXj{AQ142d|@|=s4OdL)y?OoYE?I{@^sp4
zYui<gv@J^obViz*Z{<pNF5k*!(IlJMjI5XuEmRjK*Y(xr)Tz~F6@UZ>X}Uu7YlveV
zwgXWvxIeMD?a#rt#gP@`w&1PgIvrGUOHRpcrw%GPWuIOECD(bRl=GubhpY%LxWTw(
z5Ene>xK7!tQjLm*Ya1$+$I9#1*R)16lv0#LIGxJWdk$yHWnvE{1rsDOViJ)|0f|eD
z5s}0=V`M5aCtG2X%p^amt1C$rh9ntkDwC$~g0<?v3q563wD5%4(B9R(Dw$2`$?@0T
zAl4v4Op^R;5@(FbOg2SOD8&3!tgf;Umzf(>LlokQP`FHtSf=46Q%^G?a?xJ@a>?jI
zD}6~{Lqj9l-~m+hKM<`{E*8q(680)(={Avd)>6r<bW<U23(pn2gGAge(4OTX-JG8{
zx|fGT(WkFpR}^K7D#8~-W+13t3=8$}rr0LVGqFr4MYA_!hLMe&{=*I%O<YpxnF}E;
gXoW9?wO~;DXiH+Nsx~L`VF0JTS3l>WyMF}#0ocMeHUIzs

delta 1342
zcmchX&u<$=6vw}B_LsZf^(M~R-iTe>al-DFw7A%7ZwRFM(GmnDB&Ah~M4&ZkYNIqX
zf&fLJngc>PM53vsN+5(PepDP|MIa6wI8=f|5J;_n77Fx&gjJ;%NRf~N@}>#!4|Ja9
zy*F>(%=^q}G~Z;-r92P-6|aHA*zoYdk;TuyeG|}L2Vg$9_km$-$9sTw6hLzHKsHxC
zICf>x%T%=q0HN~nmyh{ITRR{u0Nf*$snSv7)l<6x{0N{}sZ5o)pK%2s9Y9xQX6_`v
zMiGEM1!(B_iOEvwxg+NQehi@AnbOHw{EEW>^#DjeTbh}gK2x0rLf-@2q1hA9&pk8t
z#-HehvJ2qu3h)Ww{`y@ztlj?y!VJy!!zb^KZrU@{PZPBPnxxg*2Q(875&+oft#z=U
zYQK=M{5N}tsz>k<RyKvk>HO`L>g_E@=K(P20Da8f2Z!2Q!rj#tw8KINwqqyImXCG%
zv3wz#i|b-%#`d~49X}yC%`P?r8Qb&ovCjD$H<I<NYg%o(x!%~YHGN#aFs_f^>zbx(
zcE#g#p|Mi0um5JbmgS}b{Yp!@b@Eti`BBrgs+K!jX}&Bx1f7;?6&xglp~FNMT<rK4
z%E`w%?M)tbiz5Kc*j@l9IsVy;7t@R5>9nwcGwqs|ZIK-q*BCV39yA7N>g%P`r)Tyr
zSV8^u4+API&_nu&zHdYy0grj~(2Mlt7SPu1{10S)bv0Qpr&6~HQl_!8w6u7t9_$8y
zgN+njrE5rFFP;F}L`jV4iFhLJ7yV+jsT{j0QX(#i-Q?I=@*L0h9NY2iLUSfdp6vxW
zS+cWyJ|RU&iZG2tN$j*8yWsUxK6h=jSlm;5cwc|Gy;V)|f}vT-^gy{#Aa;i-F^M=v
zBJmXBd4VxT9FfSXjG_WBrq=`tF~$**tn4IlTXSuSzLWcRk4+2|CCL?ymgugY-g{E1
zWW=0%;U!`%LWFS~#~6hf;~B5Xk}MG81(FykBF`K-q>#c#1Wx1_GmNJr(G;USg8+E+
zqMN>;uc`>69XsFy6w{mMFXVH5l-Tn9Vjnphqm120o?pC=a*4R)NMe?xL_Fuyf)a@~
z8rtKk(sup2AP7%}B=xcq-6n@Gt5T>CdrTD5v9yv@=<Hfd(=x4VLpS59)**7Cn~6i0
gR9V*5OKMn_<^9G}q0pU1m#Qw$%b$tLe}9#K03+fXNdN!<


From 932142a313f4f9b6893f6c01565221ade006983e Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 28 Jan 2021 23:57:37 -0500
Subject: [PATCH 14/19] CSS for Create App new menu bar

This add the css for the new menu bar of the create app.
---
 scripts/system/html/css/edit-style.css | 78 ++++++++++++++++++--------
 1 file changed, 54 insertions(+), 24 deletions(-)

diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css
index db535327d9..43b1154fd2 100644
--- a/scripts/system/html/css/edit-style.css
+++ b/scripts/system/html/css/edit-style.css
@@ -1208,7 +1208,7 @@ div.refresh input[type="button"] {
 }
 
 .fieldset .checkbox-sub-props .property:first-child {
-    margin-top: 0;
+    margin-top: 0px;
 }
 
 .column {
@@ -1252,18 +1252,18 @@ textarea:enabled[scrolling="true"]::-webkit-resizer {
 }
 
 div#grid-section, body#entity-list-body {
-    padding-bottom: 0;
-    margin: 16px;
+    padding-bottom: 0px;
+    margin: 0px 8px 8px 8px;
 }
 
 #entity-list-header {
-    margin-bottom: 36px;
+    margin-bottom: 6px;
 }
 
 #entity-list-header div {
     display: inline-block;
     width: 65px;
-    margin-right: 6px;
+    margin-right: 4px;
 }
 
 #entity-list-header div input:first-child {
@@ -1281,13 +1281,19 @@ div#grid-section, body#entity-list-body {
     border-bottom-left-radius: 0;
 }
 
+#delete {
+    float: right;
+    margin-right: 0;
+    background-color: #ff0000;
+}
+
 #entity-list {
     position: relative; /* New positioning context. */
 }
 
 #filter-area {
     padding-right: 168px;
-    padding-bottom: 24px;
+    padding-bottom: 8px;
 }
 
 #filter-type-multiselect-box select {
@@ -1340,35 +1346,59 @@ div#grid-section, body#entity-list-body {
 #filter-type-options input[type=button]:enabled:hover {
     background: linear-gradient(#afafaf 20%, #575757 100%);
 }
-
 #filter-search-and-icon {
     position: relative;
     left: 118px;
     width: calc(100% - 126px);
 }
-
 #filter-in-view {
     position: absolute;
-    top: 0;
+    top: 0px;
     right: 126px;
 }
-
 #filter-radius-and-unit {
     position: relative;
     float: right;
     margin-right: -168px;
-    top: -45px;
+    top: -28px;
 }
-#filter-radius-and-unit label {
-    margin-left: 2px;
+#entity-list-menubar {
+    margin: 0px -8px 6px -8px;
+    padding: 0px 8px 0px 8px;;
+    border: none;
+    background-color: #000;
+    background: linear-gradient(#343434 20%, #000 100%);
 }
-#filter-radius-and-unit span {
+.icon-input-radius input {
     position: relative;
-    top: 25px;
+    padding-left: 36px;
+}
+.icon-input-radius span {
+    position: absolute;
+    left: 4px;
+    top: -4px;
+    font-family: Vircadia-Glyphs;
+    font-size: 23px;
+    color: #afafaf;
+}
+.icon-input-radius input:focus + span + label {
+    color: #ffffff;
+}
+.icon-input-radius label {
+    position: absolute;
+    margin-left: 3px;
+    bottom: 6px;
     right: 9px;
-    z-index: 2;
     font-style: italic;
 }
+#filter-radius:focus {
+    outline: none;
+    box-sizing: border-box;
+    height: 26px;
+    margin-top: 1px;
+    margin-bottom: 1px;
+    box-shadow: 0 0 0 1px #00b4ef;
+}
 #filter-radius-and-unit input {
     width: 120px;
     border-radius: 14.5px;
@@ -1384,12 +1414,12 @@ div#grid-section, body#entity-list-body {
 
 #footer-text {
     float: right;
-    padding-top: 12px;
+    padding-top: 6px;
     padding-right: 22px;
 }
 
 input[type=button]#export {
-    height: 38px;
+    height: 26px;
     width: 180px;
 }
 
@@ -1441,7 +1471,7 @@ input[type=button]#export {
     overflow-x: hidden;
     overflow-y: auto;
     box-sizing: border-box;
-    padding-top: 28px; /* Space for header and footer outside of scroll region. */
+    padding-top: 37px; /* Space for header and footer outside of scroll region. */
     margin-top: 28px;
     border-left: 2px solid #575757;
     border-right: 2px solid #575757;
@@ -1462,7 +1492,7 @@ input[type=button]#export {
 }
 
 #entity-table {
-    margin-top: -28px;
+    margin-top: -20px;
     margin-bottom: -18px;
     table-layout: fixed;
     border: none;
@@ -1539,7 +1569,7 @@ input[type=button]#export {
 }
 #entity-table td .glyph .vglyph {
     text-align: center;
-    padding: 0;
+    padding: 0px;
 }
 
 #properties-base {
@@ -1888,10 +1918,10 @@ div.multiZoneSelToolbar {
 div.entity-list-menu {
     position: fixed;
     display: none;
-    width: 70%;
+    width: 370px;
     height: 30px;
-    top: 42px;
-    left: 150px;
+    top: 27px;
+    left: 8px;
     right: 0;
     bottom: 0;
     border-style: solid;

From c8679375b179f3afc0e58d4783f08ef7fe515d13 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Thu, 28 Jan 2021 23:59:44 -0500
Subject: [PATCH 15/19] Height adjustment for new Menu bar

Height adjustment for new Menu bar
---
 scripts/system/create/entityList/html/js/entityList.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js
index c610795bc9..96366d7183 100644
--- a/scripts/system/create/entityList/html/js/entityList.js
+++ b/scripts/system/create/entityList/html/js/entityList.js
@@ -15,7 +15,7 @@ const BYTES_PER_MEGABYTE = 1024 * 1024;
 const COLLAPSE_EXTRA_INFO = "E";
 const EXPAND_EXTRA_INFO = "D";
 const FILTER_IN_VIEW_ATTRIBUTE = "pressed";
-const WINDOW_NONVARIABLE_HEIGHT = 227;
+const WINDOW_NONVARIABLE_HEIGHT = 180;
 const EMPTY_ENTITY_ID = "0";
 const MAX_LENGTH_RADIUS = 9;
 const MINIMUM_COLUMN_WIDTH = 24;

From 70781fea3b42b2ffa8fc9a034e85c4b49b358188 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Fri, 29 Jan 2021 00:04:48 -0500
Subject: [PATCH 16/19] New Menubar

Add a New Menubar in the create app, just over the toolbar.
The Delete Red button is now back in the toolbar.
The radius search label has been replaced by a radar icon, the space has been recuperated for the menubar.
So we have now space for more menu & menu items, and for more button too. which will help for future addition to this application.
---
 .../create/entityList/html/entityList.html     | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/scripts/system/create/entityList/html/entityList.html b/scripts/system/create/entityList/html/entityList.html
index cc30c6d6df..93585c7338 100644
--- a/scripts/system/create/entityList/html/entityList.html
+++ b/scripts/system/create/entityList/html/entityList.html
@@ -24,6 +24,11 @@
         <script type="text/javascript" src="js/entityList.js"></script>
     </head>
     <body onload='loaded();' id="entity-list-body">
+        <div id="entity-list-menubar">
+            <input type="button" class="normal" id="selection" value="Select&#9662;" />
+            <input type="button" class="normal" id="actions" value="Edit&#9662;" />
+            <input type="button" class="normal" id="tools" value="Tools&#9662;" />            
+        </div>
         <div id="entity-list-header">
             <input type="button" class="glyph" id="refresh" value="F" />
             <div>
@@ -32,9 +37,7 @@
             </div>
             <button id="toggle-space-mode" class="hifi-edit-button space-mode-local">Local</button>
             <input type="button" class="vglyph" id="hmdmultiselect" value="I" style="display: none;" />
-            <input type="button" class="normal" id="selection" value="Select&#9662;" />
-            <input type="button" class="normal" id="actions" value="Edit&#9662;" />
-            <input type="button" class="normal" id="tools" value="Tools&#9662;" />
+            <input type="button" class="red glyph" id="delete" value="{" />
         </div>
         <div id="entity-list">
             <div id="filter-area">
@@ -58,8 +61,7 @@
                 </div>
                 <input type="button" id="filter-in-view" class="glyph" value="&#xe007;" />
                 <div id="filter-radius-and-unit" class="number">
-                    <label for="radius">Search radius <span class="unit">m</span></label>
-                    <input type="text" id="filter-radius" maxlength="9" value="100" />
+                    <span class="icon-input-radius"><input type="text" id="filter-radius" maxlength="8" value="100" /><span>D</span><label>m</label></span>
                 </div>
             </div>
             <div id="entity-table-scroll">
@@ -130,12 +132,6 @@
                     <div class = "menu-item-shortcut">Ctrl-D</div>
                 </div>
             </button>            
-            <button class="menu-button" id="delete" >
-                <div class = "menu-item">
-                    <div class = "menu-item-caption">Delete</div>
-                    <div class = "menu-item-shortcut">Del</div>
-                </div>
-            </button>
             <div class="menu-separator"></div>
             <button class="menu-button" id="parent" >
                 <div class = "menu-item">

From e57df8b096473679d08ff1eda5ad2476f0c85e9f Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Fri, 29 Jan 2021 21:50:25 -0500
Subject: [PATCH 17/19] Minor code adjustment

Minor code adjustment
---
 scripts/system/html/css/edit-style.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css
index 43b1154fd2..07af2e5d83 100644
--- a/scripts/system/html/css/edit-style.css
+++ b/scripts/system/html/css/edit-style.css
@@ -1364,7 +1364,7 @@ div#grid-section, body#entity-list-body {
 }
 #entity-list-menubar {
     margin: 0px -8px 6px -8px;
-    padding: 0px 8px 0px 8px;;
+    padding: 0px 8px 0px 8px;
     border: none;
     background-color: #000;
     background: linear-gradient(#343434 20%, #000 100%);

From 75d6b2c2e536ec11fa09e22b62f2486ddfc68602 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Fri, 29 Jan 2021 21:55:55 -0500
Subject: [PATCH 18/19] Minor code adjustment

Minor code adjustment
---
 scripts/system/controllers/controllerModules/inEditMode.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js
index 992a76614a..8453a7d8d3 100644
--- a/scripts/system/controllers/controllerModules/inEditMode.js
+++ b/scripts/system/controllers/controllerModules/inEditMode.js
@@ -85,7 +85,7 @@ Script.include("/~/system/libraries/utils.js");
                                 entityID: this.selectedTarget.objectID,
                                 hand: hand,
                                 surfaceNormal: this.selectedTarget.surfaceNormal,
-                                intersection: this.selectedTarget.intersection,
+                                intersection: this.selectedTarget.intersection
                             }));
                         } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) {
                             Messages.sendLocalMessage(this.ENTITY_TOOL_UPDATES_CHANNEL, JSON.stringify({

From f6aaa000a7ce50be63483d6224df60fbf14eda11 Mon Sep 17 00:00:00 2001
From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com>
Date: Fri, 29 Jan 2021 21:59:14 -0500
Subject: [PATCH 19/19] Minor Code Adjustment

Minor Code Adjustment
---
 scripts/system/create/audioFeedback/audioFeedback.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/scripts/system/create/audioFeedback/audioFeedback.js b/scripts/system/create/audioFeedback/audioFeedback.js
index 67af004844..881afddfaf 100644
--- a/scripts/system/create/audioFeedback/audioFeedback.js
+++ b/scripts/system/create/audioFeedback/audioFeedback.js
@@ -12,7 +12,7 @@
 
 audioFeedback = (function() {
     var that = {};
-    
+
     var confirmationSound = SoundCache.getSound(Script.resolvePath("./sounds/confirmation.mp3"));
     var rejectionSound = SoundCache.getSound(Script.resolvePath("./sounds/rejection.mp3"));
     var actionSound = SoundCache.getSound(Script.resolvePath("./sounds/action.mp3"));
@@ -26,15 +26,15 @@ audioFeedback = (function() {
 
     that.rejection = function() { //Play a rejection sound
         var injector = Audio.playSound(rejectionSound, {
-             "volume": 0.3,
-            "localOnly": true           
+            "volume": 0.3,
+            "localOnly": true
         });
     }
 
     that.action = function() { //Play an action sound
         var injector = Audio.playSound(actionSound, {
-             "volume": 0.3,
-            "localOnly": true           
+            "volume": 0.3,
+            "localOnly": true
         });
     }