You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/04/02 10:59:24 UTC

svn commit: r1670852 - in /sling/trunk/contrib/scripting/sightly: engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ testing-content/src/main/resources/SLING-INF/ testing-content/src/main/resources/SLING-INF/apps/sightly/scr...

Author: radu
Date: Thu Apr  2 08:59:23 2015
New Revision: 1670852

URL: http://svn.apache.org/r1670852
Log:
SLING-4546 - Sightly: Improper handling of extension and selectors by data-sly-resource

* Improved selector extraction for resource path (taking extensions into consideration)
* Added selectors from path or parent to dispatcher options so they will no longer be ignored
* Updated testing content and integration tests
(applied patch from Vlad Băilescu; closes #77)

Added:
    sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/
    sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/text.html
Modified:
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java
    sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/resource/resource.html
    sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
    sling/trunk/contrib/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java?rev=1670852&r1=1670851&r2=1670852&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java Thu Apr  2 08:59:23 2015
@@ -101,6 +101,8 @@ public class ResourceRuntimeExtension im
             selectors.addAll(Arrays.asList(request.getRequestPathInfo().getSelectors()));
         }
         Map<String, String> dispatcherOptionsMap = new HashMap<String, String>();
+        dispatcherOptionsMap.put(OPTION_ADD_SELECTORS, getSelectorString(selectors));
+        dispatcherOptionsMap.put(OPTION_REPLACE_SELECTORS, " ");
         if (options.containsKey(OPTION_SELECTORS)) {
             Object selectorsObject = getAndRemoveOption(options, OPTION_SELECTORS);
             selectors.clear();
@@ -283,11 +285,11 @@ public class ResourceRuntimeExtension im
 
         PathInfo(String path) {
             selectors = getSelectorsFromPath(path);
-            String selectorString = getSelectorString(selectors);
-            if (StringUtils.isNotEmpty(selectorString)) {
-                this.path = path.substring(0, path.length() - selectorString.length() - 1);
-            } else {
+            if (selectors.isEmpty()) {
                 this.path = path;
+            } else {
+                String selectorString = getSelectorString(selectors);
+                this.path = path.replace("." + selectorString, "");
             }
         }
     }
@@ -302,9 +304,14 @@ public class ResourceRuntimeExtension im
             }
             int dotPos = processingPath.indexOf('.');
             if (dotPos > -1) {
-                String selectorString = processingPath.substring(dotPos + 1, processingPath.length());
-                String[] selectorParts = selectorString.split("\\.");
-                selectors.addAll(Arrays.asList(selectorParts));
+                int lastDotPos = processingPath.lastIndexOf('.');
+                // We're expecting selectors only when an extension is also present. If there's
+                // one dot it means we only have the extension
+                if (lastDotPos > dotPos) {
+                    String selectorString = processingPath.substring(dotPos + 1, lastDotPos);
+                    String[] selectorParts = selectorString.split("\\.");
+                    selectors.addAll(Arrays.asList(selectorParts));
+                }
             }
         }
         return selectors;

Modified: sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/resource/resource.html
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/resource/resource.html?rev=1670852&r1=1670851&r2=1670852&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/resource/resource.html (original)
+++ sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/resource/resource.html Thu Apr  2 08:59:23 2015
@@ -23,9 +23,11 @@
 </head>
 <body>
 <div id="selectors" data-sly-resource="${'/sightly/includedresource' @ selectors=['a', 'b']}"></div>
-<div id="selectors-remove-c" data-sly-resource="${'/sightly/includedresource.a.b.c' @ selectors=['a', 'b']}"></div>
-<div id="removeselectors-remove-b" data-sly-resource="${'/sightly/includedresource.a.b.c' @ removeSelectors=['b']}"></div>
+<div id="selectors-remove-c" data-sly-resource="${'/sightly/includedresource.a.b.c.html' @ selectors=['a', 'b']}"></div>
+<div id="removeselectors-remove-b" data-sly-resource="${'/sightly/includedresource.a.b.c.html' @ removeSelectors=['b']}"></div>
 <div id="addselectors" data-sly-resource="${'/sightly/includedresource' @ addSelectors=['a', 'b', 'c']}"></div>
 <div id="dot-include" data-sly-resource="${ '.' @ selectors='dot'}"></div>
+<div id="extension-selectors" data-sly-resource="${'/sightly/text.a.b.txt'}"></div>
+<div id="extension-replaceselectors" data-sly-resource="${'/sightly/text.a.b.txt' @ selectors=['c']}"></div>
 </body>
 </html>
\ No newline at end of file

Added: sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/text.html
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/text.html?rev=1670852&view=auto
==============================================================================
--- sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/text.html (added)
+++ sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/text/text.html Thu Apr  2 08:59:23 2015
@@ -0,0 +1,20 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<span class="path">path: ${resource.path}</span><br>
+<span class="selectors">selectors: ${request.requestPathInfo.selectorString}</span>
\ No newline at end of file

Modified: sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json?rev=1670852&r1=1670851&r2=1670852&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json (original)
+++ sling/trunk/contrib/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json Thu Apr  2 08:59:23 2015
@@ -16,5 +16,9 @@
     "template": {
       "jcr:primaryType": "nt:unstructured",
       "sling:resourceType": "/apps/sightly/scripts/template"
+    },
+    "text.txt": {
+      "jcr:primaryType": "nt:unstructured",
+      "sling:resourceType": "/apps/sightly/scripts/text"
     }
 }

Modified: sling/trunk/contrib/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java?rev=1670852&r1=1670851&r2=1670852&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java (original)
+++ sling/trunk/contrib/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java Thu Apr  2 08:59:23 2015
@@ -77,6 +77,10 @@ public class SlingSpecificsSightlyIT {
         assertEquals("selectors: a.c", HTMLExtractor.innerHTML(url, pageContent, "#removeselectors-remove-b span.selectors"));
         assertEquals("selectors: a.b.c", HTMLExtractor.innerHTML(url, pageContent, "#addselectors span.selectors"));
         assertEquals("It works", HTMLExtractor.innerHTML(url, pageContent, "#dot"));
+        assertEquals("path: /sightly/text.txt", HTMLExtractor.innerHTML(url, pageContent, "#extension-selectors span.path"));
+        assertEquals("selectors: a.b", HTMLExtractor.innerHTML(url, pageContent, "#extension-selectors span.selectors"));
+        assertEquals("path: /sightly/text.txt", HTMLExtractor.innerHTML(url, pageContent, "#extension-replaceselectors span.path"));
+        assertEquals("selectors: c", HTMLExtractor.innerHTML(url, pageContent, "#extension-replaceselectors span.selectors"));
     }
 
     @Test