| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 'use strict';const BooleanPrompt = require('../types/boolean');class TogglePrompt extends BooleanPrompt {  async initialize() {    await super.initialize();    this.value = this.initial = !!this.options.initial;    this.disabled = this.options.disabled || 'no';    this.enabled = this.options.enabled || 'yes';    await this.render();  }  reset() {    this.value = this.initial;    this.render();  }  delete() {    this.alert();  }  toggle() {    this.value = !this.value;    this.render();  }  enable() {    if (this.value === true) return this.alert();    this.value = true;    this.render();  }  disable() {    if (this.value === false) return this.alert();    this.value = false;    this.render();  }  up() {    this.toggle();  }  down() {    this.toggle();  }  right() {    this.toggle();  }  left() {    this.toggle();  }  next() {    this.toggle();  }  prev() {    this.toggle();  }  dispatch(ch = '', key) {    switch (ch.toLowerCase()) {      case ' ':        return this.toggle();      case '1':      case 'y':      case 't':        return this.enable();      case '0':      case 'n':      case 'f':        return this.disable();      default: {        return this.alert();      }    }  }  format() {    let active = str => this.styles.primary.underline(str);    let value = [      this.value ? this.disabled : active(this.disabled),      this.value ? active(this.enabled) : this.enabled    ];    return value.join(this.styles.muted(' / '));  }  async render() {    let { size } = this.state;    let header = await this.header();    let prefix = await this.prefix();    let separator = await this.separator();    let message = await this.message();    let output = await this.format();    let help = (await this.error()) || (await this.hint());    let footer = await this.footer();    let prompt = [prefix, message, separator, output].join(' ');    this.state.prompt = prompt;    if (help && !prompt.includes(help)) prompt += ' ' + help;    this.clear(size);    this.write([header, prompt, footer].filter(Boolean).join('\n'));    this.write(this.margin[2]);    this.restore();  }}module.exports = TogglePrompt;
 |