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; ()