« get me outta code hell

Remove FocusElement.isFocused, add isSelected - tui-lib - Pure Node.js library for making visual command-line programs (ala vim, ncdu)
about summary refs log tree commit diff
path: root/ui/form
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2018-07-04 21:19:19 -0300
committerFlorrie <towerofnix@gmail.com>2018-07-04 21:19:21 -0300
commit4ddc3ece7d713633347f2702c30806b4a2e18ca4 (patch)
tree4177d66568d6138c2208b5b794ee932e403f3ac6 /ui/form
parent1076bd5e65658a0e846a7892cee787ade7660bb2 (diff)
Remove FocusElement.isFocused, add isSelected
FocusElement.isSelected behaves a little bit differently - basically
it's true if the current selected element is that element, OR any of the
ancestors of the current selected element is that element. It's also a
getter, so you can't directly override it (assigning to el.isSelected won't
work).
Diffstat (limited to 'ui/form')
-rw-r--r--ui/form/Button.js2
-rw-r--r--ui/form/FocusBox.js4
-rw-r--r--ui/form/FocusElement.js11
3 files changed, 8 insertions, 9 deletions
diff --git a/ui/form/Button.js b/ui/form/Button.js
index cf7262f..1f1c537 100644
--- a/ui/form/Button.js
+++ b/ui/form/Button.js
@@ -21,7 +21,7 @@ module.exports = class Button extends FocusElement {
   }
 
   drawTo(writable) {
-    if (this.isFocused) {
+    if (this.isSelected) {
       writable.write(ansi.invert())
     }
 
diff --git a/ui/form/FocusBox.js b/ui/form/FocusBox.js
index 51e961b..69b5bf5 100644
--- a/ui/form/FocusBox.js
+++ b/ui/form/FocusBox.js
@@ -19,13 +19,13 @@ module.exports = class FocusBox extends FocusElement {
   }
 
   drawTo(writable) {
-    if (this.isFocused) {
+    if (this.isSelected) {
       writable.write(ansi.invert())
     }
   }
 
   didRenderTo(writable) {
-    if (this.isFocused) {
+    if (this.isSelected) {
       writable.write(ansi.resetAttributes())
     }
   }
diff --git a/ui/form/FocusElement.js b/ui/form/FocusElement.js
index 79a8afc..9061838 100644
--- a/ui/form/FocusElement.js
+++ b/ui/form/FocusElement.js
@@ -9,20 +9,14 @@ module.exports = class FocusElement extends DisplayElement {
     this.cursorVisible = false
     this.cursorX = 0
     this.cursorY = 0
-
-    this.isFocused = false
   }
 
   focused() {
     // Should be overridden in subclasses.
-
-    this.isFocused = true
   }
 
   unfocused() {
     // Should be overridden in subclasses.
-
-    this.isFocused = false
   }
 
   get selectable() {
@@ -41,6 +35,11 @@ module.exports = class FocusElement extends DisplayElement {
     // http://stackoverflow.com/a/11432632/4633828
   }
 
+  get isSelected() {
+    const selected = this.root.selected
+    return selected && [selected, ...selected.directAncestors].includes(this)
+  }
+
   get absCursorX() { return this.absX + this.cursorX }
   get absCursorY() { return this.absY + this.cursorY }
 }