X-Git-Url: https://juplo.de/gitweb/?p=juplo-dialect;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeleaf%2FInactiveAttrProcessor.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeleaf%2FInactiveAttrProcessor.java;h=30db2d56172bdb9f0c8d7f42ccfa05d79f36d2f2;hp=0000000000000000000000000000000000000000;hb=815df4f032e0cfdef9857f711420c772f9e2c0d5;hpb=8f5433b0625ba08b380ba757ee6b090945f8cf2c diff --git a/src/main/java/de/juplo/thymeleaf/InactiveAttrProcessor.java b/src/main/java/de/juplo/thymeleaf/InactiveAttrProcessor.java new file mode 100644 index 0000000..30db2d5 --- /dev/null +++ b/src/main/java/de/juplo/thymeleaf/InactiveAttrProcessor.java @@ -0,0 +1,81 @@ +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 <span>, 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; + } +}