« get me outta code hell

mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/ui.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui.js')
-rw-r--r--ui.js33
1 files changed, 18 insertions, 15 deletions
diff --git a/ui.js b/ui.js
index 73a9732..2c74f8e 100644
--- a/ui.js
+++ b/ui.js
@@ -711,12 +711,11 @@ class GrouplikeListingElement extends Form {
     this.jumpElement = new ListingJumpElement()
     this.addInput(this.jumpElement)
     this.jumpElement.visible = false
+    this.oldFocusedIndex = null // To restore to, if a jump is canceled.
 
-    this.jumpElement.on('cancel', () => {
-      this.hideJumpElement()
-    })
-
-    this.jumpElement.on('value', value => this.handleJumpValue(value))
+    this.jumpElement.on('cancel', () => this.hideJumpElement(true))
+    this.jumpElement.on('change', value => this.handleJumpValue(value, false))
+    this.jumpElement.on('confirm', value => this.handleJumpValue(value, true))
 
     this.pathElement = new PathElement()
     this.addInput(this.pathElement)
@@ -770,6 +769,7 @@ class GrouplikeListingElement extends Form {
   loadGrouplike(grouplike, resetIndex = true) {
     this.grouplike = grouplike
     this.buildItems(resetIndex)
+    if (this.root.select) this.hideJumpElement()
   }
 
   buildItems(resetIndex = false) {
@@ -855,7 +855,7 @@ class GrouplikeListingElement extends Form {
     this.form.selectAndShow(item)
   }
 
-  handleJumpValue(value) {
+  handleJumpValue(value, isConfirm) {
     // Don't perform the search if the user didn't enter anything.
     if (value.length) {
       const lower = value.toLowerCase()
@@ -874,16 +874,23 @@ class GrouplikeListingElement extends Form {
       }
     }
 
-    this.hideJumpElement()
+    if (isConfirm) {
+      this.hideJumpElement()
+    }
   }
 
   showJumpElement() {
+    this.oldFocusedIndex = this.form.curIndex
     this.jumpElement.visible = true
     this.root.select(this.jumpElement)
     this.fixLayout()
   }
 
-  hideJumpElement() {
+  hideJumpElement(isCancel) {
+    if (isCancel) {
+      this.form.curIndex = this.oldFocusedIndex
+      this.form.scrollSelectedElementIntoView()
+    }
     this.jumpElement.visible = false
     this.root.select(this)
     this.fixLayout()
@@ -1068,13 +1075,9 @@ class ListingJumpElement extends Form {
     this.input = new TextInput()
     this.addInput(this.input)
 
-    this.input.on('value', value => {
-      this.emit('value', value)
-    })
-
-    this.input.on('cancel', () => {
-      this.emit('cancel')
-    })
+    this.input.on('confirm', value => this.emit('confirm', value))
+    this.input.on('change', value => this.emit('change', value))
+    this.input.on('cancel', () => this.emit('cancel'))
   }
 
   selected() {