You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							2.4 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
const color = require('kleur'); | 
						|
 | 
						|
const Prompt = require('./prompt'); | 
						|
 | 
						|
const _require = require('../util'), | 
						|
      style = _require.style, | 
						|
      clear = _require.clear; | 
						|
 | 
						|
const _require2 = require('sisteransi'), | 
						|
      erase = _require2.erase, | 
						|
      cursor = _require2.cursor; | 
						|
/** | 
						|
 * ConfirmPrompt Base Element | 
						|
 * @param {Object} opts Options | 
						|
 * @param {String} opts.message Message | 
						|
 * @param {Boolean} [opts.initial] Default value (true/false) | 
						|
 * @param {Stream} [opts.stdin] The Readable stream to listen to | 
						|
 * @param {Stream} [opts.stdout] The Writable stream to write readline data to | 
						|
 * @param {String} [opts.yes] The "Yes" label | 
						|
 * @param {String} [opts.yesOption] The "Yes" option when choosing between yes/no | 
						|
 * @param {String} [opts.no] The "No" label | 
						|
 * @param {String} [opts.noOption] The "No" option when choosing between yes/no | 
						|
 */ | 
						|
 | 
						|
 | 
						|
class ConfirmPrompt extends Prompt { | 
						|
  constructor(opts = {}) { | 
						|
    super(opts); | 
						|
    this.msg = opts.message; | 
						|
    this.value = opts.initial; | 
						|
    this.initialValue = !!opts.initial; | 
						|
    this.yesMsg = opts.yes || 'yes'; | 
						|
    this.yesOption = opts.yesOption || '(Y/n)'; | 
						|
    this.noMsg = opts.no || 'no'; | 
						|
    this.noOption = opts.noOption || '(y/N)'; | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  reset() { | 
						|
    this.value = this.initialValue; | 
						|
    this.fire(); | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  exit() { | 
						|
    this.abort(); | 
						|
  } | 
						|
 | 
						|
  abort() { | 
						|
    this.done = this.aborted = true; | 
						|
    this.fire(); | 
						|
    this.render(); | 
						|
    this.out.write('\n'); | 
						|
    this.close(); | 
						|
  } | 
						|
 | 
						|
  submit() { | 
						|
    this.value = this.value || false; | 
						|
    this.done = true; | 
						|
    this.aborted = false; | 
						|
    this.fire(); | 
						|
    this.render(); | 
						|
    this.out.write('\n'); | 
						|
    this.close(); | 
						|
  } | 
						|
 | 
						|
  _(c, key) { | 
						|
    if (c.toLowerCase() === 'y') { | 
						|
      this.value = true; | 
						|
      return this.submit(); | 
						|
    } | 
						|
 | 
						|
    if (c.toLowerCase() === 'n') { | 
						|
      this.value = false; | 
						|
      return this.submit(); | 
						|
    } | 
						|
 | 
						|
    return this.bell(); | 
						|
  } | 
						|
 | 
						|
  render() { | 
						|
    if (this.closed) return; | 
						|
    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns)); | 
						|
    super.render(); | 
						|
    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' '); | 
						|
    this.out.write(erase.line + cursor.to(0) + this.outputText); | 
						|
  } | 
						|
 | 
						|
} | 
						|
 | 
						|
module.exports = ConfirmPrompt; |