123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /**
- * question.js - question element for blessed
- * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
- * https://github.com/chjj/blessed
- */
- /**
- * Modules
- */
- var Node = require('./node');
- var Box = require('./box');
- var Button = require('./button');
- /**
- * Question
- */
- function Question(options) {
- if (!(this instanceof Node)) {
- return new Question(options);
- }
- options = options || {};
- options.hidden = true;
- Box.call(this, options);
- this._.okay = new Button({
- screen: this.screen,
- parent: this,
- top: 2,
- height: 1,
- left: 2,
- width: 6,
- content: 'Okay',
- align: 'center',
- bg: 'black',
- hoverBg: 'blue',
- autoFocus: false,
- mouse: true
- });
- this._.cancel = new Button({
- screen: this.screen,
- parent: this,
- top: 2,
- height: 1,
- shrink: true,
- left: 10,
- width: 8,
- content: 'Cancel',
- align: 'center',
- bg: 'black',
- hoverBg: 'blue',
- autoFocus: false,
- mouse: true
- });
- }
- Question.prototype.__proto__ = Box.prototype;
- Question.prototype.type = 'question';
- Question.prototype.ask = function(text, callback) {
- var self = this;
- var press, okay, cancel;
- // Keep above:
- // var parent = this.parent;
- // this.detach();
- // parent.append(this);
- this.show();
- this.setContent(' ' + text);
- this.onScreenEvent('keypress', press = function(ch, key) {
- if (key.name === 'mouse') return;
- if (key.name !== 'enter'
- && key.name !== 'escape'
- && key.name !== 'q'
- && key.name !== 'y'
- && key.name !== 'n') {
- return;
- }
- done(null, key.name === 'enter' || key.name === 'y');
- });
- this._.okay.on('press', okay = function() {
- done(null, true);
- });
- this._.cancel.on('press', cancel = function() {
- done(null, false);
- });
- this.screen.saveFocus();
- this.focus();
- function done(err, data) {
- self.hide();
- self.screen.restoreFocus();
- self.removeScreenEvent('keypress', press);
- self._.okay.removeListener('press', okay);
- self._.cancel.removeListener('press', cancel);
- return callback(err, data);
- }
- this.screen.render();
- };
- /**
- * Expose
- */
- module.exports = Question;
|