module intro
import freeflowuniverse.crystallib.core.playbook
pub struct Item {
pub mut:
title string
subtitle string
description string
background_image string
button_primary Button
button_secondary Button
}
pub struct Button {
pub mut:
text string
url string
}
pub struct Data {
pub mut:
items []Item
}
const example_heroscript="
!!intro1.new name:'myintro'
!!intro1.myintro_add
title: 'Sepia'
description: '
Made for photographers, photo studios, design agencies.
Create your own unique and beautiful photography website!
'
subtitle: 'Photography Portfolio Theme'
background_image: 'assets/img/intro/intro-10.jpg'
button_primary_text: 'Buy It Now!'
button_primary_url: 'https://example.com/learn-more'
button_secondary_text: 'Discover More'
button_secondary_url: 'albums-grid-fluid-2.html'
!!intro1.myintro_add
title: 'Sepia 2'
description: 'Made for photographers 2, photo studios, design agencies.
Create your own unique and beautiful photography website!'
subtitle: 'Photography Portfolio Theme'
background_image: 'assets/img/intro/intro-10.jpg'
button_primary_text: 'Buy It Now!'
button_primary_url: 'https://example.com/learn-more'
button_secondary_text: 'Discover More'
button_secondary_url: 'albums-grid-fluid-2.html'
"
@[params]
pub struct RenderArgs{
pub mut:
text string
args map[string]string
defaults bool
}
//will have all the results, key is in this case intro1.${name}
//this allows us to feed e.g. markdown to all renderers and then we get the data filled in what is found on page
pub fn render(args_ RenderArgs) !map[string]string{
mut args:=args_
mut result:=map[string]string{}
if args.text =="" && args.defaults{
args.text = example_heroscript
}
mut plbook := playbook.new(text: args.text)!
mut data := Data{}
actions0 := plbook.find(filter: 'intro1.new')!
for action0 in actions0{
mut p0 := action0.params
name := p0.get_default('name','default')!
key:="intro1.${name}"
// Process add_item actions
actions := plbook.find(filter: 'intro1.${name}_add')!
for action in actions {
mut p := action.params
item := Item{
title: p.get('title')!
subtitle: p.get('subtitle')!
description: p.get('description')!.replace("\n","
")
background_image: p.get('background_image')!
button_primary: Button{
text: p.get('button_primary_text')!
url: p.get('button_primary_url')!
}
button_secondary: Button{
text: p.get('button_secondary_text')!
url: p.get('button_secondary_url')!
}
}
data.items << item
}
result[key]=$tmpl("templates/main.html")
}
return result
}