/** ** ============================== ** O O O OOOO ** O O O O O O ** O O O O O O ** OOOO OOOO O OOO OOOO ** O O O O O O O ** O O O O O O O ** OOOO OOOO O O OOOO ** ============================== ** Dr. Stefan Bosse http://www.bsslab.de ** ** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED ** BY THE AUTHOR(S). ** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED, ** MODIFIED, OR OTHERWISE USED IN A CONTEXT ** OUTSIDE OF THE SOFTWARE SYSTEM. ** ** $AUTHORS: Christopher Jeffrey and contributors, Stefan Bosse ** $INITIAL: (C) 2013-2015, Christopher Jeffrey and contributors ** $MODIFIED: by sbosse (2016-2017) ** $REVESIO: 1.2.1 ** ** $INFO: ** ** prompt.js - prompt element for blessed ** ** $ENDOFINFO */ /** * Modules */ var Comp = Require('com/compat'); var Node = Require('term/widgets/node'); var Box = Require('term/widgets/box'); var Button = Require('term/widgets/button'); var Textbox = Require('term/widgets/textbox'); /** * Prompt */ function Prompt(options) { if (!instanceOf(this, Node)) { return new Prompt(options); } options = options || {}; options.hidden = true; Box.call(this, options); this._.input = new Textbox({ parent: this, top: 3, height: 1, left: 2, right: 2, bg: 'black' }); this._.okay = new Button({ parent: this, top: 5, height: 1, left: 2, width: 6, content: 'Okay', align: 'center', bg: 'black', hoverBg: 'blue', autoFocus: false, mouse: true }); this._.cancel = new Button({ parent: this, top: 5, height: 1, shrink: true, left: 10, width: 8, content: 'Cancel', align: 'center', bg: 'black', hoverBg: 'blue', autoFocus: false, mouse: true }); } //Prompt.prototype.__proto__ = Box.prototype; inheritPrototype(Prompt,Box); Prompt.prototype.type = 'prompt'; Prompt.prototype.input = Prompt.prototype.setInput = Prompt.prototype.readInput = function(text, value, callback) { var self = this; var okay, cancel; if (!callback) { callback = value; value = ''; } // Keep above: // var parent = this.parent; // this.detach(); // parent.append(this); this.show(); this.setContent(' ' + text); this._.input.value = value; this.screen.saveFocus(); this._.okay.on('press', okay = function() { self._.input.submit(); }); this._.cancel.on('press', cancel = function() { self._.input.cancel(); }); this._.input.readInput(function(err, data) { self.hide(); self.screen.restoreFocus(); self._.okay.removeListener('press', okay); self._.cancel.removeListener('press', cancel); return callback(err, data); }); this.screen.render(); }; /** * Expose */ module.exports = Prompt;