cv-dialog-sdk
Version:
Catavolt Dialog Javascript API
176 lines (175 loc) • 5.75 kB
JavaScript
import { DataAnnotation } from './DataAnnotation';
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 {
constructor(id, properties = [], annotations = [], type) {
this.id = id;
this.properties = properties;
this.annotations = annotations;
this.type = type;
}
annotationsAtName(propName) {
const p = this.propAtName(propName);
return p ? p.annotations : [];
}
afterEffects(after) {
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() {
return DataAnnotation.backgroundColor(this.annotations);
}
backgroundColorFor(propName) {
const p = this.propAtName(propName);
return p && p.backgroundColor ? p.backgroundColor : this.backgroundColor;
}
get foregroundColor() {
return DataAnnotation.foregroundColor(this.annotations);
}
foregroundColorFor(propName) {
const p = this.propAtName(propName);
return p && p.foregroundColor ? p.foregroundColor : this.foregroundColor;
}
get imageName() {
return DataAnnotation.imageName(this.annotations);
}
imageNameFor(propName) {
const p = this.propAtName(propName);
return p && p.imageName ? p.imageName : this.imageName;
}
get imagePlacement() {
return DataAnnotation.imagePlacement(this.annotations);
}
imagePlacementFor(propName) {
const p = this.propAtName(propName);
return p && p.imagePlacement ? p.imagePlacement : this.imagePlacement;
}
get isBoldText() {
return DataAnnotation.isBoldText(this.annotations);
}
isBoldTextFor(propName) {
const p = this.propAtName(propName);
return p && p.isBoldText ? p.isBoldText : this.isBoldText;
}
get isItalicText() {
return DataAnnotation.isItalicText(this.annotations);
}
isItalicTextFor(propName) {
const p = this.propAtName(propName);
return p && p.isItalicText ? p.isItalicText : this.isItalicText;
}
get isPlacementCenter() {
return DataAnnotation.isPlacementCenter(this.annotations);
}
isPlacementCenterFor(propName) {
const p = this.propAtName(propName);
return p && p.isPlacementCenter ? p.isPlacementCenter : this.isPlacementCenter;
}
get isPlacementLeft() {
return DataAnnotation.isPlacementLeft(this.annotations);
}
isPlacementLeftFor(propName) {
const p = this.propAtName(propName);
return p && p.isPlacementLeft ? p.isPlacementLeft : this.isPlacementLeft;
}
get isPlacementRight() {
return DataAnnotation.isPlacementRight(this.annotations);
}
isPlacementRightFor(propName) {
const p = this.propAtName(propName);
return p && p.isPlacementRight ? p.isPlacementRight : this.isPlacementRight;
}
get isPlacementStretchUnder() {
return DataAnnotation.isPlacementStretchUnder(this.annotations);
}
isPlacementStretchUnderFor(propName) {
const p = this.propAtName(propName);
return p && p.isPlacementStretchUnder ? p.isPlacementStretchUnder : this.isPlacementStretchUnder;
}
get isPlacementUnder() {
return DataAnnotation.isPlacementUnder(this.annotations);
}
isPlacementUnderFor(propName) {
const p = this.propAtName(propName);
return p && p.isPlacementUnder ? p.isPlacementUnder : this.isPlacementUnder;
}
get isUnderline() {
return DataAnnotation.isUnderlineText(this.annotations);
}
isUnderlineFor(propName) {
const p = this.propAtName(propName);
return p && p.isUnderline ? p.isUnderline : this.isUnderline;
}
get overrideText() {
return DataAnnotation.overrideText(this.annotations);
}
overrideTextFor(propName) {
const p = this.propAtName(propName);
return p && p.overrideText ? p.overrideText : this.overrideText;
}
propAtIndex(index) {
return this.properties[index];
}
propAtName(propName) {
let prop = null;
this.properties.some(p => {
if (p.name === propName) {
prop = p;
return true;
}
return false;
});
return prop;
}
get propCount() {
return this.properties.length;
}
get propNames() {
return this.properties.map(p => {
return p.name;
});
}
get propValues() {
return this.properties.map(p => {
return p.value;
});
}
get tipText() {
return DataAnnotation.tipText(this.annotations);
}
tipTextFor(propName) {
const p = this.propAtName(propName);
return p && p.tipText ? p.tipText : this.tipText;
}
toJSON() {
return {
id: this.id,
properties: this.properties,
type: TypeNames.RecordTypeName
};
}
toRecord() {
return this;
}
valueAtName(propName) {
let value = null;
this.properties.some(p => {
if (p.name === propName) {
value = p.value;
return true;
}
return false;
});
return value;
}
}