package html_of_jsx
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page
Render HTML with JSX
Install
dune-project
Dependency
Authors
Maintainers
Sources
html_of_jsx-0.1.1.tbz
sha256=2de32525b5f38b4765c1bbfeba35fcfcc6d26b66a244374e86e109129bb729a6
sha512=a5a27d16aed5c3f8fcacd72578ad63c63cd33276356883fcf282709a56b574a92d35d1af2ae18a61491a28a86b89f4571d8596e000ae4e06201758eb3d8892e5
doc/dream.html
Integrate with Dream
Use html_of_jsx to render pages and fragments in a Dream web server.
Dune setup
(executable
(name server)
(libraries dream html_of_jsx)
(preprocess (pps html_of_jsx.ppx)))Rendering a page
Use JSX.render to produce an HTML string and return it with Dream.html:
let page = (~title, ~children, ()) => {
<html lang="en">
<head> <title> {JSX.string(title)} </title> </head>
<body> {children} </body>
</html>;
};
let () =
Dream.run
@@ Dream.router([
Dream.get("/", _req =>
Dream.html(JSX.render(
<page title="Home">
<h1> {JSX.string("Welcome")} </h1>
</page>
))
),
]);let page ~title ~children () =
<html lang="en">
<head><title>(JSX.string title)</title></head>
<body>
(children)</body>
</html>
let () =
Dream.run
@@ Dream.router [
Dream.get "/" (fun _req ->
Dream.html (JSX.render (
<page title="Home">
<h1>(JSX.string "Welcome")</h1>
</page>
))
);
]Streaming
For large pages, stream HTML chunks directly into the response body with JSX.render_streaming:
Dream.get("/stream", _req =>
Dream.stream(~headers=[("Content-Type", "text/html")], stream => {
JSX.render_streaming(
chunk => ignore(Dream.write(stream, chunk)),
<page title="Streamed">
<p> {JSX.string("This page is streamed")} </p>
</page>,
);
Dream.close(stream);
})
)Dream.get "/stream" (fun _req ->
Dream.stream
~headers:[("Content-Type", "text/html")]
(fun stream -> begin
JSX.render_streaming
(fun chunk -> ignore (Dream.write stream chunk))
(<page title="Streamed">
<p>(JSX.string "This page is streamed")</p>
</page>);
Dream.close stream
end))
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page