subsonic-tui/vendor/github.com/gdamore/tcell/v2/README-wasm.md
Sagi Dayan 26e526f07e
initial commit
Signed-off-by: Sagi Dayan <sagidayan@gmail.com>
2024-02-20 19:10:14 +02:00

1.7 KiB

WASM for Tcell

You can build Tcell project into a webpage by compiling it slightly differently. This will result in a Tcell project you can embed into another html page, or use as a standalone page.

Building your project

WASM needs special build flags in order to work. You can build it by executing

GOOS=js GOARCH=wasm go build -o yourfile.wasm

Additional files

You also need 5 other files in the same directory as the wasm. Four (tcell.html, tcell.js, termstyle.css, and beep.wav) are provided in the webfiles directory. The last one, wasm_exec.js, can be copied from GOROOT into the current directory by executing

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" ./

In tcell.js, you also need to change the constant

const wasmFilePath = "yourfile.wasm"

to the file you outputed to when building.

Displaying your project

Standalone

You can see the project (with an white background around the terminal) by serving the directory. You can do this using any framework, including another golang project:

// server.go

package main

import (
	"log"
	"net/http"
)

func main() {
	log.Fatal(http.ListenAndServe(":8080",
		http.FileServer(http.Dir("/path/to/dir/to/serve")),
	))
}

To see the webpage with this example, you can type in localhost:8080/tcell.html into your browser while server.go is running.

Embedding

It is recomended to use an iframe if you want to embed the app into a webpage:

<iframe src="tcell.html" title="Tcell app"></iframe>

Other considerations

Accessing files

io.Open(filename) and other related functions for reading file systems do not work; use http.Get(filename) instead.