1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
9 } = require("resource://devtools/client/shared/vendor/react.js");
12 } = require("resource://devtools/client/shared/vendor/react-dom.js");
13 const PropTypes
= require("resource://devtools/client/shared/vendor/react-prop-types.js");
14 const dom
= require("resource://devtools/client/shared/vendor/react-dom-factories.js");
17 } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
19 loader
.lazyRequireGetter(
22 "resource://devtools/client/netmonitor/src/har/har-menu-utils.js",
28 const DROP_HAR_FILES
= L10N
.getStr("netmonitor.label.dropHarFiles");
31 * Helper component responsible for handling and importing
32 * dropped *.har files.
34 class DropHarHandler
extends Component
{
35 static get propTypes() {
37 // List of actions passed to HAR importer.
38 actions
: PropTypes
.object
.isRequired
,
40 children
: PropTypes
.element
.isRequired
,
41 // Callback for opening split console.
42 openSplitConsole
: PropTypes
.func
,
49 // Drag and drop event handlers.
50 this.onDragEnter
= this.onDragEnter
.bind(this);
51 this.onDragOver
= this.onDragOver
.bind(this);
52 this.onDragLeave
= this.onDragLeave
.bind(this);
53 this.onDrop
= this.onDrop
.bind(this);
59 event
.preventDefault();
60 if (event
.dataTransfer
.files
.length
=== 0) {
64 startDragging(findDOMNode(this));
68 const node
= findDOMNode(this);
69 if (!node
.contains(event
.relatedTarget
)) {
75 event
.preventDefault();
76 event
.dataTransfer
.dropEffect
= "copy";
80 event
.preventDefault();
81 stopDragging(findDOMNode(this));
83 const { files
} = event
.dataTransfer
;
88 const { actions
, openSplitConsole
} = this.props
;
90 // Import only the first dragged file for now
92 // https://bugzilla.mozilla.org/show_bug.cgi?id=1438792
94 const file
= files
[0];
95 readFile(file
).then(har
=> {
97 HarMenuUtils
.appendPreview(har
, actions
, openSplitConsole
);
108 onDragEnter
: this.onDragEnter
,
109 onDragOver
: this.onDragOver
,
110 onDragLeave
: this.onDragLeave
,
114 div({ className
: "dropHarFiles" }, div({}, DROP_HAR_FILES
))
121 function readFile(file
) {
122 return new Promise(resolve
=> {
123 const fileReader
= new FileReader();
124 fileReader
.onloadend
= () => {
125 resolve(fileReader
.result
);
127 fileReader
.readAsText(file
);
131 function startDragging(node
) {
132 node
.setAttribute("dragging", "true");
135 function stopDragging(node
) {
136 node
.removeAttribute("dragging");
141 module
.exports
= DropHarHandler
;