var _snes_types = "application/vnd.nintendo.snes.rom,.sfc,.smc,.srm"; var _psx_types = "application/x-cd-image,application/x-iso9660-image,.bin,.iso"; var _gba_types = "application/x-gba-rom,.gba"; var _accepted_types = _snes_types+","+_psx_types+","+_gba_types; var _FilePicker = {}; var _FilePickerData = {}; _FilePicker.upload = function(gd_callback) { // canceled = true; var input = document.createElement('INPUT'); input.setAttribute("type", "file"); input.setAttribute("accept", _accepted_types); input.setAttribute("multiple", ""); input.click(); input.addEventListener('change', event => { for (const file of event.target.files) { var reader = new FileReader(); // this.filename = file.name; // this.file_type = file.type; reader.readAsArrayBuffer(file); reader.onloadend = (evt) => { if (evt.target.readyState == FileReader.DONE) { // Godot's JavaScriptObject API is very very poorly documented. // It might be possible to unwrap JavaScriptObject to PoolByteArray // without a bytewise for loop, but I can't work it out by trial and error. _FilePickerData[file.name] = evt.target.result; gd_callback(file.name, file.type); } } } }); }