UNPKG

kentico-cloud-delivery

Version:

Official Kentico Cloud Delivery SDK

104 lines 5.36 kB
var BrowserRichTextParser = /** @class */ (function () { function BrowserRichTextParser() { this.modularContentWrapperElem = 'div'; this.modularContent = { type: 'application/kenticocloud', dataType: 'data-type', dataCodename: 'data-codename' }; this.link = { nodeName: 'a', dataItemId: 'data-item-id' }; } BrowserRichTextParser.prototype.resolveRichTextField = function (html, replacement, config) { try { var doc = this.createWrapperElement(html); // get all modular content items var result = this.processRichTextField(doc.children, replacement, config, { links: [], modularContentItems: [] }); return { links: result.links, modularContentItems: result.modularContentItems, resolvedHtml: doc.innerHTML }; } catch (error) { throw Error('Parsing HTML failed:' + error); } }; BrowserRichTextParser.prototype.createWrapperElement = function (html) { var element = document.createElement(this.modularContentWrapperElem); element.innerHTML = html; return element; }; BrowserRichTextParser.prototype.processRichTextField = function (htmlCollection, replacement, config, result) { if (!htmlCollection || htmlCollection.length === 0) { // there are no more nodes } else { // extract objects for (var i = 0; i < htmlCollection.length; i++) { var element = htmlCollection[i]; var typeAttribute = element.attributes ? element.attributes.getNamedItem('type') : undefined; if (element.attributes && typeAttribute && typeAttribute.value && typeAttribute.value.toLowerCase() === this.modularContent.type.toLowerCase()) { // node is modular content object var dataCodenameAttribute = element.attributes.getNamedItem(this.modularContent.dataCodename); var dataTypeAttribute = element.attributes.getNamedItem(this.modularContent.dataType); var modularItem = { dataCodename: dataCodenameAttribute ? dataCodenameAttribute.value : '', dataType: dataTypeAttribute ? dataTypeAttribute.value : '' }; // add to result result.modularContentItems.push(modularItem); // replace html var parentElement = element.parentElement; if (!parentElement) { console.warn("Could not replace modular content '" + modularItem.dataCodename + "' of '" + modularItem.dataType + "' because parent node is null. Please report this error if you are seeing this."); } else { // create new element var newElem = document.createElement(config.modularContentWrapperTag); newElem.innerHTML = replacement.getModularContentHtml(modularItem.dataCodename); // add classes newElem.className = config.modularContentWrapperClasses.map(function (m) { return m; }).join(' '); // remove original object element parentElement.replaceChild(newElem, element); } } if (element.nodeName.toLowerCase() === this.link.nodeName.toLowerCase()) { var dataItemIdAttribute = element.attributes.getNamedItem(this.link.dataItemId); if (dataItemIdAttribute) { var link = { dataItemId: dataItemIdAttribute ? dataItemIdAttribute.value : '' }; // add to result result.links.push(link); var resolvedUrl = replacement.getLinkUrl(link.dataItemId); // add url to link var hrefAttribute = element.attributes.getNamedItem('href'); if (!hrefAttribute) { // href attribute is missing if (config.enableAdvancedLogging) { console.warn("Cannot set url '" + resolvedUrl + "' because 'href' attribute is not present in the <a> tag. Please report this issue if you are seeing this."); } } else { hrefAttribute.value = resolvedUrl; } } } // recursively process child nodes if (element.children && element.children.length > 0) { this.processRichTextField(element.children, replacement, config, result); } } } return result; }; return BrowserRichTextParser; }()); export { BrowserRichTextParser }; //# sourceMappingURL=browser-rich-text.parser.js.map