Author: sboehme
Date: Sat Aug 15 20:11:13 2015
New Revision: 1696091
URL: http://svn.apache.org/r1696091
Log:
Changed resource editor to render content in the property area dependent on the
resource type.
Added:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/node-content.jsp
- copied, changed from r1694052,
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/properties.jsp
Removed:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/properties.jsp
Modified:
sling/trunk/contrib/explorers/resourceeditor/pom.xml
sling/trunk/contrib/explorers/resourceeditor/src/main/less/alerts.less
sling/trunk/contrib/explorers/resourceeditor/src/main/less/forms.less
sling/trunk/contrib/explorers/resourceeditor/src/main/less/glyphicons.less
sling/trunk/contrib/explorers/resourceeditor/src/main/less/navs.less
sling/trunk/contrib/explorers/resourceeditor/src/main/less/reseditor.less
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/MainController.js
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/properties/PropertyController.js
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/html.jsp
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/nodes.json.incl.jsp
sling/trunk/contrib/explorers/resourceeditor/src/test/javascript/e2e/spec/e2e_spec.js
Modified: sling/trunk/contrib/explorers/resourceeditor/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/pom.xml?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/pom.xml (original)
+++ sling/trunk/contrib/explorers/resourceeditor/pom.xml Sat Aug 15 20:11:13
2015
@@ -125,7 +125,12 @@
<exclude>src/main/resources/SLING-INF/libs/sling/resource-editor/servlet-nodes.json</exclude>
</excludes>
</configuration>
- </plugin>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>maven-sling-plugin</artifactId>
+ <version>2.1.1-SNAPSHOT</version>
+ </plugin>
</plugins>
<extensions>
<extension>
Modified: sling/trunk/contrib/explorers/resourceeditor/src/main/less/alerts.less
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/less/alerts.less?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/src/main/less/alerts.less
(original)
+++ sling/trunk/contrib/explorers/resourceeditor/src/main/less/alerts.less Sat
Aug 15 20:11:13 2015
@@ -21,7 +21,7 @@
text-shadow: 1px 1px 0 rgba(255,255,255,.5);
.rounded(5px);
.plate-box-shadow;
- .plate-margin;
+ margin-top: 15px;
}
.alert-warning {
Modified: sling/trunk/contrib/explorers/resourceeditor/src/main/less/forms.less
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/less/forms.less?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/src/main/less/forms.less
(original)
+++ sling/trunk/contrib/explorers/resourceeditor/src/main/less/forms.less Sat
Aug 15 20:11:13 2015
@@ -56,6 +56,6 @@
}
-#properties fieldset {
+#node-content fieldset {
margin-bottom: 5px;
}
\ No newline at end of file
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/less/glyphicons.less
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/less/glyphicons.less?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/src/main/less/glyphicons.less
(original)
+++ sling/trunk/contrib/explorers/resourceeditor/src/main/less/glyphicons.less
Sat Aug 15 20:11:13 2015
@@ -8,7 +8,7 @@
// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
-#properties .glyphicon {
+#node-content .glyphicon {
font-size: 16px;
color: @textColor;
}
Modified: sling/trunk/contrib/explorers/resourceeditor/src/main/less/navs.less
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/less/navs.less?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/src/main/less/navs.less
(original)
+++ sling/trunk/contrib/explorers/resourceeditor/src/main/less/navs.less Sat
Aug 15 20:11:13 2015
@@ -28,7 +28,6 @@
#login .tab-content {
.border-radius(0, 7px, 7px, 0);
- background-color: transparent;
}
#login .tab-pane.active {
@@ -68,7 +67,12 @@
.plate-box-shadow;
margin-right: 0px;
padding: 0px 10px 5px 10px;
-
+}
+
+#content-tabs.nav-pills > li > a {
+ .border-radius(7px, 0px, 0px, 7px);
+ .plate-background;
+ padding: 3px 10px;
}
#login .nav-pills > li > a {
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/less/reseditor.less
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/less/reseditor.less?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
--- sling/trunk/contrib/explorers/resourceeditor/src/main/less/reseditor.less
(original)
+++ sling/trunk/contrib/explorers/resourceeditor/src/main/less/reseditor.less
Sat Aug 15 20:11:13 2015
@@ -70,16 +70,13 @@ body
}
.plate-background {
- background: -moz-linear-gradient(-45deg, rgba(0,0,0,0.4) 0%,
rgba(0,0,0,0.7) 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, right bottom,
color-stop(0%,rgba(0,0,0,0.4)), color-stop(100%,rgba(0,0,0,0.7))); /*
Chrome,Safari4+ */
- background: -webkit-linear-gradient(-45deg, rgba(0,0,0,0.4)
0%,rgba(0,0,0,0.7) 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(-45deg, rgba(0,0,0,0.4)
0%,rgba(0,0,0,0.7) 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(-45deg, rgba(0,0,0,0.4)
0%,rgba(0,0,0,0.7) 100%); /* IE10+ */
- background: linear-gradient(-45deg, rgba(0,0,0,0.4) 0%,rgba(0,0,0,0.7)
100%); /* W3C */
+ /* Fallback for web browsers that doesn't support RGBa */
+ background: rgb(0, 0, 0) transparent;
+ /* RGBa with 0.6 opacity */
+ background: rgba(0, 0, 0, 0.6);
}
.ie9filter-plate-div {
- filter: progid:DXImageTransform.Microsoft.gradient(
startColorstr='#a0000000', endColorstr='#c9000000',GradientType=1 ); /* IE6-9
fallback on horizontal gradient */
height: 100%;
}
.plate-box-shadow {
@@ -92,17 +89,24 @@ body
.rounded(7px);
}
+.full-height {
+ height: 100%;
+}
+
+#iframe_main {
+ padding-bottom: 40px;
+ .rounded;
+}
+
@dark-gray: #303030;
.plate-text-shadow {
text-shadow: 1px 1px 0px @dark-gray, 0px 0px 0px black;
}
+
.plate-selected-text-shadow {
text-shadow: 1px 1px 0px black, 0px 0px 0px #202020;
}
-.plate-margin {
- margin: 15px;
-}
.plate {
.plate-background;
@@ -111,9 +115,6 @@ body
.plate-text-shadow;
overflow: hidden;
-
- .plate-margin;
-
}
/* .logo has to be defined after .plate to overwrite the font properties */
@@ -129,6 +130,13 @@ body
top: 10px;
}
+#main-row {
+ margin-top: 15px;
+}
+#content-tabs {
+ margin-left: 10px;
+}
+
.edition {
font-size: 11px;
font-weight: normal;
@@ -166,7 +174,7 @@ body
width: 100%;
}
#inner_content_margin {
- margin: 10px;
+ margin: 0 10px;
}
#footer {
@@ -358,11 +366,11 @@ input.jstree-rename-input{
text-shadow: none;
}
-#properties .ie9filter-plate-div {
+#node-content .ie9filter-plate-div {
overflow-y: auto;
overflow-x: hidden;
}
#properties-info-icon {
- margin-top: -4px;
+ margin-top: 5px;
}
\ No newline at end of file
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/MainController.js
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/MainController.js?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/MainController.js
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/MainController.js
Sat Aug 15 20:11:13 2015
@@ -155,14 +155,16 @@ org.apache.sling.reseditor.MainControlle
var login_height = $("#login").outerHeight(true);
var header_height = $("#header").outerHeight(true);
var alert_height = $("#alerts").outerHeight(true);
+ var content_tab_height = $("#content-tabs").outerHeight(true);
var footer_height = $("#footer").outerHeight(true);
var sidebar_margin =
$("#sidebar").outerHeight(true)-$("#sidebar").outerHeight(false);
- var usable_height = $(window).height() - login_height -
header_height - alert_height - sidebar_margin - 1;
+ var mainrow_margin =
$("#main-row").outerHeight(true)-$("#main-row").outerHeight(false);
+ var usable_height = $(window).height() - login_height -
header_height - alert_height - sidebar_margin - mainrow_margin - 15;
// activate again if the footer is needed
// var usable_height = $(window).height() - header_height -
footer_height - sidebar_margin - 1;
$("#sidebar").height( usable_height );
- $("#outer_content").height( usable_height );
+ $("#outer_content").height( usable_height-content_tab_height );
}
MainController.prototype.displayAlert = function(error, resourcePath){
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/properties/PropertyController.js
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/properties/PropertyController.js?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/properties/PropertyController.js
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor-static-content/js/properties/PropertyController.js
Sat Aug 15 20:11:13 2015
@@ -48,19 +48,19 @@ org.apache.sling.reseditor.PropertyContr
'</div>'
});
- $( "#properties" ).on( "click",
".dropdown-menu.add-property-menu li a", function() {
+ $( "#node-content" ).on( "click",
".dropdown-menu.add-property-menu li a", function() {
var dataType =
$(this).attr('data-property-type');
thisPropertyController.openAddPropertyDialog(dataType);
});
$('#addPropertyDialog .submit').click(function(){
thisPropertyController.addProperty();
});
- $( "#properties" ).on( "click",
".property-icon.glyphicon-remove", function() {
+ $( "#node-content" ).on( "click",
".property-icon.glyphicon-remove", function() {
var parentRow = $(this).parents(".row:first");
var propertyKey =
parentRow.find(".proplabel").attr("for");
thisPropertyController.removeProperty(propertyKey, parentRow);
});
- $( "#properties" ).on( "click",
".property-icon.glyphicon-save", function() {
+ $( "#node-content" ).on( "click",
".property-icon.glyphicon-save", function() {
var parentRow = $(this).parents(".row:first");
var key, value;
if (parentRow.hasClass('new-property')){
@@ -74,12 +74,12 @@ org.apache.sling.reseditor.PropertyContr
});
$("#properties-info-icon").on("click", function(e,
data) {
- $('#properties
.info-content-container').slideToggle();
+ $('#node-content
.info-content-container').slideToggle();
});
- $("#properties .info-content-container
.close").on("click", function(e, data) {
- $('#properties
.info-content-container').slideToggle();
+ $("#node-content .info-content-container
.close").on("click", function(e, data) {
+ $('#node-content
.info-content-container').slideToggle();
});
- $( "#properties" ).on( "keydown", function(event, data)
{
+ $( "#node-content" ).on( "keydown", function(event,
data) {
// see http://www.javascripter.net/faq/keycodes.htm
if (event.ctrlKey || event.metaKey) {
var pressedKey =
String.fromCharCode(event.which).toLowerCase();
@@ -102,7 +102,7 @@ org.apache.sling.reseditor.PropertyContr
break;
case n:
event.preventDefault();
- $('#properties
.add-property-menu-item.dropdown-toggle').dropdown('toggle');
+ $('#node-content
.add-property-menu-item.dropdown-toggle').dropdown('toggle');
break;
}
}
@@ -147,13 +147,14 @@ org.apache.sling.reseditor.PropertyContr
PropertyController.prototype.saveProperty = function(key, value){
var thisPropertyController = this;
var data = {};
- data[key] = [value,value];
+// data[key] = [value,value];
+ data[key] = value;
data["_charset_"] = "utf-8";
$.ajax({
type: 'POST',
- url: location.href+"?"+key+"="+value,
- dataType: "json"
-// ,data: data
+ url: location.href,
+ dataType: "json",
+ data: data
})
.done(function() {
$.notify({
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/html.jsp
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/html.jsp?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/html.jsp
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/html.jsp
Sat Aug 15 20:11:13 2015
@@ -128,7 +128,7 @@ new org.apache.sling.reseditor.PropertyC
<div id="login" class="row">
<div class="col-sm-12">
<div class="logo">
- The Sling Resource Editor <span
class="edition">node-edit version</span>
+ The Sling Resource Editor <span
class="edition">build with passion</span>
</div>
<div class="tabbable tabs-below">
<div id="login_tab_content"
class="tab-content plate-background plate-box-shadow" style="display:none;">
@@ -191,8 +191,8 @@ new org.apache.sling.reseditor.PropertyC
</div>
</div>
</div>
- <div class="row">
- <div class="col-sm-4">
+ <div id="main-row" class="row">
+ <div id="sidebar-col" class="col-sm-4">
<div id="sidebar" class="plate">
<div class="ie9filter-plate-div">
<div style="display:none;"
class="info-content-container" >
@@ -215,9 +215,8 @@ new org.apache.sling.reseditor.PropertyC
</div>
</div>
</div>
-
- <%@ include file="properties.jsp" %>
- </div>
+ <%@ include file="node-content.jsp" %>
+ </div>
<div class="row" style="visibility:hidden; display:none;">
<div class="col-sm-12">
<div id="footer" class="plate">
Copied:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/node-content.jsp
(from r1694052,
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/properties.jsp)
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/node-content.jsp?p2=sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/node-content.jsp&p1=sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/properties.jsp&r1=1694052&r2=1696091&rev=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/properties.jsp
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/node-content.jsp
Sat Aug 15 20:11:13 2015
@@ -1,114 +1,147 @@
+<%@ taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling"%>
+
+<%@ page import="org.apache.sling.api.resource.*" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="re" uri="http://sling.apache.org/resource-editor"%>
<sling:defineObjects />
-
- <div id="properties" class="col-sm-8">
+ <div id="node-content" class="col-sm-8">
+ <c:set var="scriptResource" scope="request"
value="${sling:getResource(resourceResolver,sling:getResource(resourceResolver,resource.path).resourceType)}"/>
+ <% Resource theResource = (Resource)
request.getAttribute("scriptResource");%>
+ <c:set var="isWebPage" value="<%=theResource !=
null ? theResource.isResourceType("sling/web-page") : false %>"/>
+ <c:if test="${isWebPage}">
+ <ul id="content-tabs" class="nav
nav-pills" role="tablist">
+ <li role="presentation"
class="active"><a href="#page-editor" aria-controls="page-editor" role="tab"
data-toggle="pill">Web Page Editor</a></li>
+ <li role="presentation"><a
href="#page-preview" aria-controls="page-preview" role="tab"
data-toggle="pill">Page Preview</a></li>
+ <li role="presentation"><a
href="#properties" aria-controls="properties" role="tab"
data-toggle="pill">Properties</a></li>
+ </ul>
+ </c:if>
<div id="outer_content" class="plate">
<div class="ie9filter-plate-div">
- <div id="inner_content_margin">
- <div class="row">
- <div
class="col-sm-12">
- <div
style="display: none;" class="info-content-container" >
-
<div class="well well-sm info-content">
-
<button type="button" class="close"><span
aria-hidden="true">×</span><span class="sr-only">Close</span></button>
-
<h4>Cheat Sheet</h4>
-
<p>You can use</p>
-
<ul>
-
<li><kbd><kbd>ctrl</kbd> + <kbd>s</kbd></kbd> or
<kbd><kbd>cmd</kbd> + <kbd>s</kbd></kbd> (for Mac) for saving a property.</li>
-
<li><kbd><kbd>ctrl</kbd> + <kbd>del</kbd></kbd> or
<kbd><kbd>cmd</kbd> + <kbd>del</kbd></kbd> (for Mac) for removing a
property.</li>
-
<li><kbd><kbd>ctrl</kbd> + <kbd>n</kbd></kbd> or
<kbd><kbd>cmd</kbd> + <kbd>n</kbd></kbd> (for Mac) for opening the add property
menu.</li>
-
</ul>
+ <div id="inner_content_margin"
class="full-height">
+ <div class="row
full-height" >
+ <div
class="col-sm-12 full-height" >
+ <div
class="tab-content full-height" >
+
<div role="tabpanel" class="tab-pane ${isWebPage ? 'active' : ''} full-height"
id="page-editor">
+
<a href="/pageeditor${resource.path}.main.html" target="_blank">
+
<span id="open-new-window" class="glyphicon
glyphicon-share-alt" aria-hidden="true"></span>
+
</a>
+
<c:if test="${isWebPage}">
+
<div class="full-height">
+
<sling:include path="/pageeditor${resource.path}.html"/>
+
</div>
+
</c:if>
+
</div>
+
<div role="tabpanel" class="tab-pane" id="page-preview">
+
<a href="${resource.path}.html" target="_blank">
+
<span id="open-new-window" class="glyphicon
glyphicon-share-alt" aria-hidden="true"></span>
+
</a>
+
<iframe id="iframe" src="${resource.path}.html" allowtransparency="true"
frameborder="0" height="100%" width="100%" style="height: 500px;background:none
transparent;-webkit-border-radius:7px;-moz-border-radius: 7px;border-radius:
7px; border: 3px solid black"></iframe>
</div>
- </div>
- <span
id="properties-info-icon" class="info-icon info-icon-lightgray pull-right
clearfix" ></span>
- <ul
class="nav nav-pills">
- <li
class="dropdown" role="presentation">
-
<a class="add-property-menu-item dropdown-toggle" data-toggle="dropdown"
href="#"><span class=""><span class="glyphicon glyphicon-plus"></span><span
class="caret"></span></span>
-
</a>
-
<ul class="dropdown-menu add-property-menu" role="menu"
aria-labelledby="propertyTypeMenu">
-
<li><a tabindex="-1" href="#"
data-property-type="String">String</a></li>
-
<li><a tabindex="-1" href="#" data-property-type="Date">Date</a></li>
-
<li><a tabindex="-1" href="#"
data-property-type="Boolean">Boolean</a></li>
-
<li><a tabindex="-1" href="#" data-property-type="Long">Long</a></li>
-
<li><a tabindex="-1" href="#"
data-property-type="Double">Double</a></li>
-
<li><a tabindex="-1" href="#"
data-property-type="Decimal">Decimal</a></li>
-
<li><a tabindex="-1" href="#"
data-property-type="Binary">Binary</a></li>
-
<li><a tabindex="-1" href="#" data-property-type="Name">Name</a></li>
-
<li><a tabindex="-1" href="#" data-property-type="Path">Path</a></li>
-
<li><a tabindex="-1" href="#"
data-property-type="Reference">Reference</a></li>
-
<li><a tabindex="-1" href="#" data-property-type="Uri">URI</a></li>
-
</ul>
- </li>
- </ul>
- </div>
- </div>
- <form
action="not_configured_yet.change.properties" method="post">
- <c:set
var="resourceIsNode" scope="request" value="<%=resource.adaptTo(Node.class)
!=null %>"/>
- <c:choose>
- <c:when
test="${resourceIsNode}" >
-
<%--
-
For some reason I get the following exception when using the JSTL expression
'${currentNode.properties}'
-
instead of the scriptlet code 'currentNode.getProperties()':
-
org.apache.sling.scripting.jsp.jasper.JasperException: Unable to compile class
for JSP:
-
org.apache.sling.scripting.jsp.jasper.el.JspValueExpression cannot be resolved
to a type
-
see https://issues.apache.org/jira/browse/SLING-2455
-
--%>
-
<c:forEach var="property" items="<%=currentNode.getProperties()%>"
varStatus="propertyLoopStatus">
- <%
Property property = (Property) pageContext.getAttribute("property");%>
-
<div id="property-${propertyLoopStatus.index}" class="row property-row"
data-property-name="${fn:escapeXml(property.name)}" >
-
<fieldset>
-
<div class="col-sm-3">
-
<label class="proplabel"
for='${property.name}'>${property.name}
[<%=PropertyType.nameFromValue(property.getType())%>${property.multiple ? '
multiple' : ''}]</label>
-
</div>
-
<div class="col-sm-7 property-col">
-<!--
geschachteltes div mit Zeilen pro multi value property
-->
-<!--
dann passen auch die Abstände (innerhalb des Properties
und zwischen den Properties) -->
-<%-- ${property.values} --%>
-
<c:choose>
-
<c:when test="${property.multiple}" >
-<!--
<fieldset
class="propmultival_fieldset"> -->
-
<c:forEach var="value"
items="<%=property.getValues()%>" varStatus="multiPropertyLoopStatus">
-
<div
id="property-${propertyLoopStatus.index}-${multiPropertyLoopStatus.index}"
class="row"
data-property-name="${fn:escapeXml(property.name)}-${multiPropertyLoopStatus.index}"
>
-
<fieldset>
-
<div
class="col-sm-12">
+
<div role="tabpanel" class="tab-pane ${!isWebPage ? 'active' : ''}"
id="properties">
+
<div style="display: none;" class="info-content-container" >
+
<div class="well well-sm info-content">
+
<button type="button" class="close"><span
aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+
<h4>Cheat Sheet</h4>
+
<p>You can use</p>
+
<ul>
+
<li><kbd><kbd>ctrl</kbd> + <kbd>s</kbd></kbd>
or <kbd><kbd>cmd</kbd> + <kbd>s</kbd></kbd> (for Mac) for saving a
property.</li>
+
<li><kbd><kbd>ctrl</kbd> + <kbd>del</kbd></kbd>
or <kbd><kbd>cmd</kbd> + <kbd>del</kbd></kbd> (for Mac) for removing a
property.</li>
+
<li><kbd><kbd>ctrl</kbd> + <kbd>n</kbd></kbd>
or <kbd><kbd>cmd</kbd> + <kbd>n</kbd></kbd> (for Mac) for opening the add
property menu.</li>
+
</ul>
+
</div>
+
</div>
+
<span id="properties-info-icon" class="info-icon info-icon-lightgray
pull-right clearfix" ></span>
+
<ul class="nav nav-pills">
+
<li class="dropdown" role="presentation">
+
<a class="add-property-menu-item dropdown-toggle"
data-toggle="dropdown" href="#"><span class=""><span class="glyphicon
glyphicon-plus"></span><span class="caret"></span></span>
+
</a>
+
<ul class="dropdown-menu add-property-menu" role="menu"
aria-labelledby="propertyTypeMenu">
+
<li><a tabindex="-1" href="#"
data-property-type="String">String</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Date">Date</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Boolean">Boolean</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Long">Long</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Double">Double</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Decimal">Decimal</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Binary">Binary</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Name">Name</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Path">Path</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Reference">Reference</a></li>
+
<li><a tabindex="-1" href="#"
data-property-type="Uri">URI</a></li>
+
</ul>
+
</li>
+
</ul>
+
<form action="not_configured_yet.change.properties" method="post">
+
<c:set var="resourceIsNode" scope="request"
value="<%=resource.adaptTo(Node.class) !=null %>"/>
+
<c:choose>
+
<c:when test="${resourceIsNode}" >
+
<%--
+
For some reason I get the following exception
when using the JSTL expression '${currentNode.properties}'
+
instead of the scriptlet code
'currentNode.getProperties()':
+
org.apache.sling.scripting.jsp.jasper.JasperException: Unable to compile class
for JSP:
+
org.apache.sling.scripting.jsp.jasper.el.JspValueExpression cannot be resolved
to a type
+
see
https://issues.apache.org/jira/browse/SLING-2455
+
--%>
+
<c:forEach var="property"
items="<%=currentNode.getProperties()%>" varStatus="propertyLoopStatus">
+
<% Property property = (Property)
pageContext.getAttribute("property");%>
+
<div
id="property-${propertyLoopStatus.index}" class="row property-row"
data-property-name="${fn:escapeXml(property.name)}" >
+
<fieldset>
+
<div class="col-sm-3">
+
<label
class="proplabel" for='${property.name}'>${property.name}
[<%=PropertyType.nameFromValue(property.getType())%>${property.multiple ? '
multiple' : ''}]</label>
+
</div>
+
<div class="col-sm-7
property-col">
+ <!--
geschachteltes div mit
Zeilen pro multi value property -->
+ <!--
dann passen auch die
Abstände (innerhalb des Properties und zwischen den Properties) -->
+ <%-- ${property.values} --%>
+
<c:choose>
+
<c:when
test="${property.multiple}" >
+ <!--
<fieldset class="propmultival_fieldset"> -->
+
<c:forEach var="value" items="<%=property.getValues()%>"
varStatus="multiPropertyLoopStatus">
+
<div id="property-${propertyLoopStatus.index}-${multiPropertyLoopStatus.index}"
class="row"
data-property-name="${fn:escapeXml(property.name)}-${multiPropertyLoopStatus.index}"
>
+
<fieldset>
+
<div class="col-sm-12">
+
<%@ include file="property-editor.jsp" %>
+
</div>
+
</fieldset>
+
</div>
+
</c:forEach>
+ <!--
</fieldset> -->
+
</c:when>
+
<c:otherwise>
<%@ include file="property-editor.jsp" %>
-
</div>
-
</fieldset>
+
</c:otherwise>
+
</c:choose>
</div>
-
</c:forEach>
-<!--
</fieldset> -->
-
</c:when>
-
<c:otherwise>
-
<%@ include
file="property-editor.jsp" %>
-
</c:otherwise>
-
</c:choose>
-
</div>
-
<div class="col-sm-2">
-
<span class="icon property-icon glyphicon
glyphicon-plus" aria-hidden="true"></span>
-
<span class="icon property-icon glyphicon
glyphicon-save" aria-hidden="true"></span>
-
<span class="icon property-icon glyphicon
glyphicon-remove" aria-hidden="true"></span>
-
</div>
-
</fieldset>
-
</div>
-
</c:forEach>
- </c:when>
-
<c:otherwise>
-
<c:forEach var="property" items="<%=resource.adaptTo(ValueMap.class)%>">
-
<div class="row">
-
<fieldset>
-
<div class="col-sm-3">
-
<label class="proplabel"
for='${property.key}'>${property.key}</label>
-
</div>
-
<div class="col-sm-7">
-
<input class="propinput form-control"
id="${property.key}" name="${property.key}" value="${property.value}"/>
-
</div>
-
</fieldset>
-
</div>
-
</c:forEach>
-
</c:otherwise>
- </c:choose>
- </form>
+
<div class="col-sm-2">
+
<span
class="icon property-icon glyphicon glyphicon-plus" aria-hidden="true"></span>
+
<span
class="icon property-icon glyphicon glyphicon-save" aria-hidden="true"></span>
+
<span
class="icon property-icon glyphicon glyphicon-remove" aria-hidden="true"></span>
+
</div>
+
</fieldset>
+
</div>
+
</c:forEach>
+
</c:when>
+
<c:otherwise>
+
<c:forEach var="property"
items="<%=resource.adaptTo(ValueMap.class)%>">
+
<div class="row">
+
<fieldset>
+
<div class="col-sm-3">
+
<label
class="proplabel" for='${property.key}'>${property.key}</label>
+
</div>
+
<div class="col-sm-7">
+
<input
class="propinput form-control" id="${property.key}" name="${property.key}"
value="${property.value}"/>
+
</div>
+
</fieldset>
+
</div>
+
</c:forEach>
+
</c:otherwise>
+
</c:choose>
+
</form>
+
</div> <!-- End properties panel -->
+ </div>
+ </div>
+ </div>
</div>
</div>
</div>
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/nodes.json.incl.jsp
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/nodes.json.incl.jsp?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/nodes.json.incl.jsp
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/main/resources/SLING-INF/libs/sling/resource-editor/nodes.json.incl.jsp
Sat Aug 15 20:11:13 2015
@@ -23,7 +23,7 @@
<c:if test="${theResource.path != '/reseditor'}">
<% Resource theResource = (Resource)
pageContext.getAttribute("theResource");
Node node = theResource.adaptTo(Node.class);
- String nodeType = (node !=null) ?
node.getPrimaryNodeType().getName() : "";
+ String nodeType = (node !=null) ?
node.getPrimaryNodeType().getName() : "nt:unstructured";
pageContext.setAttribute("nodeType", nodeType);
%>
{
Modified:
sling/trunk/contrib/explorers/resourceeditor/src/test/javascript/e2e/spec/e2e_spec.js
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/explorers/resourceeditor/src/test/javascript/e2e/spec/e2e_spec.js?rev=1696091&r1=1696090&r2=1696091&view=diff
==============================================================================
---
sling/trunk/contrib/explorers/resourceeditor/src/test/javascript/e2e/spec/e2e_spec.js
(original)
+++
sling/trunk/contrib/explorers/resourceeditor/src/test/javascript/e2e/spec/e2e_spec.js
Sat Aug 15 20:11:13 2015
@@ -171,7 +171,7 @@ describe('A user of the Apache Sling Res
client = client.url(homeURL);
client
.waitForExist('#last-element').click("#root
li[nodename=\"aTestNode\"] i.add-icon")
-
.waitForVisible('#addNodeDialog.add-node-finished',
1000).addValue('#select2-drop .select2-input', 'Return').click('#addNodeDialog
.btn.btn-primary.submit')
+
.waitForVisible('#addNodeDialog.add-node-finished',
2000).addValue('#select2-drop .select2-input', 'Return').click('#addNodeDialog
.btn.btn-primary.submit')
// The open node animation will take longer
than 500ms thus setting 2000ms as max.
.waitForExist('#root
li[nodename="aTestNode"].opened', 2000).elements('#root
li[nodename="aTestNode"].opened li a .jstree-themeicon', function(err, res) {
client
@@ -225,13 +225,13 @@ describe('A user of the Apache Sling Res
function addProperty(type, editorTagName){
var encodedNodeNameSelector = '#root
li[nodename="aTestNode"].opened li[nodename="a node with a resource type"]';
var encodedNodeNameOpenSelector =
encodedNodeNameSelector +' i.open-icon';
- var addPropertyMenuItemSelector = "#properties
.add-property-menu [data-property-type='"+type+"']";
+ var addPropertyMenuItemSelector = "#node-content
.add-property-menu [data-property-type='"+type+"']";
var key="a"+type+"Key";
var value="a "+type+" value";
var propValueEditorSelector = "#addPropertyDialog
div[data-property-type='"+type+"'] "+editorTagName;
client.url(homeURL).waitForExist('#last-element')
- .click("#root li[nodename=\"aTestNode\"]
i.open-icon").waitForExist("#properties .add-property-menu-item", 1000)
- .click("#properties
.add-property-menu-item").waitForExist(addPropertyMenuItemSelector, 1000)
+ .click("#root li[nodename=\"aTestNode\"]
i.open-icon").waitForExist("#node-content .add-property-menu-item", 1000)
+ .click("#node-content
.add-property-menu-item").waitForExist(addPropertyMenuItemSelector, 1000)
.click(addPropertyMenuItemSelector).waitForVisible('#new-property-key', 1000)
/*
* The value is not always set completely the first
time for some strange reason so I set it twice.
@@ -245,7 +245,7 @@ describe('A user of the Apache Sling Res
.click("#addPropertyDialog
.btn-primary.submit").waitForExist("label.proplabel[for='"+key+"']", 1000,
function(err, existed) {
assert(typeof err === "undefined" || err ===
null);
assert(existed === true);
- client.getValue("#properties
div[data-property-name='"+key+"'].row .propinput.property-value", function(err,
resultingValue) {
+ client.getValue("#node-content
div[data-property-name='"+key+"'].row .propinput.property-value", function(err,
resultingValue) {
assert(typeof err === "undefined" ||
err === null);
assert(value === resultingValue);
});
@@ -255,12 +255,12 @@ describe('A user of the Apache Sling Res
});
describe('can save a String property', function(){
- var inputElementSelector = "#properties
div[data-property-name='aStringKey'].row .propinput.property-value";
+ var inputElementSelector = "#node-content
div[data-property-name='aStringKey'].row .propinput.property-value";
it('with the icon', function(done) {
var stringValue = "new String value";
setStringFieldValue(client, stringValue);
- client.click("#properties
div[data-property-name='aStringKey'].row
.property-icon.glyphicon-save").waitForExist("div.alert-success.growl-notify",
1000).refresh();
+ client.click("#node-content
div[data-property-name='aStringKey'].row
.property-icon.glyphicon-save").waitForExist("div.alert-success.growl-notify",
1000).refresh();
testStringFieldValue(client, stringValue);
client.call(done);
});
@@ -285,8 +285,8 @@ describe('A user of the Apache Sling Res
function setStringFieldValue(client, value){
client.url(homeURL).waitForExist('#last-element')
- .click("#root li[nodename=\"aTestNode\"]
i.open-icon").waitForExist("#properties label.proplabel[for='aStringKey']",
1000)
- .setValue("#properties
div[data-property-name='aStringKey'].row .propinput.property-value", value);
+ .click("#root li[nodename=\"aTestNode\"]
i.open-icon").waitForExist("#node-content label.proplabel[for='aStringKey']",
1000)
+ .setValue("#node-content
div[data-property-name='aStringKey'].row .propinput.property-value", value);
}
function testStringFieldValue(client, value){
@@ -304,7 +304,7 @@ describe('A user of the Apache Sling Res
var value= "aStringKey";
focusInputField(client, value);
client
- .click("#properties
div[data-property-name='"+value+"'].row .property-icon.glyphicon-remove");
+ .click("#node-content
div[data-property-name='"+value+"'].row .property-icon.glyphicon-remove");
testRemoval(client, value);
client.call(done);
});
@@ -329,7 +329,7 @@ describe('A user of the Apache Sling Res
});
function focusInputField(client, value){
- var stringPropertyInputFieldSelector = "#properties
div[data-property-name='"+value+"'].row .propinput.property-value";
+ var stringPropertyInputFieldSelector = "#node-content
div[data-property-name='"+value+"'].row .propinput.property-value";
client.url(homeURL).waitForExist('#last-element')
.click("#root li[nodename=\"aTestNode\"]
i.open-icon").waitForExist(stringPropertyInputFieldSelector, 1000)
.click(stringPropertyInputFieldSelector);
@@ -339,7 +339,7 @@ describe('A user of the Apache Sling Res
client
.waitForVisible("div.bootbox-confirm .btn-primary",
1000)
.click("div.bootbox-confirm
.btn-primary").waitForExist("div.alert-success.growl-notify", 1000).refresh()
- .waitForExist("#properties
div[data-property-name='"+value+"'].row", true/*reverse*/, function(err,
existed) {
+ .waitForExist("#node-content
div[data-property-name='"+value+"'].row", true/*reverse*/, function(err,
existed) {
assert(typeof err === "undefined" || err ===
null);
assert(existed === false);
})