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 2018/02/06 22:22:40 UTC

[sling-whiteboard] branch master updated: Adding version support

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 4f8a6d6  Adding version support
4f8a6d6 is described below

commit 4f8a6d6b1407e41b795289e70a75aa50758e958b
Author: Dan Klco <da...@gmail.com>
AuthorDate: Tue Feb 6 17:22:33 2018 -0500

    Adding version support
---
 cms/docker/README.md                               |  18 ----
 cms/ui/src/main/frontend/src/js/scripts.js         |  14 +++
 .../components/cms/contenttable/contenttable.jsp   |   2 +-
 .../cms/versionmanager/versionmanager.jsp          | 112 +++++++++++++++++++++
 .../libs/sling-cms/components/pages/base/base.jsp  |   2 +-
 .../libs/sling-cms/content/shared/versions.json    |  21 ++++
 .../libs/sling-cms/content/site/content.json       |  16 +++
 7 files changed, 165 insertions(+), 20 deletions(-)

diff --git a/cms/docker/README.md b/cms/docker/README.md
deleted file mode 100644
index 471f2c5..0000000
--- a/cms/docker/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Apache Sling CMS Docker image
-
-The Apache Sling CMS Docker integration project is a helper aimed to make it simple to deploy an instance of Apache Sling CMS.
-
-## Building a Docker image
-
-$ docker build -t org.apache.sling.cms .
-
-## Running a standalone Sling instance
-
-To launch a docker instance named 'sling-cms' bound to 
-port 80 on the local machine, and with the /opt/sling/sling volume
-mounted at /srv/docker/sling in the local machine, execute:
-
-```
-$ docker run -ti -p 80:80 -v /srv/docker/sling:/opt/sling/sling \
-    --name sling-cms org.apache.sling.cms
-```
diff --git a/cms/ui/src/main/frontend/src/js/scripts.js b/cms/ui/src/main/frontend/src/js/scripts.js
index 0f1acd2..292bb5f 100644
--- a/cms/ui/src/main/frontend/src/js/scripts.js
+++ b/cms/ui/src/main/frontend/src/js/scripts.js
@@ -154,6 +154,20 @@ Sling.CMS = {
 		}
 	};
 
+	Sling.CMS.ext['fetch-json'] = {
+		decorate: function($ctx) {
+			$ctx.find('.fetch-json').each(function(){
+				$ctr = $(this);
+				$.getJSON($ctr.data('url'),function(res){
+					var source   = $('#'+$ctr.data('template')).html();
+					var template = Handlebars.compile(source);
+					$ctr.append(template(res));
+					Sling.CMS.decorate($ctr);
+				});
+			});
+		}
+	}
+
 	Sling.CMS.ext['includeconfig'] = {
 		decorate: function($ctx){
 			$ctx.find('.Sling-CMS__include-config').each(function(){
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 89c5764..d10a660 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
@@ -41,7 +41,7 @@
 										<c:forEach var="actionConfig" items="${sling:listChildren(colConfig)}">
 											<c:choose>
 												<c:when test="${actionConfig.valueMap.modal}">
-													<a class="Button Fetch-Modal" data-title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}" data-path=".Main-Content form" href="${actionConfig.valueMap.prefix}${child.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
+													<a class="Button Fetch-Modal" data-title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}" data-path="${actionConfig.valueMap.ajaxPath != null ? actionConfig.valueMap.ajaxPath : '.Main-Content form'}" href="${actionConfig.valueMap.prefix}${child.path}" title="${sling:encode(actionConfig.valueMap.title,'HTML_ATTR')}">
 														${actionConfig.valueMap.text}
 													</a>
 												</c:when>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/versionmanager/versionmanager.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/versionmanager/versionmanager.jsp
new file mode 100644
index 0000000..f5f603e
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/versionmanager/versionmanager.jsp
@@ -0,0 +1,112 @@
+<%-- /*
+ * 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"%>
+ <div class="versionmanager">
+ 	<c:set var="versionable" value="false" />
+ 	<c:if test="${slingRequest.requestPathInfo.suffixResource.valueMap['jcr:mixinTypes'] != null && fn:contains(fn:join(slingRequest.requestPathInfo.suffixResource.valueMap['jcr:mixinTypes'],','),'mix:versionable')}">
+ 		<c:set var="versionable" value="true" />
+ 	</c:if>
+ 	<c:choose>
+ 		<c:when test="${versionable == 'true'}">
+ 			<c:choose>
+ 				<c:when test="${sling:adaptTo(slingRequest.requestPathInfo.suffixResource,'javax.jcr.Node').checkedOut}">
+ 					<form method="post" action="${slingRequest.requestPathInfo.suffix}" enctype="multipart/form-data" class="Form-Ajax" data-add-date="false">
+						<input type="hidden" name=":operation" value="checkin" />
+						<div class="Field-Group">
+							<button type="submit" class="btn btn-success" title="Check the content back out so it can not be edited (opposite of JCR Checkout)">
+								Checkout
+							</button>
+						</div>
+					</form>
+ 				</c:when>
+ 				<c:otherwise>
+ 					<form method="post" action="${slingRequest.requestPathInfo.suffix}" enctype="multipart/form-data" class="Form-Ajax" data-add-date="false">
+						<input type="hidden" name=":operation" value="checkout" />
+						<div class="Field-Group">
+							<button type="submit" class="btn btn-success" title="Check the content back in so it can be edited (opposite of JCR Checkin)">
+								Checkin
+							</button>
+						</div>
+					</form>
+ 				</c:otherwise>
+ 			</c:choose>
+ 		</c:when>
+ 		<c:otherwise>
+ 			<form method="post" action="${slingRequest.requestPathInfo.suffix}" enctype="multipart/form-data" class="Form-Ajax" data-add-date="false">
+				<input type="hidden" name=":autoCheckout" value="true">
+				<input type="hidden" name=":autoCheckin" value="true">
+				<input type="hidden" name="jcr:mixinTypes@TypeHint" value="Type[]">
+			    <input type="hidden" name="jcr:mixinTypes" value="mix:versionable">
+				<div class="Field-Group">
+					<button type="submit" class="btn btn-success" title="Make the content versionable">
+						Make Versionable
+					</button>
+				</div>
+			</form>
+ 		</c:otherwise>
+ 	</c:choose>
+	<table>
+		<thead>
+			<tr>
+				<th>Version</th>
+				<th>Created</th>
+				<th>Successors</th>
+				<th>Predecessors</th>
+				<th>Restore</th>
+			</tr>
+		</thead>
+		<tbody class="fetch-json" data-url="${slingRequest.requestPathInfo.suffix}.V.json" data-template="version-template">
+			
+		</tbody>
+	</table>
+	<script id="version-template" type="text/x-handlebars-template">
+		{{#each versions }}
+			<tr>
+				<td>
+					{{@key}}
+				</td>
+				<td>
+					{{created}}
+				</td>
+				<td>
+					{{#each successors }}
+						{{this}}<br/>
+					{{/each}}
+				</td>
+				<td>
+					{{#each predecessors }}
+						{{this}}<br/>
+					{{/each}}
+				</td>
+				<td>
+ 					<form method="post" action="${slingRequest.requestPathInfo.suffix}" enctype="multipart/form-data" class="Form-Ajax" data-add-date="false">
+						<input type="hidden" name=":operation" value="restore" />
+						<input type="hidden" name=":version" value="{{@key}}" />
+						<div class="Field-Group">
+							<button type="submit" class="btn btn-success" title="Restore the content to {{@key}}">
+								Restore Version
+							</button>
+						</div>
+					</form>
+				</td>
+			</tr>
+		{{/each}}
+	</script>
+ </div>
+ 
\ No newline at end of file
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/base.jsp b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/base.jsp
index 4eba32c..ba73388 100644
--- a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/base.jsp
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/components/pages/base/base.jsp
@@ -17,7 +17,7 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<html>
+<html lang="en">
 	<sling:call script="head.jsp" />
 	<sling:call script="body.jsp" />
 </html>
diff --git a/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/versions.json b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/versions.json
new file mode 100644
index 0000000..ca321bf
--- /dev/null
+++ b/cms/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/versions.json
@@ -0,0 +1,21 @@
+{
+	"jcr:primaryType": "sling:Page",
+	"jcr:content": {
+		"sling:resourceType": "sling-cms/components/pages/base",
+		"jcr:title": "Manage Versions",
+		"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>Manage Versions</h3>"
+			},
+			"versionmanager": {
+				"jcr:primaryType": "nt:unstructured",
+				"sling:resourceType": "sling-cms/components/cms/versionmanager"
+			}
+		}
+	}
+}
\ 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 e473556..840d658 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
@@ -126,6 +126,14 @@
 									"text": "&#x21c6;",
 									"prefix": "/cms/shared/movecopy.html"
 								},
+								"version": {
+									"jcr:primaryType": "nt:unstructured",
+									"ajaxPath": ".versionmanager",
+									"modal": true,
+									"title": "Manage Versions",
+									"text": "&#10710;",
+									"prefix": "/cms/shared/versions.html"
+								},
 								"delete": {
 									"jcr:primaryType": "nt:unstructured",
 									"modal": true,
@@ -192,6 +200,14 @@
 									"text": "&#x21c6;",
 									"prefix": "/cms/shared/movecopy.html"
 								},
+								"version": {
+									"jcr:primaryType": "nt:unstructured",
+									"ajaxPath": ".versionmanager",
+									"modal": true,
+									"title": "Manage Versions",
+									"text": "&#10710;",
+									"prefix": "/cms/shared/versions.html"
+								},
 								"delete": {
 									"jcr:primaryType": "nt:unstructured",
 									"modal": true,

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