neo-neo-bblessed
Version:
A fork of neo-blessed (which is a fork of blessed) with bug fixes and maintenance.
87 lines (67 loc) • 1.56 kB
text/typescript
/**
* button.js - button element for blessed
* Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
* https://github.com/chjj/blessed
*/
/**
* Modules
*/
const Node = require('./node');
const Input = require('./input');
/**
* Type definitions
*/
interface ButtonOptions {
autoFocus?: boolean;
mouse?: boolean;
[key: string]: any;
}
interface ButtonKey {
name: string;
}
interface ButtonInterface extends Input {
type: string;
options: ButtonOptions;
value?: boolean;
on(event: string, listener: (...args: any[]) => void): void;
emit(event: string, ...args: any[]): boolean;
focus(): void;
press(): boolean;
}
/**
* Button
*/
function Button(this: ButtonInterface, options?: ButtonOptions) {
const self = this;
if (!(this instanceof Node)) {
return new (Button as any)(options);
}
options = options || {};
if (options.autoFocus == null) {
options.autoFocus = false;
}
Input.call(this, options);
this.on('keypress', function(ch: string, key: ButtonKey) {
if (key.name === 'enter' || key.name === 'space') {
return self.press();
}
});
if (this.options.mouse) {
this.on('click', function() {
return self.press();
});
}
}
Button.prototype.__proto__ = Input.prototype;
Button.prototype.type = 'button';
Button.prototype.press = function(this: ButtonInterface): boolean {
this.focus();
this.value = true;
const result = this.emit('press');
delete this.value;
return result;
};
/**
* Expose
*/
module.exports = Button;