--- /dev/null
+package de.juplo.thymeleaf;
+
+
+import org.thymeleaf.Arguments;
+import org.thymeleaf.Configuration;
+import org.thymeleaf.dom.Element;
+import org.thymeleaf.processor.ProcessorResult;
+import org.thymeleaf.processor.attr.AbstractAttrProcessor;
+import org.thymeleaf.standard.expression.IStandardExpression;
+import org.thymeleaf.standard.expression.IStandardExpressionParser;
+import org.thymeleaf.standard.expression.StandardExpressions;
+
+
+/**
+ * Replaces the element by the tag <code><strong></code>, if it is
+ * marked as active.
+ * @author Kai Moritz
+ */
+public class ActiveAttrProcessor extends AbstractAttrProcessor
+{
+ public static final int ATTR_PRECEDENCE = 100;
+
+
+ public ActiveAttrProcessor()
+ {
+ super("active");
+ }
+
+
+ @Override
+ protected ProcessorResult processAttribute(
+ Arguments arguments,
+ Element element,
+ String name
+ )
+ {
+ Configuration configuration = arguments.getConfiguration();
+ IStandardExpressionParser parser =
+ StandardExpressions.getExpressionParser(configuration);
+ String value = element.getAttributeValue(name);
+ IStandardExpression expression =
+ parser.parseExpression(configuration, arguments, value);
+ element.removeAttribute(name);
+ if ((Boolean)expression.execute(configuration, arguments))
+ {
+ // We must not clone the processors, because we remove attributes
+ Element strong =
+ element.cloneElementNodeWithNewName(element, "strong", false);
+ strong.removeAttribute("charset");
+ strong.removeAttribute("th:charset");
+ strong.removeAttribute("coords");
+ strong.removeAttribute("href");
+ strong.removeAttribute("th:href");
+ strong.removeAttribute("hreflang");
+ strong.removeAttribute("th:hreflang");
+ strong.removeAttribute("media");
+ strong.removeAttribute("th:media");
+ strong.removeAttribute("name");
+ strong.removeAttribute("th:name");
+ strong.removeAttribute("rel");
+ strong.removeAttribute("th:rel");
+ strong.removeAttribute("ref");
+ strong.removeAttribute("th:ref");
+ strong.removeAttribute("shape");
+ strong.removeAttribute("target");
+ strong.removeAttribute("th:target");
+ strong.removeAttribute("type");
+ strong.removeAttribute("th:type");
+ element.clearChildren();
+ element.addChild(strong);
+ element.getParent().extractChild(element);
+ }
+ return ProcessorResult.OK;
+ }
+
+ @Override
+ public int getPrecedence()
+ {
+ return ATTR_PRECEDENCE;
+ }
+}
+++ /dev/null
-package de.juplo.thymeleaf;
-
-
-import org.thymeleaf.Arguments;
-import org.thymeleaf.Configuration;
-import org.thymeleaf.dom.Element;
-import org.thymeleaf.dom.Node;
-import org.thymeleaf.processor.AbstractProcessor;
-import org.thymeleaf.processor.IProcessorMatcher;
-import org.thymeleaf.processor.ProcessorMatchingContext;
-import org.thymeleaf.processor.ProcessorResult;
-import org.thymeleaf.processor.AttributeNameProcessorMatcher;
-import org.thymeleaf.standard.expression.IStandardExpression;
-import org.thymeleaf.standard.expression.IStandardExpressionParser;
-import org.thymeleaf.standard.expression.StandardExpressions;
-
-
-/**
- * Replaces the element by the tag <code><strong></code>, if it is
- * marked as active.
- * @author Kai Moritz
- */
-public class ActiveElementProcessor extends AbstractProcessor
-{
- private final AttributeNameProcessorMatcher matcher =
- new AttributeNameProcessorMatcher("active");
-
-
- @Override
- public IProcessorMatcher<? extends Node> getMatcher()
- {
- return matcher;
- }
-
- @Override
- protected ProcessorResult doProcess(
- Arguments arguments,
- ProcessorMatchingContext context,
- Node node
- )
- {
- // Because of the type of applicability being used, casts to Element here will not fail
- final Element element = (Element) node;
- final String[] names = this.matcher.getAttributeNames(context);
-
- for (final String name : names)
- {
- if (element.hasNormalizedAttribute(name))
- {
- Configuration configuration = arguments.getConfiguration();
- IStandardExpressionParser parser =
- StandardExpressions.getExpressionParser(configuration);
- String value = element.getAttributeValue(name);
- IStandardExpression expression =
- parser.parseExpression(configuration, arguments, value);
- element.removeAttribute(name);
- if ((Boolean)expression.execute(configuration, arguments))
- {
- // We must not clone the processors, because we remove attributes
- Element strong =
- element.cloneElementNodeWithNewName(element, "strong", false);
- strong.removeAttribute("charset");
- strong.removeAttribute("th:charset");
- strong.removeAttribute("coords");
- strong.removeAttribute("href");
- strong.removeAttribute("th:href");
- strong.removeAttribute("hreflang");
- strong.removeAttribute("th:hreflang");
- strong.removeAttribute("media");
- strong.removeAttribute("th:media");
- strong.removeAttribute("name");
- strong.removeAttribute("th:name");
- strong.removeAttribute("rel");
- strong.removeAttribute("th:rel");
- strong.removeAttribute("ref");
- strong.removeAttribute("th:ref");
- strong.removeAttribute("shape");
- strong.removeAttribute("target");
- strong.removeAttribute("th:target");
- strong.removeAttribute("type");
- strong.removeAttribute("th:type");
- element.clearChildren();
- element.addChild(strong);
- element.getParent().extractChild(element);
- }
- break;
- }
- }
- return ProcessorResult.OK;
- }
-
- @Override
- public int getPrecedence()
- {
- // Be sure to be executed first
- return 0;
- }
-}
--- /dev/null
+package de.juplo.thymeleaf;
+
+
+import org.thymeleaf.Arguments;
+import org.thymeleaf.Configuration;
+import org.thymeleaf.dom.Element;
+import org.thymeleaf.processor.ProcessorResult;
+import org.thymeleaf.processor.attr.AbstractAttrProcessor;
+import org.thymeleaf.standard.expression.IStandardExpression;
+import org.thymeleaf.standard.expression.IStandardExpressionParser;
+import org.thymeleaf.standard.expression.StandardExpressions;
+
+
+/**
+ * Replaces the element by the tag <code><span></code>, if it is
+ * marked as inactive.
+ * @author Kai Moritz
+ */
+public class InactiveAttrProcessor extends AbstractAttrProcessor
+{
+ public static final int ATTR_PRECEDENCE = 100;
+
+
+ public InactiveAttrProcessor()
+ {
+ super("inactive");
+ }
+
+
+ @Override
+ protected ProcessorResult processAttribute(
+ Arguments arguments,
+ Element element,
+ String name
+ )
+ {
+ Configuration configuration = arguments.getConfiguration();
+ IStandardExpressionParser parser =
+ StandardExpressions.getExpressionParser(configuration);
+ String value = element.getAttributeValue(name);
+ IStandardExpression expression =
+ parser.parseExpression(configuration, arguments, value);
+ element.removeAttribute(name);
+ if ((Boolean)expression.execute(configuration, arguments))
+ {
+ // We must not clone the processors, because we remove attributes
+ Element strong =
+ element.cloneElementNodeWithNewName(element, "span", false);
+ strong.removeAttribute("charset");
+ strong.removeAttribute("th:charset");
+ strong.removeAttribute("coords");
+ strong.removeAttribute("href");
+ strong.removeAttribute("th:href");
+ strong.removeAttribute("hreflang");
+ strong.removeAttribute("th:hreflang");
+ strong.removeAttribute("media");
+ strong.removeAttribute("th:media");
+ strong.removeAttribute("name");
+ strong.removeAttribute("th:name");
+ strong.removeAttribute("rel");
+ strong.removeAttribute("th:rel");
+ strong.removeAttribute("ref");
+ strong.removeAttribute("th:ref");
+ strong.removeAttribute("shape");
+ strong.removeAttribute("target");
+ strong.removeAttribute("th:target");
+ strong.removeAttribute("type");
+ strong.removeAttribute("th:type");
+ element.clearChildren();
+ element.addChild(strong);
+ element.getParent().extractChild(element);
+ }
+ return ProcessorResult.OK;
+ }
+
+ @Override
+ public int getPrecedence()
+ {
+ return ATTR_PRECEDENCE;
+ }
+}
+++ /dev/null
-package de.juplo.thymeleaf;
-
-
-import org.thymeleaf.Arguments;
-import org.thymeleaf.Configuration;
-import org.thymeleaf.dom.Element;
-import org.thymeleaf.dom.Node;
-import org.thymeleaf.processor.AbstractProcessor;
-import org.thymeleaf.processor.IProcessorMatcher;
-import org.thymeleaf.processor.ProcessorMatchingContext;
-import org.thymeleaf.processor.ProcessorResult;
-import org.thymeleaf.processor.AttributeNameProcessorMatcher;
-import org.thymeleaf.standard.expression.IStandardExpression;
-import org.thymeleaf.standard.expression.IStandardExpressionParser;
-import org.thymeleaf.standard.expression.StandardExpressions;
-
-
-/**
- * Replaces the element by the tag <code><span></code>, if it is
- * marked as inactive.
- * @author Kai Moritz
- */
-public class InactiveElementProcessor extends AbstractProcessor
-{
- private final AttributeNameProcessorMatcher matcher =
- new AttributeNameProcessorMatcher("inactive");
-
-
- @Override
- public IProcessorMatcher<? extends Node> getMatcher()
- {
- return matcher;
- }
-
- @Override
- protected ProcessorResult doProcess(
- Arguments arguments,
- ProcessorMatchingContext context,
- Node node
- )
- {
- // Because of the type of applicability being used, casts to Element here will not fail
- final Element element = (Element) node;
- final String[] names = this.matcher.getAttributeNames(context);
-
- for (final String name : names)
- {
- if (element.hasNormalizedAttribute(name))
- {
- Configuration configuration = arguments.getConfiguration();
- IStandardExpressionParser parser =
- StandardExpressions.getExpressionParser(configuration);
- String value = element.getAttributeValue(name);
- IStandardExpression expression =
- parser.parseExpression(configuration, arguments, value);
- element.removeAttribute(name);
- if ((Boolean)expression.execute(configuration, arguments))
- {
- // We must not clone the processors, because we remove attributes
- Element strong =
- element.cloneElementNodeWithNewName(element, "span", false);
- strong.removeAttribute("charset");
- strong.removeAttribute("th:charset");
- strong.removeAttribute("coords");
- strong.removeAttribute("href");
- strong.removeAttribute("th:href");
- strong.removeAttribute("hreflang");
- strong.removeAttribute("th:hreflang");
- strong.removeAttribute("media");
- strong.removeAttribute("th:media");
- strong.removeAttribute("name");
- strong.removeAttribute("th:name");
- strong.removeAttribute("rel");
- strong.removeAttribute("th:rel");
- strong.removeAttribute("ref");
- strong.removeAttribute("th:ref");
- strong.removeAttribute("shape");
- strong.removeAttribute("target");
- strong.removeAttribute("th:target");
- strong.removeAttribute("type");
- strong.removeAttribute("th:type");
- element.clearChildren();
- element.addChild(strong);
- element.getParent().extractChild(element);
- }
- break;
- }
- }
- return ProcessorResult.OK;
- }
-
- @Override
- public int getPrecedence()
- {
- // Be sure to be executed first
- return 0;
- }
-}
public Set<IProcessor> getProcessors()
{
final Set<IProcessor> processors = new HashSet<>();
- processors.add(new ActiveElementProcessor());
- processors.add(new InactiveElementProcessor());
+ processors.add(new ActiveAttrProcessor());
+ processors.add(new InactiveAttrProcessor());
return processors;
}
}