.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / enquirer / lib / prompts / toggle.js
1 'use strict';
2
3 const BooleanPrompt = require('../types/boolean');
4
5 class TogglePrompt extends BooleanPrompt {
6   async initialize() {
7     await super.initialize();
8     this.value = this.initial = !!this.options.initial;
9     this.disabled = this.options.disabled || 'no';
10     this.enabled = this.options.enabled || 'yes';
11     await this.render();
12   }
13
14   reset() {
15     this.value = this.initial;
16     this.render();
17   }
18
19   delete() {
20     this.alert();
21   }
22
23   toggle() {
24     this.value = !this.value;
25     this.render();
26   }
27
28   enable() {
29     if (this.value === true) return this.alert();
30     this.value = true;
31     this.render();
32   }
33   disable() {
34     if (this.value === false) return this.alert();
35     this.value = false;
36     this.render();
37   }
38
39   up() {
40     this.toggle();
41   }
42   down() {
43     this.toggle();
44   }
45   right() {
46     this.toggle();
47   }
48   left() {
49     this.toggle();
50   }
51   next() {
52     this.toggle();
53   }
54   prev() {
55     this.toggle();
56   }
57
58   dispatch(ch = '', key) {
59     switch (ch.toLowerCase()) {
60       case ' ':
61         return this.toggle();
62       case '1':
63       case 'y':
64       case 't':
65         return this.enable();
66       case '0':
67       case 'n':
68       case 'f':
69         return this.disable();
70       default: {
71         return this.alert();
72       }
73     }
74   }
75
76   format() {
77     let active = str => this.styles.primary.underline(str);
78     let value = [
79       this.value ? this.disabled : active(this.disabled),
80       this.value ? active(this.enabled) : this.enabled
81     ];
82     return value.join(this.styles.muted(' / '));
83   }
84
85   async render() {
86     let { size } = this.state;
87
88     let header = await this.header();
89     let prefix = await this.prefix();
90     let separator = await this.separator();
91     let message = await this.message();
92
93     let output = await this.format();
94     let help = (await this.error()) || (await this.hint());
95     let footer = await this.footer();
96
97     let prompt = [prefix, message, separator, output].join(' ');
98     this.state.prompt = prompt;
99
100     if (help && !prompt.includes(help)) prompt += ' ' + help;
101
102     this.clear(size);
103     this.write([header, prompt, footer].filter(Boolean).join('\n'));
104     this.write(this.margin[2]);
105     this.restore();
106   }
107 }
108
109 module.exports = TogglePrompt;