package com.gustz.dove.web.base.view.tpl;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sinovatech.fw.util.New;
public class Tpls {
private static final String TAG_DATA = "data";
private static void write0(Appendable writer, Object o) throws IOException {
if (o == null)
return;
if (o instanceof CharSequence) {
writer.append((CharSequence) o);
return;
} else
writer.append(String.valueOf(o));
}
private static class JsValueWriter implements Tpl {
private String tag;
public JsValueWriter(String tag) {
super();
this.tag = tag;
}
@Override
public void write(Map<String, ?> context, Appendable writer) throws IOException {
Object o = context.get(tag);
if (o == null)
return;
writer.append(" var ").append(tag).append(" = ");
write0(writer, o);
writer.append(";").append(LINE_SEP);
}
}
private static final Pattern dataScriptPattern = Pattern.compile("<script[^>]+id=\"data-script\"[^>]?>([\\s\\S]*?)</script>",
Pattern.CASE_INSENSITIVE);
public static Tpl parseHtml(String html) {
Matcher matcher = dataScriptPattern.matcher(html);
if (!matcher.find()) {
return new PlainTemplate(html);
} else {
List<Tpl> tpls = New.list();
// add data template
tpls.add(new PlainTemplate(html.substring(0, matcher.start(1)) + ""));
tpls.add(new JsValueWriter(TAG_DATA));
//tpls.add(new JsValueWriter("list"));
tpls.add(new PlainTemplate(html.substring(matcher.end(1)) + ""));
return new CompositeTpl(tpls);
}
}
}