in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TabGroupRenderer.java [210:322]
private void encodeHeader(
final FacesContext facesContext, final TobagoResponseWriter writer, final AbstractUITabGroup tabGroup,
final int selectedIndex, final SwitchType switchType)
throws IOException {
final String tabGroupClientId = tabGroup.getClientId(facesContext);
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.CARD_HEADER);
writer.startElement(HtmlElements.UL);
writer.writeClassAttribute(
BootstrapClass.NAV,
BootstrapClass.NAV_TABS,
BootstrapClass.CARD_HEADER_TABS);
writer.writeAttribute(HtmlAttributes.ROLE, HtmlRoleValues.TABLIST.toString(), false);
int index = 0;
for (final UIComponent child : tabGroup.getChildren()) {
if (child instanceof AbstractUITab) {
final AbstractUITab tab = (AbstractUITab) child;
if (tab.isRendered()) {
final LabelWithAccessKey label = new LabelWithAccessKey(tab);
final UIComponent labelFacet = ComponentUtils.getFacet(tab, Facets.label);
final UIComponent barFacet = ComponentUtils.getFacet(tab, Facets.bar);
final boolean disabled = tab.isDisabled();
final String tabId = tab.getClientId(facesContext);
Markup markup = tab.getMarkup() != null ? tab.getMarkup() : Markup.NULL;
final FacesMessage.Severity maxSeverity
= ComponentUtils.getMaximumSeverityOfChildrenMessages(facesContext, tab);
if (maxSeverity != null) {
markup = markup.add(ComponentUtils.markupOfSeverity(maxSeverity));
}
writer.startElement(HtmlElements.TOBAGO_TAB);
writer.writeIdAttribute(tabId);
writer.writeClassAttribute(
BootstrapClass.NAV_ITEM,
barFacet != null ? TobagoClass.BAR : null,
tab.getCustomClass());
writer.writeAttribute(HtmlAttributes.FOR, tabGroupClientId, true);
writer.writeAttribute(HtmlAttributes.ROLE, HtmlRoleValues.PRESENTATION.toString(), false);
writer.writeAttribute(CustomAttributes.INDEX, index);
final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, tab);
if (title != null) {
writer.writeAttribute(HtmlAttributes.TITLE, title, true);
}
writer.startElement(HtmlElements.A);
if (!tab.isDisabled()) {
writer.writeAttribute(DataAttributes.TOGGLE, "tab", false);
}
if (tab.isDisabled()) {
writer.writeClassAttribute(BootstrapClass.NAV_LINK, BootstrapClass.DISABLED);
} else if (selectedIndex == index) {
writer.writeClassAttribute(BootstrapClass.NAV_LINK, BootstrapClass.ACTIVE);
} else {
writer.writeClassAttribute(BootstrapClass.NAV_LINK);
}
if (!disabled && switchType == SwitchType.client) {
writer.writeAttribute(
DataAttributes.TARGET, '#' + getTabPanelId(facesContext, tab).replaceAll(":", "\\\\:"), false);
}
if (!disabled && label.getAccessKey() != null) {
writer.writeAttribute(HtmlAttributes.ACCESSKEY, Character.toString(label.getAccessKey()), false);
AccessKeyLogger.addAccessKey(facesContext, label.getAccessKey(), tabId);
}
writer.writeAttribute(HtmlAttributes.ROLE, HtmlRoleValues.TAB.toString(), false);
if (!disabled) {
encodeBehavior(writer, facesContext, tab);
}
boolean labelEmpty = true;
final String image = tab.getImage();
if (image != null) {
HtmlRendererUtils.encodeIconOrImage(writer, image);
labelEmpty = false;
}
if (label.getLabel() != null) {
writer.startElement(HtmlElements.SPAN);
HtmlRendererUtils.writeLabelWithAccessKey(writer, label);
writer.endElement(HtmlElements.SPAN);
labelEmpty = false;
}
if (labelFacet != null) {
insideBegin(facesContext, Facets.label);
labelFacet.encodeAll(facesContext);
insideEnd(facesContext, Facets.label);
labelEmpty = false;
}
if (labelEmpty) {
writer.writeText(Integer.toString(index + 1));
}
writer.endElement(HtmlElements.A);
if (barFacet != null) {
insideBegin(facesContext, Facets.bar);
writer.startElement(HtmlElements.DIV);
barFacet.encodeAll(facesContext);
writer.endElement(HtmlElements.DIV);
insideEnd(facesContext, Facets.bar);
}
writer.endElement(HtmlElements.TOBAGO_TAB);
}
index++;
}
}
writer.endElement(HtmlElements.UL);
writer.endElement(HtmlElements.DIV);
}