js: Allow status bar to be present in the HTML

I'm generally in favour of putting HTML in HTML rather the constructing
it in JavaScript, and this will allow for simplifying the code
eventually.  This only changes the JavaScript to make sure that's in
people's caches before I change the HTML itself.
This commit is contained in:
Ben Harris
2022-11-20 18:01:19 +00:00
parent f86623bbd9
commit 77c8b50834
3 changed files with 24 additions and 9 deletions

3
emcc.c
View File

@ -80,6 +80,7 @@ extern void js_canvas_free_blitter(int id);
extern void js_canvas_copy_to_blitter(int id, int x, int y, int w, int h); extern void js_canvas_copy_to_blitter(int id, int x, int y, int w, int h);
extern void js_canvas_copy_from_blitter(int id, int x, int y, int w, int h); extern void js_canvas_copy_from_blitter(int id, int x, int y, int w, int h);
extern void js_canvas_make_statusbar(void); extern void js_canvas_make_statusbar(void);
extern void js_canvas_remove_statusbar(void);
extern void js_canvas_set_statusbar(const char *text); extern void js_canvas_set_statusbar(const char *text);
extern void js_canvas_set_size(int w, int h); extern void js_canvas_set_size(int w, int h);
extern double js_get_device_pixel_ratio(); extern double js_get_device_pixel_ratio();
@ -958,6 +959,8 @@ int main(int argc, char **argv)
*/ */
if (midend_wants_statusbar(me)) if (midend_wants_statusbar(me))
js_canvas_make_statusbar(); js_canvas_make_statusbar();
else
js_canvas_remove_statusbar();
/* /*
* Set up the game-type dropdown with presets and/or the Custom * Set up the game-type dropdown with presets and/or the Custom

View File

@ -518,11 +518,24 @@ mergeInto(LibraryManager.library, {
* back end turns out to want one. * back end turns out to want one.
*/ */
js_canvas_make_statusbar: function() { js_canvas_make_statusbar: function() {
var statusholder = document.getElementById("statusbarholder"); if (statusbar === null) {
statusbar = document.createElement("div"); var statusholder = document.getElementById("statusbarholder");
statusbar.id = "statusbar"; statusbar = document.createElement("div");
statusbar.appendChild(document.createTextNode(" ")); statusbar.id = "statusbar";
statusholder.appendChild(statusbar); statusbar.appendChild(document.createTextNode(" "));
statusholder.appendChild(statusbar);
}
},
/*
* void js_canvas_remove_statusbar(void);
*
* Cause a status bar not to exist. Called at setup time if the
* puzzle back end turns out not to want one.
*/
js_canvas_remove_statusbar: function() {
if (statusbar !== null)
statusbar.parentNode.removeChild(statusbar);
}, },
/* /*
@ -531,9 +544,7 @@ mergeInto(LibraryManager.library, {
* Set the text in the status bar. * Set the text in the status bar.
*/ */
js_canvas_set_statusbar: function(ptr) { js_canvas_set_statusbar: function(ptr) {
var text = UTF8ToString(ptr); statusbar.textContent = UTF8ToString(ptr);
statusbar.replaceChild(document.createTextNode(text),
statusbar.lastChild);
}, },
/* /*

View File

@ -443,9 +443,10 @@ function initPuzzle() {
['number','number']); ['number','number']);
timer_callback = Module.cwrap('timer_callback', 'void', ['number']); timer_callback = Module.cwrap('timer_callback', 'void', ['number']);
// Save references to the two permalinks. // Save references to the two permalinks and the status bar.
permalink_desc = document.getElementById("permalink-desc"); permalink_desc = document.getElementById("permalink-desc");
permalink_seed = document.getElementById("permalink-seed"); permalink_seed = document.getElementById("permalink-seed");
statusbar = document.getElementById("statusbar");
resizable_div = document.getElementById("resizable"); resizable_div = document.getElementById("resizable");
if (resizable_div !== null) { if (resizable_div !== null) {