Title: [244278] trunk/Source/WebInspectorUI
Revision
244278
Author
[email protected]
Date
2019-04-15 11:58:27 -0700 (Mon, 15 Apr 2019)

Log Message

Web Inspector: drag/drop over the sidebar should load an imported file in Canvas/Audit tab
https://bugs.webkit.org/show_bug.cgi?id=196873
<rdar://problem/49858190>

Reviewed by Timothy Hatcher.

* UserInterface/Base/Main.js:
(WI.contentLoaded):
(WI._handleDragOver): Added.
(WI._handleDrop): Added.
(WI._dragOver): Deleted.
* UserInterface/Views/AuditTabContentView.js:
(WI.AuditTabContentView):
(WI.AuditTabContentView.prototype.async handleFileDrop): Added.
(WI.AuditTabContentView.prototype._handleDragOver): Deleted.
(WI.AuditTabContentView.prototype._handleDrop): Deleted.
* UserInterface/Views/CanvasTabContentView.js:
(WI.CanvasTabContentView):
(WI.CanvasTabContentView.prototype.async handleFileDrop): Added.
(WI.CanvasTabContentView.prototype._handleDragOver): Deleted.
(WI.CanvasTabContentView.prototype._handleDrop): Deleted.
* UserInterface/Views/TimelineTabContentView.js:
(WI.TimelineTabContentView.prototype.async handleFileDrop): Added.
Check whether the current tab is able to handle a file drop, and if so, don't prevent the
drag from occuring. This now allows the user to drop anywhere on the Web Inspector area to
import files, so long as the relevant tab is currently selected.

* UserInterface/Controllers/CanvasManager.js:
(WI.CanvasManager.prototype.async processJSON): Added.
(WI.CanvasManager.prototype.processJSON): Deleted.
* UserInterface/Controllers/TimelineManager.js:
(WI.TimelineManager.prototype.async processJSON): Added.
(WI.TimelineManager.prototype.processJSON): Deleted.
Make `async` to match other `processJSON` functions.

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (244277 => 244278)


--- trunk/Source/WebInspectorUI/ChangeLog	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/ChangeLog	2019-04-15 18:58:27 UTC (rev 244278)
@@ -1,5 +1,42 @@
 2019-04-15  Devin Rousso  <[email protected]>
 
+        Web Inspector: drag/drop over the sidebar should load an imported file in Canvas/Audit tab
+        https://bugs.webkit.org/show_bug.cgi?id=196873
+        <rdar://problem/49858190>
+
+        Reviewed by Timothy Hatcher.
+
+        * UserInterface/Base/Main.js:
+        (WI.contentLoaded):
+        (WI._handleDragOver): Added.
+        (WI._handleDrop): Added.
+        (WI._dragOver): Deleted.
+        * UserInterface/Views/AuditTabContentView.js:
+        (WI.AuditTabContentView):
+        (WI.AuditTabContentView.prototype.async handleFileDrop): Added.
+        (WI.AuditTabContentView.prototype._handleDragOver): Deleted.
+        (WI.AuditTabContentView.prototype._handleDrop): Deleted.
+        * UserInterface/Views/CanvasTabContentView.js:
+        (WI.CanvasTabContentView):
+        (WI.CanvasTabContentView.prototype.async handleFileDrop): Added.
+        (WI.CanvasTabContentView.prototype._handleDragOver): Deleted.
+        (WI.CanvasTabContentView.prototype._handleDrop): Deleted.
+        * UserInterface/Views/TimelineTabContentView.js:
+        (WI.TimelineTabContentView.prototype.async handleFileDrop): Added.
+        Check whether the current tab is able to handle a file drop, and if so, don't prevent the
+        drag from occuring. This now allows the user to drop anywhere on the Web Inspector area to
+        import files, so long as the relevant tab is currently selected.
+
+        * UserInterface/Controllers/CanvasManager.js:
+        (WI.CanvasManager.prototype.async processJSON): Added.
+        (WI.CanvasManager.prototype.processJSON): Deleted.
+        * UserInterface/Controllers/TimelineManager.js:
+        (WI.TimelineManager.prototype.async processJSON): Added.
+        (WI.TimelineManager.prototype.processJSON): Deleted.
+        Make `async` to match other `processJSON` functions.
+
+2019-04-15  Devin Rousso  <[email protected]>
+
         Web Inspector: Heap: logging an object from a snapshot shouldn't use the "special" style if the object is reachable
         https://bugs.webkit.org/show_bug.cgi?id=196889
         <rdar://problem/49870693>

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -271,7 +271,8 @@
     document.addEventListener("copy", WI._copy);
 
     document.addEventListener("click", WI._mouseWasClicked);
-    document.addEventListener("dragover", WI._dragOver);
+    document.addEventListener("dragover", WI._handleDragOver);
+    document.addEventListener("drop", WI._handleDrop);
     document.addEventListener("focus", WI._focusChanged, true);
 
     window.addEventListener("focus", WI._windowFocused);
@@ -1523,7 +1524,7 @@
     WI.handlePossibleLinkClick(event);
 };
 
-WI._dragOver = function(event)
+WI._handleDragOver = function(event)
 {
     // Do nothing if another event listener handled the event already.
     if (event.defaultPrevented)
@@ -1533,11 +1534,36 @@
     if (WI.isEventTargetAnEditableField(event))
         return;
 
-    // Prevent the drop from being accepted.
-    event.dataTransfer.dropEffect = "none";
+    let tabContentView = WI.tabBrowser.selectedTabContentView;
+    if (!tabContentView || !tabContentView.handleFileDrop || !event.dataTransfer.types.includes("Files")) {
+        // Prevent the drop from being accepted.
+        event.dataTransfer.dropEffect = "none";
+    }
+
     event.preventDefault();
 };
 
+WI._handleDrop = function(event)
+{
+    // Do nothing if another event listener handled the event already.
+    if (event.defaultPrevented)
+        return;
+
+    // Allow dropping into editable areas.
+    if (WI.isEventTargetAnEditableField(event))
+        return;
+
+    let tabContentView = WI.tabBrowser.selectedTabContentView;
+    if (tabContentView && tabContentView.handleFileDrop && event.dataTransfer.files) {
+        event.preventDefault();
+
+        tabContentView.handleFileDrop(event.dataTransfer.files)
+        .then(() => {
+            event.dataTransfer.clearData();
+        });
+    }
+};
+
 WI._debuggerDidPause = function(event)
 {
     if (WI.settings.experimentalEnableSourcesTab.value)

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -75,7 +75,7 @@
         return Array.from(this._shaderProgramIdentifierMap.values());
     }
 
-    processJSON({filename, json, error})
+    async processJSON({filename, json, error})
     {
         if (error) {
             WI.Recording.synthesizeError(error);

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -264,7 +264,7 @@
         this._activeRecording.stop(this._initiatedByBackendStop);
     }
 
-    processJSON({filename, json, error})
+    async processJSON({filename, json, error})
     {
         if (error) {
             WI.TimelineManager.synthesizeImportError(error);

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/AuditTabContentView.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Views/AuditTabContentView.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/AuditTabContentView.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -32,9 +32,6 @@
         this._startStopShortcut = new WI.KeyboardShortcut(null, WI.KeyboardShortcut.Key.Space, this._handleSpace.bind(this));
         this._startStopShortcut.implicitlyPreventsDefault = false;
         this._startStopShortcut.disabled = true;
-
-        this.element.addEventListener("dragover", this._handleDragOver.bind(this));
-        this.element.addEventListener("drop", this._handleDrop.bind(this));
     }
 
     // Static
@@ -86,6 +83,11 @@
         super.hidden();
     }
 
+    async handleFileDrop(files)
+    {
+        await WI.FileUtilities.readJSON(files, (result) => WI.auditManager.processJSON(result));
+    }
+
     // Protected
 
     initialLayout()
@@ -111,25 +113,6 @@
 
         event.preventDefault();
     }
-
-    _handleDragOver(event)
-    {
-        if (event.dataTransfer.types.includes("Files"))
-            event.preventDefault();
-    }
-
-    _handleDrop(event)
-    {
-        if (!event.dataTransfer.files || !event.dataTransfer.files.length)
-            return;
-
-        event.preventDefault();
-
-        WI.FileUtilities.readJSON(event.dataTransfer.files, (result) => WI.auditManager.processJSON(result))
-        .then(() => {
-            event.dataTransfer.clearData();
-        });
-    }
 };
 
 WI.AuditTabContentView.Type = "audit";

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CanvasTabContentView.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Views/CanvasTabContentView.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CanvasTabContentView.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -56,9 +56,6 @@
         this._recordSingleFrameShortcut.implicitlyPreventsDefault = false;
         this._recordSingleFrameShortcut.disabled = true;
 
-        this.element.addEventListener("dragover", this._handleDragOver.bind(this));
-        this.element.addEventListener("drop", this._handleDrop.bind(this));
-
         WI.canvasManager.enable();
     }
 
@@ -141,6 +138,11 @@
         // FIXME: implement once <https://webkit.org/b/177606> is complete.
     }
 
+    async handleFileDrop(files)
+    {
+        await WI.FileUtilities.readJSON(files, (result) => WI.canvasManager.processJSON(result));
+    }
+
     // Protected
 
     initialLayout()
@@ -303,25 +305,6 @@
 
         event.preventDefault();
     }
-
-    _handleDragOver(event)
-    {
-        if (event.dataTransfer.types.includes("Files"))
-            event.preventDefault();
-    }
-
-    _handleDrop(event)
-    {
-        if (!event.dataTransfer.files || !event.dataTransfer.files.length)
-            return;
-
-        event.preventDefault();
-
-        WI.FileUtilities.readJSON(event.dataTransfer.files, (result) => WI.canvasManager.processJSON(result))
-        .then(() => {
-            event.dataTransfer.clearData();
-        });
-    }
 };
 
 WI.CanvasTabContentView.Type = "canvas";

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js (244277 => 244278)


--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js	2019-04-15 18:56:52 UTC (rev 244277)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js	2019-04-15 18:58:27 UTC (rev 244278)
@@ -343,6 +343,11 @@
         return representedObject instanceof WI.TimelineRecording;
     }
 
+    async handleFileDrop(files)
+    {
+        await WI.FileUtilities.readJSON(files, (result) => WI.timelineManager.processJSON(result));
+    }
+
     // Protected
 
     restoreFromCookie(cookie)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to