You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/12/19 21:09:51 UTC

[sling-org-apache-sling-app-cms] 04/17: SLING-7900 UI changes

This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch SLING-7900
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 4d4651e15b6797c3548227a89979ae596e1cd75d
Author: JE Bailey <ja...@sas.com>
AuthorDate: Wed Sep 12 16:20:36 2018 -0400

    SLING-7900 UI changes
    
    * new 'form' page component used to return the minimalist content for a
    modal
    * Modal dialogs now have submit and cancel buttons at the bottom
    * suffix breadcrumb is updated
    * re structured the left panel to remove inline actions
    * re structuring available actions internally
---
 .../core/models/components/AvailableActions.java   |  21 +++
 .../cms/core/models/components/Breadcrumbs.java    |   9 +-
 .../cms/core/models/components/ContentTable.java   |  11 +-
 .../sling/cms/core/models/components/SiteNav.java  |  26 +++
 ui/src/main/frontend/src/js/cms.js                 |   4 +-
 ui/src/main/resources/jcr_root/content.json        |   6 +-
 .../components/cms/contentnav/contentnav.jsp       |  32 +---
 .../libs/sling-cms/components/pages/base/nav.jsp   |   3 +
 .../libs/sling-cms/components/pages/form.json      |   4 +
 .../libs/sling-cms/components/pages/form/form.jsp  |  20 ++
 .../sling-cms/content/actions/create/folder.json   |  59 ++++++
 .../{site/create.json => actions/create/site.json} |   7 +-
 .../create/sitegroup.json}                         |   2 +-
 .../{file/edit.json => actions/edit/file.json}     |   2 +-
 .../editgroup.json => actions/edit/folder.json}    |  16 +-
 .../{site/create.json => actions/edit/site.json}   |  29 +--
 .../jcr_root/libs/sling-cms/content/file/edit.json |   2 +-
 .../libs/sling-cms/content/file/upload.json        |   7 +-
 .../libs/sling-cms/content/folder/create.json      | 116 ++++++------
 .../libs/sling-cms/content/site/create.json        |   7 +-
 .../libs/sling-cms/content/site/creategroup.json   |   2 +-
 .../libs/sling-cms/content/site/editgroup.json     |  86 ++++-----
 .../libs/sling-cms/content/site/sites.json         |  98 +++++-----
 .../jcr_root/libs/sling-cms/content/start.json     | 208 ++++++++++-----------
 .../libs/sling-cms/content/template/create.json    | 116 ++++++------
 .../sling-cms/content/templates/sitegroup.json     |   5 +
 26 files changed, 491 insertions(+), 407 deletions(-)

diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
new file mode 100644
index 0000000..767cb6f
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/AvailableActions.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+public class AvailableActions {
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
index a856490..c4abe0c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/Breadcrumbs.java
@@ -30,12 +30,18 @@ import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
 import org.apache.sling.models.annotations.injectorspecific.Self;
-
+/**
+ * Logic for the Suffix BreadCrumb Component
+ * 
+ * 
+ *
+ */
 @Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
 public class Breadcrumbs {
 
     @Inject
     @Via("resource")
+    @Default(intValues=1)
     int depth;
 
     @Inject
@@ -43,6 +49,7 @@ public class Breadcrumbs {
 
     @Inject
     @Via("resource")
+    @Default(values="../..")
     String prefix;
 
     @Inject
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
index 21ed513..cbd611e 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/ContentTable.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.models.annotations.Default;
 import org.apache.sling.models.annotations.DefaultInjectionStrategy;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
@@ -38,6 +39,11 @@ public class ContentTable {
     @Inject
     @Via("resource")
     private List<Resource> columns;
+    
+    @Inject
+    @Via("resource")
+    @Default(values="/")
+    private String defaultPath;
 
     private String[] types;
 
@@ -58,7 +64,10 @@ public class ContentTable {
     public List<ChildResourceData> getChildren() {
         Resource suffix = slingRequest.getRequestPathInfo().getSuffixResource();
         if (suffix == null) {
-            return Collections.emptyList();
+            suffix = slingRequest.getResourceResolver().getResource(defaultPath);
+            if (suffix == null) {
+                return Collections.emptyList();
+            }
         }
         List<ChildResourceData> response = new ArrayList<>();
         suffix.listChildren().forEachRemaining(child -> {
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java b/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java
new file mode 100644
index 0000000..934cf3a
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/models/components/SiteNav.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.cms.core.models.components;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.models.annotations.DefaultInjectionStrategy;
+import org.apache.sling.models.annotations.Model;
+
+@Model(adaptables = SlingHttpServletRequest.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
+public class SiteNav {
+
+}
diff --git a/ui/src/main/frontend/src/js/cms.js b/ui/src/main/frontend/src/js/cms.js
index d53ed3d..72b9474 100644
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@ -50,9 +50,9 @@ Sling.CMS = {
 				return $modal;
 			},
 			fetchModal: function(title, link, path, complete){
-				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-warning button" aria-label="close">Cancel</a></footer></div>');
+				var $modal = $('<div class="modal"><div class="modal-background"></div><div class="modal-card is-draggable"><header class="modal-card-head"><p class="modal-card-title">'+title+'</p></header><section class="modal-card-body"></section><footer class="modal-card-foot"><a class="close-modal is-danger button" aria-label="close">Cancel</a></footer></div>');
 				$('body').append($modal);
-				$modal.find('.modal-card-body').load(link + " " +path,function(){
+				$modal.find('.modal-card-body').load(link,function(){
 					var submitButton = $modal.find('button:submit');
 					var closeButton = $modal.find('.close-modal');
 					submitButton.insertBefore(closeButton);
diff --git a/ui/src/main/resources/jcr_root/content.json b/ui/src/main/resources/jcr_root/content.json
index e064ab5..0f29c12 100644
--- a/ui/src/main/resources/jcr_root/content.json
+++ b/ui/src/main/resources/jcr_root/content.json
@@ -1,3 +1,7 @@
 {
-    "jcr:primaryType": "sling:Folder"
+    "jcr:primaryType": "sling:Folder",
+    "allowedResourceTypes": [
+        "sling:Site",
+        "sling:OrderedFolder"
+    ]
 }
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
index 17570b7..5fe486d 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentnav/contentnav.jsp
@@ -17,36 +17,6 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:findResources var="content" query="${properties.query}" language="JCR-SQL2" />
 <aside class="menu">
-<a class="menu-label toggle-hidden" data-target="#nav-${fn:replace(properties.title,' ','-')}">${properties.title}</a>
-<ul class="menu-list ${fn:startsWith(slingRequest.requestURI, properties.prefix) ? '' : 'is-hidden'}" id="nav-${fn:replace(properties.title,' ','-')}">
-    <c:forEach var="item" items="${content}">
-        <c:set var="prefixPath" value="${item.path}/" />
-        <li class="${(fn:startsWith(slingRequest.requestPathInfo.suffix, prefixPath) || slingRequest.requestPathInfo.suffix == item.path) ? 'is-active' : ''}">
-            <a href="${properties.itemPrefix}${item.path}" title="View ${item.valueMap['jcr:title']}">
-                <c:choose>
-                    <c:when test="${sling:getRelativeResource(item,'jcr:content') != null}">
-                        <sling:encode value="${sling:getRelativeResource(item,'jcr:content').valueMap['jcr:title']}" mode="HTML" />
-                    </c:when>
-                    <c:when test="${not empty item.valueMap['jcr:title']}">
-                        <sling:encode value="${item.valueMap['jcr:title']}" mode="HTML" />
-                    </c:when>
-                    <c:otherwise>
-                        <sling:encode value="${item.name}" mode="HTML" />
-                    </c:otherwise>
-                </c:choose>
-            </a>
-        </li>
-    </c:forEach>
-    <c:choose>
-        <c:when test="${not empty properties.createTitle}">
-            <c:set var="createTitle" value="${properties.createTitle}" />
-        </c:when>
-        <c:otherwise>
-            <c:set var="createTitle" value="${properties.title}" />
-        </c:otherwise>      
-    </c:choose>
-    <li><a href="${properties.createPath}" class="Fetch-Modal" title="Create a new ${createTitle}"  data-title="Create ${createTitle}" data-path=".Main-Content form"><span class="icon is-small"><i class="jam jam-plus"></i></span> ${createTitle}</a></li>
-</ul>
+<a class="menu-label toggle-hidden" href="${properties.itemPrefix}" data-target="#nav-${fn:replace(properties.title,' ','-')}">${properties.title}</a>
 </aside>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index 36aefb8..e8ee431 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@ -23,6 +23,9 @@
     <img src="/static/clientlibs/sling-cms/img/sling-logo.svg" width="100" alt="Apache Sling"/>
 </a>
 <a href="/cms/start.html" class="navbar-item" title="CMS Home"><span class="icon"><i class="jam jam-home-f"></i></span></a>
+<div class="navbar-item">
+<sling:include path="breadcrumb" resourceType="sling-cms/components/cms/contentbreadcrumb" />
+</div>
 <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
   <span aria-hidden="true"></span>
   <span aria-hidden="true"></span>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json
new file mode 100644
index 0000000..f815a51
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form.json
@@ -0,0 +1,4 @@
+{
+    "jcr:primaryType" : "sling:Component",
+    "jcr:title": "CMS - Form Page"
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp
new file mode 100644
index 0000000..16eedf0
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/form/form.jsp
@@ -0,0 +1,20 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+ <%@include file="/libs/sling-cms/global.jsp"%>
+<sling:include path="container" resourceType="sling-cms/components/general/container" />
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
new file mode 100644
index 0000000..8c04f36
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/folder.json
@@ -0,0 +1,59 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Folder</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:content/jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:OrderedFolder"
+                    },
+                    "contentPrimaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/jcr:primaryType",
+                        "value": "nt:unstructured"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
similarity index 90%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
index 5d6c0e9..d2c64c9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/site.json
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
similarity index 97%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
index 9b434ac..353affa 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/create/sitegroup.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
similarity index 90%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
index 6887601..f11fdf7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/file.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Edit File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
similarity index 70%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
index a508fc6..b2092a5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/folder.json
@@ -2,7 +2,7 @@
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
 		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Site Group",
+		"jcr:title": "Edit Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
@@ -10,13 +10,12 @@
 			"richtext": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site Group</h3>"
+				"text": "<h3>Edit Folder</h3>"
 			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
+				"button": "Edit Folder",
 				"successPrepend":"/libs/sling-cms/content/site/content.html",
 				"fields": {
 					"jcr:primaryType": "nt:unstructured",
@@ -27,15 +26,6 @@
 						"label": "Title",
 						"name": "jcr:content/jcr:title",
 						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
 					}
 				}
 			}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
similarity index 73%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
index 5d6c0e9..319e9a5 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/actions/edit/site.json
@@ -2,7 +2,7 @@
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
 		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Site",
+		"jcr:title": "Edit Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
@@ -10,14 +10,12 @@
 			"richtext": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
+				"text": "<h3>Edit Site</h3>"
 			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Site",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
+				"button": "Edit Site",
 				"fields": {
 					"jcr:primaryType": "nt:unstructured",
 					"sling:resourceType": "sling-cms/components/general/container",
@@ -28,17 +26,12 @@
 						"name": "jcr:title",
 						"required": true
 					},
-					"name": {
+					"description": {
 						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
+						"sling:resourceType": "sling-cms/components/editor/fields/textarea",
+						"label": "Description",
+						"name": "jcr:description",
+						"required": false
 					},
 					"url": {
 						"jcr:primaryType": "nt:unstructured",
@@ -63,12 +56,6 @@
 						"name": "sling:configRef",
 						"required": false,
 						"type": "config"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:Site"
 					}
 				}
 			}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
index 6887601..f11fdf7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Edit File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
index 1723c34..f8ae93f 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/upload.json
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Upload File",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Upload File</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
index 73a0458..8c04f36 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/folder/create.json
@@ -1,59 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Folder",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Folder</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value":"jcr:content/jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "sling:OrderedFolder"
-					},
-					"contentPrimaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:content/jcr:primaryType",
-						"value": "nt:unstructured"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/form",
+        "jcr:title": "Create Folder",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Folder</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:content/jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "sling:OrderedFolder"
+                    },
+                    "contentPrimaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:content/jcr:primaryType",
+                        "value": "nt:unstructured"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
index 5d6c0e9..d2c64c9 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/create.json
@@ -1,17 +1,12 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Site",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
 			"jcr:primaryType": "nt:unstructured",
 			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Site</h3>"
-			},
 			"slingform": {
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/editor/slingform",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
index 9b434ac..353affa 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/creategroup.json
@@ -1,7 +1,7 @@
 {
 	"jcr:primaryType": "sling:Page",
 	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
+		"sling:resourceType": "sling-cms/components/pages/form",
 		"jcr:title": "Create Folder",
 		"jcr:primaryType": "nt:unstructured",
 		"container": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
index a508fc6..44c9b33 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/editgroup.json
@@ -1,44 +1,44 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Edit Site Group",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Edit Site Group</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/*",
-				"button": "Create Folder",
-				"successPrepend":"/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:content/jcr:title",
-						"required": true
-					},
-					"config": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/path",
-						"basePath": "/conf",
-						"label": "Config",
-						"name": "sling:configRef",
-						"required": false,
-						"type": "config"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Edit Site Group",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Edit Site Group</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/*",
+                "button": "Create Folder",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:content/jcr:title",
+                        "required": true
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/path",
+                        "basePath": "/conf",
+                        "label": "Config",
+                        "name": "sling:configRef",
+                        "required": false,
+                        "type": "config"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
index 275fcc9..9c37266 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/sites.json
@@ -1,67 +1,71 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Site Content",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"contentactions": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentactions",
-				"actions": {
-					"page": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Site",
-						"icon" : "jam jam-document",
-						"prefix": "/cms/site/create.html"
-					},
-					"folder": {
-						"jcr:primaryType": "nt:unstructured",
-						"label": "Site Group",
-						"icon" : "jam jam-document-f",
-						"prefix": "/cms/site/creategroup.html"
-					}
-				}
-			},
-			"contentbreadcrumb": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
-				"depth": 2,
-				"prefix": "/cms/site/sites.html",
-				"titleProp": "jcr:content/jcr:title"
-			},
-			"contenttable": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contenttable",
-				"columns": {
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Site Content",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {
+                    "page": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Site",
+                        "icon": "jam jam-document",
+                        "prefix": "/cms/actions/create/site.html"
+                    },
+                    "folder": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "label": "Site Group",
+                        "icon": "jam jam-document-f",
+                        "prefix": "/cms/actions/create/sitegroup.html"
+                    }
+                }
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 2,
+                "prefix": "/cms/site/sites.html",
+                "titleProp": "jcr:content/jcr:title"
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "defaultPath": "/content",
+                "columns": {
                     "jcr:primaryType": "nt:unstructured",
-                    "resourceTypes":["sling:Site","sling:OrderedFolder"],
+                    "resourceTypes": [
+                        "sling:Site",
+                        "sling:OrderedFolder"
+                    ],
                     "name": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/name",
                         "link": true,
-                        "jcr:title":"Name",
-                         "prefix": "/cms/site/content.html"
+                        "jcr:title": "Name",
+                        "prefix": "/cms/site/sites.html"
                     },
                     "title": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/text",
                         "property": "jcr:content/jcr:title",
-                        "jcr:title":"Title",
+                        "jcr:title": "Title",
                         "type": "String"
                     },
                     "lastModified": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/lastmodified",
-                        "jcr:title":"Last Modified",
+                        "jcr:title": "Last Modified",
                         "subPath": "jcr:content/"
                     },
                     "actions": {
                         "jcr:primaryType": "nt:unstructured",
                         "sling:resourceType": "sling-cms/components/cms/columns/actions",
-                        "jcr:title":"Actions",
+                        "jcr:title": "Actions",
                         "edit": {
                             "jcr:primaryType": "nt:unstructured",
                             "modal": true,
@@ -84,8 +88,8 @@
                             "modal": true
                         }
                     }
-				}
-			}
-		}
-	}
+                }
+            }
+        }
+    }
 }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index 2c061fa..b4ec947 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -1,110 +1,100 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Start",
-		"jcr:primaryType": "nt:unstructured",
-		"sling:vanityPath": "/cms",
-		"sling:redirect": true,
-		"center": true,
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h2>Welcome to the Apache Sling CMS!<\/h2><p>This is a full-featured Content Management System built using the Apache Sling Framework! To begin, select Site on the left to add your first website.<\/p>"
-			}
-		},
-		"nav": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"sitenav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/site/creategroup.html/content",
-				"createTitle": "Site Group",
-				"prefix": "/cms/site",
-				"itemPrefix": "/cms/site/sites.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/content') ORDER BY NAME()",
-				"title": "Sites"
-			},
-			"staticnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/static",
-				"createTitle": "Folder",
-				"prefix": "/cms/static",
-				"itemPrefix": "/cms/static/content.html",
-				"query": "SELECT * FROM [sling:Folder] AS s WHERE ISCHILDNODE(s,'/static') ORDER BY NAME()",
-				"title": "Static Content"
-			},
-			"taxonomynav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/taxonomy/create.html/etc/taxonomy",
-				"prefix": "/cms/taxonomy",
-				"itemPrefix": "/cms/taxonomy/list.html",
-				"query": "SELECT * FROM [sling:Taxonomy] AS s WHERE ISCHILDNODE(s,'/etc/taxonomy') ORDER BY NAME()",
-				"title": "Taxonomy"
-			},
-			"configurationnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/conf",
-				"prefix": "/cms/config",
-				"itemPrefix": "/cms/config/list.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/conf') ORDER BY NAME()",
-				"title": "Configuration"
-			},
-			"usergeneratednav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/folder/create.html/etc/usergenerated",
-				"createFolder": "Bucket",
-				"prefix": "/cms/usergenerated",
-				"itemPrefix": "/cms/usergenerated/content.html",
-				"query": "SELECT * FROM [sling:OrderedFolder] AS s WHERE ISCHILDNODE(s,'/etc/usergenerated') ORDER BY NAME()",
-				"title": "User Generated"
-			},
-			"toolsnav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/staticnav",
-				"title": "Tools",
-				"links": {
-					"jcr:primaryType": "nt:unstructured",
-					"contentpackages": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/packages.html",
-						"text": "Content Packages"
-					},
-					"i18n": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/cms/i18n/dictionaries.html/etc/i18n",
-						"text": "Internationalization (i18n)"
-					},
-					"mappings": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/cms/mappings/list.html/etc/map",
-						"text": "Mappings"
-					},
-					"nodebrowser": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/browser.html",
-						"text": "Node Browser"
-					},
-					"systemconsole": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/system/console",
-						"text": "System Console"
-					},
-					"usersgroups": {
-						"jcr:primaryType": "nt:unstructured",
-						"link": "/bin/users.html",
-						"text": "Users &amp; Groups"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Start",
+        "jcr:primaryType": "nt:unstructured",
+        "sling:vanityPath": "/cms",
+        "sling:redirect": true,
+        "center": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h2>Welcome to the Apache Sling CMS!<\/h2><p>This is a full-featured Content Management System built using the Apache Sling Framework! To begin, select Site on the left to add your first website.<\/p>"
+            }
+        },
+        "nav": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "othernav": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/staticnav",
+                "title": "Manage",
+                "links": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sitenav": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/site/sites.html/content",
+                        "text": "Sites"
+                    },
+                    "staticnav": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/static/content.html/static",
+                        "text": "Static Content"
+                    },
+                    "taxonomy": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/taxonomy/list.html/etc/taxonomy",
+                        "text": "Taxonomy"
+                    },
+                    "templates": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/taxonomy/list.html/etc/taxonomy",
+                        "text": "Templates"
+                    },
+                    "config": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/config/list.html/conf",
+                        "text": "Configuration"
+                    },
+                    "usergenerated": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/usergenerated/content.html/etc/usergenerated",
+                        "text": "User Generated"
+                    }
+                }
+            },
+            "toolsnav": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/staticnav",
+                "title": "Tools",
+                "links": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "contentpackages": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/packages.html",
+                        "text": "Content Packages"
+                    },
+                    "i18n": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/i18n/dictionaries.html/etc/i18n",
+                        "text": "Internationalization (i18n)"
+                    },
+                    "mappings": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/cms/mappings/list.html/etc/map",
+                        "text": "Mappings"
+                    },
+                    "nodebrowser": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/browser.html",
+                        "text": "Node Browser"
+                    },
+                    "systemconsole": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/system/console",
+                        "text": "System Console"
+                    },
+                    "usersgroups": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "link": "/bin/users.html",
+                        "text": "Users &amp; Groups"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
index f5d4a73..9a96b51 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/create.json
@@ -1,59 +1,59 @@
 {
-	"jcr:primaryType": "sling:Page",
-	"jcr:content": {
-		"sling:resourceType": "sling-cms/components/pages/base",
-		"jcr:title": "Create Template",
-		"jcr:primaryType": "nt:unstructured",
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/general/container",
-			"richtext": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/general/richtext",
-				"text": "<h3>Create Template</h3>"
-			},
-			"slingform": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/editor/slingform",
-				"actionSuffix": "/templates/",
-				"button": "Create Template",
-				"successPrepend": "/libs/sling-cms/content/site/content.html",
-				"fields": {
-					"jcr:primaryType": "nt:unstructured",
-					"sling:resourceType": "sling-cms/components/general/container",
-					"title": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Title",
-						"name": "jcr:title",
-						"required": true
-					},
-					"name": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/text",
-						"label": "Name",
-						"name": ":name"
-					},
-					"nameParam": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": ":nameParam",
-						"value": "jcr:title"
-					},
-					"primaryType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "jcr:primaryType",
-						"value": "nt:unstructured"
-					},
-					"resourceType": {
-						"jcr:primaryType": "nt:unstructured",
-						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-						"name": "sling:resourceType",
-						"value": "sling-cms/components/cms/pagetemplate"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Create Template",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Create Template</h3>"
+            },
+            "slingform": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/editor/slingform",
+                "actionSuffix": "/templates/",
+                "button": "Create Template",
+                "successPrepend": "/libs/sling-cms/content/site/content.html",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/general/container",
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Title",
+                        "name": "jcr:title",
+                        "required": true
+                    },
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/text",
+                        "label": "Name",
+                        "name": ":name"
+                    },
+                    "nameParam": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": ":nameParam",
+                        "value": "jcr:title"
+                    },
+                    "primaryType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "jcr:primaryType",
+                        "value": "nt:unstructured"
+                    },
+                    "resourceType": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+                        "name": "sling:resourceType",
+                        "value": "sling-cms/components/cms/pagetemplate"
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
new file mode 100644
index 0000000..8533f67
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/templates/sitegroup.json
@@ -0,0 +1,5 @@
+{
+    "jcr:contentType": "nt:unstructured",
+    "sling:resourceType" : "cms/template"
+    
+}