Skip to content

Commit

Permalink
Remove onblur listener once file should open and remove synchronous open
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnStarich committed Apr 21, 2023
1 parent 93d62a8 commit 6a62b1a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 20 deletions.
12 changes: 9 additions & 3 deletions cmd/editor/dom/element.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,14 +112,20 @@ func (e *Element) QuerySelectorAll(query string) []*Element {
return sliceFromArray(e.elem.Call("querySelectorAll", query))
}

func (e *Element) AddEventListener(name string, listener EventListener) {
e.elem.Call("addEventListener", name, js.FuncOf(func(this js.Value, args []js.Value) interface{} {
func (e *Element) RemoveEventListener(name string, listener js.Func) {
e.elem.Call("removeEventListener", name, listener)
}

func (e *Element) AddEventListener(name string, listener EventListener) js.Func {
listenerFunc := js.FuncOf(func(_ js.Value, args []js.Value) interface{} {
defer common.CatchExceptionHandler(func(err error) {
log.Error("recovered from panic: ", err, "\n", string(debug.Stack()))
})
listener(args[0])
return nil
}))
})
e.elem.Call("addEventListener", name, listenerFunc)
return listenerFunc
}

func (e *Element) Focus() {
Expand Down
31 changes: 14 additions & 17 deletions cmd/editor/ide/window.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,12 @@ func (w *window) makeDefaultEditor(id int, title, contents *dom.Element) Tabber

title.SetInnerHTML(`<input type="text" class="editor-file-picker" placeholder="file_name.go" spellcheck=false />`)
inputElem := title.QuerySelector("input")
dom.QueueMicrotask(func() {
inputElem.Focus() // run focus on next run loop so opening a file immediately doesn't trigger onblur
})
inputElem.Focus()

keydownFn := func(event js.Value) {
blurListener := inputElem.AddEventListener("blur", func(js.Value) {
w.editorsPane.closeTabID(id)
})
title.AddEventListener("keydown", func(event js.Value) {
if event.Get("key").String() != "Enter" {
return
}
Expand All @@ -200,19 +201,15 @@ func (w *window) makeDefaultEditor(id int, title, contents *dom.Element) Tabber
if fileName == "" {
return
}
title.SetInnerText("New file")
err := editor.OpenFile(fileName)
if err != nil {
log.Error(err)
}
w.editorsPane.focusID(id)
}
title.AddEventListener("keydown", keydownFn)
inputElem.AddEventListener("blur", func(event js.Value) {
titleText := title.InnerText()
if titleText != "New file" {
w.editorsPane.closeTabID(id)
}
inputElem.RemoveEventListener("blur", blurListener)
title.SetInnerText("New file") // setting inner text triggers onblur because the input HTML is about to be removed
go func() {
err := editor.OpenFile(fileName)
if err != nil {
log.Error(err)
}
w.editorsPane.focusID(id)
}()
})
return editor
}
Expand Down

0 comments on commit 6a62b1a

Please sign in to comment.