With HappyX you can create single-page applications. Most often components are used for this purpose.
And HappyX components is really powerful.
Declaration 🍍
Components declaration is very easy, ex:
component MyComponent:
`template`:
"Hello, world!"
In this example we declare component named MyComponent.
Body 👨🔬
Component body consists of:
-
`template`- HTML -
`script`- code that calls every rerender -
`style`- isolated CSS (works with current component) -
[methods]- methods that can be called. - fields - private/public fields
-
constructors- component constructors
Any part of the component is optional.
As JS/CSS:
HappyX provides DSL (Domain-specific language) for HTML, CSS and JS.
Components can use all of these DSLs.
-
`template`uses HTML DSL; -
`script` as jsuses JS DSL; -
`style` as cssuses CSS DSL.
`template`, `script`, `style`
These statements is main in component body.
component A:
`template`:
# Here is HTML
tDiv(id = "..", class = "....", style = "....."):
"Hello, world!"
`script`:
echo "Hello from A"
# To enable syntax highlight
# use official HappyX extension
# for visual studio code
`style`: """
div {
...
}
"""
Fields
Component fields may be private or public.
component MyComponent:
privateField: int
privateFieldWithDefaultValue: string = ""
*publicField: float
*publicFieldWithDefaultValue: seq[int] = @[1, 2, 3]
Methods
Component methods is automatically got self param
component MyComponent:
left: int = 0
right: int = 0
[methods]:
proc sum(): int =
self.left + self.right
Constructors
By default you can use component and send some params to it.
component A:
a: int = 0
b: string = "asd"
...
appRoutes "app":
"/":
# Default constructor usage
component A()
component A(a = 100)
component A(b = "hello")
component A(a = 1, b = "sss")
Constructors expand component usage:
component A:
a: int = 0
b: string = "asd"
# Constructor
constructor(a: int):
self.a = a*a*a
...
appRoutes "app":
"/":
# Constructor usage
component A->constructor(10)
Top comments (0)