Changeset 244278 in webkit


Ignore:
Timestamp:
Apr 15, 2019 11:58:27 AM (5 years ago)
Author:
Devin Rousso
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.

Location:
trunk/Source/WebInspectorUI
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r244275 r244278  
     12019-04-15  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: drag/drop over the sidebar should load an imported file in Canvas/Audit tab
     4        https://bugs.webkit.org/show_bug.cgi?id=196873
     5        <rdar://problem/49858190>
     6
     7        Reviewed by Timothy Hatcher.
     8
     9        * UserInterface/Base/Main.js:
     10        (WI.contentLoaded):
     11        (WI._handleDragOver): Added.
     12        (WI._handleDrop): Added.
     13        (WI._dragOver): Deleted.
     14        * UserInterface/Views/AuditTabContentView.js:
     15        (WI.AuditTabContentView):
     16        (WI.AuditTabContentView.prototype.async handleFileDrop): Added.
     17        (WI.AuditTabContentView.prototype._handleDragOver): Deleted.
     18        (WI.AuditTabContentView.prototype._handleDrop): Deleted.
     19        * UserInterface/Views/CanvasTabContentView.js:
     20        (WI.CanvasTabContentView):
     21        (WI.CanvasTabContentView.prototype.async handleFileDrop): Added.
     22        (WI.CanvasTabContentView.prototype._handleDragOver): Deleted.
     23        (WI.CanvasTabContentView.prototype._handleDrop): Deleted.
     24        * UserInterface/Views/TimelineTabContentView.js:
     25        (WI.TimelineTabContentView.prototype.async handleFileDrop): Added.
     26        Check whether the current tab is able to handle a file drop, and if so, don't prevent the
     27        drag from occuring. This now allows the user to drop anywhere on the Web Inspector area to
     28        import files, so long as the relevant tab is currently selected.
     29
     30        * UserInterface/Controllers/CanvasManager.js:
     31        (WI.CanvasManager.prototype.async processJSON): Added.
     32        (WI.CanvasManager.prototype.processJSON): Deleted.
     33        * UserInterface/Controllers/TimelineManager.js:
     34        (WI.TimelineManager.prototype.async processJSON): Added.
     35        (WI.TimelineManager.prototype.processJSON): Deleted.
     36        Make `async` to match other `processJSON` functions.
     37
    1382019-04-15  Devin Rousso  <drousso@apple.com>
    239
  • trunk/Source/WebInspectorUI/UserInterface/Base/Main.js

    r244266 r244278  
    272272
    273273    document.addEventListener("click", WI._mouseWasClicked);
    274     document.addEventListener("dragover", WI._dragOver);
     274    document.addEventListener("dragover", WI._handleDragOver);
     275    document.addEventListener("drop", WI._handleDrop);
    275276    document.addEventListener("focus", WI._focusChanged, true);
    276277
     
    15241525};
    15251526
    1526 WI._dragOver = function(event)
     1527WI._handleDragOver = function(event)
    15271528{
    15281529    // Do nothing if another event listener handled the event already.
     
    15341535        return;
    15351536
    1536     // Prevent the drop from being accepted.
    1537     event.dataTransfer.dropEffect = "none";
     1537    let tabContentView = WI.tabBrowser.selectedTabContentView;
     1538    if (!tabContentView || !tabContentView.handleFileDrop || !event.dataTransfer.types.includes("Files")) {
     1539        // Prevent the drop from being accepted.
     1540        event.dataTransfer.dropEffect = "none";
     1541    }
     1542
    15381543    event.preventDefault();
     1544};
     1545
     1546WI._handleDrop = function(event)
     1547{
     1548    // Do nothing if another event listener handled the event already.
     1549    if (event.defaultPrevented)
     1550        return;
     1551
     1552    // Allow dropping into editable areas.
     1553    if (WI.isEventTargetAnEditableField(event))
     1554        return;
     1555
     1556    let tabContentView = WI.tabBrowser.selectedTabContentView;
     1557    if (tabContentView && tabContentView.handleFileDrop && event.dataTransfer.files) {
     1558        event.preventDefault();
     1559
     1560        tabContentView.handleFileDrop(event.dataTransfer.files)
     1561        .then(() => {
     1562            event.dataTransfer.clearData();
     1563        });
     1564    }
    15391565};
    15401566
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js

    r243272 r244278  
    7676    }
    7777
    78     processJSON({filename, json, error})
     78    async processJSON({filename, json, error})
    7979    {
    8080        if (error) {
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js

    r244199 r244278  
    265265    }
    266266
    267     processJSON({filename, json, error})
     267    async processJSON({filename, json, error})
    268268    {
    269269        if (error) {
  • trunk/Source/WebInspectorUI/UserInterface/Views/AuditTabContentView.js

    r240502 r244278  
    3333        this._startStopShortcut.implicitlyPreventsDefault = false;
    3434        this._startStopShortcut.disabled = true;
    35 
    36         this.element.addEventListener("dragover", this._handleDragOver.bind(this));
    37         this.element.addEventListener("drop", this._handleDrop.bind(this));
    3835    }
    3936
     
    8784    }
    8885
     86    async handleFileDrop(files)
     87    {
     88        await WI.FileUtilities.readJSON(files, (result) => WI.auditManager.processJSON(result));
     89    }
     90
    8991    // Protected
    9092
     
    112114        event.preventDefault();
    113115    }
    114 
    115     _handleDragOver(event)
    116     {
    117         if (event.dataTransfer.types.includes("Files"))
    118             event.preventDefault();
    119     }
    120 
    121     _handleDrop(event)
    122     {
    123         if (!event.dataTransfer.files || !event.dataTransfer.files.length)
    124             return;
    125 
    126         event.preventDefault();
    127 
    128         WI.FileUtilities.readJSON(event.dataTransfer.files, (result) => WI.auditManager.processJSON(result))
    129         .then(() => {
    130             event.dataTransfer.clearData();
    131         });
    132     }
    133116};
    134117
  • trunk/Source/WebInspectorUI/UserInterface/Views/CanvasTabContentView.js

    r243272 r244278  
    5757        this._recordSingleFrameShortcut.disabled = true;
    5858
    59         this.element.addEventListener("dragover", this._handleDragOver.bind(this));
    60         this.element.addEventListener("drop", this._handleDrop.bind(this));
    61 
    6259        WI.canvasManager.enable();
    6360    }
     
    140137    {
    141138        // FIXME: implement once <https://webkit.org/b/177606> is complete.
     139    }
     140
     141    async handleFileDrop(files)
     142    {
     143        await WI.FileUtilities.readJSON(files, (result) => WI.canvasManager.processJSON(result));
    142144    }
    143145
     
    304306        event.preventDefault();
    305307    }
    306 
    307     _handleDragOver(event)
    308     {
    309         if (event.dataTransfer.types.includes("Files"))
    310             event.preventDefault();
    311     }
    312 
    313     _handleDrop(event)
    314     {
    315         if (!event.dataTransfer.files || !event.dataTransfer.files.length)
    316             return;
    317 
    318         event.preventDefault();
    319 
    320         WI.FileUtilities.readJSON(event.dataTransfer.files, (result) => WI.canvasManager.processJSON(result))
    321         .then(() => {
    322             event.dataTransfer.clearData();
    323         });
    324     }
    325308};
    326309
  • trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js

    r244195 r244278  
    344344    }
    345345
     346    async handleFileDrop(files)
     347    {
     348        await WI.FileUtilities.readJSON(files, (result) => WI.timelineManager.processJSON(result));
     349    }
     350
    346351    // Protected
    347352
Note: See TracChangeset for help on using the changeset viewer.