package com.jspxcms.common.freemarker; import java.util.List; 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.template.TemplateMethodModelEx; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; /** * Anchor FreeMarker方法 * * 生成html a标签 * * @author liufang * */ public class AnchorMethod implements TemplateMethodModelEx { private static class Params { public Integer length; public String append; public String target; public String attrs; } // anchor,params(length,append,target) @SuppressWarnings("rawtypes") public Object exec(List args) throws TemplateModelException { int argsSize = args.size(); if (argsSize < 1) { throw new TemplateModelException("Wrong arguments"); } TemplateModel arg0 = (TemplateModel) args.get(0); Anchor a = Freemarkers.getObject(arg0, "arg0", Anchor.class); Params params; if (argsSize > 1) { TemplateModel arg1 = (TemplateModel) args.get(1); params = Freemarkers.getParams(arg1, "arg1", Params.class); } else { params = new Params(); } String target = params.target; if (a.getNewWindow() != null && a.getNewWindow()) { target = "_blank"; } String append = params.append; if (append == null) { append = "..."; } Integer length = params.length; 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(params.attrs)) { buff.append(" ").append(params.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>"); return buff.toString(); } }