Index: frontend-ng/src/app/channel/page/pageStructure.service.js IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- frontend-ng/src/app/channel/page/pageStructure.service.js (revision deb48c5a81f39af2ac675e097c16665596b76a16) +++ frontend-ng/src/app/channel/page/pageStructure.service.js (date 1525830144000) @@ -105,7 +105,13 @@ return; } - const container = this.containers[this.containers.length - 1]; + // const container = this.containers[this.containers.length - 1]; + const container = this._findParentPageStructureElement(metaData); + if (!container) { + this.$log.warn('Unable to register component outside of a container context.'); + return; + } + try { const component = new ComponentElement(commentDomElement, metaData, container, this.HstCommentsProcessorService); container.addComponent(component); @@ -114,6 +120,19 @@ } } + _findParentPageStructureElement(metaData) { + if (metaData && metaData.refNS) { + const parentRefNS = metaData.refNS.slice(0, -3); + for (let i = 0; i < this.containers.length; i += 1) { + if (this.containers[i].metaData.refNS === parentRefNS) { + return this.containers[i]; + } + } + } + + return false; + } + _registerPageMetaData(metaData) { delete metaData[this.HST.TYPE]; this.PageMetaDataService.add(metaData); @@ -185,6 +204,16 @@ return this.embeddedLinks; } + _resetEmbeddedLinks() { + PageStructureService.clearParsedElements(); + this.HstCommentsProcessorService.run( + document, + PageStructureService.registerParsedElement.bind(PageStructureService), + ); + PageStructureService.attachEmbeddedLinks(); + } + + getComponentById(id) { let component = null; this.containers.some((container) => { @@ -312,8 +341,6 @@ const $newMarkup = $(newMarkup); const container = oldComponent.getContainer(); - this._removeEmbeddedLinksInComponent(oldComponent); - oldComponent.replaceDOM($newMarkup, () => { this._notifyChangeListeners(); }); @@ -327,7 +354,7 @@ } else { container.removeComponent(oldComponent); } - this.attachEmbeddedLinks(); + this._resetEmbeddedLinks(); return newComponent; } @@ -342,7 +369,6 @@ } _updateContainer(oldContainer, newMarkup) { - this._removeEmbeddedLinksInContainer(oldContainer); const $newMarkup = $(newMarkup); oldContainer.replaceDOM($newMarkup, () => { @@ -352,7 +378,8 @@ const container = this._createContainer($newMarkup); const newContainer = this._replaceContainer(oldContainer, container); - this.attachEmbeddedLinks(); + this._resetEmbeddedLinks(); + return newContainer; }