Current section
Files
Jump to
Current section
Files
src/docs/views/page_view.gleam
import sprocket/socket.{Socket}
import sprocket/component.{component, render}
import sprocket/html.{body, div, head, html, link, meta}
import sprocket/html/attribute.{
charset, class, content, crossorigin, href, integrity, lang, name,
referrerpolicy, rel,
}
import docs/components/header.{HeaderProps, MenuItem, header}
import docs/components/responsive_drawer.{
ResponsiveDrawerProps, responsive_drawer,
}
import docs/components/sidebar.{Page, SidebarProps, sidebar}
import docs/components/pages/introduction.{
IntroductionPageProps, introduction_page,
}
import docs/components/pages/components.{ComponentsPageProps, components_page}
import docs/components/pages/misc.{MiscPageProps, misc_page}
import docs/components/pages/not_found.{NotFoundPageProps, not_found_page}
import docs/page_route.{Components, Introduction, Misc, PageRoute, Unknown}
pub type PageViewProps {
PageViewProps(route: PageRoute, path_segments: List(String))
}
pub fn page_view(socket: Socket, props: PageViewProps) {
let PageViewProps(route: route, ..) = props
let pages = [
Page("Introduction", Introduction),
Page("Components", Components),
Page("Misc.", Misc),
]
render(
socket,
[
html(
[lang("en")],
[
head(
[],
[
meta([charset("utf-8")]),
meta([
name("viewport"),
content("width=device-width, initial-scale=1"),
]),
meta([
name("description"),
content(
"Sprocket is a framework for building real-time applications in Gleam.",
),
]),
link([rel("stylesheet"), href("/app.css")]),
link([
rel("stylesheet"),
href(
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css",
),
integrity(
"sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf/nwasF0nqhPay5w/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==",
),
crossorigin("anonymous"),
referrerpolicy("no-referrer"),
]),
],
),
body(
[
class(
"bg-white dark:bg-gray-900 dark:text-white flex flex-col h-screen",
),
],
[
div(
[],
[
component(
header,
HeaderProps(menu_items: [
MenuItem(
"Github",
"https://github.com/eliknebel/sprocket",
),
]),
),
],
),
component(
responsive_drawer,
ResponsiveDrawerProps(
drawer: component(sidebar, SidebarProps(pages, route)),
content: div(
[class("container mx-auto px-6")],
[
case route {
Introduction ->
component(introduction_page, IntroductionPageProps)
Components ->
component(components_page, ComponentsPageProps)
Misc -> component(misc_page, MiscPageProps)
Unknown -> component(not_found_page, NotFoundPageProps)
},
],
),
),
),
],
),
],
),
],
)
}