diff --git a/cmd/tools/modules/testing/common.v b/cmd/tools/modules/testing/common.v index 5448eba9b8..de9f5de486 100644 --- a/cmd/tools/modules/testing/common.v +++ b/cmd/tools/modules/testing/common.v @@ -277,8 +277,9 @@ pub fn new_test_session(_vargs string, will_compile bool) TestSession { skip_files << 'examples/sokol/sounds/wav_player.v' skip_files << 'examples/sokol/sounds/simple_sin_tones.v' } - // examples/wasm/mandelbrot/mandelbrot.wasm.v requires special compilation flags: `-b wasm -os browser`, skip it for now: + // requires special compilation flags: `-b wasm -os browser`, skip it for now: skip_files << 'examples/wasm/mandelbrot/mandelbrot.wasm.v' + skip_files << 'examples/wasm/change_color_by_id/change_color_by_id.wasm.v' } vargs := _vargs.replace('-progress', '') vexe := pref.vexe_path() diff --git a/examples/wasm/change_color_by_id/README.md b/examples/wasm/change_color_by_id/README.md new file mode 100644 index 0000000000..928faf327a --- /dev/null +++ b/examples/wasm/change_color_by_id/README.md @@ -0,0 +1,20 @@ +# Run V Mandelbrot Example + +## Using only V + +``` +v run . +``` + +## Using Python or Emscripten + +1. First, create `change_color_by_id.wasm`. Compile with `-os browser`. + +``` +v -b wasm -os browser change_color_by_id.wasm.v +``` + +2. Then, open the `change_color_by_id.html` file in the browser. + - CORS errors do not allow `change_color_by_id.wasm` to be loaded. + - Use `python -m http.server 8080` + - Use `emrun change_color_by_id.html` diff --git a/examples/wasm/change_color_by_id/change_color_by_id.html b/examples/wasm/change_color_by_id/change_color_by_id.html new file mode 100644 index 0000000000..6ec46ebaab --- /dev/null +++ b/examples/wasm/change_color_by_id/change_color_by_id.html @@ -0,0 +1,55 @@ + + +
+ + + +Some cool description
+Some cool description
+Some cool description
+Some cool description
+ + + + + diff --git a/examples/wasm/change_color_by_id/change_color_by_id.wasm.v b/examples/wasm/change_color_by_id/change_color_by_id.wasm.v new file mode 100644 index 0000000000..5dd109e9a7 --- /dev/null +++ b/examples/wasm/change_color_by_id/change_color_by_id.wasm.v @@ -0,0 +1,18 @@ +fn JS.change_color_by_id(ptr u8, len int, color_ptr u8, color_len int) + +// `main` must be public! +pub fn main() { + println('starting main.main...') + change_color_by_id('description', 'red') + change_color_by_id('description1', 'green') + change_color_by_id('description2', 'blue') + change_color_by_id('description3', 'black') +} + +pub fn click_callback() { + println('Hello from V') +} + +fn change_color_by_id(id string, color string) { + JS.change_color_by_id(id.str, id.len, color.str, color.len) +} diff --git a/examples/wasm/change_color_by_id/favicon.ico b/examples/wasm/change_color_by_id/favicon.ico new file mode 100644 index 0000000000..d3f932a47b Binary files /dev/null and b/examples/wasm/change_color_by_id/favicon.ico differ diff --git a/examples/wasm/change_color_by_id/serve_folder.v b/examples/wasm/change_color_by_id/serve_folder.v new file mode 100644 index 0000000000..0d8778cdb0 --- /dev/null +++ b/examples/wasm/change_color_by_id/serve_folder.v @@ -0,0 +1,22 @@ +module main + +import vweb +import os + +struct App { + vweb.Context +} + +fn main() { + os.chdir(os.dir(@FILE))! + cmd := '${os.quoted_path(@VEXE)} -b wasm -os browser change_color_by_id.wasm.v' + println('>> compiling change_color_by_id.wasm.v, using: ${cmd}') + os.execute_or_panic(cmd) + mut app := App{} + app.mount_static_folder_at(os.resource_abs_path('.'), '/') + vweb.run(app, 3001) +} + +pub fn (mut app App) index() vweb.Result { + return app.html(os.read_file('change_color_by_id.html') or { '' }) +}