All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dandelion.datatables.thymeleaf.processor.TbodyElProcessor Maven / Gradle / Ivy

There is a newer version: 1.1.0
Show newest version
package com.github.dandelion.datatables.thymeleaf.processor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.thymeleaf.Arguments;
import org.thymeleaf.dom.Element;
import org.thymeleaf.dom.Node;
import org.thymeleaf.processor.IElementNameProcessorMatcher;
import org.thymeleaf.processor.ProcessorResult;

import com.github.dandelion.datatables.core.html.HtmlTable;
import com.github.dandelion.datatables.thymeleaf.dialect.DataTablesDialect;
import com.github.dandelion.datatables.thymeleaf.dialect.AbstractDatatablesElProcessor;

/**
 * 

* Element processor applied to the HTML tbody tag. *

* This processor adds the dt:data attribute to HTML tr * and td tags which will be duplicated (by th:each attribute) * and internally processed by other attributes to fill the * HtmlTable bean. * * @author Thibault Duchateau */ public class TbodyElProcessor extends AbstractDatatablesElProcessor { // Logger private static Logger logger = LoggerFactory.getLogger(TbodyElProcessor.class); public TbodyElProcessor(IElementNameProcessorMatcher matcher) { super(matcher); } @Override public int getPrecedence() { return 4000; } @Override protected ProcessorResult doProcessElement(Arguments arguments, Element element, HtmlTable table) { logger.debug("{} element found", element.getNormalizedName()); // All the tbody tag are iterated over for (Node child : element.getChildren()) { if (child != null && child instanceof Element) { Element trChildTag = (Element) child; String trChildTagName = trChildTag.getNormalizedName(); // The tr nodes must be processed (for HtmlRow creation) trChildTag.setProcessable(true); if (trChildTagName != null && trChildTagName.equals("tr")) { if (trChildTag.hasAttribute("th:each")) { trChildTag.setAttribute(DataTablesDialect.DIALECT_PREFIX + ":data", "internalUse"); for (Node grandchild : trChildTag.getChildren()) { if (grandchild != null && grandchild instanceof Element) { Element tdChildTag = (Element) grandchild; tdChildTag.setAttribute(DataTablesDialect.DIALECT_PREFIX + ":data", "internalUse"); // The td nodes must be processed too (for // HtmlColumn creation) tdChildTag.setProcessable(true); } } } } } } return ProcessorResult.ok(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy