From 6ea74c268a12325296a1d2e7fc31b02030ddb8bc Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 12 May 2023 17:42:09 -0300 Subject: use ESM module syntax & minor cleanups The biggest change here is moving various element classes under more scope-specific directories, which helps to avoid circular dependencies and is just cleaner to navigate and expand in the future. Otherwise this is a largely uncritical port to ESM module syntax! There are probably a number of changes and other cleanups that remain much needed. Whenever I make changes to tui-lib it's hard to believe it's already been years since the previous time. First commits are from January 2017, and the code originates a month earlier in KAaRMNoD! --- ui/presentation/Label.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 ui/presentation/Label.js (limited to 'ui/presentation/Label.js') diff --git a/ui/presentation/Label.js b/ui/presentation/Label.js new file mode 100644 index 0000000..81223df --- /dev/null +++ b/ui/presentation/Label.js @@ -0,0 +1,52 @@ +import {DisplayElement} from 'tui-lib/ui/primitives' + +import * as ansi from 'tui-lib/util/ansi' + +export default class Label extends DisplayElement { + // A simple text display. Automatically adjusts size to fit text. + + constructor(text = '') { + super() + + this.text = text + this.textAttributes = [] + } + + fixLayout() { + this.w = ansi.measureColumns(this.text) + } + + drawTo(writable) { + if (this.textAttributes.length) { + writable.write(ansi.setAttributes(this.textAttributes)) + } + + this.writeTextTo(writable) + + if (this.textAttributes.length) { + writable.write(ansi.resetAttributes()) + } + + super.drawTo(writable) + } + + writeTextTo(writable) { + writable.write(ansi.moveCursor(this.absTop, this.absLeft)) + writable.write(this.text) + } + + set text(newText) { + const ret = this.setDep('text', newText) + this.fixLayout() + return ret + } + + get text() { + return this.getDep('text') + } + + // Kinda bad, but works as long as you're overwriting the array instead of + // mutating it. + set textAttributes(val) { return this.setDep('textAttributes', val) } + get textAttributes() { return this.getDep('textAttributes') } +} -- cgit 1.3.0-6-gf8a5