You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							1000 B
						
					
					
				
			
		
		
	
	
							36 lines
						
					
					
						
							1000 B
						
					
					
				| 'use strict'
 | |
| var validate = require('aproba')
 | |
| var renderTemplate = require('./render-template.js')
 | |
| var wideTruncate = require('./wide-truncate')
 | |
| var stringWidth = require('string-width')
 | |
| 
 | |
| module.exports = function (theme, width, completed) {
 | |
|   validate('ONN', [theme, width, completed])
 | |
|   if (completed < 0) completed = 0
 | |
|   if (completed > 1) completed = 1
 | |
|   if (width <= 0) return ''
 | |
|   var sofar = Math.round(width * completed)
 | |
|   var rest = width - sofar
 | |
|   var template = [
 | |
|     {type: 'complete', value: repeat(theme.complete, sofar), length: sofar},
 | |
|     {type: 'remaining', value: repeat(theme.remaining, rest), length: rest}
 | |
|   ]
 | |
|   return renderTemplate(width, template, theme)
 | |
| }
 | |
| 
 | |
| // lodash's way of repeating
 | |
| function repeat (string, width) {
 | |
|   var result = ''
 | |
|   var n = width
 | |
|   do {
 | |
|     if (n % 2) {
 | |
|       result += string
 | |
|     }
 | |
|     n = Math.floor(n / 2)
 | |
|     /* eslint no-self-assign: 0 */
 | |
|     string += string
 | |
|   } while (n && stringWidth(result) < width)
 | |
| 
 | |
|   return wideTruncate(result, width)
 | |
| }
 |