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 2016/06/29 13:58:19 UTC

svn commit: r1750640 [2/2] - in /myfaces/tobago/trunk: tobago-core/src/main/java/org/apache/myfaces/tobago/component/ tobago-core/src/main/java/org/apache/myfaces/tobago/event/ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/ tob...

Added: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/PanelRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/PanelRendererBase.java?rev=1750640&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/PanelRendererBase.java (added)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/PanelRendererBase.java Wed Jun 29 13:58:18 2016
@@ -0,0 +1,76 @@
+/*
+ * 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.renderkit.html.standard.standard.tag;
+
+import org.apache.myfaces.tobago.internal.component.AbstractUICollapsiblePanel;
+import org.apache.myfaces.tobago.internal.util.StringUtils;
+import org.apache.myfaces.tobago.model.CollapseState;
+import org.apache.myfaces.tobago.renderkit.RendererBase;
+import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
+import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
+import org.apache.myfaces.tobago.renderkit.html.HtmlInputTypes;
+import org.apache.myfaces.tobago.util.ComponentUtils;
+import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.util.Map;
+
+public class PanelRendererBase extends RendererBase {
+
+  @Override
+  public void decode(final FacesContext facesContext, final UIComponent component) {
+    super.decode(facesContext, component);
+
+    final AbstractUICollapsiblePanel collapsible = (AbstractUICollapsiblePanel) component;
+    final String clientId = collapsible.getClientId(facesContext);
+    final String hiddenId = clientId + ComponentUtils.SUB_SEPARATOR + "collapse";
+
+    final Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
+    if (requestParameterMap.containsKey(hiddenId)) {
+      final String newValue = requestParameterMap.get(hiddenId);
+      if (StringUtils.isNotBlank(newValue)) {
+        collapsible.setNextState(CollapseState.valueOf(newValue));
+      }
+    }
+  }
+
+  protected void encodeHidden(final TobagoResponseWriter writer, final String clientId) throws IOException {
+    writer.startElement(HtmlElements.INPUT);
+    writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.HIDDEN);
+    writer.writeNameAttribute(clientId + ComponentUtils.SUB_SEPARATOR + "collapse");
+    writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + "collapse");
+    writer.endElement(HtmlElements.INPUT);
+  }
+
+  @Override
+  public boolean getRendersChildren() {
+    return true;
+  }
+
+  @Override
+  public void encodeChildren(final FacesContext facesContext, final UIComponent component) throws IOException {
+    if (((AbstractUICollapsiblePanel) component).getCollapsed().isSkipLifecycle()) {
+      return;
+    }
+    super.encodeChildren(facesContext, component);
+  }
+}

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SectionRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SectionRenderer.java?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SectionRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SectionRenderer.java Wed Jun 29 13:58:18 2016
@@ -20,8 +20,8 @@
 package org.apache.myfaces.tobago.renderkit.html.standard.standard.tag;
 
 import org.apache.myfaces.tobago.component.Facets;
-import org.apache.myfaces.tobago.component.UISection;
-import org.apache.myfaces.tobago.renderkit.RendererBase;
+import org.apache.myfaces.tobago.internal.component.AbstractUISection;
+import org.apache.myfaces.tobago.model.CollapseState;
 import org.apache.myfaces.tobago.renderkit.css.Classes;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
@@ -34,60 +34,71 @@ import javax.faces.component.UIComponent
 import javax.faces.context.FacesContext;
 import java.io.IOException;
 
-public class SectionRenderer extends RendererBase {
+public class SectionRenderer extends PanelRendererBase {
 
-    @Override
-    public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
+  @Override
+  public void encodeBegin(final FacesContext facesContext, final UIComponent component) throws IOException {
 
-        final UISection section = (UISection) component;
-        final TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
+    final AbstractUISection section = (AbstractUISection) component;
+    final TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
+    final String clientId = section.getClientId(facesContext);
+    final CollapseState collapsed = section.getCollapsed();
+
+    writer.startElement(HtmlElements.DIV);
+    writer.writeIdAttribute(clientId);
+    writer.writeClassAttribute(
+        Classes.create(section),
+        collapsed == CollapseState.visible ? null : TobagoClass.COLLAPSED,
+        section.getCustomClass());
+    HtmlRendererUtils.writeDataAttributes(facesContext, writer, section);
+
+    String label = section.getLabelToRender();
+    final HtmlElements tag;
+    switch (section.getLevel()) {
+      case 1:
+        tag = HtmlElements.H1;
+        break;
+      case 2:
+        tag = HtmlElements.H2;
+        break;
+      case 3:
+        tag = HtmlElements.H3;
+        break;
+      case 4:
+        tag = HtmlElements.H4;
+        break;
+      case 5:
+        tag = HtmlElements.H5;
+        break;
+      default:
+        tag = HtmlElements.H6;
+    }
 
-        writer.startElement(HtmlElements.DIV);
-        writer.writeIdAttribute(section.getClientId(facesContext));
-        writer.writeClassAttribute(Classes.create(section), section.getCustomClass());
-        HtmlRendererUtils.writeDataAttributes(facesContext, writer, section);
-
-        String label = section.getLabelToRender();
-        final HtmlElements tag;
-        switch (section.getLevel()) {
-            case 1:
-                tag = HtmlElements.H1;
-                break;
-            case 2:
-                tag = HtmlElements.H2;
-                break;
-            case 3:
-                tag = HtmlElements.H3;
-                break;
-            case 4:
-                tag = HtmlElements.H4;
-                break;
-            case 5:
-                tag = HtmlElements.H5;
-                break;
-            default:
-                tag = HtmlElements.H6;
-        }
-
-        writer.startElement(HtmlElements.DIV);
-        writer.writeClassAttribute(TobagoClass.SECTION__HEADER);
-        writer.startElement(tag);
-        final String image = section.getImage();
-        HtmlRendererUtils.encodeIconWithLabel(writer, image, label);
-        writer.endElement(tag);
-
-        final UIComponent bar = ComponentUtils.getFacet(section, Facets.bar);
-        if (bar != null) {
-            RenderUtils.encode(facesContext, bar);
-        }
+    encodeHidden(writer, clientId);
 
-        writer.endElement(HtmlElements.DIV);
+    writer.startElement(HtmlElements.DIV);
+    writer.writeClassAttribute(TobagoClass.SECTION__HEADER);
+    writer.startElement(tag);
+    final String image = section.getImage();
+    HtmlRendererUtils.encodeIconWithLabel(writer, image, label);
+    writer.endElement(tag);
+
+    final UIComponent bar = ComponentUtils.getFacet(section, Facets.bar);
+    if (bar != null) {
+      RenderUtils.encode(facesContext, bar);
     }
 
-    @Override
-    public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
+    writer.endElement(HtmlElements.DIV);
 
-        final TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
-        writer.endElement(HtmlElements.DIV);
-    }
+    writer.startElement(HtmlElements.DIV);
+    writer.writeClassAttribute(TobagoClass.SECTION__CONTENT);
+  }
+
+  @Override
+  public void encodeEnd(final FacesContext facesContext, final UIComponent component) throws IOException {
+
+    final TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
+    writer.endElement(HtmlElements.DIV);
+    writer.endElement(HtmlElements.DIV);
+  }
 }

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/SheetRenderer.java Wed Jun 29 13:58:18 2016
@@ -766,7 +766,8 @@ public class SheetRenderer extends Rende
               }
               final CommandMap map = new CommandMap();
               final Command click = new Command(
-                  sortCommand.getClientId(facesContext), null, null, null, clientIds, null, null, null, null, null);
+                  sortCommand.getClientId(facesContext), null, null, null, clientIds, null, null, null, null, null,
+                  null);
               map.setClick(click);
               writer.writeAttribute(DataAttributes.COMMANDS, JsonUtils.encode(map), true);
 

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/TabGroupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/TabGroupRenderer.java?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/TabGroupRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/standard/standard/tag/TabGroupRenderer.java Wed Jun 29 13:58:18 2016
@@ -31,7 +31,7 @@ import org.apache.myfaces.tobago.compone
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.ResourceManagerUtils;
 import org.apache.myfaces.tobago.event.TabChangeEvent;
-import org.apache.myfaces.tobago.internal.component.AbstractUIPanel;
+import org.apache.myfaces.tobago.internal.component.AbstractUIPanelBase;
 import org.apache.myfaces.tobago.internal.util.AccessKeyLogger;
 import org.apache.myfaces.tobago.internal.util.Deprecation;
 import org.apache.myfaces.tobago.model.SwitchType;
@@ -133,7 +133,7 @@ public class TabGroupRenderer extends Re
     int closestRenderedTabIndex = -1;
     for (final UIComponent tab : tabGroup.getChildren()) {
       index++;
-      if (tab instanceof AbstractUIPanel) {
+      if (tab instanceof AbstractUIPanelBase) {
         if (index == activeIndex) {
           if (tab.isRendered()) {
             return index;

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-popup.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-popup.js?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-popup.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-popup.js Wed Jun 29 13:58:18 2016
@@ -35,3 +35,41 @@ Tobago.Popup.close = function(button) {
 
 Tobago.registerListener(Tobago.Popup.init, Tobago.Phase.DOCUMENT_READY);
 Tobago.registerListener(Tobago.Popup.init, Tobago.Phase.AFTER_UPDATE);
+
+Tobago.Collapse = {};
+
+Tobago.Collapse.findHidden = function ($element) {
+  return jQuery(Tobago.Utils.escapeClientId($element.attr("id") + "::collapse"));
+};
+
+Tobago.Collapse.execute = function (collapse) {
+  var transition = collapse.transition;
+  var $for = jQuery(Tobago.Utils.escapeClientId(collapse.forId));
+  var $hidden = Tobago.Collapse.findHidden($for);
+  var state = $hidden.val();
+  var newState;
+  switch (transition) {
+    case "hide":
+      newState = "hidden";
+      break;
+    case "show":
+      newState = "visible";
+      break;
+    case "drop":
+      newState = "absent";
+      break;
+    default:
+      console.error("unknown transition: '" + transition + "'");
+  }
+  if (newState == "visible") {
+    $for.removeClass("tobago-collapsed");
+  } else {
+    $for.addClass("tobago-collapsed");
+  }
+  var serverRequestRequired = state == "absent" || newState == "absent";
+  if (serverRequestRequired) {
+    console.info("serverRequestRequired!"); // todo: remove var serverRequestRequired: is not needed.
+    // tbd. this this must be done be the deveopoer manually
+  }
+  $hidden.val(newState);
+};

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js Wed Jun 29 13:58:18 2016
@@ -638,8 +638,14 @@ var Tobago = {
 
     if (commands.click) {
       command.click(function(event) {
-        if (commands.click.omit != true) {
-          if (commands.click.confirmation == null || confirm(commands.click.confirmation)) {
+        if (commands.click.confirmation == null || confirm(commands.click.confirmation)) {
+
+          var collapse = commands.click.collapse;
+          if (collapse) {
+            Tobago.Collapse.execute(collapse);
+          }
+
+          if (commands.click.omit != true) {
             var popup = commands.click.popup;
             if (popup && popup.command == "close" && popup.immediate) {
               Tobago.Popup.close(this);

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/style/tobago.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/style/tobago.css?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/style/tobago.css (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/style/tobago.css Wed Jun 29 13:58:18 2016
@@ -41,11 +41,11 @@
 
 /* collapsible -------------------------------------------------------------- */
 
-/*.tobago-collapsed.tobago-box .card-block,*/
-/*.tobago-collapsed.tobago-section .tobago-section-content,*/
-/*.tobago-collapsed.tobago-panel {*/
-  /*display: none;*/
-/*}*/
+.tobago-collapsed.tobago-box .card-block,
+.tobago-collapsed.tobago-section .tobago-section-content,
+.tobago-collapsed.tobago-panel {
+  display: none;
+}
 
 /* date -------------------------------------------------------------- */
 

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/test/java/org/apache/myfaces/tobago/renderkit/html/JsonUtilsUnitTest.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/test/java/org/apache/myfaces/tobago/renderkit/html/JsonUtilsUnitTest.java?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/test/java/org/apache/myfaces/tobago/renderkit/html/JsonUtilsUnitTest.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/test/java/org/apache/myfaces/tobago/renderkit/html/JsonUtilsUnitTest.java Wed Jun 29 13:58:18 2016
@@ -47,7 +47,7 @@ public class JsonUtilsUnitTest extends A
   @Test
   public void click() {
     final CommandMap map = new CommandMap();
-    map.setClick(new Command(null, null, null, null, "", null, null, null, null, null));
+    map.setClick(new Command(null, null, null, null, "", null, null, null, null, null, null));
     final String expected = "{'click':{}}".replaceAll("'", "\"");
     Assert.assertEquals(expected, JsonUtils.encode(map));
   }
@@ -55,7 +55,7 @@ public class JsonUtilsUnitTest extends A
   @Test
   public void change() {
     final CommandMap map = new CommandMap();
-    map.addCommand("change", new Command(null, null, null, null, null, null, null, null, null, null));
+    map.addCommand("change", new Command(null, null, null, null, null, null, null, null, null, null, null));
     final String expected = "{'change':{}}".replaceAll("'", "\"");
     Assert.assertEquals(expected, JsonUtils.encode(map));
   }
@@ -63,8 +63,8 @@ public class JsonUtilsUnitTest extends A
   @Test
   public void two() {
     final CommandMap map = new CommandMap();
-    map.addCommand("click", new Command(null, null, "target", null, null, null, null, null, null, null));
-    map.addCommand("change", new Command(null, null, null, null, null, null, null, null, null, null));
+    map.addCommand("click", new Command(null, null, "target", null, null, null, null, null, null, null, null));
+    map.addCommand("change", new Command(null, null, null, null, null, null, null, null, null, null, null));
     final String expected = "{'click':{'target':'target'},'change':{}}".replaceAll("'", "\"");
     Assert.assertEquals(expected, JsonUtils.encode(map));
   }
@@ -72,7 +72,7 @@ public class JsonUtilsUnitTest extends A
   @Test
   public void transition() {
     final CommandMap commandMap = new CommandMap();
-    commandMap.setClick(new Command(null, false, null, null, null, null, null, null, null, null));
+    commandMap.setClick(new Command(null, false, null, null, null, null, null, null, null, null, null));
     final String expected = "{'click':{'transition':false}}".replaceAll("'", "\"");
     Assert.assertEquals(expected, JsonUtils.encode(commandMap));
   }
@@ -91,7 +91,7 @@ public class JsonUtilsUnitTest extends A
         "_blank", "http://www.apache.org/",
         StringUtils.join(Arrays.asList("id1", "id2"), ' '),
         "id_focus",
-        "Really?", 1000, Popup.createPopup(command), true));
+        "Really?", 1000, Popup.createPopup(command), null, true));
     final String expected = (
         "{"
             + "'click':{"

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg?rev=1750640&r1=1750639&r2=1750640&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/component.stg Wed Jun 29 13:58:18 2016
@@ -330,6 +330,10 @@ SanitizeModeProperty(property) ::= <<
 <NormalProperty(property)>
 >>
 
+CollapseStateProperty(property) ::= <<
+<NormalProperty(property)>
+>>
+
 ShowPositionProperty(property) ::= <<
 <NormalProperty(property)>
 >>