You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
var noop = function(){};
|
|
|
|
function FileUploadDropArea(){
|
|
return {
|
|
view: function(vnode){
|
|
var cb = vnode.attrs.cb;
|
|
if(typeof cb !== 'Function'){
|
|
cb = noop;
|
|
}
|
|
return m('.file-upload-drop-area',{
|
|
ondragover: function(e){
|
|
e.preventDefault();
|
|
},
|
|
ondrop: function(e){
|
|
e.preventDefault(); // don't open the file in the browser
|
|
var files = [];
|
|
|
|
// some browsers use `.items` and some use `.files`, so check for both:
|
|
if (e.dataTransfer.items) {
|
|
for (var i = 0; i < e.dataTransfer.items.length; i++) {
|
|
if (e.dataTransfer.items[i].kind === 'file') { // If dropped items aren't files, reject them
|
|
files.push( e.dataTransfer.items[i].getAsFile() );
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
for (var i = 0; i < e.dataTransfer.files.length; i++) {
|
|
files.push( e.dataTransfer.files[i] );
|
|
}
|
|
}
|
|
for(var i=0, file=null; i<files.length; i++){
|
|
file = files[i]
|
|
vnode.attrs.cb(file);
|
|
}
|
|
}
|
|
}, 'Drop files here...');
|
|
}
|
|
};
|
|
}
|
|
|
|
export default FileUploadDropArea; |