minor reorganisation, use indents
parent
a6b41f993a
commit
c11299699f
25
README.md
25
README.md
|
@ -1,6 +1,6 @@
|
|||
<!--suppress HtmlDeprecatedAttribute -->
|
||||
<div align="center">
|
||||
<img src="./img/whisker logo.svg" width="300" alt="whisker logo"/>
|
||||
<img src="./docs/img/whisker logo.svg" width="300" alt="whisker logo"/>
|
||||
|
||||
[vlang.io](https://vlang.io) | [hungrybluedev](https://hungrybluedev.in/)
|
||||
|
||||
|
@ -191,7 +191,8 @@ Input
|
|||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
{{-logged_in}}<li>Log In</li>{{/logged_in}}{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
|
||||
{{-logged_in}}<li>Log In</li>{{/logged_in}}
|
||||
{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
@ -209,6 +210,7 @@ Output 1
|
|||
<li>Home</li>
|
||||
<li>About</li>
|
||||
<li>Log In</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
@ -228,6 +230,7 @@ Output 2
|
|||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
|
||||
<li>Account: whisker</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
@ -253,15 +256,15 @@ Partial: item
|
|||
Data
|
||||
----
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"name": "Banana",
|
||||
"description": "Rich in potassium and naturally sweet."
|
||||
},
|
||||
{
|
||||
"name": "Orange",
|
||||
"description": "High in Vitamin C and very refreshing."
|
||||
}
|
||||
"items": [
|
||||
{
|
||||
"name": "Banana",
|
||||
"description": "Rich in potassium and naturally sweet."
|
||||
},
|
||||
{
|
||||
"name": "Orange",
|
||||
"description": "High in Vitamin C and very refreshing."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -10,9 +10,11 @@ fn test_simple_json_api() {
|
|||
// 1. Delimiter swap to [ and ]
|
||||
// 2. Raw tag usage using & prefix
|
||||
// 3. If the data is a string, pass in the quotes too.
|
||||
input := '{{=[ ]=}}{
|
||||
"value": [&value]
|
||||
}'
|
||||
input := '
|
||||
{{=[ ]=}}
|
||||
{
|
||||
"value": [&value]
|
||||
}'.trim_indent()
|
||||
test_data := [
|
||||
DataModel({
|
||||
'value': DataModel('42')
|
||||
|
@ -28,18 +30,22 @@ fn test_simple_json_api() {
|
|||
}),
|
||||
]
|
||||
expected_values := [
|
||||
'{
|
||||
"value": 42
|
||||
}',
|
||||
'{
|
||||
"value": -147
|
||||
}',
|
||||
'{
|
||||
"value": 0
|
||||
}',
|
||||
'{
|
||||
"value": "Valid string value"
|
||||
}',
|
||||
'
|
||||
{
|
||||
"value": 42
|
||||
}'.trim_indent(),
|
||||
'
|
||||
{
|
||||
"value": -147
|
||||
}'.trim_indent(),
|
||||
'
|
||||
{
|
||||
"value": 0
|
||||
}'.trim_indent(),
|
||||
'
|
||||
{
|
||||
"value": "Valid string value"
|
||||
}'.trim_indent(),
|
||||
]
|
||||
json_template := template.from_strings(input: input)!
|
||||
for index, data in test_data {
|
||||
|
|
|
@ -28,43 +28,45 @@ fn test_double_curly_braces_indicate_sections() {
|
|||
)!
|
||||
|
||||
data := datamodel.from_json('{
|
||||
"name": "world"
|
||||
}')!
|
||||
"name": "world"
|
||||
}')!
|
||||
|
||||
assert simple_template.run(data)! == 'Hello, world!'
|
||||
}
|
||||
|
||||
fn test_changing_delimiters() {
|
||||
input := "{{=[ ]=}}
|
||||
module main
|
||||
input := "
|
||||
{{=[ ]=}}
|
||||
module main
|
||||
|
||||
fn main() {
|
||||
println('[greeting]')
|
||||
}"
|
||||
fn main() {
|
||||
println('[greeting]')
|
||||
}".trim_indent()
|
||||
|
||||
data := datamodel.from_json('{
|
||||
"greeting": "Have a nice day!"
|
||||
}')!
|
||||
"greeting": "Have a nice day!"
|
||||
}')!
|
||||
|
||||
delimiter_template := template.from_strings(input: input)!
|
||||
assert delimiter_template.run(data)!.trim_space() == "
|
||||
module main
|
||||
module main
|
||||
|
||||
fn main() {
|
||||
println('Have a nice day!')
|
||||
}".trim_space()
|
||||
fn main() {
|
||||
println('Have a nice day!')
|
||||
}".trim_indent()
|
||||
}
|
||||
|
||||
fn test_boolean_positive_negative_sections() {
|
||||
input := '
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
{{-logged_in}}<li>Log In</li>{{/logged_in}}{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
|
||||
</ul>
|
||||
</nav>
|
||||
'
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
{{-logged_in}}<li>Log In</li>{{/logged_in}}
|
||||
{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
|
||||
</ul>
|
||||
</nav>
|
||||
'.trim_indent()
|
||||
data_list := [
|
||||
datamodel.from_json('{
|
||||
"logged_in": false,
|
||||
|
@ -79,23 +81,25 @@ fn test_boolean_positive_negative_sections() {
|
|||
|
||||
outputs := [
|
||||
'
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
<li>Log In</li>
|
||||
</ul>
|
||||
</nav>
|
||||
',
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
<li>Log In</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
'.trim_indent(),
|
||||
'
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
<li>Account: whisker</li>
|
||||
</ul>
|
||||
</nav>
|
||||
',
|
||||
<nav>
|
||||
<ul>
|
||||
<li>Home</li>
|
||||
<li>About</li>
|
||||
|
||||
<li>Account: whisker</li>
|
||||
</ul>
|
||||
</nav>
|
||||
'.trim_indent(),
|
||||
]
|
||||
|
||||
section_template := template.from_strings(input: input)!
|
||||
|
@ -107,36 +111,34 @@ fn test_boolean_positive_negative_sections() {
|
|||
|
||||
fn test_maps_lists_partials() {
|
||||
input := '
|
||||
<ol>
|
||||
{{*items}}
|
||||
{{>item}}
|
||||
{{/items}}
|
||||
</ol>
|
||||
'
|
||||
<ol>
|
||||
{{*items}}
|
||||
{{>item}}
|
||||
{{/items}}
|
||||
</ol>'.trim_indent()
|
||||
partials := {
|
||||
'item': '<li>{{name}}: {{description}}</li>
|
||||
'
|
||||
'item': '<li>{{name}}: {{description}}</li>\n'
|
||||
}
|
||||
|
||||
data := datamodel.from_json('{
|
||||
"items": [
|
||||
{
|
||||
"name": "Banana",
|
||||
"description": "Rich in potassium and naturally sweet."
|
||||
},
|
||||
{
|
||||
"name": "Orange",
|
||||
"description": "High in Vitamin C and very refreshing."
|
||||
}
|
||||
]
|
||||
}')!
|
||||
"items": [
|
||||
{
|
||||
"name": "Banana",
|
||||
"description": "Rich in potassium and naturally sweet."
|
||||
},
|
||||
{
|
||||
"name": "Orange",
|
||||
"description": "High in Vitamin C and very refreshing."
|
||||
}
|
||||
]
|
||||
}')!
|
||||
|
||||
advanced_template := template.from_strings(input: input, partials: partials)!
|
||||
|
||||
assert advanced_template.run(data)! == '
|
||||
<ol>
|
||||
<li>Banana: Rich in potassium and naturally sweet.</li>
|
||||
<li>Orange: High in Vitamin C and very refreshing.</li>
|
||||
</ol>
|
||||
'
|
||||
<ol>
|
||||
<li>Banana: Rich in potassium and naturally sweet.</li>
|
||||
<li>Orange: High in Vitamin C and very refreshing.</li>
|
||||
</ol>
|
||||
'.trim_indent()
|
||||
}
|
||||
|
|
|
@ -33,6 +33,8 @@ fn main() {
|
|||
validate_path('input', input)
|
||||
|
||||
partial_map := extract_partials(partials)
|
||||
|
||||
validate_path('data', data)
|
||||
clean_data := datamodel.from_json(os.read_file(data) or { '{}' }) or {
|
||||
eprintln('Could not obtain the data for the template from ${data}')
|
||||
exit(1)
|
||||
|
@ -71,7 +73,7 @@ fn validate_path(name string, path string) {
|
|||
exit(1)
|
||||
}
|
||||
if !os.exists(path) {
|
||||
eprint('Invalid path: ${path} does not exist.')
|
||||
eprintln('Invalid path: ${path} does not exist.')
|
||||
exit(1)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue