diff --git a/customelementconstructor.go b/customelementconstructor.go index c47c14f..8b0b5fc 100644 --- a/customelementconstructor.go +++ b/customelementconstructor.go @@ -4,7 +4,7 @@ package dom import "syscall/js" -type CustomElementConstructorCallback func() Value +type CustomElementConstructorCallback func() type CustomElementConstructor struct { Callback } diff --git a/eventhandler.go b/eventhandler.go index 36c2c80..94db09d 100644 --- a/eventhandler.go +++ b/eventhandler.go @@ -9,3 +9,6 @@ type EventHandler EventHandlerNonNull func JSValueToEventHandler(val js.Value) EventHandler { return EventHandler(JSValueToEventHandlerNonNull(val)) } +func NewEventHandler(c EventHandlerNonNullCallback) EventHandler { + return EventHandler(NewEventHandlerNonNull(c)) +} diff --git a/eventhandlernonnull.go b/eventhandlernonnull.go index 04d8832..284ac58 100644 --- a/eventhandlernonnull.go +++ b/eventhandlernonnull.go @@ -4,7 +4,7 @@ package dom import "syscall/js" -type EventHandlerNonNullCallback func(event Event) Value +type EventHandlerNonNullCallback func(event Event) type EventHandlerNonNull struct { Callback } diff --git a/generate/generator.go b/generate/generator.go index 68d84b1..c339552 100644 --- a/generate/generator.go +++ b/generate/generator.go @@ -307,7 +307,7 @@ func (g *Generator) generateCallback(spec Spec) (err error) { args += fmt.Sprintf("%s %s", a.Name, t) params += a.Name } - b.WriteF("type %sCallback func(%s) %s", spec.Name, args, convertIDLType(spec.IDLType)) + b.WriteF("type %sCallback func(%s)", spec.Name, args) b.WriteF("type %s struct {", spec.Name) b.WriteString("Callback") @@ -378,6 +378,13 @@ func (g *Generator) generateTypedef(spec Spec) (err error) { } b.WriteString("}") + p, ok := g.specs[t] + if ok && p.Type == "callback" { + b.WriteF("func New%s(c %sCallback) %s {", spec.Name, p.Name, spec.Name) + b.WriteF("return %s(New%s(c))", spec.Name, p.Name) + b.WriteString("}") + } + return g.writeFile(spec, b) } diff --git a/onbeforeunloadeventhandler.go b/onbeforeunloadeventhandler.go index 229e65d..7f5611e 100644 --- a/onbeforeunloadeventhandler.go +++ b/onbeforeunloadeventhandler.go @@ -9,3 +9,6 @@ type OnBeforeUnloadEventHandler OnBeforeUnloadEventHandlerNonNull func JSValueToOnBeforeUnloadEventHandler(val js.Value) OnBeforeUnloadEventHandler { return OnBeforeUnloadEventHandler(JSValueToOnBeforeUnloadEventHandlerNonNull(val)) } +func NewOnBeforeUnloadEventHandler(c OnBeforeUnloadEventHandlerNonNullCallback) OnBeforeUnloadEventHandler { + return OnBeforeUnloadEventHandler(NewOnBeforeUnloadEventHandlerNonNull(c)) +} diff --git a/onbeforeunloadeventhandlernonnull.go b/onbeforeunloadeventhandlernonnull.go index 52ceca3..f268e6a 100644 --- a/onbeforeunloadeventhandlernonnull.go +++ b/onbeforeunloadeventhandlernonnull.go @@ -4,7 +4,7 @@ package dom import "syscall/js" -type OnBeforeUnloadEventHandlerNonNullCallback func(event Event) string +type OnBeforeUnloadEventHandlerNonNullCallback func(event Event) type OnBeforeUnloadEventHandlerNonNull struct { Callback } diff --git a/onerroreventhandler.go b/onerroreventhandler.go index 8ca1469..9caec81 100644 --- a/onerroreventhandler.go +++ b/onerroreventhandler.go @@ -9,3 +9,6 @@ type OnErrorEventHandler OnErrorEventHandlerNonNull func JSValueToOnErrorEventHandler(val js.Value) OnErrorEventHandler { return OnErrorEventHandler(JSValueToOnErrorEventHandlerNonNull(val)) } +func NewOnErrorEventHandler(c OnErrorEventHandlerNonNullCallback) OnErrorEventHandler { + return OnErrorEventHandler(NewOnErrorEventHandlerNonNull(c)) +} diff --git a/onerroreventhandlernonnull.go b/onerroreventhandlernonnull.go index 010229e..38a1a8e 100644 --- a/onerroreventhandlernonnull.go +++ b/onerroreventhandlernonnull.go @@ -4,7 +4,7 @@ package dom import "syscall/js" -type OnErrorEventHandlerNonNullCallback func(event Value, source string, lineno int, colno int, error Value) Value +type OnErrorEventHandlerNonNullCallback func(event Value, source string, lineno int, colno int, error Value) type OnErrorEventHandlerNonNull struct { Callback }