Spaces:
Runtime error
Runtime error
; | |
const utils = require('./utils'); | |
/** | |
* Render a placeholder value with cursor and styling based on the | |
* position of the cursor. | |
* | |
* @param {Object} `prompt` Prompt instance. | |
* @param {String} `input` Input string. | |
* @param {String} `initial` The initial user-provided value. | |
* @param {Number} `pos` Current cursor position. | |
* @param {Boolean} `showCursor` Render a simulated cursor using the inverse primary style. | |
* @return {String} Returns the styled placeholder string. | |
* @api public | |
*/ | |
module.exports = (prompt, options = {}) => { | |
prompt.cursorHide(); | |
let { input = '', initial = '', pos, showCursor = true, color } = options; | |
let style = color || prompt.styles.placeholder; | |
let inverse = utils.inverse(prompt.styles.primary); | |
let blinker = str => inverse(prompt.styles.black(str)); | |
let output = input; | |
let char = ' '; | |
let reverse = blinker(char); | |
if (prompt.blink && prompt.blink.off === true) { | |
blinker = str => str; | |
reverse = ''; | |
} | |
if (showCursor && pos === 0 && initial === '' && input === '') { | |
return blinker(char); | |
} | |
if (showCursor && pos === 0 && (input === initial || input === '')) { | |
return blinker(initial[0]) + style(initial.slice(1)); | |
} | |
initial = utils.isPrimitive(initial) ? `${initial}` : ''; | |
input = utils.isPrimitive(input) ? `${input}` : ''; | |
let placeholder = initial && initial.startsWith(input) && initial !== input; | |
let cursor = placeholder ? blinker(initial[input.length]) : reverse; | |
if (pos !== input.length && showCursor === true) { | |
output = input.slice(0, pos) + blinker(input[pos]) + input.slice(pos + 1); | |
cursor = ''; | |
} | |
if (showCursor === false) { | |
cursor = ''; | |
} | |
if (placeholder) { | |
let raw = prompt.styles.unstyle(output + cursor); | |
return output + cursor + style(initial.slice(raw.length)); | |
} | |
return output + cursor; | |
}; | |