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.
		
		
		
		
		
			
		
			
				
					73 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					73 lines
				
				1.9 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								var stringWidth = require('string-width')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = TemplateItem
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function isPercent (num) {
							 | 
						||
| 
								 | 
							
								  if (typeof num !== 'string') return false
							 | 
						||
| 
								 | 
							
								  return num.slice(-1) === '%'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function percent (num) {
							 | 
						||
| 
								 | 
							
								  return Number(num.slice(0, -1)) / 100
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function TemplateItem (values, outputLength) {
							 | 
						||
| 
								 | 
							
								  this.overallOutputLength = outputLength
							 | 
						||
| 
								 | 
							
								  this.finished = false
							 | 
						||
| 
								 | 
							
								  this.type = null
							 | 
						||
| 
								 | 
							
								  this.value = null
							 | 
						||
| 
								 | 
							
								  this.length = null
							 | 
						||
| 
								 | 
							
								  this.maxLength = null
							 | 
						||
| 
								 | 
							
								  this.minLength = null
							 | 
						||
| 
								 | 
							
								  this.kerning = null
							 | 
						||
| 
								 | 
							
								  this.align = 'left'
							 | 
						||
| 
								 | 
							
								  this.padLeft = 0
							 | 
						||
| 
								 | 
							
								  this.padRight = 0
							 | 
						||
| 
								 | 
							
								  this.index = null
							 | 
						||
| 
								 | 
							
								  this.first = null
							 | 
						||
| 
								 | 
							
								  this.last = null
							 | 
						||
| 
								 | 
							
								  if (typeof values === 'string') {
							 | 
						||
| 
								 | 
							
								    this.value = values
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    for (var prop in values) this[prop] = values[prop]
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  // Realize percents
							 | 
						||
| 
								 | 
							
								  if (isPercent(this.length)) {
							 | 
						||
| 
								 | 
							
								    this.length = Math.round(this.overallOutputLength * percent(this.length))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (isPercent(this.minLength)) {
							 | 
						||
| 
								 | 
							
								    this.minLength = Math.round(this.overallOutputLength * percent(this.minLength))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (isPercent(this.maxLength)) {
							 | 
						||
| 
								 | 
							
								    this.maxLength = Math.round(this.overallOutputLength * percent(this.maxLength))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return this
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TemplateItem.prototype = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TemplateItem.prototype.getBaseLength = function () {
							 | 
						||
| 
								 | 
							
								  var length = this.length
							 | 
						||
| 
								 | 
							
								  if (length == null && typeof this.value === 'string' && this.maxLength == null && this.minLength == null) {
							 | 
						||
| 
								 | 
							
								    length = stringWidth(this.value)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return length
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TemplateItem.prototype.getLength = function () {
							 | 
						||
| 
								 | 
							
								  var length = this.getBaseLength()
							 | 
						||
| 
								 | 
							
								  if (length == null) return null
							 | 
						||
| 
								 | 
							
								  return length + this.padLeft + this.padRight
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TemplateItem.prototype.getMaxLength = function () {
							 | 
						||
| 
								 | 
							
								  if (this.maxLength == null) return null
							 | 
						||
| 
								 | 
							
								  return this.maxLength + this.padLeft + this.padRight
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TemplateItem.prototype.getMinLength = function () {
							 | 
						||
| 
								 | 
							
								  if (this.minLength == null) return null
							 | 
						||
| 
								 | 
							
								  return this.minLength + this.padLeft + this.padRight
							 | 
						||
| 
								 | 
							
								}
							 |