trouble-in-terror-town/node_modules/gauge/lib/template-item.js
Mikolaj 2bbacbea09 did some more work on networking and removed EOS in favor of LRM
did some more work on networking and removed EOS in favor of Light Reflective Mirror
2022-05-31 15:04:31 +02:00

87 lines
1.9 KiB
JavaScript

'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
}