basic example with tiny_httpd

This commit is contained in:
Swrup 2025-02-06 01:28:39 +01:00
parent 619be59031
commit a67ff6acab
6 changed files with 72 additions and 28 deletions

View file

@ -30,9 +30,11 @@
(tags (tags
(leaflet javascript bindings interactive map openstreetmap)) (leaflet javascript bindings interactive map openstreetmap))
(depends (depends
(ocaml
(>= 4.08))
brr brr
js_of_ocaml js_of_ocaml
dune-site dune-site
(ocaml (tiny_httpd :with-test)
(>= 4.08))) )
(sites (share css) (share images))) (sites (share css) (share images)))

View file

@ -1,14 +0,0 @@
(* get leaflet.css path from dune-site *)
let dune_site = List.filter Sys.file_exists Mysites.Sites.css
let lookup_file filename =
List.find_map
(fun dir ->
let filename' = Filename.concat dir filename in
if Sys.file_exists filename' then Some filename' else None )
dune_site
let leaflet_css = lookup_file "leaflet.css" |> Option.get
let () = Format.printf "%s@." leaflet_css

View file

@ -1,14 +1,25 @@
(executable
(name css_path)
(modules css_path mysites)
(libraries dune-site))
(generate_sites_module
(module mysites)
(sites leaflet))
(executable (executable
(name script) (name script)
(modules script) (modules script)
(libraries brr leaflet) (libraries brr leaflet)
(modes js)) (modes js))
(executable
(name server)
(modules content server css_path mysites)
(libraries dune-site tiny_httpd))
(generate_sites_module
(module mysites)
(sites leaflet))
(rule
(with-stdout-to
content.ml
(progn
(echo "let index_html = {|")
(cat index.html)
(echo "|}")
(echo "let script_js = {|")
(cat script.bc.js)
(echo "|}"))))

View file

@ -4,12 +4,12 @@
<!-- dune-site should have installed leaflet.css <!-- dune-site should have installed leaflet.css
you can use css_path.ml to get it's path --> you can use css_path.ml to get it's path -->
<link href="leaflet.css" rel="stylesheet"> <link href="leaflet.css" rel="stylesheet">
<script type="text/javascript" src="script.bc.js" defer="defer"></script> <script type="text/javascript" src="script.js" defer="defer"></script>
</head> </head>
<body> <body>
<main> <main>
<!-- don't forget to set a size! --> <!-- don't forget to set a size! -->
<div id="map" style="height: 100%"></div> <div id="map" style="height: 700px; width: 700px"></div>
</main> </main>
</body> </body>
</html> </html>

44
example/server.ml Normal file
View file

@ -0,0 +1,44 @@
let read_file file = In_channel.with_open_bin file In_channel.input_all
let leaflet_css =
(* get leaflet.css path from dune-site *)
let dune_site = List.filter Sys.file_exists Mysites.Sites.css in
let lookup_file filename =
List.find_map
(fun dir ->
let filename' = Filename.concat dir filename in
if Sys.file_exists filename' then Some filename' else None )
dune_site
in
let path =
match lookup_file "leaflet.css" with
| None ->
Printf.eprintf
"File 'leaflet.css' not found.\n\
It should have been installed with dune-site.\n\
Did you run `dune build @install`?\n";
exit 1
| Some o -> o
in
read_file path
let script_js = Content.script_js
let index_html = Content.index_html
module S = Tiny_httpd
let () =
let server = S.create () in
S.add_route_handler server
S.Route.(exact "leaflet.css" @/ return)
(fun _req -> S.Response.make_string (Ok leaflet_css));
S.add_route_handler server
S.Route.(exact "script.js" @/ return)
(fun _req -> S.Response.make_string (Ok script_js));
S.add_route_handler server
S.Route.(return)
(fun _req -> S.Response.make_string (Ok index_html));
Printf.printf "listening on http://%s:%d/\n%!" (S.addr server) (S.port server);
match S.run server with Ok () -> () | Error e -> raise e

View file

@ -16,10 +16,11 @@ doc: "TODO/leaflet"
bug-reports: "https://git.zapashcanon.fr/swrup/leaflet/issues" bug-reports: "https://git.zapashcanon.fr/swrup/leaflet/issues"
depends: [ depends: [
"dune" {>= "2.9"} "dune" {>= "2.9"}
"ocaml" {>= "4.08"}
"brr" "brr"
"js_of_ocaml" "js_of_ocaml"
"dune-site" "dune-site"
"ocaml" {>= "4.08"} "tiny_httpd" {with-test}
"odoc" {with-doc} "odoc" {with-doc}
] ]
build: [ build: [