Dynamic heading element

This commit is contained in:
Florian Schroedl
2022-05-04 17:00:00 +02:00
parent e9718da7a1
commit b42a664128
2 changed files with 13 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ from react_globals import React
when not defined(js):
{.error: "React.nim is only available for the JS target".}
type NodeOrString = ReactNode or seq[ReactNode] or cstring or string
type NodeOrString* = ReactNode or seq[ReactNode] or cstring or string
macro idString(x: untyped): auto = newStrLitNode($x)

View File

@@ -46,11 +46,22 @@ proc toMarkUp(x: OrgInlineBlock): ReactNode =
of orgLink: a(Attrs{href: x.linkUrl}, x.linkDescription.getOrElse(x.linkUrl))
else: p(Attrs{}, "Unmatched")
proc intToHeading(x: int, a: Attrs, m1 : NodeOrString): auto =
let heading = case x:
of 0: "h1"
of 1: "h2"
of 2: "h3"
of 3: "h4"
of 4: "h5"
of 5: "h6"
else: "h1"
React.createElement(heading, a, m1)
proc makeItems(x: string): seq[ReactNode] =
makeOrg(x)
.fold(
(err) => @[`div`(Attrs{}, &"Errors: {err}")],
(xs: OrgBuilder) => xs.tree.map((x: OrgBlock) => h1(Attrs{}, x.headlineContent.map(x => toMarkUp(x)))),
(xs: OrgBuilder) => xs.tree.map((x: OrgBlock) => intToHeading(x.level, Attrs{}, x.headlineContent.map(x => toMarkUp(x)))),
)
proc makeTopLevel(): ReactNode {.exportc.} =