X-Git-Url: https://juplo.de/gitweb/?p=juplo-dialect;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeleaf%2FInactiveElementProcessor.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeleaf%2FInactiveElementProcessor.java;h=621a764690eed009bc0e02d89cfc6db3b8219a3e;hp=0000000000000000000000000000000000000000;hb=d221272c806efad874dafac1a9197f717ce3984f;hpb=b84e25ddcb54614b661f4e547f8e9d83a2e08642 diff --git a/src/main/java/de/juplo/thymeleaf/InactiveElementProcessor.java b/src/main/java/de/juplo/thymeleaf/InactiveElementProcessor.java new file mode 100644 index 0000000..621a764 --- /dev/null +++ b/src/main/java/de/juplo/thymeleaf/InactiveElementProcessor.java @@ -0,0 +1,77 @@ +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 <span>, if it is + * marked as inactive. + * @author Kai Moritz + */ +public class InactiveElementProcessor extends AbstractProcessor +{ + private final AttributeNameProcessorMatcher matcher = + new AttributeNameProcessorMatcher("inactive"); + + + @Override + public IProcessorMatcher 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)) + { + Element strong = + element.cloneElementNodeWithNewName(element, "span", true); + 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; + } +}