package org.richfaces.renderkit.html; import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE; import static org.richfaces.renderkit.HtmlConstants.DIV_ELEM; import static org.richfaces.renderkit.HtmlConstants.TD_ELEM; import static org.richfaces.renderkit.html.DivPanelRenderer.attributeAsString; import java.io.IOException; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import org.richfaces.component.AbstractAccordionItem; import org.richfaces.component.AbstractTogglePanelTitledItem; import org.richfaces.component.util.HtmlUtil; import org.richfaces.renderkit.util.PanelIcons; import org.richfaces.renderkit.util.PanelIcons.State; class AccordionItemHeaderRenderer extends TableIconsRendererHelper<AbstractAccordionItem> { public AccordionItemHeaderRenderer() { super("header", "rf-ac-itm"); } protected void encodeHeaderLeftIcon(ResponseWriter writer, FacesContext context, AbstractAccordionItem panel) throws IOException { String iconInactive = panel.isDisabled() ? panel.getLeftDisabledIcon() : panel.getLeftInactiveIcon(); String iconActive = panel.isDisabled() ? panel.getLeftDisabledIcon() : panel.getLeftActiveIcon(); encodeTdIcon(writer, context, cssClassPrefix + "-ico", iconInactive, iconActive, panel.isDisabled() ? State.headerDisabled : State.header); } protected void encodeHeaderRightIcon(ResponseWriter writer, FacesContext context, AbstractAccordionItem panel) throws IOException { String iconInactive = panel.isDisabled() ? panel.getRightDisabledIcon() : panel.getRightInactiveIcon(); String iconActive = panel.isDisabled() ? panel.getRightDisabledIcon() : panel.getRightActiveIcon(); // TODO nick - should this be "-ico-exp"? also why expanded icon state is connected with right icon alignment? encodeTdIcon(writer, context, cssClassPrefix + "-exp-ico", iconInactive, iconActive, panel.isDisabled() ? State.headerDisabled : State.header); } @Override protected void encodeTdIcon(ResponseWriter writer, FacesContext context, String cssClass, String attrIconCollapsedValue, String attrIconExpandedValue, PanelIcons.State state) throws IOException { if (isIconRendered(attrIconCollapsedValue) || isIconRendered(attrIconExpandedValue)) { writer.startElement(TD_ELEM, null); writer.writeAttribute(CLASS_ATTRIBUTE, cssClass, null); if (isIconRendered(attrIconExpandedValue)) { encodeIdIcon(writer, context, attrIconExpandedValue, cssIconsClassPrefix + "-act", state); } if (isIconRendered(attrIconCollapsedValue)) { encodeIdIcon(writer, context, attrIconCollapsedValue, cssIconsClassPrefix + "-inact", state); } writer.endElement(TD_ELEM); } } @Override protected void encodeHeaderTextValue(ResponseWriter writer, FacesContext context, AbstractAccordionItem titledItem) throws IOException { if (titledItem.isDisabled()) { encodeHeader(writer, context, titledItem, AbstractTogglePanelTitledItem.HeaderStates.disabled); } else { encodeHeader(writer, context, titledItem, AbstractTogglePanelTitledItem.HeaderStates.active); encodeHeader(writer, context, titledItem, AbstractTogglePanelTitledItem.HeaderStates.inactive); } } private static void encodeHeader(ResponseWriter writer, FacesContext context, AbstractAccordionItem component, AbstractTogglePanelTitledItem.HeaderStates state) throws IOException { writer.startElement(DIV_ELEM, null); writer.writeAttribute(CLASS_ATTRIBUTE, HtmlUtil.concatClasses("rf-ac-itm-lbl-" + state.abbreviation(), attributeAsString(component, state.headerClass())), null); writeFacetOrAttr(writer, context, component, "header", component.getHeaderFacet(state)); writer.endElement(DIV_ELEM); } }