sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dk...@apache.org
Subject [sling-whiteboard] branch master updated: Adding a file editor concept and supporting editing non-existing resources
Date Thu, 01 Feb 2018 21:36:59 GMT
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 5fa0a04  Adding a file editor concept and supporting editing non-existing resources
5fa0a04 is described below

commit 5fa0a049cd575c8582d35decc5a7cd8f4da7061c
Author: Dan Klco <daniel.klco@gmail.com>
AuthorDate: Thu Feb 1 16:36:44 2018 -0500

    Adding a file editor concept and supporting editing non-existing resources
---
 .../sling/cms/core/filters/EditIncludeFilter.java  |   5 +-
 .../sling/cms/core/models/EditableResource.java    |   3 +-
 cms/ui/pom.xml                                     |   1 +
 .../jcr_root/etc/clientlibs/sling-cms/js/editor.js |   5 +-
 .../jcr_root/etc/fileeditors/general.json          |  59 ++++++++++++
 .../jcr_root/etc/fileeditors/jcr:content.json      |   4 +
 .../components/cms/contenttable/contenttable.jsp   |   4 +-
 .../libs/sling-cms/components/cms/fileeditor.json  |   5 +
 .../sling-cms/components/cms/fileeditor/edit.json  |  17 ++++
 .../inputfield.jsp => fileeditor/fileeditor.jsp}   |  31 +++----
 .../fileeditorconfig.jsp}                          |  19 ++--
 .../cms/fileeditorinclude/fileeditorinclude.jsp    |  53 +++++++++++
 .../components/cms/includeeditor/includeeditor.jsp |   4 +-
 .../libs/sling-cms/components/cms/inputfield.json  |   5 -
 .../sling-cms/components/cms/inputfield/edit.json  |  85 -----------------
 .../components/cms/siteconfig/config.json          |   3 +
 .../sitenav.jsp => siteconfig/config/config.jsp}   |  24 +++--
 .../components/cms/siteconfig/config/edit.json     |  19 ++++
 .../components/cms/siteconfig/siteconfig.jsp       |   2 +
 .../field.jsp => cms/staticnav/staticnav.jsp}      |  18 ++--
 .../components/editor/fields/datalist.json         |   4 -
 .../components/editor/fields/path/field.jsp        |   2 +-
 .../components/editor/fields/select/edit.json      |  23 +++++
 .../components/editor/fields/select/field.jsp      |  15 +++
 .../components/editor/fields/taxonomy.json         |   4 +-
 .../components/editor/fields/taxonomy/edit.json    |  23 +++++
 .../components/editor/fields/taxonomy/field.jsp    |  17 ++--
 .../editor/scripts/pageTemplateOptions.jsp         |   4 -
 .../components/editor/slingform/slingform.jsp      |  12 +--
 .../libs/sling-cms/components/pages/base/body.jsp  |   4 +-
 .../libs/sling-cms/components/pages/base/nav.jsp   |   7 --
 .../libs/sling-cms/content/config/list.json        | 103 +++++++++++++++++++++
 .../sling-cms/content/file/configureeditor.json    |  21 +++++
 .../libs/sling-cms/content/file/createeditor.json  |  47 ++++++++++
 .../jcr_root/libs/sling-cms/content/file/edit.json |  21 +++++
 .../libs/sling-cms/content/file/editors.json       | 103 +++++++++++++++++++++
 .../libs/sling-cms/content/site/content.json       |   7 ++
 .../jcr_root/libs/sling-cms/content/start.json     |  51 +++++++---
 38 files changed, 646 insertions(+), 188 deletions(-)

diff --git a/cms/core/src/main/java/org/apache/sling/cms/core/filters/EditIncludeFilter.java b/cms/core/src/main/java/org/apache/sling/cms/core/filters/EditIncludeFilter.java
index 2eb1f1f..3c5da1f 100644
--- a/cms/core/src/main/java/org/apache/sling/cms/core/filters/EditIncludeFilter.java
+++ b/cms/core/src/main/java/org/apache/sling/cms/core/filters/EditIncludeFilter.java
@@ -79,6 +79,7 @@ public class EditIncludeFilter implements Filter {
 					last = true;
 				}
 			}
+			boolean exists = resource.getResourceResolver().getResource(resource.getPath()) != null;
 			writer = response.getWriter();
 			writer.write("<div class=\"Sling-CMS__component\" data-sling-cms-resource-path=\"" + resource.getPath()
 					+ "\" data-sling-cms-resource-type=\"" + resource.getResourceType() + "\" data-sling-cms-edit=\""
@@ -98,7 +99,7 @@ public class EditIncludeFilter implements Filter {
 						"<button class=\"Sling-CMS__edit-button\" data-sling-cms-action=\"movedown\" data-sling-cms-path=\""
 								+ resource.getPath() + "\" title=\"Move Down\">&#9660;</button>");
 			}
-			if (!resource.getName().equals(JcrConstants.JCR_CONTENT)) {
+			if (!resource.getName().equals(JcrConstants.JCR_CONTENT) && exists) {
 				writer.write(
 						"<button class=\"Sling-CMS__edit-button\" data-sling-cms-action=\"delete\" data-sling-cms-path=\""
 								+ resource.getPath() + "\" title=\"Delete\">&times;</button>");
@@ -120,7 +121,7 @@ public class EditIncludeFilter implements Filter {
 		log.trace("getEditPage resource={}", resource);
 		String editPath = null;
 		if (resource != null) {
-			EditableResource editResource = resource.adaptTo(EditableResource.class);
+			EditableResource editResource = new EditableResource(resource);
 			if (editResource != null) {
 				editPath = editResource.getEditPath();
 			}
diff --git a/cms/core/src/main/java/org/apache/sling/cms/core/models/EditableResource.java b/cms/core/src/main/java/org/apache/sling/cms/core/models/EditableResource.java
index d1b7e3a..1dde7be 100644
--- a/cms/core/src/main/java/org/apache/sling/cms/core/models/EditableResource.java
+++ b/cms/core/src/main/java/org/apache/sling/cms/core/models/EditableResource.java
@@ -37,7 +37,8 @@ public class EditableResource {
 	 * @return the component for the specified resource
 	 */
 	public Resource getComponent() {
-		return resource.getResourceResolver().getResource(resource.getResourceType());
+		String resourceType = resource.getResourceType();
+		return resource.getResourceResolver().getResource(resourceType);
 	}
 
 	private Resource getComponentEditPath(Resource component) {
diff --git a/cms/ui/pom.xml b/cms/ui/pom.xml
index 9234445..a9e96c4 100644
--- a/cms/ui/pom.xml
+++ b/cms/ui/pom.xml
@@ -38,6 +38,7 @@
                         <Sling-Nodetypes>SLING-INF/nodetypes/nodetypes.cnd</Sling-Nodetypes>
                         <Sling-Initial-Content>
                         	jcr_root/apps/reference;overwrite:=true;uninstall:=true;path:=/apps/reference,
+                        	jcr_root/etc/fileeditors;overwrite:=false;uninstall:=true;path:=/etc/fileeditors,
                             jcr_root/etc/taxonomy;overwrite:=false;uninstall:=true;path:=/etc/taxonomy,
                             jcr_root/libs/sling-cms;overwrite:=true;uninstall:=true;path:=/libs/sling-cms,
                             jcr_root/etc/clientlibs/sling-cms;overwrite:=true;uninstall:=true;path:=/etc/clientlibs/sling-cms
diff --git a/cms/ui/src/main/resources/jcr_root/etc/clientlibs/sling-cms/js/editor.js b/cms/ui/src/main/resources/jcr_root/etc/clientlibs/sling-cms/js/editor.js
index 74092b6..8110a84 100644
--- a/cms/ui/src/main/resources/jcr_root/etc/clientlibs/sling-cms/js/editor.js
+++ b/cms/ui/src/main/resources/jcr_root/etc/clientlibs/sling-cms/js/editor.js
@@ -29,10 +29,7 @@ if(!window.CMSEditor){
 				CMSEditor.ui.showModal('/cms/editor/delete.html'+$(this).attr('data-sling-cms-path'));
 			});
 			$(".Sling-CMS__edit-button[data-sling-cms-action=edit]").click(function(){
-				CMSEditor.ui.showModal('/cms/editor/edit.html'+$(this).attr('data-sling-cms-path'));
-			});
-			$(".Sling-CMS__edit-button[data-sling-cms-action=editpage]").click(function(){
-				CMSEditor.ui.showModal('/cms/editor/edit.html'+$(this).attr('data-sling-cms-path'));
+				CMSEditor.ui.showModal('/cms/editor/edit.html'+$(this).attr('data-sling-cms-path')+'?editor='+$(this).attr('data-sling-cms-edit'));
 			});
 			$(".Sling-CMS__edit-button[data-sling-cms-action=moveup]").click(function(){
 				CMSEditor.ui.showModal('/cms/editor/moveup.html'+$(this).attr('data-sling-cms-path'));
diff --git a/cms/ui/src/main/resources/jcr_root/etc/fileeditors/general.json b/cms/ui/src/main/resources/jcr_root/etc/fileeditors/general.json
new file mode 100644
index 0000000..bfd121d
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/etc/fileeditors/general.json
@@ -0,0 +1,59 @@
+{
+	"jcr:primaryType": "nt:unstructured",
+	"jcr:title": "General",
+	"editors": {
+		"jcr:primaryType": "nt:unstructured",
+		"fileeditor": {
+			"jcr:primaryType": "nt:unstructured",
+			"mimetypes": [],
+			"sling:resourceType": "sling-cms/components/cms/fileeditor",
+			"fields": {
+				"jcr:primaryType": "nt:unstructured",
+				"title": {
+					"jcr:primaryType": "nt:unstructured",
+					"required": false,
+					"name": "jcr:content/jcr:title",
+					"type": "text",
+					"label": "Title",
+					"sling:resourceType": "sling-cms/components/editor/fields/text"
+				},
+				"mimetype": {
+					"jcr:primaryType": "nt:unstructured",
+					"required": true,
+					"name": "jcr:content/jcr:mimeType",
+					"type": "text",
+					"label": "MIME Type",
+					"sling:resourceType": "sling-cms/components/editor/fields/text"
+				},
+				"taxonomy": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": "jcr:content/taxonomy",
+					"label": "Taxonomy",
+					"sling:resourceType": "sling-cms/components/editor/fields/taxonomy"
+				},
+				"taxonomyTypeHint": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": "jcr:content/taxonomy@TypeHint",
+					"value": "String[]",
+					"sling:resourceType": "sling-cms/components/editor/fields/hidden"
+				},
+				"published": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": "jcr:content/published",
+					"label": "Published",
+					"options": [
+						"Yes=true",
+						"No=false"
+					],
+					"sling:resourceType": "sling-cms/components/editor/fields/select"
+				},
+				"publishedTypeHint": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": "jcr:content/published@TypeHint",
+					"value": "Boolean",
+					"sling:resourceType": "sling-cms/components/editor/fields/hidden"
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/etc/fileeditors/jcr:content.json b/cms/ui/src/main/resources/jcr_root/etc/fileeditors/jcr:content.json
new file mode 100644
index 0000000..14d00aa
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/etc/fileeditors/jcr:content.json
@@ -0,0 +1,4 @@
+{
+	"jcr:primaryType": "nt:unstructured",
+	"jcr:title": "File Editors"
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
index 6b34121..89c5764 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
@@ -30,7 +30,7 @@
 	<tbody>
 		<c:forEach var="child" items="${sling:listChildren(slingRequest.requestPathInfo.suffixResource)}">
 			<sling:getResource var="typeConfig" base="${resource}" path="types/${child.resourceType}" />
-			<c:if test="${typeConfig != null}">
+			<c:if test="${typeConfig != null && !fn:contains(child.name,':')}">
 				<tr data-resource="${child.path}" data-type="${typeConfig.path}">
 					<c:forEach var="column" items="${sling:listChildren(sling:getRelativeResource(typeConfig,'columns'))}">
 					<sling:getResource var="colConfig" base="${typeConfig}" path="columns/${column.name}" />
@@ -46,7 +46,7 @@
 													</a>
 												</c:when>
 												<c:otherwise>
-													<a class="Button" target="_blank" href="${actionConfig.valueMap.prefix}${child.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
+													<a class="Button" ${actionConfig.valueMap.new != false ? 'target="_blank"' : ''} href="${actionConfig.valueMap.prefix}${child.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
 														${actionConfig.valueMap.text}
 													</a>
 												</c:otherwise>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor.json
new file mode 100644
index 0000000..a64b54b
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor.json
@@ -0,0 +1,5 @@
+{
+	"jcr:primaryType": "sling:Component",
+    "componentType": "SlingCMS-FileEditor",
+    "jcr:title": "Sling CMS - File Editor"
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/edit.json
new file mode 100644
index 0000000..ac7eaf7
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/edit.json
@@ -0,0 +1,17 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"button": "Save File Editor",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"mimetypes": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/repeating",
+			"type": "text",
+			"label": "MIME Types",
+			"name": "mimetypes",
+			"required": true
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/inputfield.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/fileeditor.jsp
similarity index 61%
rename from cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/inputfield.jsp
rename to cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/fileeditor.jsp
index 4bf42d3..d4e897c 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/inputfield.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditor/fileeditor.jsp
@@ -16,30 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
-<%@include file="/libs/sling-cms/global.jsp"%>
+ <%@include file="/libs/sling-cms/global.jsp"%>
 <dl>
 	<dt>
-		Label
+		MIME Types
 	</dt>
 	<dd>
-		<sling:encode value="${properties.label}" mode="HTML" />
+		<ul>
+			<c:forEach var="mimetype" items="${properties.mimetypes}">
+				<li>
+					<pre><sling:encode value="${mimetype}" mode="HTML" /></pre>
+				</li>
+			</c:forEach>
+		</ul>
 	</dd>
 	<dt>
-		Field Type
+		Fields
 	</dt>
 	<dd>
-		<sling:encode value="${properties.type}" mode="HTML" />
-	</dd>
-	<dt>
-		Name
-	</dt>
-	<dd>
-		<sling:encode value="${properties.name}" mode="HTML" />
-	</dd>
-	<dt>
-		Required
-	</dt>
-	<dd>
-		<sling:encode value="${properties.required}" mode="HTML" />
+		<c:set var="oldAvailableTypes" value="${availableTypes}" />
+		<c:set var="availableTypes" value="SlingCMS-FieldConfig" scope="request" />
+		<sling:include path="fields" resourceType="sling-cms/components/general/container" />
+		<c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
 	</dd>
 </dl>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/confignav/confignav.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorconfig/fileeditorconfig.jsp
similarity index 57%
rename from cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/confignav/confignav.jsp
rename to cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorconfig/fileeditorconfig.jsp
index d5fcb29..df7e614 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/confignav/confignav.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorconfig/fileeditorconfig.jsp
@@ -17,11 +17,14 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:findResources var="configs" query="SELECT * FROM [sling:Config] AS s WHERE ISCHILDNODE(s,'/etc/config') ORDER BY NAME()" language="JCR-SQL2" />
-<c:forEach var="config" items="${configs}">
-	<li class="Nav-Item">
-		<a href="/cms/config/edit.html/etc/config/${config.name}" title="Configure a site configuration">
-			<sling:encode value="${config.valueMap['jcr:title']}" mode="HTML" />
-		</a>
-	</li>
-</c:forEach>
\ No newline at end of file
+<sling:call script="/libs/sling-cms/components/editor/scripts/init.jsp" />
+<c:set var="cmsEditEnabled" value="true" scope="request" />
+
+<h3>Page Templates</h3>
+<c:set var="oldAvailableTypes" value="${availableTypes}" />
+<c:set var="availableTypes" value="SlingCMS-FileEditor" scope="request" />
+<sling:include path="${slingRequest.requestPathInfo.suffix}/editors" resourceType="sling-cms/components/general/container" />
+<c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
+
+<c:set var="cmsEditEnabled" value="false" scope="request" />
+<sling:call script="/libs/sling-cms/components/editor/scripts/finalize.jsp" />
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorinclude/fileeditorinclude.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorinclude/fileeditorinclude.jsp
new file mode 100644
index 0000000..5b287cd
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/fileeditorinclude/fileeditorinclude.jsp
@@ -0,0 +1,53 @@
+<%-- /*
+ * 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"%>
+<c:set var="site" value="${sling:getAbsoluteParent(slingRequest.requestPathInfo.suffixResource,2)}" />
+<c:set var="config" value="${sling:getRelativeResource(sling:getResource(resourceResolver,site.valueMap['sling:config']),'config')}" />
+<c:set var="path" value="${config.valueMap.fileeditor}/editors" />
+<c:set var="editors" value="${sling:getResource(resourceResolver,path)}" />
+<c:set var="mimetype" value="|${slingRequest.requestPathInfo.suffixResource.valueMap['jcr:content/jcr:mimeType']}|" />
+<c:forEach var="editor" items="${sling:listChildren(editors)}">
+	<c:set var="mimetypes" value="|${fn:join(editor.valueMap.mimetypes,'|')}|" />
+	<c:choose>
+		<c:when test="${fn:length(mimetypes) == 2}">
+			<c:set var="general" value="${editor}" />
+		</c:when>
+		<c:when test="${fn:contains(mimetypes,mimetype)}">
+			<c:set var="matches" value="${editor}" />
+		</c:when>
+	</c:choose>
+</c:forEach>
+<form method="post" action="${slingRequest.requestPathInfo.suffix}" enctype="multipart/form-data" class="Form-Ajax">
+	<c:choose>
+		<c:when test="${matches != null}">
+			<sling:include path="${matches.path}/fields" resourceType="sling-cms/components/general/container" />
+		</c:when>
+		<c:when test="${general != null}">
+			<sling:include path="${general.path}/fields" resourceType="sling-cms/components/general/container" />
+		</c:when>
+		<c:otherwise>
+			No editor configured for <sling:encode value="${slingRequest.requestPathInfo.suffixResource.valueMap['jcr:content/jcr:mimeType']}" mode="HTML" />!
+		</c:otherwise>
+	</c:choose>
+	<div class="Field-Group">
+		<button type="submit" class="btn btn-success">
+			<sling:encode value="Save File" mode="HTML" />
+		</button>
+	</div>
+</form>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/includeeditor/includeeditor.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/includeeditor/includeeditor.jsp
index ad2445b..93a499a 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/includeeditor/includeeditor.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/includeeditor/includeeditor.jsp
@@ -17,5 +17,5 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="editor" adaptable="${sling:getResource(resourceResolver,slingRequest.requestPathInfo.suffix)}" adaptTo="org.apache.sling.cms.core.models.EditableResource" />
-<sling:include resource="${editor.editResource}" />
\ No newline at end of file
+<c:set var="editResource" value="${sling:getResource(resourceResolver,param.editor)}" />
+<sling:include resource="${editResource}" />
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield.json
deleted file mode 100644
index 7841971..0000000
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-	"jcr:primaryType": "sling:Component",
-    "componentType": "SlingCMS-FieldConfig",
-    "jcr:title": "Sling CMS - Field Config"
-}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/edit.json
deleted file mode 100644
index 7420e9d..0000000
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/inputfield/edit.json
+++ /dev/null
@@ -1,85 +0,0 @@
- {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save Field",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"label": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Label",
-			"name": "label",
-			"required": true
-		},
-		"name": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Name",
-			"name": "name",
-			"required": true
-		},
-		"inputType": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Input Type",
-			"name": "type",
-			"options": {
-				"text": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Text",
-					"value": "text"
-				},
-				"color": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Color",
-					"value": "color"
-				},
-				"datetime": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Date/Time",
-					"value": "datetime-local"
-				},
-				"email": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Email",
-					"value": "email"
-				},
-				"number": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Number",
-					"value": "number"
-				},
-				"url": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "URL",
-					"value": "url"
-				}
-			}
-		},
-		"required": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Required",
-			"name": "required",
-			"options": {
-				"yes": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Yes",
-					"value": "true"
-				},
-				"no": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "No",
-					"value": "false"
-				}
-			}
-		},
-		"requiredTypeHint": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-			"name": "required@TypeHint",
-			"value":"Boolean"
-		}
-	}
-}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config.json
new file mode 100644
index 0000000..87a0fc2
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config.json
@@ -0,0 +1,3 @@
+{
+	"jcr:primaryType": "sling:Component"
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/sitenav/sitenav.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/config.jsp
similarity index 68%
rename from cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/sitenav/sitenav.jsp
rename to cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/config.jsp
index 95fd097..cebdd7f 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/sitenav/sitenav.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/config.jsp
@@ -17,11 +17,19 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:findResources var="sites" query="SELECT * FROM [sling:Site] AS s WHERE ISDESCENDANTNODE(s,'/content') ORDER BY NAME()" language="JCR-SQL2" />
-<c:forEach var="site" items="${sites}">
-	<li class="Nav-Item">
-		<a href="/cms/site/content.html${site.path}" title="Browse the content of a site">
-			<sling:encode value="${site.valueMap['jcr:title']}" mode="HTML" />
-		</a>
-	</li>
-</c:forEach>
\ No newline at end of file
+<h3>Configuration</h3>
+<dl>
+	<dt>Field Editor</dt>
+	<dd>
+		<c:choose>
+			<c:when test="${not empty resource.valueMap.fileeditor}">
+				<a href="/cms/file/configureeditor.html${resource.valueMap.fileeditor}">
+					Configure File Editor
+				</a>
+			</c:when>
+			<c:otherwise>
+				Not Defined
+			</c:otherwise>
+		</c:choose>
+	</dd>
+</dl>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/edit.json
new file mode 100644
index 0000000..84e22eb
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/config/edit.json
@@ -0,0 +1,19 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"button": "Save Site Config",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"fileeditor": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/path",
+			"label": "File Editor",
+			"name": "fileeditor",
+			"basePath": "/etc/fileeditors",
+			"type": "nt:unstructured",
+			"additionalParams": "AND NAME() <> 'jcr:content' AND ISCHILDNODE([/etc/fileeditors])",
+			"required": true
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/siteconfig.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/siteconfig.jsp
index 29d03a5..ee2d099 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/siteconfig.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/siteconfig/siteconfig.jsp
@@ -20,6 +20,8 @@
 <sling:call script="/libs/sling-cms/components/editor/scripts/init.jsp" />
 <c:set var="cmsEditEnabled" value="true" scope="request" />
 
+<sling:include path="${slingRequest.requestPathInfo.suffix}/config" resourceType="sling-cms/components/cms/siteconfig/config" />
+
 <h3>Parameters</h3>
 <c:set var="oldAvailableTypes" value="${availableTypes}" />
 <c:set var="availableTypes" value="SlingCMS-Parameter" scope="request" />
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist/field.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
similarity index 54%
rename from cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist/field.jsp
rename to cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
index 289e872..9e77c0d 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist/field.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/staticnav/staticnav.jsp
@@ -17,11 +17,15 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<input type="text" name="${properties.name}" value="${editProperties[properties.name]}" ${required} ${disabled} list="${resource.name}" />
-<datalist id="${resource.name}">
-	<c:forEach var="item" items="${sling:findResources(resourceResolver,properties.query,properties.queryLanguage)}">
-		<c:if test="${item.valueMap[properties.valueProperty] != null and item.valueMap[properties.labelProperty] != null}">
-			<option value="${sling:encode(item.valueMap[properties.valueProperty],'HTML_ATTR')}"><sling:encode value="${item.valueMap[properties.labelProperty]}" mode="HTML" /></option>
-		</c:if>
+<h3 class="Nav-Header Toggle-Hidden" data-target="#${fn:replace(properties.title,' ','-')}-Nav">${properties.title}</h3>
+<c:set var="hidden" value="Hide" />
+<c:forEach var="item" items="${sling:listChildren(sling:getRelativeResource(resource,'links'))}">
+	<c:if test="${fn:startsWith(slingRequest.requestURI,item.valueMap.link)}">
+		<c:set var="hidden" value="" />
+	</c:if>
+</c:forEach>
+<ul id="${fn:replace(properties.title,' ','-')}-Nav" class="${hidden}">
+	<c:forEach var="item" items="${sling:listChildren(sling:getRelativeResource(resource,'links'))}">
+		<li class="Nav-Item ${fn:startsWith(slingRequest.requestURI,item.valueMap.link) ? 'active' : ''}"><a href="${item.valueMap.link}">${item.valueMap.text}</a></li>
 	</c:forEach>
-</datalist>
\ No newline at end of file
+</ul>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist.json
deleted file mode 100644
index b061241..0000000
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/datalist.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-	"jcr:primaryType": "sling:Component",
-	"sling:resourceSuperType" : "sling-cms/components/editor/fields/base"
-}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/path/field.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/path/field.jsp
index 40e8ab9..086b8f7 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/path/field.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/path/field.jsp
@@ -19,7 +19,7 @@
  <%@include file="/libs/sling-cms/global.jsp"%>
 <input type="text" name="${properties.name}" value="${editProperties[properties.name]}" ${required} ${disabled} list="paths-${resource.name}" autocomplete="off" />
 <datalist id="paths-${resource.name}">
-	<c:set var="query" value="SELECT * FROM [${properties.type}] WHERE ISDESCENDANTNODE([${properties.basePath}])" />
+	<c:set var="query" value="SELECT * FROM [${properties.type != null ? properties.type : 'nt:hierarchyNode'}] WHERE ISDESCENDANTNODE([${properties.basePath != null ? properties.basePath : '/content'}]) ${properties.additionalParams}" />
 	<c:forEach var="resource" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
 		<option value="${resource.path}">${resource.valueMap[properties.titleProperty]}</option>
 	</c:forEach>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/edit.json
new file mode 100644
index 0000000..4a3b4d0
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/edit.json
@@ -0,0 +1,23 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"button": "Save Field",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"label": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Label",
+			"name": "label",
+			"required": true
+		},
+		"name": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Name",
+			"name": "name",
+			"required": true
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/field.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/field.jsp
index b87c820..9e61058 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/field.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/select/field.jsp
@@ -22,6 +22,21 @@
 </c:if>
 <select class="form-control" name="${properties.name}" ${required} ${disabled} ${multiple}>
 	<c:choose>
+		<c:when test="${not empty properties.options}">
+			<c:forEach var="option" items="${properties.options}">
+				<c:set var="label" value="${fn:split(option,'=')[0]}" />
+				<c:set var="value" value="${fn:split(option,'=')[1]}" />
+				<c:choose>
+					<c:when test="${value eq editProperties[properties.name]}">
+						<c:set var="selected" value="selected=\"selected\"" />
+					</c:when>
+					<c:otherwise>
+						<c:set var="selected" value="" />
+					</c:otherwise>
+				</c:choose>
+				<option ${selected} value="${sling:encode(value,'HTML_ATTR')}"><sling:encode value="${label}" mode="HTML" /></option>
+			</c:forEach>
+		</c:when>
 		<c:when test="${sling:getRelativeResource(resource,'options') != null}">
 			<c:forEach var="option" items="${sling:listChildren(sling:getRelativeResource(resource,'options'))}">
 				<c:choose>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json
index b061241..f42ffde 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json
@@ -1,4 +1,6 @@
 {
 	"jcr:primaryType": "sling:Component",
-	"sling:resourceSuperType" : "sling-cms/components/editor/fields/base"
+	"sling:resourceSuperType" : "sling-cms/components/editor/fields/base",
+    "componentType": "SlingCMS-FieldConfig",
+    "jcr:title": "Sling CMS - Taxonomy Field"
 }
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/edit.json
new file mode 100644
index 0000000..4a3b4d0
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/edit.json
@@ -0,0 +1,23 @@
+ {
+	"jcr:primaryType": "nt:unstructured",
+	"sling:resourceType": "sling-cms/components/editor/slingform",
+	"button": "Save Field",
+	"fields": {
+		"jcr:primaryType": "nt:unstructured",
+		"sling:resourceType": "sling-cms/components/general/container",
+		"label": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Label",
+			"name": "label",
+			"required": true
+		},
+		"name": {
+			"jcr:primaryType": "nt:unstructured",
+			"sling:resourceType": "sling-cms/components/editor/fields/text",
+			"label": "Name",
+			"name": "name",
+			"required": true
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp
index 5dff69f..6a912d3 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp
@@ -26,7 +26,7 @@
  	</fieldset>
 	<div class="taxonomy__field Grid">
 		<div class="Cell Mobile-80">
- 			<input type="text" ${required} ${disabled} list="tags-${properties.name}" autocomplete="off" />
+ 			<input type="text" ${required} ${disabled} list="taxonomy-${fn:replace(resource.name,':','-')}" autocomplete="off" />
  		</div>
  		<div class="Cell Mobile-20">
 	 		<button class="taxonomy__add">+</button>
@@ -40,11 +40,10 @@
  			</a>
  		</c:forEach>
  	</div>
-</div>
-<datalist id="tags-${resource.name}">
-	<c:set var="query" value="SELECT * FROM [sling:Taxonomy] WHERE ISDESCENDANTNODE([${not empty properties.basePath ? properties.basePath : '/etc/taxonomy'}])" />
-	${query}
-	<c:forEach var="taxonomy" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
-		<option value="${taxonomy.path}">${taxonomy.valueMap['jcr:title']}</option>
-	</c:forEach>
-</datalist>
\ No newline at end of file
+	<datalist id="taxonomy-${fn:replace(resource.name,':','-')}">
+		<c:set var="query" value="SELECT * FROM [sling:Taxonomy] WHERE ISDESCENDANTNODE([${not empty properties.basePath ? properties.basePath : '/etc/taxonomy'}])" />
+		<c:forEach var="taxonomy" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
+			<option value="${taxonomy.path}">${taxonomy.valueMap['jcr:title']}</option>
+		</c:forEach>
+	</datalist>
+</div>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp
index 6034a12..4dbb68b 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/pageTemplateOptions.jsp
@@ -20,10 +20,6 @@
 <option value="">Select Page Type</option>
 <sling:adaptTo var="pageTemplateManager" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.core.models.PageTemplateManager" />
 <sling:adaptTo var="siteManager" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.core.models.SiteManager" />
-Site=${siteManager.site}
-Site Config=${siteManager.site.siteConfig}
-Page Templates=${siteManager.site.siteConfig.pageTemplates}
-Page Template Manager=${pageTemplateManager}
 <c:forEach var="template" items="${pageTemplateManager.availableTemplates}">
 	<option value="${template.resource.path}">
 		<sling:encode value="${template.title}" mode="HTML" />
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/slingform/slingform.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/slingform/slingform.jsp
index 94a8fbe..bf52b01 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/slingform/slingform.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/slingform/slingform.jsp
@@ -19,13 +19,9 @@
  <%@include file="/libs/sling-cms/global.jsp"%>
 <form method="post" action="${slingRequest.requestPathInfo.suffix}${properties.actionSuffix}" enctype="multipart/form-data" class="Form-Ajax" data-success-prepend="">
 	<sling:include path="fields" resourceType="sling-cms/components/general/container" />
-	<div class="row">
-		<div class="col-md-12">
-			<div class="form-group">
-				<button type="submit" class="btn btn-success" title="<sling:encode value="${properties.button}" mode="HTML_ATTR" />">
-					<sling:encode value="${properties.button}" mode="HTML" />
-				</button>
-			</div>
-		</div>
+	<div class="Field-Group">
+		<button type="submit" class="btn btn-success" title="<sling:encode value="${properties.button}" mode="HTML_ATTR" />">
+			<sling:encode value="${properties.button}" mode="HTML" />
+		</button>
 	</div>
 </form>
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
index a10c6e5..7908412 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/body.jsp
@@ -26,9 +26,9 @@
 		<div class="Cell Small-5"></div>
 		<div class="Cell Main-Content Align-Center">
 			<div class="Grid">
-				<section class="Cell Cell-Pad Small-100">
+				<main class="Cell Cell-Pad Small-100">
 					<sling:call script="content.jsp" />
-				</section>
+				</main>
 			</div>
 		</div>
 	</div>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
index eff7db1..aeba139 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/nav.jsp
@@ -26,13 +26,6 @@
 	</a>
 </h1>
 <sling:include path="/mnt/overlay/sling-cms/content/start/jcr:content/nav" resourceType="sling-cms/components/general/container" />
-<h3 class="Nav-Header Toggle-Hidden" data-target="#Tools-Nav">Tools</h3>
-<ul id="Tools-Nav" class="Hide">
-	<li class="Nav-Item"><a href="/bin/browser.html" title="Browse the JCR content of this site">Node Browser</a></li>
-	<li class="Nav-Item"><a href="/bin/packages.html" title="Create content packages">Content Packages</a></li>
-	<li class="Nav-Item"><a href="/bin/users.html/" title="Manage Users and Groups">Users &amp; Groups</a></li>
-	<li class="Nav-Item"><a href="/system/console/bundles" title="Edit the OSGi bundles of this site">System Console</a></li>
-</ul>
 <div>
 <h3 class="Nav-Header">Session</h3>
 <div id="Login" style="display: block;"><a href="/system/sling/login.html" title="Login to Apache Sling">Login</a></div>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
new file mode 100644
index 0000000..f8a22b4
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/list.json
@@ -0,0 +1,103 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Site Configurations",
+		"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>Site Configurations</h3>"
+			},
+			"contentactions": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/contentactions",
+				"actions": {
+					"taxonomy": {
+						"jcr:primaryType": "nt:unstructured",
+						"label": "Site Config",
+						"prefix": "/cms/config/create.html"
+					}
+				}
+			},
+			"contenttable": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/contenttable",
+				"columns": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Name"
+					},
+					"title": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Title"
+					},
+					"lastModified": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Last Modified"
+					},
+					"lastModifiedBy": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Last Modified By"
+					},
+					"actions": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Actions"
+					}
+				},
+				"types": {
+					"jcr:primaryType": "nt:unstructured",
+					"sling:Config": {
+						"jcr:primaryType": "nt:unstructured",
+						"columns": {
+							"jcr:primaryType": "nt:unstructured",
+							"name": {
+								"jcr:primaryType": "nt:unstructured",
+								"link": false,
+								"type": "Name"
+							},
+							"title": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:title",
+								"type": "String"
+							},
+							"lastModified": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:lastModified",
+								"type": "Date"
+							},
+							"lastModifiedBy": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:lastModifiedBy",
+								"type": "String"
+							},
+							"actions": {
+								"jcr:primaryType": "nt:unstructured",
+								"type": "Actions",
+								"edit": {
+									"jcr:primaryType": "nt:unstructured",
+									"modal": false,
+									"new": false,
+									"title": "Edit Site Config",
+									"text": "&#x270f;",
+									"prefix": "/cms/config/edit.html"
+								},
+								"delete": {
+									"jcr:primaryType": "nt:unstructured",
+									"modal": true,
+									"title": "Delete Site Config",
+									"text": "&times;",
+									"prefix": "/cms/shared/delete.html"
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/configureeditor.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/configureeditor.json
new file mode 100644
index 0000000..df0e7cb
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/configureeditor.json
@@ -0,0 +1,21 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Configure File Editors",
+		"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": "<h2>Configure File Editors</h2>"
+			},
+			"siteconfig": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/fileeditorconfig"
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/createeditor.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/createeditor.json
new file mode 100644
index 0000000..860aff6
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/createeditor.json
@@ -0,0 +1,47 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Create File Editor",
+		"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 File Editor</h3>"
+			},
+			"slingform": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/editor/slingform",
+				"actionSuffix": "/*",
+				"button": "Create File Editor",
+				"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",
+						"required": true
+					},
+					"primaryType": {
+						"jcr:primaryType": "nt:unstructured",
+						"sling:resourceType": "sling-cms/components/editor/fields/hidden",
+						"name": "jcr:primaryType",
+						"value": "nt:unstructured"
+					}
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
new file mode 100644
index 0000000..6887601
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/edit.json
@@ -0,0 +1,21 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Edit 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>Edit File</h3>"
+			},
+			"slingform": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/fileeditorinclude"
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/editors.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/editors.json
new file mode 100644
index 0000000..b13f593
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/file/editors.json
@@ -0,0 +1,103 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Configure File Editors",
+		"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>Configure File Editors</h3>"
+			},
+			"contentactions": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/contentactions",
+				"actions": {
+					"taxonomy": {
+						"jcr:primaryType": "nt:unstructured",
+						"label": "File Editor",
+						"prefix": "/cms/file/createeditor.html"
+					}
+				}
+			},
+			"contenttable": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/contenttable",
+				"columns": {
+					"jcr:primaryType": "nt:unstructured",
+					"name": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Name"
+					},
+					"title": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Title"
+					},
+					"lastModified": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Last Modified"
+					},
+					"lastModifiedBy": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Last Modified By"
+					},
+					"actions": {
+						"jcr:primaryType": "nt:unstructured",
+						"title": "Actions"
+					}
+				},
+				"types": {
+					"jcr:primaryType": "nt:unstructured",
+					"nt:unstructured": {
+						"jcr:primaryType": "nt:unstructured",
+						"columns": {
+							"jcr:primaryType": "nt:unstructured",
+							"name": {
+								"jcr:primaryType": "nt:unstructured",
+								"link": false,
+								"type": "Name"
+							},
+							"title": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:title",
+								"type": "String"
+							},
+							"lastModified": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:lastModified",
+								"type": "Date"
+							},
+							"lastModifiedBy": {
+								"jcr:primaryType": "nt:unstructured",
+								"property": "jcr:lastModifiedBy",
+								"type": "String"
+							},
+							"actions": {
+								"jcr:primaryType": "nt:unstructured",
+								"type": "Actions",
+								"edit": {
+									"jcr:primaryType": "nt:unstructured",
+									"modal": false,
+									"new": false,
+									"title": "Configure File Editor",
+									"text": "&#x270f;",
+									"prefix": "/cms/file/configureeditor.html"
+								},
+								"delete": {
+									"jcr:primaryType": "nt:unstructured",
+									"modal": true,
+									"title": "Delete File Editor",
+									"text": "&times;",
+									"prefix": "/cms/shared/delete.html"
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index be13965..e473556 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -172,6 +172,13 @@
 							"actions": {
 								"jcr:primaryType": "nt:unstructured",
 								"type": "Actions",
+								"edit": {
+									"jcr:primaryType": "nt:unstructured",
+									"modal": true,
+									"title": "Edit File",
+									"text": "&#x270f;",
+									"prefix": "/cms/file/edit.html"
+								},
 								"download": {
 									"jcr:primaryType": "nt:unstructured",
 									"modal": false,
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index 752003f..a7c9544 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -22,28 +22,57 @@
 				"jcr:primaryType": "nt:unstructured",
 				"sling:resourceType": "sling-cms/components/cms/contentnav",
 				"createPath": "/cms/site/create.html/content",
-				"prefix":"/cms/site",
+				"prefix": "/cms/site",
 				"itemPrefix": "/cms/site/content.html",
 				"query": "SELECT * FROM [sling:Site] AS s WHERE ISCHILDNODE(s,'/content') ORDER BY NAME()",
 				"title": "Site"
 			},
-			"confignav": {
-				"jcr:primaryType": "nt:unstructured",
-				"sling:resourceType": "sling-cms/components/cms/contentnav",
-				"createPath": "/cms/config/create.html/etc/config",
-				"prefix": "/cms/config",
-				"itemPrefix":"/cms/config/edit.html",
-				"query": "SELECT * FROM [sling:Config] AS s WHERE ISCHILDNODE(s,'/etc/config') ORDER BY NAME()",
-				"title": "Site Config"
-			},
 			"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",
+				"itemPrefix": "/cms/taxonomy/list.html",
 				"query": "SELECT * FROM [sling:Taxonomy] AS s WHERE ISCHILDNODE(s,'/etc/taxonomy') ORDER BY NAME()",
 				"title": "Taxonomy"
+			},
+			"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"
+					},
+					"fileeditors": {
+						"jcr:primaryType": "nt:unstructured",
+						"link": "/cms/file/editors.html/etc/fileeditors",
+						"text": "File Editors"
+					},
+					"nodebrowser": {
+						"jcr:primaryType": "nt:unstructured",
+						"link": "/bin/browser.html",
+						"text": "Node Browser"
+					},
+					"siteconfig": {
+						"jcr:primaryType": "nt:unstructured",
+						"link": "/cms/config/list.html/etc/config",
+						"text": "Site Configs"
+					},
+					"systemconsole": {
+						"jcr:primaryType": "nt:unstructured",
+						"link": "/system/console",
+						"text": "System Console"
+					},
+					"usersgroups": {
+						"jcr:primaryType": "nt:unstructured",
+						"link": "/bin/users.html",
+						"text": "Users &amp; Groups"
+					}
+				}
 			}
 		}
 	}

-- 
To stop receiving notification emails like this one, please contact
dklco@apache.org.

Mime
View raw message