ambilighter
Version:
Ambilight around the video, image or canvas HTML elements
106 lines (53 loc) • 2.59 kB
text/typescript
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`;
}
};