« get me outta code hell

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/TextInput.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/form/TextInput.js')
-rw-r--r--ui/form/TextInput.js145
1 files changed, 0 insertions, 145 deletions
diff --git a/ui/form/TextInput.js b/ui/form/TextInput.js
deleted file mode 100644
index 78d3b6d..0000000
--- a/ui/form/TextInput.js
+++ /dev/null
@@ -1,145 +0,0 @@
-const ansi = require('../../util/ansi')
-const unic = require('../../util/unichars')
-const telc = require('../../util/telchars')
-
-const FocusElement = require('./FocusElement')
-
-module.exports = class TextInput extends FocusElement {
-  // An element that the user can type in.
-
-  constructor() {
-    super()
-
-    this.value = ''
-    this.cursorVisible = true
-    this.cursorIndex = 0
-    this.scrollChars = 0
-  }
-
-  drawTo(writable) {
-    // There should be room for the cursor so move the "right edge" left a
-    // single character.
-
-    const startRange = this.scrollChars
-    const endRange = this.scrollChars + this.w - 3
-
-    let str = this.value.slice(startRange, endRange)
-
-    writable.write(ansi.moveCursor(this.absTop, this.absLeft + 1))
-    writable.write(str)
-
-    // Ellipsis on left side, if there's more characters behind the visible
-    // area.
-    if (startRange > 0) {
-      writable.write(ansi.moveCursor(this.absTop, this.absLeft))
-      writable.write(unic.ELLIPSIS)
-    }
-
-    // Ellipsis on the right side, if there's more characters ahead of the
-    // visible area.
-    if (endRange < this.value.length) {
-      writable.write(ansi.moveCursor(this.absTop, this.absRight - 1))
-      writable.write(unic.ELLIPSIS.repeat(2))
-    }
-
-    this.cursorX = this.cursorIndex - this.scrollChars + 1
-
-    super.drawTo(writable)
-  }
-
-  keyPressed(keyBuf) {
-    try {
-      if (keyBuf[0] === 127) {
-        this.value = (
-          this.value.slice(0, this.cursorIndex - 1) +
-          this.value.slice(this.cursorIndex)
-        )
-        this.cursorIndex--
-        this.root.cursorMoved()
-        return false
-      } else if (keyBuf[0] === 13) {
-        // These are aliases for each other.
-        this.emit('value', this.value)
-        this.emit('confirm', this.value)
-      } else if (keyBuf[0] === 0x1b && keyBuf[1] === 0x5b) {
-        // Keyboard navigation
-        if (keyBuf[2] === 0x44) {
-          this.cursorIndex--
-          this.root.cursorMoved()
-        } else if (keyBuf[2] === 0x43) {
-          this.cursorIndex++
-          this.root.cursorMoved()
-        }
-        return false
-      } else if (telc.isEscape(keyBuf)) {
-        // ESC is bad and we don't want that in the text input!
-        // Also emit a "cancel" event, which doesn't necessarily do anything,
-        // but can be listened to.
-        this.emit('cancel')
-      } else {
-        const isTextInput = keyBuf.toString().split('').every(chr => {
-          const n = chr.charCodeAt(0)
-          return n > 31 && n < 127
-        })
-
-        if (isTextInput) {
-          this.value = (
-            this.value.slice(0, this.cursorIndex) + keyBuf.toString() +
-            this.value.slice(this.cursorIndex)
-          )
-          this.cursorIndex += keyBuf.toString().length
-          this.root.cursorMoved()
-          this.emit('change', this.value)
-
-          return false
-        }
-      }
-    } finally {
-      this.keepCursorInRange()
-    }
-  }
-
-  setValue(value) {
-    this.value = value
-    this.moveToEnd()
-  }
-
-  moveToEnd() {
-    this.cursorIndex = this.value.length
-    this.keepCursorInRange()
-  }
-
-  keepCursorInRange() {
-    // Keep the cursor inside or at the end of the input value.
-
-    if (this.cursorIndex < 0) {
-      this.cursorIndex = 0
-    }
-
-    if (this.cursorIndex > this.value.length) {
-      this.cursorIndex = this.value.length
-    }
-
-    // Scroll right, if the cursor is past the right edge of where text is
-    // displayed.
-    while (this.cursorIndex - this.scrollChars > this.w - 3) {
-      this.scrollChars++
-    }
-
-    // Scroll left, if the cursor is behind the left edge of where text is
-    // displayed.
-    while (this.cursorIndex - this.scrollChars < 0) {
-      this.scrollChars--
-    }
-
-    // Scroll left, if we can see past the end of the text.
-    while (this.scrollChars > 0 && (
-      this.scrollChars + this.w - 3 > this.value.length)
-    ) {
-      this.scrollChars--
-    }
-  }
-
-  get value() { return this.getDep('value') }
-  set value(v) { return this.setDep('value', v) }
-}