bigint-crypto-utils/node_modules/table-layout/lib/column.js

69 lines
1.8 KiB
JavaScript

'use strict'
const t = require('typical')
const Padding = require('./padding')
/**
* @module column
*/
const _padding = new WeakMap()
// setting any column property which is a factor of the width should trigger autoSize()
/**
* Represents a table column
*/
class Column {
constructor (column) {
/**
* @type {string}
*/
if (t.isDefined(column.name)) this.name = column.name
/**
* @type {number}
*/
if (t.isDefined(column.width)) this.width = column.width
if (t.isDefined(column.maxWidth)) this.maxWidth = column.maxWidth
if (t.isDefined(column.minWidth)) this.minWidth = column.minWidth
if (t.isDefined(column.noWrap)) this.noWrap = column.noWrap
if (t.isDefined(column.break)) this.break = column.break
if (t.isDefined(column.contentWrappable)) this.contentWrappable = column.contentWrappable
if (t.isDefined(column.contentWidth)) this.contentWidth = column.contentWidth
if (t.isDefined(column.minContentWidth)) this.minContentWidth = column.minContentWidth
this.padding = column.padding || { left: ' ', right: ' ' }
this.generatedWidth = null
}
set padding (padding) {
_padding.set(this, new Padding(padding))
}
get padding () {
return _padding.get(this)
}
/**
* the width of the content (excluding padding) after being wrapped
*/
get wrappedContentWidth () {
return Math.max(this.generatedWidth - this.padding.length(), 0)
}
isResizable () {
return !this.isFixed()
}
isFixed () {
return t.isDefined(this.width) || this.noWrap || !this.contentWrappable
}
generateWidth () {
this.generatedWidth = this.width || (this.contentWidth + this.padding.length())
}
generateMinWidth () {
this.minWidth = this.minContentWidth + this.padding.length()
}
}
module.exports = Column