diff --git a/actiontrigger.go b/actiontrigger.go new file mode 100644 index 0000000..2c9e1b2 --- /dev/null +++ b/actiontrigger.go @@ -0,0 +1,18 @@ +package via + +import ( + "fmt" + + "github.com/go-via/via/h" +) + +// actionTrigger represents a trigger to an event handler fn +type actionTrigger struct { + id string +} + +// OnClick returns a via.h DOM node that triggers on click. It can be added +// to other nodes in a view. +func (a *actionTrigger) OnClick() h.H { + return h.Data("on:click", fmt.Sprintf("@get('/_action/%s')", a.id)) +} diff --git a/internal/examples/counter/main.go b/internal/examples/counter/main.go index e225511..a964b4b 100644 --- a/internal/examples/counter/main.go +++ b/internal/examples/counter/main.go @@ -15,20 +15,11 @@ func main() { s := CounterState{Count: 0} step := c.Signal(1) - greeting := c.Signal("Hello...") increment := c.Action(func() { s.Count += step.Int() c.Sync() }) - greetBob := c.Action(func() { - greeting.SetValue("Hello Bob!") - c.SyncSignals() - }) - greetAlice := c.Action(func() { - greeting.SetValue("Hello Alice!") - c.SyncSignals() - }) c.View(func() h.H { return h.Div( @@ -39,10 +30,6 @@ func main() { h.Input(h.Type("number"), step.Bind()), ), h.Button(h.Text("Increment"), increment.OnClick()), - - h.P(h.Span(h.Text("Greeting: ")), h.Span(greeting.Text())), - h.Button(h.Text("Greet Alice"), greetBob.OnClick()), - h.Button(h.Text("Greet Alice"), greetAlice.OnClick()), ) }) }) diff --git a/internal/examples/greeter/main.go b/internal/examples/greeter/main.go new file mode 100644 index 0000000..46d31d8 --- /dev/null +++ b/internal/examples/greeter/main.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/go-via/via" + "github.com/go-via/via/h" +) + +func main() { + v := via.New() + + v.Page("/", func(c *via.Context) { + + greeting := c.Signal("Hello...") + + greetBob := c.Action(func() { + greeting.SetValue("Hello Bob!") + c.SyncSignals() + }) + greetAlice := c.Action(func() { + greeting.SetValue("Hello Alice!") + c.SyncSignals() + }) + + c.View(func() h.H { + return h.Div( + h.P(h.Span(h.Text("Greeting: ")), h.Span(greeting.Text())), + h.Button(h.Text("Greet Bob"), greetBob.OnClick()), + h.Button(h.Text("Greet Alice"), greetAlice.OnClick()), + ) + }) + }) + + v.Start(":3000") +}