diff --git a/examples/content/dune b/examples/content/dune
new file mode 100644
index 0000000..485ede8
--- /dev/null
+++ b/examples/content/dune
@@ -0,0 +1,8 @@
+(rule
+ (target script.js)
+ (deps
+ (file ../script.bc.js))
+ (action
+ (with-stdout-to
+ %{target}
+ (cat ../script.bc.js))))
diff --git a/examples/content/index.html b/examples/content/index.html
new file mode 100644
index 0000000..63804ac
--- /dev/null
+++ b/examples/content/index.html
@@ -0,0 +1,10 @@
+
+
+
+ gadgetobrr
+
+
+
+
+
+
diff --git a/examples/style.css b/examples/content/style.css
similarity index 100%
rename from examples/style.css
rename to examples/content/style.css
diff --git a/examples/dune b/examples/dune
index 731c5fa..e42c169 100644
--- a/examples/dune
+++ b/examples/dune
@@ -1,5 +1,21 @@
(executable
- (name main)
- (modules main)
+ (name runweb)
+ (modules runweb content)
+ (libraries tiny_httpd))
+
+(executable
+ (name script)
+ (modules script)
(libraries js_of_ocaml brr gadgetobrr)
(modes js))
+
+(rule
+ (target content.ml)
+ (deps
+ (file content/index.html)
+ (file content/style.css)
+ (file content/script.js))
+ (action
+ (with-stdout-to
+ %{null}
+ (run ocaml-crunch -m plain content -o %{target}))))
diff --git a/examples/runweb.ml b/examples/runweb.ml
new file mode 100644
index 0000000..0742c3f
--- /dev/null
+++ b/examples/runweb.ml
@@ -0,0 +1,29 @@
+module S = Tiny_httpd
+
+let asset_loader path =
+ match Content.read path with None -> assert false | Some asset -> asset
+
+let () =
+ let server = S.create ~port:8000 () in
+ S.add_route_handler ~meth:`GET server S.Route.return (fun _req ->
+ S.Response.make_string
+ ~headers:[ ("Content-Type", "text/html") ]
+ (Ok (asset_loader "index.html")) );
+
+ S.add_route_handler ~meth:`GET server
+ S.Route.(exact "script.js" @/ return)
+ (fun _req ->
+ S.Response.make_string
+ ~headers:[ ("Content-Type", "application/javascript") ]
+ (Ok (asset_loader "script.js")) );
+
+ S.add_route_handler ~meth:`GET server
+ S.Route.(exact "style.css" @/ return)
+ (fun _req ->
+ S.Response.make_string
+ ~headers:[ ("Content-Type", "text/css") ]
+ (Ok (asset_loader "style.css")) );
+
+ Printf.printf "listening on http://%s:%d\n%!" (S.addr server) (S.port server);
+ ignore @@ Sys.command "xdg-open http://localhost:8000";
+ ignore (match S.run server with Ok () -> () | Error e -> raise e)
diff --git a/examples/main.ml b/examples/script.ml
similarity index 74%
rename from examples/main.ml
rename to examples/script.ml
index 10ce5ce..ec41b4f 100644
--- a/examples/main.ml
+++ b/examples/script.ml
@@ -3,13 +3,13 @@
open Brr
open Gadgetobrr
-let append_el_to_main el =
- let main =
- match El.find_first_by_selector (Jstr.v "main") with
- | Some main -> main
- | None -> failwith "append_el_to_main: main element not found"
+let append_el_to_body el =
+ let body =
+ match El.find_first_by_selector (Jstr.v "body") with
+ | Some body -> body
+ | None -> failwith "append_el_to_body: body element not found"
in
- El.append_children main [ el ];
+ El.append_children body [ el ];
()
let () =
@@ -23,8 +23,8 @@ let () =
in
add_input_listener text (fun s -> Printf.printf "text value: %s\n" s);
mk_dragable text;
- append_el_to_main (el text);
- append_el_to_main datalist.datalist_el;
+ append_el_to_body (el text);
+ append_el_to_body datalist.datalist_el;
let datalist =
mk_datalist
@@ -38,8 +38,8 @@ let () =
in
add_input_listener slider (fun x -> Printf.printf "slider value: %f\n" x);
mk_dragable slider;
- append_el_to_main (el slider);
- append_el_to_main datalist.datalist_el;
+ append_el_to_body (el slider);
+ append_el_to_body datalist.datalist_el;
let color =
mk_color ~value:"#00ff00" ~id:"my-color"
@@ -47,12 +47,12 @@ let () =
in
add_input_listener color (fun s -> Printf.printf "color value: %s\n" s);
mk_dragable color;
- append_el_to_main (el color);
+ append_el_to_body (el color);
let brridget_grid : El.t =
El.div ~d:G.document
~at:[ At.class' (Jstr.v "brridget-grid") ]
[ el text; el slider; el color ]
in
- append_el_to_main brridget_grid;
+ append_el_to_body brridget_grid;
()