SLING-7713 - [HTL] Add support for data-sly-unwrap identifiers
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AbstractPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AbstractPlugin.java
index cd09ef7..5a204c1 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AbstractPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AbstractPlugin.java
@@ -37,4 +37,12 @@
public int compareTo(Plugin o) {
return this.priority - o.priority();
}
+
+ public String decodeVariableName(PluginCallInfo pluginCallInfo) {
+ String[] args = pluginCallInfo.getArguments();
+ if (args.length > 0) {
+ return args[0];
+ }
+ return null;
+ }
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/SetPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/SetPlugin.java
index 010918b..f4fe975 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/SetPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/SetPlugin.java
@@ -18,6 +18,7 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
package org.apache.sling.scripting.sightly.impl.plugin;
+import org.apache.commons.lang3.StringUtils;
import org.apache.sling.scripting.sightly.compiler.SightlyCompilerException;
import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
import org.apache.sling.scripting.sightly.compiler.expression.Expression;
@@ -38,6 +39,9 @@
public PluginInvoke invoke(final Expression expressionNode, final PluginCallInfo callInfo, final CompilerContext compilerContext) {
final String variableName = decodeVariableName(callInfo);
+ if (StringUtils.isEmpty(variableName)) {
+ throw new SightlyCompilerException("Identifier name was not provided.");
+ }
return new DefaultPluginInvoke() {
@@ -50,13 +54,4 @@
};
}
- private String decodeVariableName(PluginCallInfo callInfo) {
- String[] arguments = callInfo.getArguments();
- if (arguments.length == 0) {
- throw new SightlyCompilerException("Identifier name was not provided.");
- }
- return arguments[0];
- }
-
-
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TestPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TestPlugin.java
index 66570d4..202bfb4 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TestPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TestPlugin.java
@@ -43,7 +43,7 @@
@Override
public void beforeElement(PushStream stream, String tagName) {
- String variableName = decodeVariableName();
+ String variableName = decodeVariableName(callInfo);
globalBinding = variableName != null;
if (variableName == null) {
variableName = compilerContext.generateVariable("testVariable");
@@ -63,15 +63,6 @@
stream.write(VariableBinding.END);
}
}
-
- private String decodeVariableName() {
- String[] args = callInfo.getArguments();
- if (args.length > 0) {
- return args[0];
- }
- return null;
- }
-
};
}
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UnwrapPlugin.java b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UnwrapPlugin.java
index 104ecf7..51e2594 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UnwrapPlugin.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UnwrapPlugin.java
@@ -40,17 +40,28 @@
}
@Override
- public PluginInvoke invoke(final Expression expression, PluginCallInfo callInfo, final CompilerContext compilerContext) {
+ public PluginInvoke invoke(final Expression expression, final PluginCallInfo callInfo, final CompilerContext compilerContext) {
+
return new DefaultPluginInvoke() {
- private final String variable = compilerContext.generateVariable("unwrapCondition");
- private final Command unwrapTest = new Conditional.Start(variable, false);
+ private Command unwrapTest;
private boolean isSlyTag = false;
+ private String identifierName = decodeVariableName(callInfo);
+ private boolean globalBinding;
@Override
public void beforeElement(PushStream stream, String tagName) {
+ globalBinding = identifierName != null;
+ if (identifierName == null) {
+ identifierName = compilerContext.generateVariable("unwrapCondition");
+ }
+ if (globalBinding) {
+ stream.write(new VariableBinding.Global(identifierName, expression.getRoot()));
+ } else {
+ stream.write(new VariableBinding.Start(identifierName, testNode()));
+ }
isSlyTag = "sly".equals(tagName.toLowerCase());
- stream.write(new VariableBinding.Start(variable, testNode()));
+ unwrapTest = new Conditional.Start(identifierName, false);
}
@Override
@@ -87,7 +98,9 @@
@Override
public void afterElement(PushStream stream) {
- stream.write(VariableBinding.END);
+ if (!globalBinding) {
+ stream.write(VariableBinding.END);
+ }
}
private ExpressionNode testNode() {