You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
[HTML5] Add easy to use download API.
New `JavaScript.download_buffer` method to create a prompt that let the user download a file.
This commit is contained in:
@@ -1,57 +0,0 @@
|
||||
/*************************************************************************/
|
||||
/* library_godot_editor_tools.js */
|
||||
/*************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/*************************************************************************/
|
||||
/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
|
||||
/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
|
||||
const GodotEditorTools = {
|
||||
godot_js_editor_download_file__deps: ['$FS'],
|
||||
godot_js_editor_download_file__sig: 'viii',
|
||||
godot_js_editor_download_file: function (p_path, p_name, p_mime) {
|
||||
const path = GodotRuntime.parseString(p_path);
|
||||
const name = GodotRuntime.parseString(p_name);
|
||||
const mime = GodotRuntime.parseString(p_mime);
|
||||
const size = FS.stat(path)['size'];
|
||||
const buf = new Uint8Array(size);
|
||||
const fd = FS.open(path, 'r');
|
||||
FS.read(fd, buf, 0, size);
|
||||
FS.close(fd);
|
||||
FS.unlink(path);
|
||||
const blob = new Blob([buf], { type: mime });
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = name;
|
||||
a.style.display = 'none';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
window.URL.revokeObjectURL(url);
|
||||
},
|
||||
};
|
||||
|
||||
mergeInto(LibraryManager.library, GodotEditorTools);
|
||||
@@ -304,6 +304,23 @@ const GodotOS = {
|
||||
godot_js_os_hw_concurrency_get: function () {
|
||||
return navigator.hardwareConcurrency || 1;
|
||||
},
|
||||
|
||||
godot_js_os_download_buffer__sig: 'viiii',
|
||||
godot_js_os_download_buffer: function (p_ptr, p_size, p_name, p_mime) {
|
||||
const buf = GodotRuntime.heapSlice(HEAP8, p_ptr, p_size);
|
||||
const name = GodotRuntime.parseString(p_name);
|
||||
const mime = GodotRuntime.parseString(p_mime);
|
||||
const blob = new Blob([buf], { type: mime });
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = name;
|
||||
a.style.display = 'none';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
window.URL.revokeObjectURL(url);
|
||||
},
|
||||
};
|
||||
|
||||
autoAddDeps(GodotOS, '$GodotOS');
|
||||
|
||||
Reference in New Issue
Block a user