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;
|