From e8154b5df18fc881153120248c3d6a39902b8a80 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 17 Jun 2018 08:35:45 +1200 Subject: [PATCH 1/4] Fix Create app selection updating when entities are deleted --- scripts/system/edit.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 05f5e3cb19..02af474f55 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -475,18 +475,18 @@ var toolBar = (function () { var DELETE_ENTITY_TIMER_TIMEOUT = 100; function checkDeletedEntityAndUpdate(entityID) { - // Allow for multiple entity deletes before updating the entity list. - entitiesToDelete.push(entityID); - if (deletedEntityTimer !== null) { - Script.clearTimeout(deletedEntityTimer); + if (selectionManager.selections.indexOf(entityID) !== -1) { + // Allow for multiple entity deletes before updating the entities selected. + entitiesToDelete.push(entityID); + if (deletedEntityTimer !== null) { + Script.clearTimeout(deletedEntityTimer); + } + deletedEntityTimer = Script.setTimeout(function () { + selectionManager.removeEntities(entitiesToDelete); + entitiesToDelete = []; + deletedEntityTimer = null; + }, DELETE_ENTITY_TIMER_TIMEOUT); } - deletedEntityTimer = Script.setTimeout(function () { - selectionManager.removeEntities(entitiesToDelete); - entityListTool.clearEntityList(); - entityListTool.sendUpdate(); - entitiesToDelete = []; - deletedEntityTimer = null; - }, DELETE_ENTITY_TIMER_TIMEOUT); } function initialize() { From 5de451e8e0cec8716f9597766c12cb461953145e Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 19 Jun 2018 14:52:49 +1200 Subject: [PATCH 2/4] Update entity list upon entity deletion --- scripts/system/edit.js | 22 +++++++++++++--------- scripts/system/html/js/entityList.js | 2 +- scripts/system/html/js/entityProperties.js | 4 ++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 02af474f55..01e4a071e1 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -475,18 +475,22 @@ var toolBar = (function () { var DELETE_ENTITY_TIMER_TIMEOUT = 100; function checkDeletedEntityAndUpdate(entityID) { + // Allow for multiple entity deletes before updating the entities selected. if (selectionManager.selections.indexOf(entityID) !== -1) { - // Allow for multiple entity deletes before updating the entities selected. entitiesToDelete.push(entityID); - if (deletedEntityTimer !== null) { - Script.clearTimeout(deletedEntityTimer); - } - deletedEntityTimer = Script.setTimeout(function () { - selectionManager.removeEntities(entitiesToDelete); - entitiesToDelete = []; - deletedEntityTimer = null; - }, DELETE_ENTITY_TIMER_TIMEOUT); } + if (deletedEntityTimer !== null) { + Script.clearTimeout(deletedEntityTimer); + } + deletedEntityTimer = Script.setTimeout(function () { + if (entitiesToDelete.length > 0) { + selectionManager.removeEntities(entitiesToDelete); + } + entityListTool.clearEntityList(); + entityListTool.sendUpdate(); + entitiesToDelete = []; + deletedEntityTimer = null; + }, DELETE_ENTITY_TIMER_TIMEOUT); } function initialize() { diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index 88b3ccbf7c..0b02dd6d4f 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -346,7 +346,7 @@ function loaded() { if (notFound) { refreshEntities(); } - } else if (data.type == "update") { + } else if (data.type == "update" && data.selectedIDs !== undefined) { var newEntities = data.entities; if (newEntities && newEntities.length == 0) { elNoEntitiesMessage.style.display = "block"; diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 4271aa9b09..f5b24a5f8e 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -893,9 +893,9 @@ function loaded() { } else { elServerScriptStatus.innerText = "Not running"; } - } else if (data.type === "update") { + } else if (data.type === "update" && data.selections) { - if (!data.selections || data.selections.length === 0) { + if (data.selections.length === 0) { if (lastEntityID !== null) { if (editor !== null) { saveJSONUserData(true); From 064f4ca2045dcd1f04811834004990e4207c66a3 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 19 Jun 2018 16:22:59 +1200 Subject: [PATCH 3/4] Remove deleted entities from list without scrolling to top --- scripts/system/edit.js | 7 ++----- scripts/system/html/js/entityList.js | 16 +++++++++++++++- scripts/system/libraries/entityList.js | 9 +++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 01e4a071e1..3eae6ebe7c 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -476,9 +476,7 @@ var toolBar = (function () { function checkDeletedEntityAndUpdate(entityID) { // Allow for multiple entity deletes before updating the entities selected. - if (selectionManager.selections.indexOf(entityID) !== -1) { - entitiesToDelete.push(entityID); - } + entitiesToDelete.push(entityID); if (deletedEntityTimer !== null) { Script.clearTimeout(deletedEntityTimer); } @@ -486,8 +484,7 @@ var toolBar = (function () { if (entitiesToDelete.length > 0) { selectionManager.removeEntities(entitiesToDelete); } - entityListTool.clearEntityList(); - entityListTool.sendUpdate(); + entityListTool.removeEntities(entitiesToDelete, selectionManager.selections); entitiesToDelete = []; deletedEntityTimer = null; }, DELETE_ENTITY_TIMER_TIMEOUT); diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index 0b02dd6d4f..11a875dbb5 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -195,6 +195,18 @@ function loaded() { } } + function removeEntities(deletedIDs, selectedIDs) { + for (i = 0, length = deletedIDs.length; i < length; i++) { + delete entities[deletedIDs[i]]; + entityList.remove("id", deletedIDs[i]); + } + if (refreshEntityListTimer) { + clearTimeout(refreshEntityListTimer); + } + refreshEntityListTimer = setTimeout(refreshEntityListObject, 50); + updateSelectedEntities(selectedIDs); + } + function clearEntities() { entities = {}; entityList.clear(); @@ -346,7 +358,7 @@ function loaded() { if (notFound) { refreshEntities(); } - } else if (data.type == "update" && data.selectedIDs !== undefined) { + } else if (data.type === "update" && data.selectedIDs !== undefined) { var newEntities = data.entities; if (newEntities && newEntities.length == 0) { elNoEntitiesMessage.style.display = "block"; @@ -367,6 +379,8 @@ function loaded() { updateSelectedEntities(data.selectedIDs); resize(); } + } else if (data.type === "removeEntities" && data.deletedIDs !== undefined) { + removeEntities(data.deletedIDs, data.selectedIDs); } else if (data.type === "deleted") { for (i = 0, length = data.ids.length; i < length; i++) { delete entities[data.ids[i]]; diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 611bd4d84c..3fda7588df 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -57,6 +57,15 @@ EntityListTool = function(opts) { webView.emitScriptEvent(JSON.stringify(data)); }; + that.removeEntities = function (deletedIDs, selectedIDs) { + var data = { + type: 'removeEntities', + deletedIDs: deletedIDs, + selectedIDs: selectedIDs + }; + webView.emitScriptEvent(JSON.stringify(data)); + }; + function valueIfDefined(value) { return value !== undefined ? value : ""; } From d43be5ce1900d1c33fa8c45e105cda7f255cba11 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 21 Jun 2018 16:35:37 +1200 Subject: [PATCH 4/4] Code review --- scripts/system/html/js/entityList.js | 28 ++++++++++------------ scripts/system/html/js/entityProperties.js | 2 +- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index 11a875dbb5..a8c0e22ae6 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -184,27 +184,25 @@ function loaded() { currentElement.onclick = onRowClicked; currentElement.ondblclick = onRowDoubleClicked; }); - - if (refreshEntityListTimer) { - clearTimeout(refreshEntityListTimer); - } - refreshEntityListTimer = setTimeout(refreshEntityListObject, 50); } else { var item = entities[id].item; item.values({ name: name, url: filename, locked: locked, visible: visible }); } } - function removeEntities(deletedIDs, selectedIDs) { + function removeEntities(deletedIDs) { for (i = 0, length = deletedIDs.length; i < length; i++) { delete entities[deletedIDs[i]]; entityList.remove("id", deletedIDs[i]); } + } + + function scheduleRefreshEntityList() { + var REFRESH_DELAY = 50; if (refreshEntityListTimer) { clearTimeout(refreshEntityListTimer); } - refreshEntityListTimer = setTimeout(refreshEntityListObject, 50); - updateSelectedEntities(selectedIDs); + refreshEntityListTimer = setTimeout(refreshEntityListObject, REFRESH_DELAY); } function clearEntities() { @@ -377,15 +375,15 @@ function loaded() { newEntities[i].hasScript ? SCRIPT_GLYPH : null); } updateSelectedEntities(data.selectedIDs); + scheduleRefreshEntityList(); resize(); } - } else if (data.type === "removeEntities" && data.deletedIDs !== undefined) { - removeEntities(data.deletedIDs, data.selectedIDs); - } else if (data.type === "deleted") { - for (i = 0, length = data.ids.length; i < length; i++) { - delete entities[data.ids[i]]; - entityList.remove("id", data.ids[i]); - } + } else if (data.type === "removeEntities" && data.deletedIDs !== undefined && data.selectedIDs !== undefined) { + removeEntities(data.deletedIDs); + updateSelectedEntities(data.selectedIDs); + scheduleRefreshEntityList(); + } else if (data.type === "deleted" && data.ids) { + removeEntities(data.ids); refreshFooter(); } }); diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index f5b24a5f8e..a6a781b35f 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -911,7 +911,7 @@ function loaded() { elID.value = ""; elPropertiesList.className = ''; disableProperties(); - } else if (data.selections && data.selections.length > 1) { + } else if (data.selections.length > 1) { deleteJSONEditor(); deleteJSONMaterialEditor(); var selections = data.selections;