40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | const strip = require('./strip'); | ||
|  | 
 | ||
|  | const _require = require('sisteransi'), | ||
|  |       erase = _require.erase, | ||
|  |       cursor = _require.cursor; | ||
|  | 
 | ||
|  | const width = str => [...strip(str)].length; | ||
|  | 
 | ||
|  | module.exports = function (prompt, perLine = process.stdout.columns) { | ||
|  |   if (!perLine) return erase.line + cursor.to(0); | ||
|  |   let rows = 0; | ||
|  |   const lines = prompt.split(/\r?\n/); | ||
|  |   var _iteratorNormalCompletion = true; | ||
|  |   var _didIteratorError = false; | ||
|  |   var _iteratorError = undefined; | ||
|  | 
 | ||
|  |   try { | ||
|  |     for (var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
|  |       let line = _step.value; | ||
|  |       rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine); | ||
|  |     } | ||
|  |   } catch (err) { | ||
|  |     _didIteratorError = true; | ||
|  |     _iteratorError = err; | ||
|  |   } finally { | ||
|  |     try { | ||
|  |       if (!_iteratorNormalCompletion && _iterator.return != null) { | ||
|  |         _iterator.return(); | ||
|  |       } | ||
|  |     } finally { | ||
|  |       if (_didIteratorError) { | ||
|  |         throw _iteratorError; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return (erase.line + cursor.prevLine()).repeat(rows - 1) + erase.line + cursor.to(0); | ||
|  | }; |