Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.richfaces.renderkit.html.TabPanelRenderer Maven / Gradle / Ivy
package org.richfaces.renderkit.html;
import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.active;
import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.disabled;
import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.inactive;
import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
import static org.richfaces.renderkit.HtmlConstants.DIV_ELEM;
import static org.richfaces.renderkit.HtmlConstants.ID_ATTRIBUTE;
import static org.richfaces.renderkit.HtmlConstants.SPAN_ELEM;
import static org.richfaces.renderkit.HtmlConstants.STYLE_ATTRIBUTE;
import static org.richfaces.renderkit.HtmlConstants.TBODY_ELEMENT;
import static org.richfaces.renderkit.HtmlConstants.TD_ELEM;
import static org.richfaces.renderkit.HtmlConstants.TR_ELEMENT;
import static org.richfaces.renderkit.RenderKitUtils.renderPassThroughAttributes;
import java.io.IOException;
import java.util.Map;
import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.ajax4jsf.javascript.JSObject;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.component.AbstractTab;
import org.richfaces.component.AbstractTabPanel;
import org.richfaces.component.AbstractTogglePanel;
import org.richfaces.component.AbstractTogglePanelItemInterface;
import org.richfaces.component.AbstractTogglePanelTitledItem;
import org.richfaces.component.util.HtmlUtil;
import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.HtmlConstants;
import org.richfaces.renderkit.RenderKitUtils;
@ResourceDependencies ( {
@ResourceDependency (library = "javax.faces" , name = "jsf.js" ),
@ResourceDependency (name = "jquery.js" ),
@ResourceDependency (name = "richfaces.js" ),
@ResourceDependency (name = "richfaces-event.js" ),
@ResourceDependency (name = "richfaces-base-component.js" ),
@ResourceDependency (library = "org.richfaces" , name = "tabPanel.ecss" ),
@ResourceDependency (library = "org.richfaces" , name = "togglePanel.js" ),
@ResourceDependency (library = "org.richfaces" , name = "tabPanel.js" )
})
@JsfRenderer (type = "org.richfaces.TabPanelRenderer" , family = AbstractTabPanel.COMPONENT_FAMILY)
public class TabPanelRenderer extends TogglePanelRenderer {
private static final RenderKitUtils.Attributes HEADER_ATTRIBUTES = RenderKitUtils.attributes()
.generic("onclick" , "onheaderclick" , "headerclick" )
.generic("ondblclick" , "onheaderdblclick" , "headerdblclick" )
.generic("onmousedown" , "onheadermousedown" , "headermousedown" )
.generic("onmousemove" , "onheadermousemove" , "headermousemove" )
.generic("onmouseup" , "onheadermouseup" , "headermouseup" );
private static final String DIV = DIV_ELEM;
private static final String STYLE = STYLE_ATTRIBUTE;
private static final String CLASS = CLASS_ATTRIBUTE;
protected static void addOnCompleteParam (FacesContext context, String newValue, String panelId) {
StringBuilder onComplete = new StringBuilder();
onComplete.append("RichFaces.$('" ).append(panelId)
.append("').onCompleteHandler('" ).append(newValue).append("');" );
ExtendedPartialViewContext.getInstance(context).appendOncomplete(onComplete.toString());
}
@Override
protected void doEncodeBegin (ResponseWriter w, FacesContext context, UIComponent component) throws IOException {
super .doEncodeBegin(w, context, component);
writeTabsLine(w, context, component);
writeTabsLineSeparator(w, component);
}
private void writeTabsLineSeparator (ResponseWriter writer, UIComponent component) throws IOException {
writer.startElement(DIV, component);
writer.writeAttribute(CLASS_ATTRIBUTE, "rf-tab-hdr-brd" , null );
writer.endElement(DIV);
}
private void writeTabsLine (ResponseWriter w, FacesContext context, UIComponent comp) throws IOException {
w.startElement(DIV, comp);
w.writeAttribute(CLASS, "rf-tab-hdr-tabline-vis" , null );
w.startElement("table" , comp);
w.writeAttribute(CLASS_ATTRIBUTE, "rf-tab-hdr-tabs" , null );
w.writeAttribute("cellspacing" , "0" , null );
w.startElement(TBODY_ELEMENT, comp);
w.startElement(TR_ELEMENT, comp);
writeTopTabFirstSpacer(w, comp);
for (AbstractTogglePanelItemInterface item : ((AbstractTogglePanel) comp).getRenderedItems()) {
AbstractTab tab = (AbstractTab) item;
writeTopTabHeader(context, w, tab);
writeTopTabSpacer(w, comp);
}
writeTopTabLastSpacer(w, comp);
w.endElement(TR_ELEMENT);
w.endElement(TBODY_ELEMENT);
w.endElement("table" );
writeTopTabsControl(w, comp, "rf-tab-hdr-scrl-lft rf-tab-hdn" , "\u00AB" );
writeTopTabsControl(w, comp, "rf-tab-hdr-tablst rf-tab-hdn" , "\u2193" );
writeTopTabsControl(w, comp, "rf-tab-hdr-scrl-rgh rf-tab-hdn" , "\u00BB" );
w.endElement(DIV_ELEM);
}
@Override
protected String getStyle (UIComponent component) {
return attributeAsString(component, "style" );
}
@Override
protected String getStyleClass (UIComponent component) {
return HtmlUtil.concatClasses("rf-tbp" , attributeAsString(component, "styleClass" ));
}
private void writeTopTabHeader (FacesContext context, ResponseWriter writer, AbstractTab tab) throws IOException {
boolean isActive = tab.isActive();
boolean isDisabled = tab.isDisabled();
encodeTabHeader(context, tab, writer, inactive, !isActive && !isDisabled);
encodeTabHeader(context, tab, writer, active, isActive && !isDisabled);
encodeTabHeader(context, tab, writer, disabled, isDisabled);
}
private void encodeTabHeader (FacesContext context, AbstractTab tab, ResponseWriter writer,
AbstractTogglePanelTitledItem.HeaderStates state, Boolean isDisplay) throws IOException {
writer.startElement(TD_ELEM, tab);
writer.writeAttribute(ID_ATTRIBUTE, tab.getClientId(context) + ":header:" + state.toString(), null );
renderPassThroughAttributes(context, tab, HEADER_ATTRIBUTES);
writer.writeAttribute(CLASS_ATTRIBUTE, concatClasses("rf-tab-hdr rf-tab-hdr-" + state.abbreviation(),
attributeAsString(tab, "headerClass" ), attributeAsString(tab, state.headerClass())), null );
writer.writeAttribute(STYLE_ATTRIBUTE, concatStyles(isDisplay ? "" : "display : none" , attributeAsString(tab, "headerStyle" )), null );
writer.startElement(SPAN_ELEM, tab);
writer.writeAttribute(CLASS_ATTRIBUTE, "rf-tab-lbl" , null );
UIComponent headerFacet = tab.getHeaderFacet(state);
if (headerFacet != null && headerFacet.isRendered()) {
headerFacet.encodeAll(context);
} else {
Object headerText = tab.getAttributes().get("header" );
if (headerText != null && !headerText.equals("" )) {
writer.writeText(headerText, null );
}
}
writer.endElement(SPAN_ELEM);
writer.endElement(TD_ELEM);
}
private void writeTopTabsControl (ResponseWriter w, UIComponent comp, String styles, String text) throws IOException {
w.startElement(DIV_ELEM, comp);
w.writeAttribute(CLASS_ATTRIBUTE, styles, null );
w.writeText(text, null );
w.endElement(DIV_ELEM);
}
private void writeTopTabFirstSpacer (ResponseWriter w, UIComponent comp) throws IOException {
writeTopTabSpacer(w, comp, "padding-left: 5px;" , "rf-tab-hdr-spcr" );
}
private void writeTopTabSpacer (ResponseWriter w, UIComponent comp) throws IOException {
writeTopTabSpacer(w, comp, "" , "rf-tab-hdr-spcr rf-tab-hortab-tabspcr-wdh" );
}
private void writeTopTabLastSpacer (ResponseWriter w, UIComponent comp) throws IOException {
writeTopTabSpacer(w, comp, "padding-right: 5px; width: 100%;" , "rf-tab-hdr-spcr" );
}
private void writeTopTabSpacer (ResponseWriter w, UIComponent comp, String style, String styleClass) throws IOException {
w.startElement(TD_ELEM, comp);
w.writeAttribute(STYLE, style, null );
w.writeAttribute(CLASS, styleClass, null );
w.write(" " );
w.endElement(TD_ELEM);
}
@Override
protected void doEncodeEnd (ResponseWriter writer, FacesContext context, UIComponent component) throws IOException {
writer.endElement(HtmlConstants.DIV_ELEM);
}
@Override
protected JSObject getScriptObject (FacesContext context, UIComponent component) {
return new JSObject("RichFaces.ui.TabPanel" ,
component.getClientId(context), getScriptObjectOptions(context, component));
}
@Override
protected Map getScriptObjectOptions (FacesContext context, UIComponent component) {
Map options = super .getScriptObjectOptions(context, component);
options.put("isKeepHeight" , attributeAsString(component, "height" ).length() > 0 );
return options;
}
@Override
protected Class getComponentClass () {
return AbstractTabPanel.class;
}
}