You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2022/10/27 10:50:12 UTC

[myfaces-tobago] 02/02: feat(selectMany): inline

This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a commit to branch t5_selectMany
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit eb6388e2b3dbf9dae7f8468e469438ffa4bae46f
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Thu Oct 27 12:40:17 2022 +0200

    feat(selectMany): inline
    
    * impl inline attribute
    * add example
    
    Issue: TOBAGO-2159
---
 .../tobago/internal/component/AbstractUISelectMany.java    |  2 ++
 .../internal/renderkit/renderer/SelectManyRenderer.java    | 14 +++++++++++++-
 .../taglib/component/SelectManyTagDeclaration.java         |  3 ++-
 .../myfaces/tobago/renderkit/css/BootstrapClass.java       |  2 ++
 .../apache/myfaces/tobago/renderkit/css/TobagoClass.java   |  1 +
 .../content/030-select/80-selectMany/SelectMany.xhtml      |  6 ++++++
 tobago-theme/src/main/scss/_tobago.scss                    | 13 ++++++++++++-
 7 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectMany.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectMany.java
index 97c6e10982..061f571e38 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectMany.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectMany.java
@@ -61,6 +61,8 @@ public abstract class AbstractUISelectMany extends AbstractUISelectManyBase
 
   public abstract boolean isReadonly();
 
+  public abstract boolean isInline();
+
   public boolean isError() {
     final FacesContext facesContext = FacesContext.getCurrentInstance();
     return !isValid()
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
index 2b592c6ec3..2acbceb26d 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyRenderer.java
@@ -25,6 +25,7 @@ import org.apache.myfaces.tobago.internal.util.ArrayUtils;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.SelectItemUtils;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
+import org.apache.myfaces.tobago.renderkit.css.CssItem;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -43,6 +44,12 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
     return HtmlElements.TOBAGO_SELECT_MANY;
   }
 
+  @Override
+  protected CssItem[] getComponentCss(final FacesContext facesContext, final T component) {
+    final boolean inline = component.isInline();
+    return inline ? new CssItem[]{BootstrapClass.LIST_GROUP} : null;
+  }
+
   @Override
   protected String getFieldId(FacesContext facesContext, T component) {
     return component.getFieldId(facesContext);
@@ -59,6 +66,7 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
     final boolean readonly = component.isReadonly();
     final boolean disabled = !items.iterator().hasNext() || component.isDisabled() || readonly;
     final String filter = component.getFilter();
+    final boolean inline = component.isInline();
     final Markup markup = component.getMarkup();
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
 
@@ -66,7 +74,9 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
     renderFilterInput(facesContext, component);
 
     writer.startElement(HtmlElements.DIV);
-    writer.writeClassAttribute(BootstrapClass.DROPDOWN_MENU);
+    writer.writeClassAttribute(
+      TobagoClass.OPTIONS,
+      inline ? BootstrapClass.LIST_GROUP_ITEM : BootstrapClass.DROPDOWN_MENU);
     writer.writeNameAttribute(clientId);
 
     writer.startElement(HtmlElements.TABLE);
@@ -143,6 +153,7 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
     final boolean readonly = component.isReadonly();
     final boolean disabled = !items.iterator().hasNext() || component.isDisabled() || readonly;
     final String filter = component.getFilter();
+    final boolean inline = component.isInline();
     final Markup markup = component.getMarkup();
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
 
@@ -153,6 +164,7 @@ public class SelectManyRenderer<T extends AbstractUISelectMany> extends SelectMa
     writer.writeClassAttribute(
       BootstrapClass.FORM_SELECT,
       TobagoClass.FILTER__WRAPPER,
+      inline ? BootstrapClass.LIST_GROUP_ITEM : null,
       BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(component)),
       component.getCustomClass());
     writer.writeAttribute(HtmlAttributes.TITLE, title, true);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyTagDeclaration.java
index 8ee3774ef2..f3aaed379c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectManyTagDeclaration.java
@@ -43,6 +43,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasValidatorMessage
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasValueChangeListener;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsDisabled;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsFocus;
+import org.apache.myfaces.tobago.internal.taglib.declaration.IsInline;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsReadonly;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsRendered;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsRequiredForSelect;
@@ -80,7 +81,7 @@ public interface SelectManyTagDeclaration
   extends HasId, IsDisabled, IsRendered, HasBinding, HasTip, HasHelp,
   IsReadonly, HasConverter, IsRequiredForSelect, HasLabel, HasValidator, HasValueChangeListener, HasLabelLayout,
   HasValidatorMessage, HasConverterMessage, HasRequiredMessageForSelect, HasTabIndex, IsFocus, IsVisual,
-  HasAutoSpacing, HasFilter {
+  HasAutoSpacing, HasFilter, IsInline {
 
   /**
    * The value of the multi select.
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
index 5667fc53c1..32c642d2bf 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
@@ -410,6 +410,8 @@ public enum BootstrapClass implements CssItem {
   JUSTIFY_CONTENT_CENTER("justify-content-center"),
   JUSTIFY_CONTENT_END("justify-content-end"),
   JUSTIFY_CONTENT_START("justify-content-start"),
+  LIST_GROUP("list-group"),
+  LIST_GROUP_ITEM("list-group-item"),
   MB_0("mb-0"),
   MB_1("mb-1"),
   MB_2("mb-2"),
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
index 46b880456e..8d503c4eee 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
@@ -71,6 +71,7 @@ public enum TobagoClass implements CssItem {
   NOW("tobago-now"),
   NUMBER("tobago-number"),
   OBJECT("tobago-object"),
+  OPTIONS("tobago-options"),
   OUT("tobago-out"),
 //  PAGE("tobago-page"),
   PAGE__MENU_STORE("tobago-page-menuStore"),
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/030-select/80-selectMany/SelectMany.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/030-select/80-selectMany/SelectMany.xhtml
index 3d6086ae41..9f71e91167 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/030-select/80-selectMany/SelectMany.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/030-select/80-selectMany/SelectMany.xhtml
@@ -26,6 +26,12 @@
     <tc:selectItems value="#{selectManyController.planets}"
                     var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"/>
   </tc:selectMany>
+
+  inline:
+  <tc:selectMany value="#{selectManyController.selectedPlanets}" filter="contains" inline="true">
+    <tc:selectItems value="#{selectManyController.planets}"
+                    var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"/>
+  </tc:selectMany>
   <tc:button label="Submit"/>
 
 </ui:composition>
diff --git a/tobago-theme/src/main/scss/_tobago.scss b/tobago-theme/src/main/scss/_tobago.scss
index 00633390f4..9e8c66d4e6 100644
--- a/tobago-theme/src/main/scss/_tobago.scss
+++ b/tobago-theme/src/main/scss/_tobago.scss
@@ -1180,6 +1180,13 @@ tobago-select-many {
     flex-wrap: wrap;
     align-items: center;
 
+    &.list-group-item.form-select {
+      border-bottom-left-radius: 0;
+      border-bottom-right-radius: 0;
+
+      padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;
+    }
+
     .badge {
       margin-right: 0.125rem;
     }
@@ -1200,7 +1207,11 @@ tobago-select-many {
     }
   }
 
-  .dropdown-menu {
+  .tobago-options {
+    &.list-group-item {
+      padding: 0;
+    }
+
     .table {
       margin-bottom: 0;
     }