forked from react-dropzone/react-dropzone
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
executable file
·114 lines (92 loc) · 2.57 KB
/
index.js
File metadata and controls
executable file
·114 lines (92 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
var React = require('react');
var Dropzone = React.createClass({
getDefaultProps: function() {
return {
supportClick: true,
multiple: true,
inputName: 'fileInput'
};
},
getInitialState: function() {
return {
isDragActive: false
};
},
propTypes: {
onDrop: React.PropTypes.func.isRequired,
onDragOver: React.PropTypes.func,
onDragLeave: React.PropTypes.func,
size: React.PropTypes.number,
style: React.PropTypes.object,
supportClick: React.PropTypes.bool,
accept: React.PropTypes.string,
multiple: React.PropTypes.bool
},
onDragLeave: function(e) {
this.setState({
isDragActive: false
});
if (this.props.onDragLeave) {
this.props.onDragLeave(e);
}
},
onDragOver: function(e) {
e.preventDefault();
e.stopPropagation();
e.dataTransfer.dropEffect = 'copy';
this.setState({
isDragActive: true
});
if (this.props.onDragOver) {
this.props.onDragOver(e);
}
},
onDrop: function(e) {
e.preventDefault();
this.setState({
isDragActive: false
});
var files;
if (e.dataTransfer) {
files = e.dataTransfer.files;
} else if (e.target) {
files = e.target.files;
}
var maxFiles = (this.props.multiple) ? files.length : 1;
for (var i = 0; i < maxFiles; i++) {
files[i].preview = URL.createObjectURL(files[i]);
}
if (this.props.onDrop) {
files = Array.prototype.slice.call(files, 0, maxFiles);
this.props.onDrop(files, e);
}
},
onClick: function () {
if (this.props.supportClick === true) {
this.open();
}
},
open: function() {
var fileInput = React.findDOMNode(this.refs.fileInput);
fileInput.value = null;
fileInput.click();
},
render: function() {
var className = this.props.className || 'dropzone';
if (this.state.isDragActive) {
className += ' active';
}
var style = this.props.style || {
width: this.props.size || 100,
height: this.props.size || 100,
borderStyle: this.state.isDragActive ? 'solid' : 'dashed'
};
return (
React.createElement('div', {className: className, style: style, onClick: this.onClick, onDragLeave: this.onDragLeave, onDragOver: this.onDragOver, onDrop: this.onDrop},
React.createElement('input', {style: {display: 'none'}, type: 'file', multiple: this.props.multiple, name: this.props.inputName, ref: 'fileInput', onChange: this.onDrop, accept: this.props.accept}),
this.props.children
)
);
}
});
module.exports = Dropzone;