www_veda2/web/components/carousel/play.v
2024-10-07 17:28:39 +02:00

60 lines
1.5 KiB
V

module carousel
import freeflowuniverse.crystallib.core.playbook {PlayBook}
@[params]
pub struct PlayParams{
pub mut:
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 play(mut plbook PlayBook, params PlayParams) !map[string]Carousel{
mut result:=map[string]Carousel{}
if plbook.actions.len == 0 && params.defaults {
plbook = playbook.new(text: example_heroscript)!
}
actions0 := plbook.find(filter: 'intro1.new')!
for action0 in actions0{
mut p0 := action0.params
name := p0.get_default('name','default')!
key:="intro1.${name}"
carousel := play_carousel(mut plbook, name)!
println('carousel ${name}\n${carousel}')
result[key]=carousel
}
return result
}
pub fn play_carousel(mut plbook PlayBook, name string) !Carousel {
mut carousel := Carousel{}
// 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","<br>")
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')!
}
}
carousel.items << item
}
return carousel
}