From 4084a1ac869855f5811c6c22de5deef145d3370b Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Fri, 11 Jan 2019 11:20:57 -0800 Subject: [PATCH] Drag and drop fixes (#2249) * Drag-drop edit mode from capture handler. Drag-drop composition from bubble handler. Check composability on drag start * Show drop hints without being in edit mode. * Don't serialize objects twice on drag --- src/api/Editor.js | 5 ++++ .../components/DisplayLayout.vue | 4 +-- .../flexibleLayout/components/container.vue | 6 ++-- .../flexibleLayout/components/dropHint.vue | 6 +--- src/plugins/flexibleLayout/plugin.js | 1 + .../src/controllers/EntryController.js | 2 +- .../src/controllers/NotebookController.js | 4 +-- src/plugins/tabs/components/tabs.vue | 2 +- src/ui/components/ObjectLabel.vue | 7 ++++- src/ui/components/ObjectView.vue | 29 +++++++++---------- 10 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/api/Editor.js b/src/api/Editor.js index b0814080a7..3d1b98c48f 100644 --- a/src/api/Editor.js +++ b/src/api/Editor.js @@ -28,6 +28,11 @@ export default class Editor extends EventEmitter { super(); this.editing = false; this.openmct = openmct; + document.addEventListener('drop', (event) => { + if (!this.isEditing()) { + this.edit(); + } + }, {capture: true}); } /** diff --git a/src/plugins/displayLayout/components/DisplayLayout.vue b/src/plugins/displayLayout/components/DisplayLayout.vue index 967e0d9d5d..5adfd7bc92 100644 --- a/src/plugins/displayLayout/components/DisplayLayout.vue +++ b/src/plugins/displayLayout/components/DisplayLayout.vue @@ -177,13 +177,13 @@ this.openmct.objects.mutate(this.internalDomainObject, path, value); }, handleDrop($event) { - if (!$event.dataTransfer.types.includes('domainobject')) { + if (!$event.dataTransfer.types.includes('openmct/domain-object')) { return; } $event.preventDefault(); - let domainObject = JSON.parse($event.dataTransfer.getData('domainobject')); + let domainObject = JSON.parse($event.dataTransfer.getData('openmct/domain-object')); let elementRect = this.$el.getBoundingClientRect(); let droppedObjectPosition = [ Math.floor(($event.pageX - elementRect.left) / this.gridSize[0]), diff --git a/src/plugins/flexibleLayout/components/container.vue b/src/plugins/flexibleLayout/components/container.vue index e7c17d0d5f..8639319c5d 100644 --- a/src/plugins/flexibleLayout/components/container.vue +++ b/src/plugins/flexibleLayout/components/container.vue @@ -100,7 +100,7 @@ export default { }, methods: { allowDrop(event, index) { - if (event.dataTransfer.getData('domainObject')) { + if (event.dataTransfer.getData('openmct/domain-object')) { return true; } let frameId = event.dataTransfer.getData('frameid'), @@ -124,9 +124,9 @@ export default { } }, moveOrCreateFrame(insertIndex, event) { - if (event.dataTransfer.types.includes('domainobject')) { + if (event.dataTransfer.types.includes('openmct/domain-object')) { // create frame using domain object - let domainObject = JSON.parse(event.dataTransfer.getData('domainObject')); + let domainObject = JSON.parse(event.dataTransfer.getData('openmct/domain-object')); this.$emit( 'create-frame', this.index, diff --git a/src/plugins/flexibleLayout/components/dropHint.vue b/src/plugins/flexibleLayout/components/dropHint.vue index b5adf11db3..328fd9fa1c 100644 --- a/src/plugins/flexibleLayout/components/dropHint.vue +++ b/src/plugins/flexibleLayout/components/dropHint.vue @@ -21,8 +21,7 @@ *****************************************************************************/