/*
* Copyright 2011-2012 Blazebit
*/
package com.blazebit.blazefaces.renderkit;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import com.blazebit.blazefaces.apt.JsfRenderer;
import com.blazebit.blazefaces.util.RendererUtils;
@JsfRenderer(type = "javax.faces.Body", family = "javax.faces.Output")
public class BodyRenderer extends CoreRenderer {
private static final String[] attrs = {
"dir",
"lang",
"onclick",
"ondblclick",
"onkeydown",
"onkeypress",
"onkeyup",
"onload",
"onmousedown",
"onmousemove",
"onmouseout",
"onmouseover",
"onmouseup",
"onunload",
"style",
"title",
"xmlns"
};
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
String styleClass = (String) component.getAttributes().get("styleClass");
writer.startElement("body", component);
if (styleClass != null && styleClass.length() != 0) {
writer.writeAttribute("class", styleClass, "styleClass");
}
renderPassThruAttributes(context, component, attrs);
}
@Override
public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
//no-op
}
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
ResponseWriter writer = context.getResponseWriter();
UIViewRoot viewRoot = context.getViewRoot();
Iterator<UIComponent> iter = (viewRoot.getComponentResources(context, "body")).listIterator();
while (iter.hasNext()) {
iter.next().encodeAll(context);
}
List<String> scripts = RendererUtils.getBodyBottomScripts(context);
if(scripts != null && scripts.size() > 0){
writer.startElement("script", null);
writer.writeAttribute("type", "text/javascript", null);
for(String script : scripts){
writer.write(script);
}
writer.endElement("script");
}
RendererUtils.renderUnhandledMessages(context);
writer.endElement("body");
}
}