Current section
Files
Jump to
Current section
Files
src/docs@views@page_view.erl
-module(docs@views@page_view).
-compile([no_auto_import, nowarn_unused_vars]).
-export([page_view/2]).
-export_type([page_view_props/0]).
-type page_view_props() :: {page_view_props,
docs@page_route:page_route(),
list(binary())}.
-spec page_view(sprocket@context:context(), page_view_props()) -> {sprocket@context:context(),
list(sprocket@element:element())}.
page_view(Ctx, Props) ->
{page_view_props, Route, _} = Props,
Pages = begin
_pipe = [{page, <<"Introduction"/utf8>>, introduction},
{page, <<"Components"/utf8>>, components},
{page, <<"Props and Events"/utf8>>, events},
{page, <<"State Management"/utf8>>, state_management},
{page, <<"Effects"/utf8>>, effects},
{page, <<"Hooks"/utf8>>, hooks},
{page, <<"Under the Hood"/utf8>>, under_the_hood},
{page, <<"Misc."/utf8>>, misc}],
_pipe@1 = gleam@list:map(
_pipe,
fun(Page) -> {keyed_item, erlang:element(3, Page), Page} end
),
sprocket@internal@utils@ordered_map:from_list(_pipe@1)
end,
Page_title = begin
_pipe@2 = Pages,
_pipe@3 = sprocket@internal@utils@ordered_map:get(_pipe@2, Route),
_pipe@4 = gleam@result:map(
_pipe@3,
fun(Page@1) ->
<<(erlang:element(2, Page@1))/binary, " - Sprocket"/utf8>>
end
),
gleam@result:unwrap(_pipe@4, <<"Sprocket"/utf8>>)
end,
sprocket@component:render(
Ctx,
[sprocket@html:html(
[sprocket@html@attributes:lang(<<"en"/utf8>>)],
[sprocket@html:head(
[],
[sprocket@html:title(Page_title),
sprocket@html:meta(
[sprocket@html@attributes:charset(
<<"utf-8"/utf8>>
)]
),
sprocket@html:meta(
[sprocket@html@attributes:name(
<<"viewport"/utf8>>
),
sprocket@html@attributes:content(
<<"width=device-width, initial-scale=1"/utf8>>
)]
),
sprocket@html:meta(
[sprocket@html@attributes:name(
<<"description"/utf8>>
),
sprocket@html@attributes:content(
<<"Sprocket is a library for building real-time server components in Gleam."/utf8>>
)]
),
sprocket@html:link(
[sprocket@html@attributes:rel(
<<"stylesheet"/utf8>>
),
sprocket@html@attributes:href(
<<"/app.css"/utf8>>
)]
),
sprocket@html:link(
[sprocket@html@attributes:rel(
<<"stylesheet"/utf8>>
),
sprocket@html@attributes:href(
<<"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css"/utf8>>
),
sprocket@html@attributes:integrity(
<<"sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf/nwasF0nqhPay5w/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w=="/utf8>>
),
sprocket@html@attributes:crossorigin(
<<"anonymous"/utf8>>
),
sprocket@html@attributes:referrerpolicy(
<<"no-referrer"/utf8>>
)]
),
sprocket@html:link(
[sprocket@html@attributes:id(
<<"syntax-theme"/utf8>>
),
sprocket@html@attributes:rel(
<<"stylesheet"/utf8>>
),
sprocket@html@attributes:media(
<<"(prefers-color-scheme: dark)"/utf8>>
),
sprocket@html@attributes:href(
<<"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.8.0/build/styles/atom-one-dark.min.css"/utf8>>
)]
),
sprocket@html:link(
[sprocket@html@attributes:id(
<<"syntax-theme"/utf8>>
),
sprocket@html@attributes:rel(
<<"stylesheet"/utf8>>
),
sprocket@html@attributes:media(
<<"(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"/utf8>>
),
sprocket@html@attributes:href(
<<"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.8.0/build/styles/atom-one-light.min.css"/utf8>>
)]
),
sprocket@html:script(
[sprocket@html@attributes:src(
<<"//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/highlight.min.js"/utf8>>
)],
none
),
sprocket@html:script(
[sprocket@html@attributes:src(
<<"https://gleam.run/javascript/highlightjs-gleam.js"/utf8>>
)],
none
)]
),
sprocket@html:body(
[sprocket@html@attributes:class(
<<"bg-white dark:bg-gray-900 dark:text-white flex flex-col h-screen"/utf8>>
)],
[sprocket@html:'div'(
[],
[sprocket@component:component(
fun docs@components@header:header/2,
{header_props,
[{menu_item,
<<"Github"/utf8>>,
<<"https://github.com/eliknebel/sprocket"/utf8>>}]}
)]
),
sprocket@component:component(
fun docs@components@responsive_drawer:responsive_drawer/2,
{responsive_drawer_props,
sprocket@component:component(
fun docs@components@sidebar:sidebar/2,
{sidebar_props, Pages, Route}
),
sprocket@html:'div'(
[sprocket@html@attributes:class(
<<"prose dark:prose-invert prose-sm md:prose-base container mx-auto p-12"/utf8>>
)],
[case Route of
introduction ->
sprocket@component:component(
fun docs@components@pages@introduction:introduction_page/2,
introduction_page_props
);
components ->
sprocket@component:component(
fun docs@components@pages@components:components_page/2,
components_page_props
);
events ->
sprocket@component:component(
fun docs@components@pages@props_and_events:props_and_events_page/2,
props_and_events_page_props
);
state_management ->
sprocket@component:component(
fun docs@components@pages@state_management:state_management_page/2,
state_management_page_props
);
effects ->
sprocket@component:component(
fun docs@components@pages@effects:effects_page/2,
effects_page_props
);
hooks ->
sprocket@component:component(
fun docs@components@pages@hooks:hooks_page/2,
hooks_page_props
);
under_the_hood ->
sprocket@component:component(
fun docs@components@pages@under_the_hood:under_the_hood_page/2,
under_the_hood_props
);
misc ->
sprocket@component:component(
fun docs@components@pages@misc:misc_page/2,
misc_page_props
);
unknown ->
sprocket@component:component(
fun docs@components@pages@not_found:not_found_page/2,
not_found_page_props
)
end, sprocket@component:component(
fun docs@components@prev_next_nav:prev_next_nav/2,
{prev_next_nav_props,
Pages,
Route}
)]
)}
)]
)]
)]
).