UNPKG

cv-dialog-sdk

Version:

Catavolt Dialog Javascript API

241 lines (192 loc) 6.49 kB
import { DataAnnotation } from './DataAnnotation'; import { Property } from './Property'; import {PropertyDef} from "./PropertyDef"; import { Record } from './Record'; import { RecordUtil } from './RecordUtil'; /** * An {@link Record} that manages two copies internally, a before and after, for 'undo' and comparison purposes. * An 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 RecordBuffer implements Record { public static createRecordBuffer( id: string, before: Property[], after: Property[], annotations: DataAnnotation[] ): RecordBuffer { return new RecordBuffer( RecordUtil.newRecord(id, before, annotations), RecordUtil.newRecord(id, after, annotations) ); } constructor(private _before: Record, private _after?: Record) { if (!_before) { throw new Error('_before is null in RecordBuffer'); } if (!_after) { this._after = _before; } } get after(): Record { return this._after; } get annotations(): DataAnnotation[] { return this._after.annotations; } public annotationsAtName(propName: string): DataAnnotation[] { return this._after.annotationsAtName(propName); } public afterEffects(afterAnother?: Record): Record { if (afterAnother) { return this._after.afterEffects(afterAnother); } else { return this._before.afterEffects(this._after); } } get backgroundColor(): string { return this._after.backgroundColor; } public backgroundColorFor(propName: string): string { return this._after.backgroundColorFor(propName); } get before(): Record { return this._before; } get foregroundColor(): string { return this._after.foregroundColor; } public foregroundColorFor(propName: string): string { return this._after.foregroundColorFor(propName); } get imageName(): string { return this._after.imageName; } public imageNameFor(propName: string): string { return this._after.imageNameFor(propName); } get imagePlacement(): string { return this._after.imagePlacement; } public imagePlacementFor(propName: string): string { return this._after.imagePlacement; } get isBoldText(): boolean { return this._after.isBoldText; } public isBoldTextFor(propName: string): boolean { return this._after.isBoldTextFor(propName); } public isChanged(name: string): boolean { const before = this._before.propAtName(name); const after = this._after.propAtName(name); return before && after ? !before.equals(after) : !(!before && !after); } get isItalicText(): boolean { return this._after.isItalicText; } public isItalicTextFor(propName: string): boolean { return this._after.isItalicTextFor(propName); } get isPlacementCenter(): boolean { return this._after.isPlacementCenter; } public isPlacementCenterFor(propName: string): boolean { return this._after.isPlacementCenterFor(propName); } get isPlacementLeft(): boolean { return this._after.isPlacementLeft; } public isPlacementLeftFor(propName: string): boolean { return this._after.isPlacementLeftFor(propName); } get isPlacementRight(): boolean { return this._after.isPlacementRight; } public isPlacementRightFor(propName: string): boolean { return this._after.isPlacementRightFor(propName); } get isPlacementStretchUnder(): boolean { return this._after.isPlacementStretchUnder; } public isPlacementStretchUnderFor(propName: string): boolean { return this._after.isPlacementStretchUnderFor(propName); } get isPlacementUnder(): boolean { return this._after.isPlacementUnder; } public isPlacementUnderFor(propName: string): boolean { return this._after.isPlacementUnderFor(propName); } get isUnderline(): boolean { return this._after.isUnderline; } public isUnderlineFor(propName: string): boolean { return this._after.isUnderlineFor(propName); } get id(): string { return this._after.id; } get overrideText(): string { return this._after.overrideText; } public overrideTextFor(propName: string): string { return this._after.overrideTextFor(propName); } public propAtIndex(index: number): Property { return this.properties[index]; } public propAtName(propName: string): Property { return this._after.propAtName(propName); } get propCount(): number { return this._after.propCount; } get propNames(): string[] { return this._after.propNames; } get properties(): Property[] { return this._after.properties; } get propValues(): any[] { return this._after.propValues; } get type(): string { return this._after.type; } public setValue(name: string, value:any, propDef: PropertyDef): Property { const newProps = []; let found = false; let newProp:Property = null; this.properties.forEach((prop: Property) => { if (prop.name === name) { newProp = new Property(name, value, propDef.format, prop.annotations); newProps.push(newProp); found = true; } else { newProps.push(prop); } }); if (!found) { newProp = new Property(name, value); newProps.push(newProps); } this._after = RecordUtil.newRecord(this.id, newProps, this.annotations); return newProp; } get tipText(): string { return this._after.tipText; } public tipTextFor(propName: string): string { return this._after.tipTextFor(propName); } public toRecord(): Record { return RecordUtil.newRecord(this.id, this.properties, this.annotations); } public toJSON() { return this.afterEffects().toJSON(); } public valueAtName(propName: string): any { return this._after.valueAtName(propName); } }