nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit 87fd8167812bdc4b891f4200c000c06fb2fcde65
parent e0a13f1c817dd6e01740a637a8ec5b0083bb8f22
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Thu,  1 Dec 2016 01:24:11 +0300

[file-read] avoid file input apperaing after clicking cancel button; do not produce new file input on every invocation

Diffstat:
Msrc/lib/file-read/file-read.js | 37++++++++++++++++++++++---------------
1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/lib/file-read/file-read.js b/src/lib/file-read/file-read.js @@ -14,21 +14,28 @@ function arrayBufferToString(arBuf) { return intArrayToString(arr); } -function selectFiles(multiple=false) { - var fileInput = document.createElement('input'); - document.body.appendChild(fileInput); - fileInput.type = 'file'; - fileInput.multiple = !!multiple; - fileInput.style.left = '-100000px'; - const result = new Promise(function(resolve) { - fileInput.onchange = function() { - document.body.removeChild(fileInput); - resolve(fileInput.files); - }; - }); - setTimeout(fileInput.click.bind(fileInput), 0); - return result; -} +const selectFiles = (() => { + let fileInput; + return function selectFiles(multiple = false) { + if (!fileInput) { + fileInput = document.createElement('input'); + document.body.appendChild(fileInput); + fileInput.type = 'file'; + fileInput.multiple = !!multiple; + fileInput.style.display = 'none'; + } + const result = new Promise(function(resolve) { + fileInput.onclick = (e) => console.log('click', e); + fileInput.addEventListener('change', function() { + resolve(fileInput.files); + } + ); + } + ); + setTimeout(fileInput.click.bind(fileInput), 0); + return result; + } +})(); function readFile(file) { return new Promise(function(resolve) {