in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PopupRenderer.java [43:111]
public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
final TobagoResponseWriter writer = getResponseWriter(facesContext);
final String clientId = component.getClientId(facesContext);
final boolean collapsed = component.isCollapsed();
final Markup markup = component.getMarkup();
final UIComponent labelFacet = ComponentUtils.getFacet(component, Facets.label);
final UIComponent barFacet = ComponentUtils.getFacet(component, Facets.bar);
final UIComponent footerFacet = ComponentUtils.getFacet(component, Facets.footer);
// this makes the popup NOT closable with a click to the background
ComponentUtils.putDataAttribute(component, "bs-backdrop", "static");
writer.startElement(HtmlElements.TOBAGO_POPUP);
writer.writeIdAttribute(clientId);
writer.writeClassAttribute(
BootstrapClass.MODAL,
BootstrapClass.FADE,
component.getCustomClass());
writer.writeAttribute(HtmlAttributes.TABINDEX, -1);
writer.writeAttribute(HtmlAttributes.ROLE, HtmlRoleValues.DIALOG.toString(), false);
HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
// todo: aria-labelledby
writer.startElement(HtmlElements.DIV);
// this id is needed for the <tobago-overlay> in tobago-behaviour.ts
writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + "dialog");
writer.writeClassAttribute(
BootstrapClass.MODAL_DIALOG,
markup != null && markup.contains(Markup.EXTRA_LARGE) ? BootstrapClass.MODAL_XL : null,
markup != null && markup.contains(Markup.LARGE) ? BootstrapClass.MODAL_LG : null,
markup != null && markup.contains(Markup.SMALL) ? BootstrapClass.MODAL_SM : null);
writer.writeAttribute(HtmlAttributes.ROLE, HtmlRoleValues.DOCUMENT.toString(), false);
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.MODAL_CONTENT);
if (component.getCollapsedMode() != CollapseMode.none) {
encodeHidden(writer, clientId, collapsed);
}
if (labelFacet != null || barFacet != null) {
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.MODAL_HEADER);
writer.startElement(HtmlElements.H5);
writer.writeClassAttribute(BootstrapClass.MODAL_TITLE);
insideBegin(facesContext, Facets.label);
if (labelFacet != null) {
for (final UIComponent child : RenderUtils.getFacetChildren(labelFacet)) {
child.encodeAll(facesContext);
}
}
insideEnd(facesContext, Facets.label);
writer.endElement(HtmlElements.H5);
if (barFacet != null) {
insideBegin(facesContext, Facets.bar);
for (final UIComponent child : RenderUtils.getFacetChildren(barFacet)) {
child.encodeAll(facesContext);
}
insideEnd(facesContext, Facets.bar);
}
writer.endElement(HtmlElements.DIV);
}
if (labelFacet != null || barFacet != null || footerFacet != null) {
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.MODAL_BODY);
}
}