UNPKG

cv-dialog-sdk

Version:

Catavolt Dialog Javascript API

217 lines (177 loc) 6.5 kB
import { DataAnnotation } from './DataAnnotation'; import { Property } from './Property'; import { Record } from './Record'; import { TypeNames } from './types'; /** * The implementation of {@link Record}. * Represents a 'Record' or set of {@link Property} (names and values). * An Record may also have {@link Annotation}s (style annotations) that apply to the whole 'record' */ export class RecordImpl implements Record { constructor( readonly id: string, readonly properties: Property[] = [], readonly annotations: DataAnnotation[] = [], readonly type: string ) {} public annotationsAtName(propName: string): DataAnnotation[] { const p = this.propAtName(propName); return p ? p.annotations : []; } public afterEffects(after: Record): Record { const effects = []; after.properties.forEach(afterProp => { const beforeProp = this.propAtName(afterProp.name); if (!afterProp.equals(beforeProp)) { effects.push(afterProp); } }); return new RecordImpl(after.id, effects, after.annotations, after.type); } get backgroundColor(): string { return DataAnnotation.backgroundColor(this.annotations); } public backgroundColorFor(propName: string): string { const p = this.propAtName(propName); return p && p.backgroundColor ? p.backgroundColor : this.backgroundColor; } get foregroundColor(): string { return DataAnnotation.foregroundColor(this.annotations); } public foregroundColorFor(propName: string): string { const p = this.propAtName(propName); return p && p.foregroundColor ? p.foregroundColor : this.foregroundColor; } get imageName(): string { return DataAnnotation.imageName(this.annotations); } public imageNameFor(propName: string): string { const p = this.propAtName(propName); return p && p.imageName ? p.imageName : this.imageName; } get imagePlacement(): string { return DataAnnotation.imagePlacement(this.annotations); } public imagePlacementFor(propName: string): string { const p = this.propAtName(propName); return p && p.imagePlacement ? p.imagePlacement : this.imagePlacement; } get isBoldText(): boolean { return DataAnnotation.isBoldText(this.annotations); } public isBoldTextFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isBoldText ? p.isBoldText : this.isBoldText; } get isItalicText(): boolean { return DataAnnotation.isItalicText(this.annotations); } public isItalicTextFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isItalicText ? p.isItalicText : this.isItalicText; } get isPlacementCenter(): boolean { return DataAnnotation.isPlacementCenter(this.annotations); } public isPlacementCenterFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isPlacementCenter ? p.isPlacementCenter : this.isPlacementCenter; } get isPlacementLeft(): boolean { return DataAnnotation.isPlacementLeft(this.annotations); } public isPlacementLeftFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isPlacementLeft ? p.isPlacementLeft : this.isPlacementLeft; } get isPlacementRight(): boolean { return DataAnnotation.isPlacementRight(this.annotations); } public isPlacementRightFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isPlacementRight ? p.isPlacementRight : this.isPlacementRight; } get isPlacementStretchUnder(): boolean { return DataAnnotation.isPlacementStretchUnder(this.annotations); } public isPlacementStretchUnderFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isPlacementStretchUnder ? p.isPlacementStretchUnder : this.isPlacementStretchUnder; } get isPlacementUnder(): boolean { return DataAnnotation.isPlacementUnder(this.annotations); } public isPlacementUnderFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isPlacementUnder ? p.isPlacementUnder : this.isPlacementUnder; } get isUnderline(): boolean { return DataAnnotation.isUnderlineText(this.annotations); } public isUnderlineFor(propName: string): boolean { const p = this.propAtName(propName); return p && p.isUnderline ? p.isUnderline : this.isUnderline; } get overrideText(): string { return DataAnnotation.overrideText(this.annotations); } public overrideTextFor(propName: string): string { const p = this.propAtName(propName); return p && p.overrideText ? p.overrideText : this.overrideText; } public propAtIndex(index: number): Property { return this.properties[index]; } public propAtName(propName: string): Property { let prop: Property = null; this.properties.some(p => { if (p.name === propName) { prop = p; return true; } return false; }); return prop; } get propCount(): number { return this.properties.length; } get propNames(): string[] { return this.properties.map(p => { return p.name; }); } get propValues(): any[] { return this.properties.map(p => { return p.value; }); } get tipText(): string { return DataAnnotation.tipText(this.annotations); } public tipTextFor(propName: string): string { const p = this.propAtName(propName); return p && p.tipText ? p.tipText : this.tipText; } public toJSON() { return { id: this.id, properties: this.properties, type: TypeNames.RecordTypeName }; } public toRecord(): Record { return this; } public valueAtName(propName: string): any { let value = null; this.properties.some(p => { if (p.name === propName) { value = p.value; return true; } return false; }); return value; } }