package com.jspxcms.common.freemarker;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.HtmlUtils;
import com.jspxcms.common.util.Strings;
import com.jspxcms.common.web.Anchor;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
/**
* Anchor FreeMarker标签
*
* 生成html a标签
*
* @author liufang
*
*/
public class AnchorDirective implements TemplateDirectiveModel {
public static final String BEAN = "bean";
public static final String TARGET = "target";
public static final String LENGTH = "length";
public static final String APPEND = "append";
public static final String ATTRS = "attrs";
@SuppressWarnings({ "unchecked", "rawtypes" })
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
Anchor a = Freemarkers.getObject(params, BEAN, Anchor.class);
String target = Freemarkers.getString(params, TARGET);
if (a.getNewWindow() != null && a.getNewWindow()) {
target = "_blank";
}
String append = Freemarkers.getString(params, APPEND);
if (append == null) {
append = "...";
}
Integer length = Freemarkers.getInteger(params, LENGTH);
String attrs = Freemarkers.getString(params, ATTRS);
StringBuilder buff = new StringBuilder();
buff.append("<a href=\"").append(a.getUrl()).append("\"");
String title = HtmlUtils.htmlEscape(a.getTitle());
buff.append(" title=\"").append(title).append("\"");
if (StringUtils.isNotBlank(target)) {
buff.append(" target=\"").append(target).append("\"");
}
if (StringUtils.isNotBlank(attrs)) {
buff.append(" ").append(attrs);
}
buff.append(">");
boolean isStrong = a.getStrong() != null && a.getStrong();
boolean isEm = a.getEm() != null && a.getEm();
String color = a.getColor();
if (isStrong) {
buff.append("<strong>");
}
if (isEm) {
buff.append("<em>");
}
if (StringUtils.isNotBlank(color)) {
buff.append("<span style=\"color:").append(color).append(";\">");
}
if (length != null && length > 0) {
title = HtmlUtils.htmlEscape(Strings.substring(a.getTitle(),
length, append));
}
buff.append(title);
if (StringUtils.isNotBlank(color)) {
buff.append("</span>");
}
if (isEm) {
buff.append("</em>");
}
if (isStrong) {
buff.append("</strong>");
}
buff.append("</a>");
env.getOut().write(buff.toString());
}
}