Skip to content

Instantly share code, notes, and snippets.

@circlee
Created October 29, 2018 02:48
Show Gist options
  • Save circlee/4652f7d0e71cd69c6cb1e8f259b20f42 to your computer and use it in GitHub Desktop.
Save circlee/4652f7d0e71cd69c6cb1e8f259b20f42 to your computer and use it in GitHub Desktop.
@Configuration
public class ResourceVersioningDialectConfig {
@Bean
public ResourceVersioningDialect getResourceVersioningDialect() {
return new ResourceVersioningDialect();
}
static class ResourceVersioningDialect extends AbstractProcessorDialect {
static final String NAME = "RVDialect";
static final String PREFIX = "th";
static final int PRECEDENCE = 800;
public ResourceVersioningDialect() {
super(NAME, PREFIX, PRECEDENCE);
}
protected ResourceVersioningDialect(String name, String prefix, int processorPrecedence) {
super(name, prefix, processorPrecedence);
}
@Override
public Set<IProcessor> getProcessors(String dialectPrefix) {
LinkedHashSet<IProcessor> processors = new LinkedHashSet<>();
processors.add( new VSRC(TemplateMode.HTML, dialectPrefix));
processors.add( new VHREF(TemplateMode.HTML, dialectPrefix));
return processors;
}
}
static class VSRC extends AbstractAttributeTagProcessor {
public static final int ATTR_PRECEDENCE = 1300;
public static final String ATTR_NAME = "vsrc";
public static final long INIT_TIMEMILLIS = System.currentTimeMillis();
public VSRC(TemplateMode templateMode, String dialectPrefix) {
super(templateMode, dialectPrefix, null, false, ATTR_NAME, true, ATTR_PRECEDENCE, true);
}
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName,
String attributeValue, IElementTagStructureHandler structureHandler) {
String returnVal = attributeValue;
if(returnVal != null) {
returnVal += returnVal.contains("?") ? "&" : "?";
returnVal += "v="+INIT_TIMEMILLIS;
}
structureHandler.setAttribute("src", returnVal );
}
}
static class VHREF extends AbstractAttributeTagProcessor {
public static final int ATTR_PRECEDENCE = 1300;
public static final String ATTR_NAME = "vhref";
public static final long INIT_TIMEMILLIS = System.currentTimeMillis();
public VHREF(TemplateMode templateMode, String dialectPrefix) {
super(templateMode, dialectPrefix, null, false, ATTR_NAME, true, ATTR_PRECEDENCE, true);
}
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName,
String attributeValue, IElementTagStructureHandler structureHandler) {
String returnVal = attributeValue;
if(returnVal != null) {
returnVal += returnVal.contains("?") ? "&" : "?";
returnVal += "v="+INIT_TIMEMILLIS;
}
structureHandler.setAttribute("href", returnVal );
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment