Canh Ngo pushed to branch feature/cmng-psp1 at cms-community / hippo-addon-channel-manager
Commits: 3cd0ca8e by Canh Ngo at 2016-03-21T14:28:11+01:00 CHANNELMGR-467: peer review work, simplified some calls to back-end - - - - - 5 changed files: - frontend-ng/src/angularjs/api/hst.service.js - frontend-ng/src/angularjs/channel/page/element/pageStructureElement.js - frontend-ng/src/angularjs/channel/page/pageStructure.service.js - frontend-ng/src/angularjs/channel/page/rendering.service.js - frontend-ng/src/angularjs/channel/page/rendering.service.spec.js Changes: ===================================== frontend-ng/src/angularjs/api/hst.service.js ===================================== --- a/frontend-ng/src/angularjs/api/hst.service.js +++ b/frontend-ng/src/angularjs/api/hst.service.js @@ -91,18 +91,7 @@ export class HstService { * @returns {*} the request promise */ addHstComponent(catalogComponent, containerId) { - const requestPayload = `data: { - parentId: ${containerId}, - id: ${catalogComponent.id}, - name: ${catalogComponent.name}, - label: ${catalogComponent.label}, - type: ${catalogComponent.type}, - template: ${catalogComponent.template}, - componentClassName: ${catalogComponent.componentClassName}, - xtype: ${catalogComponent.xtype}, - children: [] - }`; - return this.doPost(requestPayload, containerId, 'create', catalogComponent.id); + return this.doPost(null, containerId, 'create', catalogComponent.id); } removeHstComponent(containerId, componentId) { ===================================== frontend-ng/src/angularjs/channel/page/element/pageStructureElement.js ===================================== --- a/frontend-ng/src/angularjs/channel/page/element/pageStructureElement.js +++ b/frontend-ng/src/angularjs/channel/page/element/pageStructureElement.js @@ -77,16 +77,20 @@ export class PageStructureElement { * @return the jQuery element refering to the inserted markup in the DOM document */ replaceDOM(htmlFragment) { - const startCommentNode = this.getStartComment()[0]; - let node = this.getEndComment()[0]; - while (node && node !== startCommentNode) { + const endCommentNode = this.getEndComment()[0]; + let node = this.getStartComment()[0]; + while (node && node !== endCommentNode) { const toBeRemoved = node; - node = node.previousSibling; + node = node.nextSibling; toBeRemoved.parentNode.removeChild(toBeRemoved); } + if (!node) { + throw new Error('Inconsistent PageStructureElement: startComment and endComment elements should be sibling'); + } + const jQueryNodeCollection = $(htmlFragment); - this.getStartComment().replaceWith(jQueryNodeCollection); + this.getEndComment().replaceWith(jQueryNodeCollection); return jQueryNodeCollection; } ===================================== frontend-ng/src/angularjs/channel/page/pageStructure.service.js ===================================== --- a/frontend-ng/src/angularjs/channel/page/pageStructure.service.js +++ b/frontend-ng/src/angularjs/channel/page/pageStructure.service.js @@ -170,15 +170,13 @@ export class PageStructureService { } _renderContainer(container) { - this.RenderingService.fetchContainerMarkup(container).then((response) => { - this._updateContainer(container, response.data); - }); + return this.RenderingService.fetchContainerMarkup(container) + .then((markup) => this._updateContainer(container, markup)); } _updateContainer(container, newMarkup) { - const jQueryContainerElement = container.replaceDOM(newMarkup); - this._replaceContainer(container, this._createContainer(jQueryContainerElement)); - this.OverlaySyncService.syncIframe(); // necessary? mutation observer should trigger this... + // consider following three actions to be an atomic operation + this._replaceContainer(container, this._createContainer(container.replaceDOM(newMarkup))); } _replaceComponent(oldComponent, newComponent) { @@ -191,7 +189,7 @@ export class PageStructureService { } addComponentToContainer(catalogComponent, overlayDomElementOfContainer) { - const container = this.containers.find((c) => c.getOverlayElement()[0] === overlayDomElementOfContainer); + const container = this._findContainerByOverlayElement(overlayDomElementOfContainer); if (container) { this.HstService.addHstComponent(catalogComponent, container.getId()) @@ -205,13 +203,21 @@ export class PageStructureService { } } + _findContainerByOverlayElement(overlayElement) { + return this.containers.find((container) => container.getOverlayElement()[0] === overlayElement); + } + _replaceContainer(oldContainer, newContainer) { const index = this.containers.indexOf(oldContainer); if (index === -1) { this.$log.warn('Cannot find container', oldContainer); return; } - this.containers[index] = newContainer; + if (newContainer) { + this.containers[index] = newContainer; + } else { + this.containers.splice(index, 1); + } } /** @@ -224,32 +230,36 @@ export class PageStructureService { let container = null; this.hstCommentsProcessorService.processFragment(jQueryNodeCollection, (commentDomElement, metaData) => { - switch (metaData[this.HST.TYPE]) { - case this.HST.TYPE_CONTAINER: - if (!container) { - container = new ContainerElement(commentDomElement, metaData, this.hstCommentsProcessorService); - } else { - this.$log.warn('More than one container in the DOM Element!'); - return; - } - break; - - case this.HST.TYPE_COMPONENT: - if (!container) { - this.$log.warn('Unable to register component outside of a container context.'); - return; - } - - try { - container.addComponent(new ComponentElement(commentDomElement, metaData, - container, this.hstCommentsProcessorService)); - } catch (exception) { - this.$log.debug(exception, metaData); - } - break; - - default: - break; + try { + switch (metaData[this.HST.TYPE]) { + case this.HST.TYPE_CONTAINER: + if (!container) { + container = new ContainerElement(commentDomElement, metaData, this.hstCommentsProcessorService); + } else { + this.$log.warn('More than one container in the DOM Element!'); + return; + } + break; + + case this.HST.TYPE_COMPONENT: + if (!container) { + this.$log.warn('Unable to register component outside of a container context.'); + return; + } + + try { + container.addComponent(new ComponentElement(commentDomElement, metaData, + container, this.hstCommentsProcessorService)); + } catch (exception) { + this.$log.debug(exception, metaData); + } + break; + + default: + break; + } + } catch (exception) { + this.$log.debug(exception, metaData); } }); ===================================== frontend-ng/src/angularjs/channel/page/rendering.service.js ===================================== --- a/frontend-ng/src/angularjs/channel/page/rendering.service.js +++ b/frontend-ng/src/angularjs/channel/page/rendering.service.js @@ -30,9 +30,9 @@ export class RenderingService { method: 'GET', url: container.getRenderUrl(), header: { - Accept: 'application/json, text/plain, */*', + Accept: 'text/html', }, - }); + }).then((response) => response.data); } fetchComponentMarkup(component, propertiesMap) { @@ -52,7 +52,7 @@ export class RenderingService { method: 'POST', url: component.getRenderUrl(), headers: { - Accept: 'text/html, */*', + Accept: 'text/html', 'Content-Type': 'application/x-www-form-urlencoded', }, data: propertiesMap, ===================================== frontend-ng/src/angularjs/channel/page/rendering.service.spec.js ===================================== --- a/frontend-ng/src/angularjs/channel/page/rendering.service.spec.js +++ b/frontend-ng/src/angularjs/channel/page/rendering.service.spec.js @@ -46,7 +46,7 @@ describe('RenderingService', () => { RenderingService.fetchComponentMarkup(component, { foo: 1, bar: 'a:b' }); $httpBackend.expectPOST('/test-render-url', 'foo=1&bar=a%3Ab', { - Accept: 'text/html, */*', + Accept: 'text/html', 'Content-Type': 'application/x-www-form-urlencoded', }); $httpBackend.flush(); @@ -60,9 +60,7 @@ describe('RenderingService', () => { RenderingService.fetchContainerMarkup(container); - $httpBackend.expectGET('/test-render-url', { - Accept: 'application/json, text/plain, */*', - }); + $httpBackend.expectGET('/test-render-url'); $httpBackend.flush(); }); }); View it on GitLab: https://code.onehippo.org/cms-community/hippo-addon-channel-manager/commit/3cd0ca8e1388bedc63966010a13094c1339365d0
_______________________________________________ Hippocms-svn mailing list Hippocms-svn@lists.onehippo.org https://lists.onehippo.org/mailman/listinfo/hippocms-svn