package com.taobao.easyweb.core.velocity;
import com.taobao.easyweb.core.context.ThreadContext;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* User: jimmey/shantong
* DateTime: 13-4-22 ����1:40
* <p/>
* �ṩҳ����Ϣ��չʾ����title��meta info��js��url�����飩��css��url�����飩
*/
public class PageAttributeTool {
/**
* ���һ��js����Ƭ�ε�ҳͷ
*
* @param code
*/
private final static String JS_1 = "<script type=\"text/javascript\">\n";
private final static String JS_2 = "<script type=\"text/javascript\" src=\"";
private final static String JS_1_END = "</script>\n";
private final static String JS_2_END = "\"></script>\n";
private final static String CSS_2 = "<link rel=\"stylesheet\" href=\"";
private final static String CSS_2_END = "\" type=\"text/css\"/>\n";
private final static String CSS_1 = "<style type=\"text/css\">\n";
private final static String CSS_1_END = "</style>";
private final static String JS_KEY = "_javaScript_head";
private final static String JS_KEY_FOOT = "_javaScript_foot";
private final static String CSS_KEY = "_styleSheet";
private final static String TITLE_KEY = "_page_title";
private final static String META_KEY = "_page_meta";
/**
* ��vm��ʹ�� $assetsTool.addJs("/xxx.js")
*
* @param url
*/
public static void addJs(String url) {
addJs(url, "head");
}
public static void addJsCode(String code) {
addJsCode(code, "head");
}
public static void addJs(String url, String section) {
addJavascript(JS_2 + url + JS_2_END, section);
}
public static void addJsCode(String code, String section) {
addJavascript(JS_1 + code + JS_1_END, section);
}
public static void setTitle(String title) {
ThreadContext.getContext().putContext(TITLE_KEY, title);
}
public static String title(String defaultTitle) {
String title = (String) ThreadContext.getContext().getContext(TITLE_KEY);
if (title == null) {
title = defaultTitle;
}
return title;
}
public static String title() {
return title(null);
}
public static void addMeta(String name, String content) {
Map<String, String> metas = (Map<String, String>) ThreadContext.getContext().getContext(META_KEY);
if (metas == null) {
metas = new LinkedHashMap<String, String>();
ThreadContext.getContext().putContext(META_KEY, metas);
}
metas.put(name, content);
}
public static String metas() {
Map<String, String> metas = (Map<String, String>) ThreadContext.getContext().getContext(META_KEY);
if (metas == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : metas.entrySet()) {
sb.append("<meta name=\"").append(entry.getKey()).append("\" content=\"").append(entry.getValue()).append("\"/>\n");
}
return sb.toString();
}
private static void addJavascript(String content, String section) {
String key = JS_KEY;
if ("foot".equals(section)) {
key = JS_KEY_FOOT;
}
List<String> urls = (List<String>) ThreadContext.getContext().getContext(key);
if (urls == null) {
urls = new LinkedList<String>();
ThreadContext.getContext().putContext(key, urls);
}
urls.add(content);
}
/**
* ��vm��ʹ�� $assetsTool.addCss("/xxx.css")
*
* @param url
*/
public static void addCss(String url) {
addStylesheet(CSS_2 + url + CSS_2_END);
}
public static void addCssCode(String code) {
addStylesheet(CSS_1 + code + CSS_1_END);
}
private static void addStylesheet(String content) {
List<String> urls = (List<String>) ThreadContext.getContext().getContext(CSS_KEY);
if (urls == null) {
urls = new LinkedList<String>();
ThreadContext.getContext().putContext(CSS_KEY, urls);
}
urls.add(content);
}
/**
* $assetsTool.js()
*
* @return
*/
public static String js() {
return js("head");
}
public static String js(String section) {
String key = JS_KEY;
if ("foot".equals(section)) {
key = JS_KEY_FOOT;
}
List<String> urls = (List<String>) ThreadContext.getContext().getContext(key);
if (urls == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (String content : urls) {
sb.append(content);
}
return sb.toString();
}
/**
* $assetsTool.css()
*
* @return
*/
public static String css() {
List<String> urls = (List<String>) ThreadContext.getContext().getContext(CSS_KEY);
if (urls == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (String url : urls) {
sb.append(url);
}
return sb.toString();
}
}