diff options
| author | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 20:21:29 +0000 | 
|---|---|---|
| committer | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 20:21:29 +0000 | 
| commit | 61cb1570a3410c85a4489b97c172e3a50715f36c (patch) | |
| tree | 8fe4a5b77ea54bba80abc817ce2c9ef0e79e7e66 /sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js | |
| parent | 21a53d349788c99d2007cba91a923db982353b31 (diff) | |
| parent | a9ee9e0a500a4a15bd0b5dcaf041f827228ed309 (diff) | |
Merge branch 'researchML' into 'dev'
Research ml
See merge request igrannonica/neuronstellar!6
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js')
| -rw-r--r-- | sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js | 100 | 
1 files changed, 100 insertions, 0 deletions
| diff --git a/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js new file mode 100644 index 00000000..600e0745 --- /dev/null +++ b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/editor.js @@ -0,0 +1,100 @@ +'use strict'; +/** + * `editor` type prompt + */ + +const chalk = require('chalk'); +const { editAsync } = require('external-editor'); +const Base = require('./base'); +const observe = require('../utils/events'); +const { Subject } = require('rxjs'); + +class EditorPrompt extends Base { +  /** +   * Start the Inquiry session +   * @param  {Function} cb      Callback when prompt is done +   * @return {this} +   */ + +  _run(cb) { +    this.done = cb; + +    this.editorResult = new Subject(); + +    // Open Editor on "line" (Enter Key) +    const events = observe(this.rl); +    this.lineSubscription = events.line.subscribe(this.startExternalEditor.bind(this)); + +    // Trigger Validation when editor closes +    const validation = this.handleSubmitEvents(this.editorResult); +    validation.success.forEach(this.onEnd.bind(this)); +    validation.error.forEach(this.onError.bind(this)); + +    // Prevents default from being printed on screen (can look weird with multiple lines) +    this.currentText = this.opt.default; +    this.opt.default = null; + +    // Init +    this.render(); + +    return this; +  } + +  /** +   * Render the prompt to screen +   * @return {EditorPrompt} self +   */ + +  render(error) { +    let bottomContent = ''; +    let message = this.getQuestion(); + +    if (this.status === 'answered') { +      message += chalk.dim('Received'); +    } else { +      message += chalk.dim('Press <enter> to launch your preferred editor.'); +    } + +    if (error) { +      bottomContent = chalk.red('>> ') + error; +    } + +    this.screen.render(message, bottomContent); +  } + +  /** +   * Launch $EDITOR on user press enter +   */ + +  startExternalEditor() { +    // Pause Readline to prevent stdin and stdout from being modified while the editor is showing +    this.rl.pause(); +    editAsync(this.currentText, this.endExternalEditor.bind(this)); +  } + +  endExternalEditor(error, result) { +    this.rl.resume(); +    if (error) { +      this.editorResult.error(error); +    } else { +      this.editorResult.next(result); +    } +  } + +  onEnd(state) { +    this.editorResult.unsubscribe(); +    this.lineSubscription.unsubscribe(); +    this.answer = state.value; +    this.status = 'answered'; +    // Re-render prompt +    this.render(); +    this.screen.done(); +    this.done(this.answer); +  } + +  onError(state) { +    this.render(state.isValid); +  } +} + +module.exports = EditorPrompt; | 
