You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2017/03/23 13:34:10 UTC

svn commit: r1788239 - in /myfaces/tobago/trunk: tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/ tobago-core/src/main/resources/scss/ tobago-example/tob...

Author: lofwyr
Date: Thu Mar 23 13:34:10 2017
New Revision: 1788239

URL: http://svn.apache.org/viewvc?rev=1788239&view=rev
Log:
TOBAGO-1726: Tree icons from <tc:treeIndent> are not toggled correctly.
* implementing the toggle for icons (font awesome)

Added:
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/image/feather-closed.png
      - copied unchanged from r1788181, myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/image/feather.png
Removed:
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/image/feather.png
Modified:
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/FontAwesomeIconEncoder.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/IconEncoder.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
    myfaces/tobago/trunk/tobago-core/src/main/resources/scss/_tobago.scss
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/tree.xhtml
    myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-tree.js

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIconRenderer.java Thu Mar 23 13:34:10 2017
@@ -21,13 +21,12 @@ package org.apache.myfaces.tobago.intern
 
 import org.apache.myfaces.tobago.component.UITreeIcon;
 import org.apache.myfaces.tobago.component.UITreeNode;
-import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.internal.util.StringUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
-import org.apache.myfaces.tobago.renderkit.css.Classes;
 import org.apache.myfaces.tobago.renderkit.css.FontAwesomeIconEncoder;
+import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.DataAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -40,8 +39,20 @@ import java.io.IOException;
 
 public class TreeIconRenderer extends RendererBase {
 
+  /**
+   * @deprecated since Tobago 3.0.0
+   */
+  @Deprecated
   protected static final String OPEN_FOLDER = "image/treeNode-icon-open";
+  /**
+   * @deprecated since Tobago 3.0.0
+   */
+  @Deprecated
   protected static final String CLOSED_FOLDER = "image/treeNode-icon";
+  /**
+   * @deprecated since Tobago 3.0.0
+   */
+  @Deprecated
   protected static final String LEAF = "image/treeNode-icon-leaf";
 
   @Override
@@ -53,10 +64,18 @@ public class TreeIconRenderer extends Re
     final boolean folder = node.isFolder();
     final boolean expanded = folder && data.getExpandedState().isExpanded(node.getPath());
 
-    String value = (String) image.getValue();
+    final String value = (String) image.getValue();
     String closed = image.getClosed();
     String open = image.getOpen();
 
+    if (closed == null) {
+      closed = value;
+    }
+
+    if (open == null) {
+      open = closed;
+    }
+
     final String source;
     if (folder) {
       if (expanded) {
@@ -70,11 +89,21 @@ public class TreeIconRenderer extends Re
 
     final TobagoResponseWriter writer = getResponseWriter(facesContext);
 
+    writer.startElement(HtmlElements.SPAN);
+    writer.writeIdAttribute(image.getClientId());
+    writer.writeClassAttribute(TobagoClass.TREE_NODE__TOGGLE);
+
     if (StringUtils.startsWith(source, "fa-")) {
-      writer.writeIcon(null, image.getStyle(), FontAwesomeIconEncoder.generateClass(source));
+      writer.startElement(HtmlElements.I);
+      writer.writeStyleAttribute(image.getStyle());
+      writer.writeClassAttribute(FontAwesomeIconEncoder.FA, FontAwesomeIconEncoder.generateClass(source));
+      if (folder) {
+        writer.writeAttribute(DataAttributes.SRC_OPEN, open, true);
+        writer.writeAttribute(DataAttributes.SRC_CLOSED, closed, true);
+      }
+      writer.endElement(HtmlElements.I);
     } else {
       writer.startElement(HtmlElements.IMG);
-      writer.writeClassAttribute(Classes.create(node, "toggle", Markup.NULL));
       HtmlRendererUtils.writeDataAttributes(facesContext, writer, image);
       writer.writeAttribute(HtmlAttributes.SRC, source, true);
       if (folder) {
@@ -84,5 +113,7 @@ public class TreeIconRenderer extends Re
       writer.writeAttribute(HtmlAttributes.ALT, "", false);
       writer.endElement(HtmlElements.IMG);
     }
+
+    writer.endElement(HtmlElements.SPAN);
   }
 }

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeIndentRenderer.java Thu Mar 23 13:34:10 2017
@@ -21,14 +21,15 @@ package org.apache.myfaces.tobago.intern
 
 import org.apache.myfaces.tobago.component.UITree;
 import org.apache.myfaces.tobago.component.UITreeIndent;
-import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.internal.component.AbstractUIData;
 import org.apache.myfaces.tobago.internal.component.AbstractUITreeNodeBase;
 import org.apache.myfaces.tobago.internal.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.BootstrapClass;
-import org.apache.myfaces.tobago.renderkit.css.Classes;
+import org.apache.myfaces.tobago.renderkit.css.FontAwesomeIconEncoder;
 import org.apache.myfaces.tobago.renderkit.css.Icons;
+import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
+import org.apache.myfaces.tobago.renderkit.html.DataAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
@@ -63,7 +64,7 @@ public class TreeIndentRenderer extends
     writer.startElement(HtmlElements.SPAN);
     writer.writeIdAttribute(indent.getClientId(facesContext));
     HtmlRendererUtils.writeDataAttributes(facesContext, writer, indent);
-    writer.writeClassAttribute(Classes.create(node, "toggle", Markup.NULL));
+    writer.writeClassAttribute(TobagoClass.TREE_NODE__TOGGLE);
 
     // encode indent
     final boolean dropFirst = !showRoot || !showRootJunction && (showLines || showIcons);
@@ -75,7 +76,16 @@ public class TreeIndentRenderer extends
     if (!showIcons || !showRootJunction && level == 0) {
       return;
     }
-    writer.writeIcon(folder ? expanded ? Icons.MINUS_SQUARE_O : Icons.PLUS_SQUARE_O : Icons.SQUARE_O);
+    final Icons icon = folder ? expanded ? Icons.MINUS_SQUARE_O : Icons.PLUS_SQUARE_O : Icons.SQUARE_O;
+    writer.startElement(HtmlElements.I);
+    writer.writeClassAttribute(FontAwesomeIconEncoder.FA, FontAwesomeIconEncoder.generateClass(icon));
+    if (folder) {
+      writer.writeAttribute(
+          DataAttributes.SRC_OPEN, FontAwesomeIconEncoder.generateClass(Icons.MINUS_SQUARE_O).getName(), false);
+      writer.writeAttribute(
+          DataAttributes.SRC_CLOSED, FontAwesomeIconEncoder.generateClass(Icons.PLUS_SQUARE_O).getName(), false);
+    }
+    writer.endElement(HtmlElements.I);
   }
 
   @Override

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/FontAwesomeIconEncoder.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/FontAwesomeIconEncoder.java?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/FontAwesomeIconEncoder.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/FontAwesomeIconEncoder.java Thu Mar 23 13:34:10 2017
@@ -28,22 +28,25 @@ import java.io.IOException;
 import java.util.EnumMap;
 import java.util.regex.Pattern;
 
+/**
+ * @deprecated since Tobago 3.1.0. May be subject of change in later versions!
+ */
+@Deprecated
 public class FontAwesomeIconEncoder implements IconEncoder {
 
   private static final Logger LOG = LoggerFactory.getLogger(FontAwesomeIconEncoder.class);
 
-  private static final CssItem FA = new FontAwesomeCssItem("fa");
+  public static final CssItem FA = new FontAwesomeCssItem("fa");
 
   private static final Pattern PATTERN = Pattern.compile("^(fa(-[a-z]+)+)$");
 
 
-  private EnumMap<Icons, CssItem> icons;
+  private static final EnumMap<Icons, CssItem> ICONS;
 
-
-  public FontAwesomeIconEncoder() {
-    icons = new EnumMap<Icons, CssItem>(Icons.class);
+  static {
+    ICONS = new EnumMap<Icons, CssItem>(Icons.class);
     for (Icons icon : Icons.values()) {
-      icons.put(icon, new FontAwesomeCssItem("fa-" + icon.name().toLowerCase().replaceAll("_", "-")));
+      ICONS.put(icon, new FontAwesomeCssItem("fa-" + icon.name().toLowerCase().replaceAll("_", "-")));
     }
   }
 
@@ -56,11 +59,11 @@ public class FontAwesomeIconEncoder impl
     writer.endElement(HtmlElements.I);
   }
 
-  private CssItem generateClass(final Icons icon) {
+  public static CssItem generateClass(final Icons icon) {
     if (icon == null) {
       return null;
     }
-    CssItem result = icons.get(icon);
+    CssItem result = ICONS.get(icon);
     if (result == null) {
       LOG.warn("Missing icon: '" + icon + "'");
     }
@@ -73,8 +76,6 @@ public class FontAwesomeIconEncoder impl
 
       @Override
       public String getName() {
-        // XXX cleanup, should be resolved with the ResourceManager... ? TBD
-        // todo: regexp check
         if (PATTERN.matcher(name).matches()) {
           return name;
         } else {

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/IconEncoder.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/IconEncoder.java?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/IconEncoder.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/IconEncoder.java Thu Mar 23 13:34:10 2017
@@ -23,6 +23,10 @@ import org.apache.myfaces.tobago.webapp.
 
 import java.io.IOException;
 
+/**
+ * @deprecated since Tobago 3.1.0. May be subject of change in later versions!
+ */
+@Deprecated
 public interface IconEncoder {
 
   void encode(TobagoResponseWriter writer, Icons icon, Style style, final CssItem... cssItems) throws IOException;

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java Thu Mar 23 13:34:10 2017
@@ -89,7 +89,8 @@ public enum TobagoClass implements CssIt
   SHEET__CELL__MARKUP__RIGHT("tobago-sheet-cell-markup-right"),
   SHEET__CELL__MARKUP__CENTER("tobago-sheet-cell-markup-center"),
   SHEET__CELL__MARKUP__JUSTIFY("tobago-sheet-cell-markup-justify"),
-  SUGGEST("tobago-suggest");
+  SUGGEST("tobago-suggest"),
+  TREE_NODE__TOGGLE("tobago-treeNode-toggle");
 
   private static final Logger LOG = LoggerFactory.getLogger(TobagoClass.class);
 

Modified: myfaces/tobago/trunk/tobago-core/src/main/resources/scss/_tobago.scss
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/resources/scss/_tobago.scss?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/resources/scss/_tobago.scss (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/resources/scss/_tobago.scss Thu Mar 23 13:34:10 2017
@@ -32,6 +32,10 @@ Todo: check, if this is needed? (It does
 */
 
 /*
+.tobago-treeNode-toggle // XXX dummy: only occurs in JavaScript, is here to satisfy the Test
+ */
+
+/*
  * theme: standard
  * agent: standard
  */

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/tree.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/tree.xhtml?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/tree.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/tree.xhtml Thu Mar 23 13:34:10 2017
@@ -63,17 +63,19 @@
 
   <tc:section label="Icon">
     <p>An icon can be added to a node with
-      <code class="language-markup">&lt;tc:treeIcon value="image/feather.png"/></code>.
-      In this case, the targeted image is 'feather.png'. It is displayed for closed nodes.
-      For opened nodes, an image with a '-open'-suffix is used, here it's 'feather-open.png'.
-      For the leafs of the tree, an image with a '-leaf'-suffix is used. Therefor 'feather-leaf.png' is the displayed
-      image.</p>
+      <code class="language-markup">&lt;tc:treeIcon value="image/feather-leaf.png" closed="image/feather-closed.png" open="image/feather-open.png"/></code>.
+      In this case, the targeted image is 'feather-leaf.png'. It is displayed for leaf nodes.
+      For open or closed folder there are explicit attributes.
+      If these attributes are not used, defaults are used.</p>
     <tc:tree value="#{treeController.sample}" var="node">
       <tc:treeNode>
         <tc:treeIndent/>
-        <tc:treeIcon value="#{request.contextPath}/image/feather.png" />
+        <tc:treeIcon value="#{request.contextPath}/image/feather-leaf.png"
+                     closed="#{request.contextPath}/image/feather-closed.png"
+                     open="#{request.contextPath}/image/feather-open.png" />
         <tc:treeIcon value="fa-file-o"
-                     closed="fa-folder-o" open="fa-folder-open-o" />
+                     closed="fa-folder-o"
+                     open="fa-folder-open-o" />
         <tc:treeLabel value="#{node.userObject.name}" />
       </tc:treeNode>
     </tc:tree>

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-tree.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-tree.js?rev=1788239&r1=1788238&r2=1788239&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-tree.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-tree.js Thu Mar 23 13:34:10 2017
@@ -26,7 +26,13 @@ Tobago.Tree.toggleNode = function($eleme
   var rowIndex = Tobago.Tree.rowIndex($node);
   if (Tobago.Tree.isExpanded($node, $expanded)) {
     Tobago.Tree.hideChildren($node);
-    $toggle.each(function() {
+    $toggle.find("i").each(function() {
+      var $t = jQuery(this);
+      var o = $t.data("tobago-src-open");
+      var c = $t.data("tobago-src-closed");
+      $t.removeClass(o).addClass(c);
+    });
+    $toggle.find("img").each(function() {
       var $t = jQuery(this);
       src = $t.data("tobago-src-closed");
       if (src === undefined) { // use the open icon if there is no close icon
@@ -50,7 +56,13 @@ Tobago.Tree.toggleNode = function($eleme
             render: $data.attr("id")
           });
     } else {
-      $toggle.each(function() {
+      $toggle.find("i").each(function() {
+        var $t = jQuery(this);
+        var c = $t.data("tobago-src-closed");
+        var o = $t.data("tobago-src-open");
+        $t.removeClass(c).addClass(o);
+      });
+      $toggle.find("img").each(function() {
         var $t = jQuery(this);
         src = $t.data("tobago-src-open");
         if (src === undefined) { // use the close icon if there is no open icon