|
|
|
@ -352,46 +352,29 @@ export class FileSystem
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static chooserInput: HTMLInputElement;
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
static ChooseFile(filter?: string, multiple = false): Promise<FileList>
|
|
|
|
|
static ChooseFile({ filter, multiple = false, callback }: { filter?: string; multiple?: boolean; callback: (filelist: FileList) => void; })
|
|
|
|
|
{
|
|
|
|
|
return new Promise((res, rej) =>
|
|
|
|
|
if (!this.chooserInput)
|
|
|
|
|
{
|
|
|
|
|
let _returned = false;
|
|
|
|
|
let _return = async () =>
|
|
|
|
|
{
|
|
|
|
|
if (_returned) return;
|
|
|
|
|
|
|
|
|
|
_returned = true;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < 10; i++)
|
|
|
|
|
{
|
|
|
|
|
if (chooser.files.length > 0) break;
|
|
|
|
|
await Sleep(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res(chooser.files);
|
|
|
|
|
document.body.removeChild(chooser);
|
|
|
|
|
document.body.onfocus = oldCallback;
|
|
|
|
|
this.chooserInput = document.createElement("input");
|
|
|
|
|
this.chooserInput.type = "file";
|
|
|
|
|
this.chooserInput.style.display = "none";
|
|
|
|
|
document.body.appendChild(this.chooserInput);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let oldCallback = document.body.onfocus;
|
|
|
|
|
document.body.onfocus = _return;
|
|
|
|
|
|
|
|
|
|
let chooser = document.createElement("input");
|
|
|
|
|
chooser.type = "file";
|
|
|
|
|
chooser.style.display = "none";
|
|
|
|
|
document.body.appendChild(chooser);
|
|
|
|
|
|
|
|
|
|
chooser.accept = filter;
|
|
|
|
|
chooser.onchange = _return;
|
|
|
|
|
chooser.multiple = multiple;
|
|
|
|
|
chooser.click();
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
this.chooserInput.accept = filter;
|
|
|
|
|
this.chooserInput.onchange = () =>
|
|
|
|
|
{
|
|
|
|
|
if (this.chooserInput.files.length > 0)
|
|
|
|
|
callback(this.chooserInput.files);
|
|
|
|
|
};
|
|
|
|
|
this.chooserInput.multiple = multiple;
|
|
|
|
|
this.chooserInput.click();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used as an alternative to chooseFile for saving files in the browser.
|
|
|
|
|