diff options
Diffstat (limited to 'go/ui/textInput_wasm.go')
| -rw-r--r-- | go/ui/textInput_wasm.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/go/ui/textInput_wasm.go b/go/ui/textInput_wasm.go new file mode 100644 index 00000000..0ced3ac4 --- /dev/null +++ b/go/ui/textInput_wasm.go @@ -0,0 +1,49 @@ +package ui + +import ( + "log" + "syscall/js" + "unicode/utf8" +) + +// rmueller's version from: +// ://stackoverflow.com/questions/1752414/how-to-reverse-a-string-in-go?page=1&tab=scoredesc#tab-top +func reverseString(s string) string { + size := len(s) + buf := make([]byte, size) + for start := 0; start < size; { + r, n := utf8.DecodeRuneInString(s[start:]) + start += n + utf8.EncodeRune(buf[size-start:], r) + } + return string(buf) +} + +func (ti *TextInput) Focus(focus bool) { + ti.focused = focus + log.Printf("%v set focus: %v\n", ti, focus) + if focus { + d := js.Global().Get("document") + i := d.Call("getElementById", "hiddenInput") + // i.Call("focus", map[string]any{"preventScroll": true, "focusVisible": false}) + i.Call("focus") + log.Println("open keyboard") + + log.Printf("set hidden input value to %s", ti.Text()) + // i.Set("value", ti.Text()) + i.Set("value", reverseString(ti.Text())) + } +} + +func (ti *TextInput) Update() error { + if ti.focused { + d := js.Global().Get("document") + i := d.Call("getElementById", "hiddenInput") + // t := i.Get("value").String() + t := reverseString(i.Get("value").String()) + ti.SetInput(t) + } + return nil +} + +func (*TextInput) IsUpdatable() bool { return true } |
