in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java [50:146]
public void encodeBeginField(final FacesContext facesContext, final T component) throws IOException {
final TobagoResponseWriter writer = getResponseWriter(facesContext);
final String clientId = component.getClientId(facesContext);
final Markup markup = component.getMarkup() != null ? component.getMarkup() : Markup.NULL;
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(
TobagoClass.BODY,
component.getCustomClass(),
markup != null && markup.contains(Markup.SPREAD) ? TobagoClass.SPREAD : null);
HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
if (title != null) {
writer.writeAttribute(HtmlAttributes.TITLE, title, true);
}
// final boolean hasLabel = component.hasLabel(); // XXX is needed?
final List<SelectItem> items = SelectItemUtils.getItemList(facesContext, component);
final boolean disabled = !items.iterator().hasNext() || component.isDisabled();
final boolean readonly = component.isReadonly();
final String unselectedLabel = component.getUnselectedLabel();
if (unselectedLabel != null) {
writer.startElement(HtmlElements.DIV);
writer.write(unselectedLabel);
writer.endElement(HtmlElements.DIV);
}
Integer size = component.getSize();
size = Math.max(size != null ? size : items.size(), 2); // must be > 1
writer.startElement(HtmlElements.SELECT);
final String unselectedClientId = clientId + ComponentUtils.SUB_SEPARATOR + "unselected";
writer.writeIdAttribute(unselectedClientId);
writer.writeAttribute(HtmlAttributes.DISABLED, disabled);
writer.writeAttribute(HtmlAttributes.READONLY, readonly);
// TODO tabIndex
writer.writeAttribute(HtmlAttributes.TABINDEX, component.getTabIndex());
writer.writeClassAttribute(
TobagoClass.UNSELECTED,
BootstrapClass.FORM_SELECT,
markup.contains(Markup.LARGE) ? BootstrapClass.FORM_SELECT_LG : null,
markup.contains(Markup.SMALL) ? BootstrapClass.FORM_SELECT_SM : null);
writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
writer.writeAttribute(HtmlAttributes.SIZE, size);
final Object[] values = component.getSelectedValues();
final String[] submittedValues = getSubmittedValues(component);
renderSelectItems(component, null, items, values, submittedValues, false, writer, facesContext);
writer.endElement(HtmlElements.SELECT);
writer.startElement(HtmlElements.DIV);
writer.startElement(HtmlElements.DIV);
writer.writeClassAttribute(BootstrapClass.BTN_GROUP_VERTICAL);
createButton(facesContext, component, writer, disabled | readonly, Icons.CHEVRON_DOUBLE_RIGHT, "addAll");
createButton(facesContext, component, writer, disabled | readonly, Icons.CHEVRON_RIGHT, "add");
createButton(facesContext, component, writer, disabled | readonly, Icons.CHEVRON_LEFT, "remove");
createButton(facesContext, component, writer, disabled | readonly, Icons.CHEVRON_DOUBLE_LEFT, "removeAll");
writer.endElement(HtmlElements.DIV);
writer.endElement(HtmlElements.DIV);
final String selectedLabel = component.getSelectedLabel();
if (selectedLabel != null) {
writer.startElement(HtmlElements.DIV);
writer.write(selectedLabel);
writer.endElement(HtmlElements.DIV);
}
writer.startElement(HtmlElements.SELECT);
final String selectedClientId = clientId + ComponentUtils.SUB_SEPARATOR + "selected";
writer.writeIdAttribute(selectedClientId);
writer.writeAttribute(HtmlAttributes.DISABLED, disabled);
writer.writeAttribute(HtmlAttributes.READONLY, readonly);
writer.writeAttribute(HtmlAttributes.TABINDEX, component.getTabIndex());
writer.writeClassAttribute(
TobagoClass.SELECTED,
BootstrapClass.validationColor(ComponentUtils.getMaximumSeverity(component)),
BootstrapClass.FORM_SELECT,
markup.contains(Markup.LARGE) ? BootstrapClass.FORM_SELECT_LG : null,
markup.contains(Markup.SMALL) ? BootstrapClass.FORM_SELECT_SM : null);
writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
writer.writeAttribute(HtmlAttributes.SIZE, size);
renderSelectItems(component, null, items, values, submittedValues, true, writer, facesContext);
writer.endElement(HtmlElements.SELECT);
writer.startElement(HtmlElements.SELECT);
writer.writeClassAttribute(BootstrapClass.D_NONE);
final String hiddenClientId = clientId + ComponentUtils.SUB_SEPARATOR + "hidden";
writer.writeIdAttribute(hiddenClientId);
writer.writeNameAttribute(clientId);
writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
writer.writeAttribute(HtmlAttributes.REQUIRED, component.isRequired());
renderSelectItems(component, null, items, values, submittedValues, writer, facesContext);
writer.endElement(HtmlElements.SELECT);
}