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

Reply via email to