You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
2 months ago
|
function init_listeners() {
|
||
|
document.querySelector('.main').addEventListener('dragover', cancel);
|
||
|
document.querySelector('.main').addEventListener('drop', drop);
|
||
|
}
|
||
|
|
||
|
function cancel(e) {
|
||
|
e.preventDefault();
|
||
|
e.stopPropagation();
|
||
|
}
|
||
|
|
||
|
function drop(e) {
|
||
|
e.preventDefault();
|
||
|
|
||
|
if (e.dataTransfer.files.length !== 1) {
|
||
|
console.error('Only one file at once, please!');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
const file = e.dataTransfer.files[0];
|
||
|
const fr = new FileReader();
|
||
|
|
||
|
const upload_failed = () => {
|
||
|
console.error('Upload failed');
|
||
|
};
|
||
|
|
||
|
const upload_started = () => {
|
||
|
console.log('Upload started');
|
||
|
};
|
||
|
|
||
|
const upload_finished = () => {
|
||
|
const text = fr.result;
|
||
|
console.log('Finished. String length:', text.length);
|
||
|
parse(text);
|
||
|
};
|
||
|
|
||
|
const upload_progress = (e) => {
|
||
|
if (e.lengthComputable) {
|
||
|
const percent = Math.floor(e.loaded / e.total * 100);
|
||
|
console.log(`Progress: ${percent}%`);
|
||
|
} else {
|
||
|
console.log('Progress: unknown');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
fr.addEventListener('abort', upload_failed);
|
||
|
fr.addEventListener('error', upload_failed);
|
||
|
fr.addEventListener('load', upload_finished);
|
||
|
fr.addEventListener('loadstart', upload_started);
|
||
|
fr.addEventListener('progress', upload_progress);
|
||
|
|
||
|
fr.readAsText(file);
|
||
|
}
|