Skip to content

Instantly share code, notes, and snippets.

@nkt
Created March 11, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nkt/9b626aa5c631fe6c6502 to your computer and use it in GitHub Desktop.
Save nkt/9b626aa5c631fe6c6502 to your computer and use it in GitHub Desktop.
function initDnD(element, cb, accept = 'image/*') {
let input = document.createElement('input');
input.type = 'file';
input.accept = accept;
input.addEventListener('change', (e) => {
cb(input.files[0]);
});
element.addEventListener('click', (e) => {
e.preventDefault();
input.click();
});
const elementClassName = element.className;
element.ondragover = () => {
element.className = `active ${elementClassName}`;
return false;
};
element.ondragend = () => {
element.className = elementClassName;
return false;
};
const typePattern = new RegExp(accept.replace('*', '.+'));
element.ondrop = (e) => {
element.className = elementClassName;
e.preventDefault();
let file = e.dataTransfer.files[0];
if (typePattern.test(file.type)) {
cb(e.dataTransfer.files[0]);
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment