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 2020/04/29 11:42:00 UTC

[myfaces-tobago] branch master updated: feature: Images for Toggles and Checkboxes

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 18de084  feature: Images for Toggles and Checkboxes
18de084 is described below

commit 18de084ff5a0f07ad55cd82bdd85ef444433a916
Author: Jasmin Kroeger <ja...@irian.eu>
AuthorDate: Fri Apr 24 14:49:53 2020 +0200

    feature: Images for Toggles and Checkboxes
    
    * itemImage is an interface
    * add HtmlElement image in SelectBooleanCheckboxRenderer
    * update demo
    
    Issue: TOBAGO-2032, TOBAGO-2033
---
 .../component/AbstractUISelectBoolean.java         |  2 ++
 .../renderer/SelectBooleanCheckboxRenderer.java    |  7 +++++
 .../SelectBooleanCheckboxTagDeclaration.java       |  3 +-
 .../SelectBooleanToggleTagDeclaration.java         |  3 +-
 .../taglib/component/SelectItemTagDeclaration.java | 10 ++-----
 .../component/SelectItemsTagDeclaration.java       | 10 ++-----
 .../internal/taglib/declaration/HasItemImage.java  | 32 ++++++++++++++++++++++
 .../10-selectBooleanCheckbox/Checkbox.xhtml        | 11 ++++++++
 .../030-select/15-selectBooleanToggle/Toggle.xhtml | 11 ++++++++
 9 files changed, 71 insertions(+), 18 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
index 9fa97a3..a9a708f 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUISelectBoolean.java
@@ -76,6 +76,8 @@ public abstract class AbstractUISelectBoolean extends UISelectBoolean
 
   public abstract void setItemLabel(String itemLabel);
 
+  public abstract String getItemImage();
+
   @Override
   public abstract String getLabel();
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
index 21a1976..1275917 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectBooleanCheckboxRenderer.java
@@ -83,6 +83,7 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
     final boolean disabled = select.isDisabled();
     final LabelWithAccessKey label = new LabelWithAccessKey(select, true);
     final String itemLabel = select.getItemLabel();
+    final String itemImage = select.getItemImage();
     final Markup markup = select.getMarkup();
 
     writer.startElement(HtmlElements.DIV);
@@ -124,6 +125,12 @@ public class SelectBooleanCheckboxRenderer extends MessageLayoutRendererBase {
       AccessKeyLogger.addAccessKey(facesContext, label.getAccessKey(), clientId);
     }
     writer.writeAttribute(HtmlAttributes.FOR, fieldId, false);
+    if(itemImage != null) {
+      writer.startElement(HtmlElements.IMG);
+      writer.writeAttribute(HtmlAttributes.SRC, itemImage, true);
+      writer.writeAttribute(HtmlAttributes.ALT, "", false);
+      writer.endElement(HtmlElements.IMG);
+    }
     if (itemLabel != null && select.getLabel() == null && select.getAccessKey() != null) {
       if (itemLabel.contains(Character.toString(select.getAccessKey()))) {
         HtmlRendererUtils.writeLabelWithAccessKey(writer, label);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
index 3d48299..9dfcdfb 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanCheckboxTagDeclaration.java
@@ -30,6 +30,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverter;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverterMessage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasHelp;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRendered;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemImage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabelLayout;
@@ -77,5 +78,5 @@ public interface SelectBooleanCheckboxTagDeclaration extends HasValidator,
     HasValueChangeListener, HasIdBindingAndRendered, HasValue, IsDisabled,
     HasTip, HasHelp, IsReadonly, HasTabIndex, IsRequiredForSelect, HasConverter, IsFocus,
     HasValidatorMessage, HasRequiredMessageForSelect, HasConverterMessage, IsVisual,
-    HasAccessKey, HasItemLabel, HasLabel, HasLabelLayout {
+    HasAccessKey, HasItemLabel, HasItemImage, HasLabel, HasLabelLayout {
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
index 847d686..ad775ea 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectBooleanToggleTagDeclaration.java
@@ -30,6 +30,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverter;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasConverterMessage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasHelp;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasIdBindingAndRendered;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemImage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasLabelLayout;
@@ -77,5 +78,5 @@ public interface SelectBooleanToggleTagDeclaration extends HasValidator,
     HasValueChangeListener, HasIdBindingAndRendered, HasValue, IsDisabled,
     HasTip, HasHelp, IsReadonly, HasTabIndex, IsRequiredForSelect, HasConverter, IsFocus,
     HasValidatorMessage, HasRequiredMessageForSelect, HasConverterMessage, IsVisual,
-    HasAccessKey, HasItemLabel, HasLabel, HasLabelLayout {
+    HasAccessKey, HasItemLabel, HasItemImage, HasLabel, HasLabelLayout {
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
index a512786..b160aa5 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemTagDeclaration.java
@@ -26,6 +26,7 @@ import org.apache.myfaces.tobago.apt.annotation.UIComponentTag;
 import org.apache.myfaces.tobago.apt.annotation.UIComponentTagAttribute;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasBinding;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasId;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemImage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
 import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
@@ -40,7 +41,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.IsVisual;
     uiComponent = "org.apache.myfaces.tobago.component.UISelectItem",
     uiComponentFacesClass = "javax.faces.component.UISelectItem",
     allowedChildComponenents = "NONE")
-public interface SelectItemTagDeclaration extends HasBinding, HasId, IsVisual, HasItemLabel, HasTip {
+public interface SelectItemTagDeclaration extends HasBinding, HasId, IsVisual, HasItemLabel, HasItemImage, HasTip {
 
   /**
    * Description of an item, might be rendered as a tool tip.
@@ -75,11 +76,4 @@ public interface SelectItemTagDeclaration extends HasBinding, HasId, IsVisual, H
       type = "javax.faces.model.SelectItem",
       expression = DynamicExpression.VALUE_EXPRESSION_REQUIRED)
   void setValue(String value);
-
-  /**
-   * Image to be displayed to the user for this option.
-   */
-  @TagAttribute
-  @UIComponentTagAttribute()
-  void setItemImage(String itemImage);
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
index 8f532ac..bfc6922 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/component/SelectItemsTagDeclaration.java
@@ -26,6 +26,7 @@ import org.apache.myfaces.tobago.apt.annotation.UIComponentTag;
 import org.apache.myfaces.tobago.apt.annotation.UIComponentTagAttribute;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasBinding;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasId;
+import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemImage;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasItemLabel;
 import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
 
@@ -40,7 +41,7 @@ import org.apache.myfaces.tobago.internal.taglib.declaration.HasTip;
     uiComponentFacesClass = "javax.faces.component.UISelectItems",
     isComponentAlreadyDefined = false,
     allowedChildComponenents = "NONE")
-public interface SelectItemsTagDeclaration extends HasId, HasBinding, HasItemLabel, HasTip {
+public interface SelectItemsTagDeclaration extends HasId, HasBinding, HasItemLabel, HasItemImage, HasTip {
 
   /**
    * Value binding expression pointing at a List or array of SelectItem instances containing
@@ -74,11 +75,4 @@ public interface SelectItemsTagDeclaration extends HasId, HasBinding, HasItemLab
   @TagAttribute
   @UIComponentTagAttribute(type = {"java.lang.Object"})
   void setItemValue(String itemValue);
-
-  /**
-   * Image to be displayed to the user for this option.
-   */
-  @TagAttribute
-  @UIComponentTagAttribute()
-  void setItemImage(String itemImage);
 }
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/declaration/HasItemImage.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/declaration/HasItemImage.java
new file mode 100644
index 0000000..df39d73
--- /dev/null
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/taglib/declaration/HasItemImage.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.internal.taglib.declaration;
+
+import org.apache.myfaces.tobago.apt.annotation.TagAttribute;
+import org.apache.myfaces.tobago.apt.annotation.UIComponentTagAttribute;
+
+public interface HasItemImage {
+  /**
+   * Image to be displayed to the user for this option.
+   */
+  @TagAttribute
+  @UIComponentTagAttribute()
+  void setItemImage(String itemImage);
+}
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.xhtml
index 0e5b021..40f4bd1 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.xhtml
@@ -74,4 +74,15 @@
     </tc:selectBooleanCheckbox>
     <tc:out id="outputF" label="Value is" value="#{selectBooleanCheckboxController.f}"/>
   </tc:section>
+
+  <tc:section label="Images">
+        <pre><code class="language-markup">&lt;tc:selectBooleanCheckbox itemLabel="Japanese Yen"  itemImage="#{request.contextPath}/image/JPY-14.png"/>
+&lt;tc:selectBooleanCheckbox itemLabel="Trinidad &amp; Tobago Dollar" itemImage="#{request.contextPath}/image/TTD-14.png"/>
+&lt;tc:selectBooleanCheckbox itemLabel="US Dollar" itemImage="#{request.contextPath}/image/USD-14.png"/>
+&lt;tc:selectBooleanCheckbox itemLabel="Euro" itemImage="#{request.contextPath}/image/EUR-14.png"/></code></pre>
+    <tc:selectBooleanCheckbox itemLabel="Japanese Yen" itemImage="#{request.contextPath}/image/JPY-14.png"/>
+    <tc:selectBooleanCheckbox itemLabel="Trinidad &amp; Tobago Dollar" itemImage="#{request.contextPath}/image/TTD-14.png"/>
+    <tc:selectBooleanCheckbox itemLabel="US Dollar" itemImage="#{request.contextPath}/image/USD-14.png"/>
+    <tc:selectBooleanCheckbox itemLabel="Euro" itemImage="#{request.contextPath}/image/EUR-14.png"/>
+  </tc:section>
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.xhtml
index ed0de9a..c4ce4d4 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.xhtml
@@ -74,4 +74,15 @@
     </tc:selectBooleanToggle>
     <tc:out id="outputF" label="Value is" value="#{selectBooleanToggleController.f}"/>
   </tc:section>
+
+  <tc:section label="Images">
+    <pre><code class="language-markup">&lt;tc:selectBooleanToggle itemLabel="Japanese Yen" itemImage="#{request.contextPath}/image/JPY-14.png"/>
+&lt;tc:selectBooleanToggle itemLabel="Trinidad &amp; Tobago Dollar" itemImage="#{request.contextPath}/image/TTD-14.png"/>
+&lt;tc:selectBooleanToggle itemLabel="US Dollar" itemImage="#{request.contextPath}/image/USD-14.png"/>
+&lt;tc:selectBooleanToggle itemLabel="Euro" itemImage="#{request.contextPath}/image/EUR-14.png"/></code></pre>
+    <tc:selectBooleanToggle itemLabel="Japanese Yen" itemImage="#{request.contextPath}/image/JPY-14.png"/>
+    <tc:selectBooleanToggle itemLabel="Trinidad &amp; Tobago Dollar" itemImage="#{request.contextPath}/image/TTD-14.png"/>
+    <tc:selectBooleanToggle itemLabel="US Dollar" itemImage="#{request.contextPath}/image/USD-14.png"/>
+    <tc:selectBooleanToggle itemLabel="Euro" itemImage="#{request.contextPath}/image/EUR-14.png"/>
+  </tc:section>
 </ui:composition>