///
///
class DomContentBlockConverter {
convert(element:HTMLElement):DomContentBlock {
const contentPath = this.valueOf(element, 'content-path');
const apiKey = this.valueOf(element, 'api-key');
const apiHost = this.valueOf(element, 'api-host');
const privateApiKey = this.extractPrivateApiKey(element);
const defaultContent = this.extractDefaultContent(element);
const version = this.intValueOf(element, 'version');
const contentBlock = new ContentBlock('', contentPath, apiKey, apiHost, null, null, defaultContent, version);
return new DomContentBlock(element, contentBlock, privateApiKey, null);
}
private extractPrivateApiKey(element:HTMLElement):string {
const privateApiKey = this.valueOf(element, 'private-api-key');
return privateApiKey === '' ? null : privateApiKey;
};
private intValueOf(element:HTMLElement, attributeName:string):number {
const rawValue = this.valueOf(element, attributeName);
const value = parseInt(rawValue, 10);
return isNaN(value) ? null : value;
}
private valueOf(element:HTMLElement, attributeName:string):string {
const attr = element.attributes.getNamedItem(`data-${attributeName}`);
return attr === null ? null : attr.value;
};
createNewBlock(domContentBlock:DomContentBlock, existingBlock:ContentBlock):DomContentBlock {
return new DomContentBlock(domContentBlock.element, existingBlock, domContentBlock.privateApiKey, null);
}
createNewEditableBlock(domContentBlock:DomContentBlock, existingBlock:EditableContentBlock):DomContentBlock {
return new DomContentBlock(domContentBlock.element, existingBlock.contentBlock, domContentBlock.privateApiKey,
existingBlock.renuoUploadCredentials);
}
private extractDefaultContent(element:HTMLElement):string {
return element.innerHTML;
}
}