Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / inquirer / lib / ui / bottom-bar.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/inquirer/lib/ui/bottom-bar.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/inquirer/lib/ui/bottom-bar.js
new file mode 100644 (file)
index 0000000..40b8159
--- /dev/null
@@ -0,0 +1,102 @@
+'use strict';
+/**
+ * Sticky bottom bar user interface
+ */
+
+var through = require('through');
+var Base = require('./baseUI');
+var rlUtils = require('../utils/readline');
+var _ = {
+  last: require('lodash/last'),
+};
+
+class BottomBar extends Base {
+  constructor(opt) {
+    opt = opt || {};
+
+    super(opt);
+
+    this.log = through(this.writeLog.bind(this));
+    this.bottomBar = opt.bottomBar || '';
+    this.render();
+  }
+
+  /**
+   * Render the prompt to screen
+   * @return {BottomBar} self
+   */
+
+  render() {
+    this.write(this.bottomBar);
+    return this;
+  }
+
+  clean() {
+    rlUtils.clearLine(this.rl, this.bottomBar.split('\n').length);
+    return this;
+  }
+
+  /**
+   * Update the bottom bar content and rerender
+   * @param  {String} bottomBar Bottom bar content
+   * @return {BottomBar}           self
+   */
+
+  updateBottomBar(bottomBar) {
+    rlUtils.clearLine(this.rl, 1);
+    this.rl.output.unmute();
+    this.clean();
+    this.bottomBar = bottomBar;
+    this.render();
+    this.rl.output.mute();
+    return this;
+  }
+
+  /**
+   * Write out log data
+   * @param {String} data - The log data to be output
+   * @return {BottomBar} self
+   */
+
+  writeLog(data) {
+    this.rl.output.unmute();
+    this.clean();
+    this.rl.output.write(this.enforceLF(data.toString()));
+    this.render();
+    this.rl.output.mute();
+    return this;
+  }
+
+  /**
+   * Make sure line end on a line feed
+   * @param  {String} str Input string
+   * @return {String}     The input string with a final line feed
+   */
+
+  enforceLF(str) {
+    return str.match(/[\r\n]$/) ? str : str + '\n';
+  }
+
+  /**
+   * Helper for writing message in Prompt
+   * @param {BottomBar} prompt  - The Prompt object that extends tty
+   * @param {String} message - The message to be output
+   */
+  write(message) {
+    var msgLines = message.split(/\n/);
+    this.height = msgLines.length;
+
+    // Write message to screen and setPrompt to control backspace
+    this.rl.setPrompt(_.last(msgLines));
+
+    if (this.rl.output.rows === 0 && this.rl.output.columns === 0) {
+      /* When it's a tty through serial port there's no terminal info and the render will malfunction,
+         so we need enforce the cursor to locate to the leftmost position for rendering. */
+      rlUtils.left(this.rl, message.length + this.rl.line.length);
+    }
+
+    this.rl.output.write(message);
+  }
+}
+
+module.exports = BottomBar;