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.
		
		
		
		
		
			
		
			
				
					
					
						
							124 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							124 lines
						
					
					
						
							2.6 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'), | 
						|
      cursor = _require2.cursor, | 
						|
      erase = _require2.erase; | 
						|
/** | 
						|
 * TogglePrompt Base Element | 
						|
 * @param {Object} opts Options | 
						|
 * @param {String} opts.message Message | 
						|
 * @param {Boolean} [opts.initial=false] Default value | 
						|
 * @param {String} [opts.active='no'] Active label | 
						|
 * @param {String} [opts.inactive='off'] Inactive label | 
						|
 * @param {Stream} [opts.stdin] The Readable stream to listen to | 
						|
 * @param {Stream} [opts.stdout] The Writable stream to write readline data to | 
						|
 */ | 
						|
 | 
						|
 | 
						|
class TogglePrompt extends Prompt { | 
						|
  constructor(opts = {}) { | 
						|
    super(opts); | 
						|
    this.msg = opts.message; | 
						|
    this.value = !!opts.initial; | 
						|
    this.active = opts.active || 'on'; | 
						|
    this.inactive = opts.inactive || 'off'; | 
						|
    this.initialValue = this.value; | 
						|
    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.done = true; | 
						|
    this.aborted = false; | 
						|
    this.fire(); | 
						|
    this.render(); | 
						|
    this.out.write('\n'); | 
						|
    this.close(); | 
						|
  } | 
						|
 | 
						|
  deactivate() { | 
						|
    if (this.value === false) return this.bell(); | 
						|
    this.value = false; | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  activate() { | 
						|
    if (this.value === true) return this.bell(); | 
						|
    this.value = true; | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  delete() { | 
						|
    this.deactivate(); | 
						|
  } | 
						|
 | 
						|
  left() { | 
						|
    this.deactivate(); | 
						|
  } | 
						|
 | 
						|
  right() { | 
						|
    this.activate(); | 
						|
  } | 
						|
 | 
						|
  down() { | 
						|
    this.deactivate(); | 
						|
  } | 
						|
 | 
						|
  up() { | 
						|
    this.activate(); | 
						|
  } | 
						|
 | 
						|
  next() { | 
						|
    this.value = !this.value; | 
						|
    this.fire(); | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  _(c, key) { | 
						|
    if (c === ' ') { | 
						|
      this.value = !this.value; | 
						|
    } else if (c === '1') { | 
						|
      this.value = true; | 
						|
    } else if (c === '0') { | 
						|
      this.value = false; | 
						|
    } else return this.bell(); | 
						|
 | 
						|
    this.render(); | 
						|
  } | 
						|
 | 
						|
  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.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' '); | 
						|
    this.out.write(erase.line + cursor.to(0) + this.outputText); | 
						|
  } | 
						|
 | 
						|
} | 
						|
 | 
						|
module.exports = TogglePrompt; |