summaryrefslogtreecommitdiff
path: root/platform/javascript
AgeCommit message (Collapse)Author
2021-04-30[HTML5] Fix builds with recent emscripten versionsFabio Alessandrelli
Library suffix should be `.a`, the `EXTRA_` in `EXTRA_EXPORTED_RUNTIME_METHODS` is deprecated.
2021-04-29Replace remaining uses of `NULL` with `nullptr`Rémi Verschelde
Follow-up to #38736 (these uses were likely added after this PR was merged).
2021-04-27Core: Drop custom `copymem`/`zeromem` definesRémi Verschelde
We've been using standard C library functions `memcpy`/`memset` for these since 2016 with 67f65f66391327b2967a20a89c3627e1dd6e84eb. There was still the possibility for third-party platform ports to override the definitions with a custom header, but this doesn't seem useful anymore.
2021-04-27[HTML5] Export as Progressive Web App.Fabio Alessandrelli
Adds possibility to export as a progressive web app. Allows customizing base icons, display mode, orientation and offline page.
2021-04-27[HTML5] HTTP server uses optional SSL.Fabio Alessandrelli
Generates a key/cert snakeoil pair or use a custom SSL cert/key. This is of course false security, and potentially detrimental for it. But, so long, those are the requirements browser vendors agreed on to use things like the Gamepad API, and more advanced topics like wasm threads. You don't need this if you run on localhost (at least!), but you do need this (or a much safer nginx proxy) to try those things on your local network (e.g. when debugging a phone, networking, etc).
2021-04-27[HTML5] Optional icon generation, use export name for it.Fabio Alessandrelli
We used to only generate the favicon if it was specified in the user project settings, now it's optional, will export it to `NAME.icon.png`, (falling back to the default project icon if none is set in project settings), and the `<link>` tag is added using the `$HEAD_INCLUDE` instead of being hardcoded in the template.
2021-04-27[HTML5] Debug HttpServer now runs in `web` cache subdir.Fabio Alessandrelli
Serving all files in that folder and using a known list of mime types. Makes it easy to add more exported files, while still playing safe.
2021-04-20[JS, Android] Re-add "no-exceptions" for export templates builds with ICU.bruvzg
2021-04-06[HTML5] Implement WebGL fallback.Fabio Alessandrelli
According to project settings and when WebGL2 is not available. This does nothing in current master, as we have no rendering yet!
2021-04-05Style: Apply clang-tidy's `modernize-use-nullptr`Rémi Verschelde
2021-04-03[HTML5] Disable body_size in fetch.Fabio Alessandrelli
We were using `Content-Length` from the server when `Content-Encoding` was not set (i.e. response was not compressed). Sadly, in CORS requests accessing headers is restricted, and while `Content-Length` is enabled by default, `Content-Encoding` is not. This results in the impossibility of knowing if the content was compressed, unless the server explicitly enabled the encoding header via `Access-Control-Expose-Headers`. To keep maximum compatibility we must disable `body_size` completely.
2021-03-29[HTML5] Fix WM notifications not being called.Fabio Alessandrelli
Regression from the library refactoring, binding and not calling is pretty useless 'o_o.
2021-03-29[HTML5] Fix Mono builds (old emcc?)Fabio Alessandrelli
Promise chaining the emscripten module `then` function breaks it badly, causing an infinite loop. I'm unsure about the source of the issue, but most likely at this point is due to the old emscripten version (I remember very old html5 builds having issue with promise chaining too). With this commit, we no longer use the module as a promise, and instantiate it using `Promise` objects directly for compatibility.
2021-03-28Rename Texture.get_data() to get_image()Marcel Admiraal
2021-03-23Rename some more global enums (Key, Joy, MIDI)Aaron Franke
2021-03-23Rename ButtonList enum and members to MouseButtonAaron Franke
2021-03-20Merge pull request #47191 from Faless/js/4.x_force_mimeRémi Verschelde
[HTML5] Fix loading when mime-type is missing.
2021-03-20Merge pull request #46966 from qarmin/faster_releaseRémi Verschelde
Allow to not optimize release build
2021-03-20[HTML5] Fix editor version numbering.Fabio Alessandrelli
Should not write patch version when it's `0`.
2021-03-20[HTML5] Fix loading when mime-type is missing.Fabio Alessandrelli
`WebAssembly.instantiateStreaming` requires the mime-type to be `application/wasm`, but some servers (including most debug servers) do not provide the content-type header. This commit forces it via JavaScript, by creating a `Response` object with the `wasm` content, and explicitly defined `content-type` header.
2021-03-14Allow to not optimize release buildRafał Mikrut
2021-03-12[HTML5] Drag and drop zip in project manager.Fabio Alessandrelli
With a very nice hack, a new hidden configuration option that delays dropped files removal at exit. This still leaks while the project manager is running, but will clear memory as soon as it exits or load something. (reminder, dropped files are reguarly removed after the signal is emitted specifically to avoid leaks, but I prefer hacking the HTML5 config then the project manager).
2021-03-11[HTML5] Opt-in virtual keyboard support.Fabio Alessandrelli
Added as an export option "Experimental Virtual Keyboard". There is no zoom, so text/line edit must be in the top part of the screen, or it will get hidden by the virtual keyboard. UTF8/Latin-1 only (I think regular UTF-8 should work out of the box in 4.0 but I can't test it). It uses an hidden textarea or input, based on the multiline variable, and only gets activated if the device has a touchscreen. This could cause problems on devices with both touchscreen and a real keyboard (although input should still work in general with some minor focus issues). I'm thinking of a system to detect the first physical keystroke and disable it in case, but it might do more harm then good, so it must be well thought.
2021-03-10[HTML5] Properly set canvas size during setup.Fabio Alessandrelli
It used to be updated before the first iteration, causing the window/viewport size values to be incorrect during the initialization phase (e.g. during the first `_ready` notification).
2021-03-08[HTML5] Respect allow_hidpi option during setupFabio Alessandrelli
The option was forced to `true` before, unlike on other platforms.
2021-03-08[HTML5] Add PWA support to the editor page.Fabio Alessandrelli
This allows to install it as an app, and provide offline support (after the first run). Practically, this boils down to adding a JSON file as a manifest, an offline page to be displayed when the cached files are not avaialble, and a JS file to cache resources and return them. The reason for the "first run requirements" is that some browsers, will emit an "install" by just visiting the page (to see if the JS code is compatibile), and we do not want to force casual visitors to just download the 10 MiB+ compressed editor WebAssembly file without pressing the start button. Special thanks to Hugo Locurcio (Calinou) for the initial work.
2021-03-08[HTML5] Catch audio worklet errors on disconnect.Fabio Alessandrelli
Which could happen if the worklet was not fully loaded, or the audio context had already aborted.
2021-03-06[HTML5] Replace XMLHttpRequest with Fetch.Fabio Alessandrelli
This has some advantages: - Streaming/chunked response support. - Broader headers support.
2021-03-05[HTML5] Rename heapCopy to heapSlice.Fabio Alessandrelli
New heapCopy function copies a TypedArray to the heap.
2021-03-05[HTML5] Export process writes sizes in template.Fabio Alessandrelli
This allow the loading bar to be much more reliable, even in cases where realible stream loading status is not detectable (server-side compression, chunked encoding).
2021-03-05[HTML5] Preloader fetch, streaming instantiation.Fabio Alessandrelli
2021-02-26Merge pull request #46446 from Faless/js/4.x_jsdocRémi Verschelde
[HTML5] Document Engine and EngineConfig (jsdoc).
2021-02-26[HTML5] Make editor HTML build tag scons4-proof.Fabio Alessandrelli
We used to have it like `$GODOT_VERSION` which caused inconsistencies between different scons versions when substituting it. It's now `@GODOT_VERSION@`, which is safe on both scons3 and scons4.
2021-02-26[HTML5] Add jsdoc2rst tool.Fabio Alessandrelli
A template for `jsdoc` that generat the HTML5 public classref. The script can be run via `npm run docs` to print to stdout. You can dry run via `npm run docs -- --d dry-run` or write to file via `npm run docs -- -d /path/to/file.rst` Also update Makefile in `doc/` and add dry run test to CI.
2021-02-26[HTML5] Document Engine and EngineConfig (jsdoc).Fabio Alessandrelli
This commit also removes the utils.js engine file, moving some of it's content to config.js and some to engine.js .
2021-02-19[HTML5] Better fullscreen, canvas resizing.Fabio Alessandrelli
Three canvas resize policies: - `None`: Godot window settings are ignored. - `Project`: Godot handles the canvas like a native app (resizing it when setting the window size). - `Adaptive`: Canvas size will always adapt to browser window size. Use `None` if you want to control the canvas size with custom JavaScript code.
2021-02-19[HTML5] Easier HTML templates, better deinit/cleanup.Fabio Alessandrelli
2021-02-18Reorganize Project Settingsreduz
-Advanced Settings toggle also hides advanced properties when disabled -Simplified Advanced Bar (errors were just plain redundant) -Reorganized rendering quality settings. -Reorganized miscelaneous settings for clean up.
2021-02-17[HTML5] Implement get_processor_count.Fabio Alessandrelli
2021-02-17[HTML5] Fix compilation issues in 4.0Fabio Alessandrelli
More memory is needed, and a Workaround to avoid undefined symbol due to dead code elimination.
2021-02-16Add cwrap to EXTRA_EXPORTED_RUNTIME_METHODSQuadtree
2021-02-12[HTML5] Detect screen scale and DPI.Fabio Alessandrelli
`OS.get_screen_scale` will now return the `window.devicePixelRatio` value, `OS.get_screen_dpi` uses CSS media queries to find approximate DPI value for the current display. `OS.get_screen_size` also return the actual screen size (not the CSS pixel size).
2021-02-11Merge pull request #45888 from Faless/js/4.x_xhr_fixRémi Verschelde
[HTML5] Fix HTTPClient request_raw.
2021-02-11[HTML5] Fix HTTPClient request_raw.Fabio Alessandrelli
Now send data according to the spec, properly handle null data. Simplify JS code since we are at it.
2021-02-11[HTML5] Handle contextmenu, webglcontextlost internally.Fabio Alessandrelli
This way they are automatically cleaned up when the engine exits, landing a hand to browsers garbage collectors.
2021-02-03[HTML5] Make home path persistent in editor.Fabio Alessandrelli
We used to only persist specific sub-folder of /home/web_user/ when running the Web Editor. This resulted in bad UX about default project creation path etc. This PR makes the whole folder persistent, move the zip preloading to a different folder (to avoid persisting it), and automatically prompt the user to import it if present.
2021-02-02[HTML5] Fix mouse_mode and fullscreen detection.Fabio Alessandrelli
The canvas_id is `#`-prefixed to work with emscripten as a CSS selector. When comparing to an event target ID (e.g. when checking if the canvas is fullscreen, or is locking the mouse) we need to skip the first char (the hash).
2021-01-31Merge pull request #45315 from RandomShaper/modernize_threadRémi Verschelde
Modernize Thread
2021-01-29Modernize ThreadPedro J. Estébanez
- Based on C++11's `thread` and `thread_local` - No more need to allocate-deallocate or check for null - No pointer anymore, just a member variable - Platform-specific implementations no longer needed (except for the few cases of non-portable functions) - Simpler for `NO_THREADS` - Thread ids are now the same across platforms (main is 1; others follow)
2021-01-28Don't handle BaseException in JavaScript build scriptMarcel Admiraal