UNPKG

ambilighter

Version:

Ambilight around the video, image or canvas HTML elements

106 lines (53 loc) 2.59 kB
import { Size } from './parsers/size.ts'; export class Formatted { static formatStringAttribute ( val: string | null, valueDefault: string | null = '' ): string { if ( typeof valueDefault !== 'string' ) { throw new Error( `Formatted -> formatStringAttribute :: invalid valueDefault. Expected "string" type, got "${ typeof valueDefault }"` ); } if ( typeof val !== 'string' ) return valueDefault; return val; } static formatNumberAttribute ( val: string | null, valueDefault: number | null = 0 ): number { if ( typeof valueDefault !== 'number' ) { throw new Error( `Formatted -> formatNumberAttribute :: invalid valueDefault. Expected "number" type, got "${ typeof valueDefault }"` ); } if ( val === null ) return valueDefault; if ( isNaN( +val ) ) return valueDefault; return +val; } static formatBooleanAttribute ( val: string | null, valueDefault: boolean | null = false ): boolean { const values: Array<string> = [ 'true', 'false' ]; if ( typeof valueDefault !== 'boolean' ) { throw new Error( `Formatted -> formatNumberAttribute :: invalid valueDefault. Expected "boolean" type, got "${ typeof valueDefault }"` ); } if ( typeof val === 'string' && values.includes( val ) ) return val === 'true'; if ( typeof val === 'boolean' ) return val; if ( typeof val === 'string' || val === null ) { return val !== null; } return valueDefault; } static formatArrayAttribute ( val: string | null, defaultValue: Array<any> = [] ): Array<any> { let arr: Array<any> = defaultValue; if ( val !== 'string' || !JSON.parse( val ) ) { throw new Error( `Formatted -> formatArrayAttribute :: cannot parse val as JSON` ); } arr = JSON.parse( val ); if ( !( arr instanceof Array ) ) { throw new Error( 'Formatted -> formatArrayAttribute :: invalid value. Expected "array"' ); } return arr; } static formatValues ( val: string | number | null, valueDefault: string = '24px' ): string { let currentValue = val; if ( !val ) currentValue = valueDefault; if ( typeof currentValue === 'string' ) { if ( [ 'auto', 'inherit' ].includes( currentValue ) ) return currentValue; if ( parseInt( currentValue ).toString() === currentValue ) return `${ currentValue }px`; const size = Size.parseSize( currentValue ); if ( !size ) return valueDefault; return `${ size.value }${ size.unit }`; } return `${ currentValue }px`; } };