You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2008/11/27 13:42:44 UTC

svn commit: r721170 - in /myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main: java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ resources/META-INF/adf/styles/

Author: matzew
Date: Thu Nov 27 04:42:43 2008
New Revision: 721170

URL: http://svn.apache.org/viewvc?rev=721170&view=rev
Log:
TRINIDAD-1314 - For Basic HTML Browsers (no JavaScript), support all PDA components

Thanks to Mamallan Uthaman for the patch

Modified:
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ColumnGroupRenderer.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ShowDetailRenderer.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SkinSelectors.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/LinkRenderer.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ShowItemRenderer.java
    myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/resources/META-INF/adf/styles/minimal-pda.xss

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ColumnGroupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ColumnGroupRenderer.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ColumnGroupRenderer.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ColumnGroupRenderer.java Thu Nov 27 04:42:43 2008
@@ -444,8 +444,12 @@
     if (rowSpan > 1)
       rw.writeAttribute("rowspan", IntegerUtils.getString(rowSpan), null);
 
-
-    String sortOnclick = getSortingOnclick(arc, tContext, column, sortability);
+    String sortOnclick = "";
+    if (supportsScripting(arc))
+    {
+      sortOnclick = getSortingOnclick(arc, tContext, column, sortability);
+    }
+     
     //=-=AEW Review: Does this need to support any other handlers?
 
     //=-=AEW Apparently in PDA, we don't bother rendering
@@ -507,24 +511,8 @@
     String value    = getSortProperty(bean);
     // Note that "state" refers to the current state, not
     // the state will be set after clicking
-    String state;
-    if (sortability == SORT_ASCENDING)
-    {
-      state = XhtmlConstants.SORTABLE_ASCENDING;
-    }
-    else if (sortability == SORT_DESCENDING)
-    {
-      state = XhtmlConstants.SORTABLE_DESCENDING;
-    }
-    else if ("descending".equals(getDefaultSortOrder(bean)))
-    {
-      state = XhtmlConstants.SORTABLE_ASCENDING;
-    }
-    else
-    {
-      state = "";
-    }
-
+    String state = findSortState(sortability, bean);
+    
     StringBuffer buffer = new StringBuffer(33+
                                            formName.length() +
                                            source.length() +
@@ -575,15 +563,20 @@
         rw.writeText(headerText, "headerText");
     }
 
-    renderSortOrderSymbol(context, arc, sortability, sortIcon, sortOnclick);
+     renderSortOrderSymbol(context, arc, column, tContext,
+                                    sortability, sortIcon, sortOnclick);
+    
   }
-
+  
+  
   /**
    * @todo IMPLEMENT
    */
   protected void renderSortOrderSymbol(
     FacesContext       context,
     RenderingContext arc,
+    UIComponent           column,
+    TableRenderingContext tContext,
     int                 sortability,
     Icon                icon,
     String              sortOnclick
@@ -593,15 +586,76 @@
       return;
 
     ResponseWriter writer = context.getResponseWriter();
-    boolean renderAnchor = supportsNavigation(arc);
-    if (renderAnchor)
+    boolean supportNav = supportsNavigation(arc);
+    boolean NonJavaScriptBrowser = false;
+    boolean renderedInput = false;
+    if (supportNav)
     {
       if (isPDA(arc))
         writer.writeText(XhtmlConstants.NBSP_STRING, null);
+        
+      NonJavaScriptBrowser = !supportsScripting(arc);  
+      if (NonJavaScriptBrowser)
+      {
+        renderedInput = true;
+        writer.startElement("input", null);
+        writer.writeAttribute("type", "submit", null);
+        String source = tContext.getTableId();
+        FacesBean bean = getFacesBean(column);
+        String value = getSortProperty(bean);
+        String state = findSortState(sortability, bean);
+        String nameAttri;
+        if (state != "")
+        {
+          nameAttri =  XhtmlUtils.getEncodedParameter
+                                   (XhtmlConstants.SOURCE_PARAM)
+                       + XhtmlUtils.getEncodedParameter(source)
+                       + XhtmlUtils.getEncodedParameter
+                                   (XhtmlConstants.VALUE_PARAM)
+                       + XhtmlUtils.getEncodedParameter(value)
+                       + XhtmlUtils.getEncodedParameter
+                                   (XhtmlConstants.EVENT_PARAM)
+                       + XhtmlUtils.getEncodedParameter
+                                   (XhtmlConstants.SORT_EVENT)
+                       + XhtmlUtils.getEncodedParameter
+                                   (XhtmlConstants.STATE_PARAM)
+                       + state;
+        }
+        else
+        {
+          nameAttri =  XhtmlUtils.getEncodedParameter
+                                    (XhtmlConstants.SOURCE_PARAM)
+                       + XhtmlUtils.getEncodedParameter(source)
+                       + XhtmlUtils.getEncodedParameter
+                                    (XhtmlConstants.EVENT_PARAM)
+                       + XhtmlUtils.getEncodedParameter
+                                    (XhtmlConstants.SORT_EVENT)
+                       + XhtmlUtils.getEncodedParameter
+                                    (XhtmlConstants.VALUE_PARAM)
+                       + value;
+        }
+
+        writer.writeAttribute("name", nameAttri, null);
+        if (state.equals(XhtmlConstants.SORTABLE_ASCENDING))
+        {
+          writer.writeAttribute("value",
+                                    XhtmlConstants.NON_JS_DESC_ICON, null); 
+        }
+        else
+        {
+          writer.writeAttribute("value", 
+                                    XhtmlConstants.NON_JS_ASC_ICON, null); 
+        }
 
-      writer.startElement("a", null);
-      writer.writeURIAttribute("href", "#", null);
-      writer.writeAttribute("onclick", sortOnclick, null);
+        writer.writeAttribute("class", 
+             SkinSelectors.SORTABLE_HEADER_SORT_ICON_STYLE_CLASS, null);
+      }
+      else
+      {
+        writer.startElement("a", null);
+        writer.writeURIAttribute("href", "#", null);
+        writer.writeAttribute("onclick", sortOnclick, null);
+      }
     }
 
     String altTextKey = null;
@@ -622,20 +676,33 @@
     String altText = arc.getTranslatedString(altTextKey);
 
     Object align = OutputUtils.getMiddleIconAlignment(arc);
+    
+    //Don't render any child element for input element
+    if (!renderedInput)
+    {
+      // Render the icon, specifying embedded=true.  This
+      // allows text-based Icons to render their style class
+      // and altText directly on the anchor itself
+      OutputUtils.renderIcon(context,
+                             arc,
+                             icon,
+                             altText,
+                             align,
+                             true);
+    }
 
-    // Render the icon, specifying embedded=true.  This
-    // allows text-based Icons to render their style class
-    // and altText directly on the anchor itself
-    OutputUtils.renderIcon(context,
-                           arc,
-                           icon,
-                           altText,
-                           align,
-                           true);
-
-    // If we're an anchor, render the destination
-    if (renderAnchor)
-      writer.endElement("a");
+    if (supportNav)
+    {
+      if(NonJavaScriptBrowser)
+      {
+        writer.writeAttribute("title", altText, null);
+        writer.endElement("input");
+      }
+      else
+      {
+        writer.endElement("a");
+      }
+    }
 
   }
 
@@ -903,6 +970,34 @@
       return _kids[index];
     }
   }
+  
+  /**
+   * @return the state of the sorting after the page submition 
+   */
+  private String findSortState(
+     int sortability, 
+     FacesBean bean )
+  {
+    String state;
+    if (sortability == SORT_ASCENDING)
+    {
+      state = XhtmlConstants.SORTABLE_ASCENDING;
+    }
+    else if (sortability == SORT_DESCENDING)
+    {
+      state = XhtmlConstants.SORTABLE_DESCENDING;
+    }
+    else if ("descending".equals(getDefaultSortOrder(bean)))
+    {
+      state = XhtmlConstants.SORTABLE_ASCENDING;
+    }
+    else
+    {
+      state = "";
+    }
+    
+    return state;
+  }
 
   private PropertyKey _headerTextKey;
   private PropertyKey _headerNoWrapKey;

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java Thu Nov 27 04:42:43 2008
@@ -307,9 +307,23 @@
         encodeChild(context, toolbar);
         out.endElement("div");
       }
-
-      out.startElement("a", null);
-      out.writeAttribute("name", detailItemId, null);
+      
+      boolean javaScriptSupport = supportsScripting(arc);
+      
+      if (javaScriptSupport)
+      {
+        out.startElement("a", null);
+        out.writeAttribute("name", detailItemId, null);
+      }
+      else
+      {
+        // For Non-JavaScript browsers, render an input element(type=submit) to 
+        // submit the page. Encode the name attribute with the parameter name 
+        // and value thus it would enable the browsers to include the name of 
+        // this element in its payLoad if it submits the page.
+        out.startElement("input", null);
+        out.writeAttribute("type", "submit", null);
+      }
 
       renderStyleClass(context, arc,
                        disabled
@@ -323,32 +337,74 @@
       {
         boolean isImmediate = detailItem.isImmediate();
         String event = disclosed ? "hide" : "show";
-        String onClickHandler = _getFormSubmitScript(component,
-                                                     arc,
-                                                     event,
-                                                     detailItemId,
-                                                     formName,
-                                                     compId,
-                                                     isImmediate);
-        out.writeAttribute("onclick", onClickHandler, null);
-        out.writeAttribute("href", "#", null);
+        
+        if (javaScriptSupport)
+        {
+          String onClickHandler = _getFormSubmitScript(component,
+                                                       arc,
+                                                       event,
+                                                       detailItemId,
+                                                       formName,
+                                                       compId,
+                                                       isImmediate);
+          out.writeAttribute("onclick", onClickHandler, null);
+          out.writeAttribute("href", "#", null);
+        }
+        else
+        {
+          String nameAttri = XhtmlUtils.getEncodedParameter
+                                          (XhtmlConstants.SOURCE_PARAM)
+                             + XhtmlUtils.getEncodedParameter(compId)
+                             + XhtmlUtils.getEncodedParameter
+                                         (XhtmlConstants.EVENT_PARAM)
+                             + XhtmlUtils.getEncodedParameter(event)
+                             + XhtmlUtils.getEncodedParameter
+                                         (XhtmlConstants.TARGETITEM_PARAM)
+                             + detailItemId;
+                             
+          out.writeAttribute("name", nameAttri, null);
+        }
       }
-
-      // =-=rbaranwa Per the UI Review, no icon to be rendered when
-      // panel is disabled.
-      if (! disabled)
+      
+      if (javaScriptSupport)
+      { 
+        // =-=rbaranwa Per the UI Review, no icon to be rendered when
+        // panel is disabled.
+        if (! disabled)
+        {
+          ShowDetailRenderer.renderDisclosureIcon(context,
+                                                   arc,
+                                                   disclosed,
+                                                   getDisclosedTipKey(),
+                                                   getUndisclosedTipKey());
+        }
+        if (titleText != null)
+        {
+          out.writeText(titleText, null);
+        }
+        out.endElement("a");
+      }
+      else
       {
-        ShowDetailRenderer.renderDisclosureIcon(context,
-                                                arc,
-                                                disclosed,
-                                                getDisclosedTipKey(),
-                                                getUndisclosedTipKey());
+        // Since we cannot render any image element as a child of input element, 
+        // just render the icon symbol along with the text.
+        String icon = disclosed ? XhtmlConstants.NON_JS_DETAIL_DISCLOSED_ICON :
+                                  XhtmlConstants.NON_JS_DETAIL_UNDISCLOSED_ICON;
+        if (titleText != null)
+        {
+          icon = icon + titleText;
+        }
+        
+        out.writeAttribute("value", icon, null);
+        
+        if (disabled)
+        {
+          out.writeAttribute("disabled", Boolean.TRUE, "disabled");
+        }
+        
+        out.endElement("input");
       }
       
-      if (titleText != null)
-        out.writeText(titleText, null);
-      out.endElement("a");
-
       out.endElement("div"); // Ending div for an individual panel
 
 
@@ -498,11 +554,11 @@
                                   .append("',")
                                   .append(validate)
                                   .append(", {event:'")
-	                            .append(event)
-	                            .append("',source:'")
-	                            .append(compId)
-	                            .append("',targetItem:'")
-	                            .append(detailItemId)
+                              .append(event)
+                              .append("',source:'")
+                              .append(compId)
+                              .append("',targetItem:'")
+                              .append(detailItemId)
                                   .append("'});return false;");
 
       onClickHandler = onClickHandlerBuff.toString();

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ShowDetailRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ShowDetailRenderer.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ShowDetailRenderer.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/ShowDetailRenderer.java Thu Nov 27 04:42:43 2008
@@ -67,6 +67,8 @@
     UIComponent         component,
     FacesBean           bean) throws IOException
   {
+    
+    boolean javaScriptSupport = supportsScripting(arc);
     boolean disclosed = getDisclosed(bean);
 
     ResponseWriter rw = context.getResponseWriter();
@@ -75,13 +77,31 @@
       renderId(context, component);
 
     renderPromptStart(context, arc, component, bean);
-    _renderScripts(context, arc, component);
-    String onClickString =
-               _generateOnClickString(context, arc, component, bean, disclosed);
     String sourceValue = getClientId(context, component);
     String linkId = getLinkId(sourceValue, disclosed);
+    
+    String parameterString;
+    if (javaScriptSupport)
+    {
+      _renderScripts(context, arc, component);
+      parameterString = _generateOnClickString(context, 
+                                               arc, 
+                                               component, 
+                                               bean, 
+                                               disclosed);
+    }
+    else
+    { 
+      parameterString = _encodedParam(context, 
+                                      arc, 
+                                      component, 
+                                      bean, 
+                                      disclosed);
+
+    }
+    
+    _renderLinkStart(context, arc, parameterString);
 
-    _renderLinkStart(context, arc, onClickString);
     if (linkId != null)
       rw.writeAttribute("id", linkId, null);
 
@@ -100,11 +120,20 @@
       if (text != null)
       {
         if (!isTableAllDisclosure())
-          _renderLinkStart(context, arc, onClickString);
+          _renderLinkStart(context, arc, parameterString);
         renderStyleClasses(context, arc, getLinkStyleClasses());
-        rw.writeText(text,
+        if (javaScriptSupport)
+        {
+          rw.writeText(text,
                      disclosed ? "disclosedText" : "undisclosedText");
-
+        }
+        else
+        {
+          // Since for Non-JavaScript browsers we render an input tag, set the 
+          // value attribute to text
+          rw.writeAttribute("value", text, 
+                           disclosed ? "disclosedText" : "undisclosedText");
+        }
         _renderLinkEnd(context, arc);
       }
     }
@@ -169,19 +198,33 @@
     boolean             disclosed,
     String              disclosedAltTextKey,
     String              undisclosedAltTextKey) throws IOException
-  {
-    Icon icon = _getDisclosureIcon(arc, disclosed);
-
-    if (icon != null)
+  { 
+    String key = disclosed ? disclosedAltTextKey : undisclosedAltTextKey;
+    // Get the alt text
+    String altText = arc.getTranslatedString(key);
+    // Since we render input element for Non-JavaScript browsers, we cannot
+    // render image element as its child. So set the value attribute of 
+    // input element to the icon symbol 
+    if (!supportsScripting(arc))
     {
-      // Get the alt text
-      String key = disclosed ? disclosedAltTextKey : undisclosedAltTextKey;
-      String altText = arc.getTranslatedString(key);
-      // Get the align
-      String align = OutputUtils.getMiddleIconAlignment(arc);
-
-      // Render the icon with the specified attrs
-      OutputUtils.renderIcon(context, arc, icon, altText, align);
+      ResponseWriter rw = context.getResponseWriter();
+      String icon = disclosed ? XhtmlConstants.NON_JS_DETAIL_DISCLOSED_ICON :
+                                XhtmlConstants.NON_JS_DETAIL_UNDISCLOSED_ICON;  
+      rw.writeAttribute("title", altText, null);
+      rw.writeAttribute("value", icon, null);
+      String linkConverter = "border: none; background: inherit;";
+      rw.writeAttribute("style", linkConverter,null);
+    }
+    else
+    {
+      Icon icon = _getDisclosureIcon(arc, disclosed);
+      if (icon != null)
+      {
+        // Get the align
+        String align = OutputUtils.getMiddleIconAlignment(arc);
+        // Render the icon with the specified attrs
+        OutputUtils.renderIcon(context, arc, icon, altText, align);
+      }
     }
   }
 
@@ -344,18 +387,28 @@
   private void _renderLinkStart(
     FacesContext        context,
     RenderingContext arc,
-    String           onclickString ) throws IOException
+    String           parameterString ) throws IOException
   {
     ResponseWriter rw = context.getResponseWriter();
     if (!supportsNavigation(arc)) {
       rw.startElement("span", null);
     }
-    else
+    else if (supportsScripting(arc))
     {
       rw.startElement("a", null);
-      rw.writeAttribute("onclick", onclickString, null);
+      rw.writeAttribute("onclick", parameterString, null);
       rw.writeURIAttribute("href", "#", null);
     }
+    // For Non-JavaScript browsers, render an input element(type=submit) to 
+    // submit the page. Encode the name attribute with the parameter name 
+    // and value thus it would enable the browsers to include the name of 
+    // this element in its payLoad if it submits the page.
+    else
+    {
+      rw.startElement("input", null);
+      rw.writeAttribute("type", "submit", null);
+      rw.writeURIAttribute("name", parameterString, null);
+    }
   }
 
   private String _generateOnClickString(
@@ -419,8 +472,45 @@
     ResponseWriter rw = context.getResponseWriter();
     if (!supportsNavigation(arc))
       rw.endElement("span");
-    else
+    else if (supportsScripting(arc))
       rw.endElement("a");
+    else
+      rw.endElement("input");
+  }
+  
+  /**
+   * @return encoded parameter name and value pairs for Non-JavaScript
+   * browsers 
+   */
+  private String _encodedParam(
+    FacesContext        context,
+    RenderingContext arc,
+    UIComponent         component,
+    FacesBean           bean,
+    boolean             disclosed)
+  {
+    FormData fData = arc.getFormData();
+    if (fData == null)
+       return null;
+       
+    String sourceValue = getClientId(context, component);
+    String eventValue = (disclosed
+                         ? XhtmlConstants.HIDE_EVENT
+                         : XhtmlConstants.SHOW_EVENT);
+                         
+    String valueValue = getValueParameter(component);
+    String linkId = getLinkId(sourceValue, disclosed);
+  
+    String nameAttri = XhtmlUtils.getEncodedParameter
+                                  (XhtmlConstants.SOURCE_PARAM)
+                       + XhtmlUtils.getEncodedParameter(sourceValue)
+                       + XhtmlUtils.getEncodedParameter
+                                  (XhtmlConstants.EVENT_PARAM)
+                       + XhtmlUtils.getEncodedParameter(eventValue)
+                       + XhtmlUtils.getEncodedParameter
+                                  (XhtmlConstants.VALUE_PARAM)
+                       + valueValue;  
+    return nameAttri;
   }
 
   /**

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SkinSelectors.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SkinSelectors.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SkinSelectors.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SkinSelectors.java Thu Nov 27 04:42:43 2008
@@ -1213,6 +1213,15 @@
    public static final String AF_SHOW_DETAIL_DISCLOSURE_ICON_LINK_STYLE_CLASS =
      "af|showDetail::disclosure-icon-link";
    
+     
+   //                                                                         //
+   //                                                                         //
+   // ============================ tr:showDetailItem ============================ //
+   //                                                                         //
+   //                                                                         //   
+   public static final String AF_SHOW_DETAIL_ITEM_SELECTED =
+     "af|showDetailItem::selected";
+    
    // ================================ Icons ================================ //
    public static final String AF_SHOW_DETAIL_DISCLOSED_ICON_NAME =
      "af|showDetail::disclosed-icon";

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java Thu Nov 27 04:42:43 2008
@@ -309,5 +309,8 @@
   public static final String MULTIPLE_VALUE_PARAM = "multipleValueParam";
   public static final String NON_JS_BROWSER = "_noJavaScript";
   public static final String NON_JS_BROWSER_TRUE = "true";
-
+  public static final String NON_JS_DETAIL_DISCLOSED_ICON = "-";
+  public static final String NON_JS_DETAIL_UNDISCLOSED_ICON = "+";
+  public static final String NON_JS_ASC_ICON = "v";
+  public static final String NON_JS_DESC_ICON = "^";
 }

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/LinkRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/LinkRenderer.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/LinkRenderer.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/LinkRenderer.java Thu Nov 27 04:42:43 2008
@@ -18,6 +18,13 @@
  */
 package org.apache.myfaces.trinidadinternal.ui.laf.base.pda;
 
+import java.io.IOException;
+
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlConstants;
+import org.apache.myfaces.trinidadinternal.ui.action.ClientAction;
+import org.apache.myfaces.trinidadinternal.ui.action.ClientActionUtils;
+import org.apache.myfaces.trinidadinternal.ui.action.FireAction;
+import org.apache.myfaces.trinidadinternal.ui.laf.base.BaseLafUtils;
 import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LinkUtils;
 import org.apache.myfaces.trinidadinternal.ui.UINode;
 import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
@@ -54,4 +61,131 @@
 
     return styleClass;
   }
+  
+  @Override
+  protected String getElementName(
+    UIXRenderingContext context,
+    UINode           node
+    )
+  {
+    // Check if the request is from a Non-JavaScript browsers and the 
+    // destination is null. If so, we need to render an input tag element 
+    if (_isInput(context,node))
+    {
+      return "input";
+    }
+    
+    return super.getElementName(context, node);
+  }
+  
+  
+  @Override
+  protected void renderAttributes(
+    UIXRenderingContext context,
+    UINode           node
+    ) throws IOException
+  {
+    // if the element is an input tag, it means the request is from
+    // a Non-JavaScript browser so encode the param name and value in
+    // the name attribute and set the type attribute to "submit"
+    if (_isInput(context, node))
+    {
+      // render the id
+      renderID(context, node);
+      renderAttributesExceptID(context, node);
+      ClientAction action = ClientActionUtils.getPrimaryClientAction
+                                                     (context, node);
+      String nameAttr = null;
+      if(action != null)
+      {
+        String source = ((FireAction) action).getSource();
+        nameAttr = XhtmlConstants.SOURCE_PARAM + 
+                         XhtmlConstants.NO_JS_PARAMETER_KEY + source;
+      }
+      else
+      {
+        Object id = getID(context, node);
+        if(id != null)
+        {
+          nameAttr = id.toString();
+        }
+      }
+       
+      renderAttribute(context, "type", "submit");
+      if (nameAttr != null)
+      {
+        renderAttribute(context, "name", nameAttr);
+      }
+      renderAttribute(context, "value", getText(context,node));
+      String linkConverter = 
+              "border: none; background: inherit; text-decoration: underline;";
+      renderAttribute(context, "style", linkConverter);
+      if (isDisabled(context, node))
+      {  
+        renderAttribute(context, "disabled", Boolean.TRUE);
+      }
+    }
+    else
+    {
+      super.renderAttributes(context, node);
+    }
+  }
+
+  @Override
+  protected void renderContent(
+    UIXRenderingContext context,
+    UINode           node
+    ) throws IOException
+  {
+    if (isEmpty(context, node))
+      return;
+    
+    // Since the value attribute of input element is already set to the content,  
+    // render the content only for elements other than input.
+    if (!_isInput(context,node))
+    {
+      super.renderContent(context, node);
+    }
+  }
+
+  @Override
+  protected void renderID(
+    UIXRenderingContext context,
+    UINode           node
+    ) throws IOException
+  {
+    Object id = getID(context, node);
+ 
+    if (id != null)
+    {
+      if (supportsID(context))
+      {
+        // For links, "name" and thus "id" is a URI attribute.
+        renderURIID(context, id);
+      }
+      // Don't render name attribute for input element since it is already been  
+      // rendered with encoded param name and value pair in renderAttribute method.
+      if (!_isInput(context, node) && supportsNameIdentification(context) 
+                                    && makeNameAndIDSame(context))
+      {
+        renderURIAttribute(context, "name", id);
+      }
+    }
+  }
+
+  /**
+   * Returns true if the request is from a Non-JavaScript browsers and the 
+   * destination is not available. 
+   */
+ 
+   private boolean _isInput(
+     UIXRenderingContext context,
+     UINode           node
+     )
+   {
+     String destination = getDestination(context, node);
+
+     return (((destination == null) || ("#".equals(destination)))
+                                          && (!supportsScripting(context)));
+   }
 }

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ShowItemRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ShowItemRenderer.java?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ShowItemRenderer.java (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/pda/ShowItemRenderer.java Thu Nov 27 04:42:43 2008
@@ -20,12 +20,15 @@
 
 import java.io.IOException;
 
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SkinSelectors;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlConstants;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlUtils;
 import org.apache.myfaces.trinidadinternal.share.url.URLEncoder;
-import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
-import org.apache.myfaces.trinidadinternal.ui.UINode;
 import org.apache.myfaces.trinidadinternal.ui.laf.base.BaseLafUtils;
 import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.FormValueRenderer;
-import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LinkRenderer;
+import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.LinkUtils;
+import org.apache.myfaces.trinidadinternal.ui.UINode;
+import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
 
 /**
  * @deprecated This class comes from the old Java 1.2 UIX codebase and should not be used anymore.
@@ -83,4 +86,79 @@
 
     return partialChangeScript;
   }
+
+  @Override
+  protected void renderAttributes(
+    UIXRenderingContext context,
+    UINode           node
+    ) throws IOException
+  { 
+    // For Non-JavaScript browsers, render an input element(type=submit) to 
+    // submit the page. Encode the name attribute with the parameter name 
+    // and value thus it would enable the browsers to include the name of 
+    // this element in its payLoad if it submits the page.
+    if (!supportsScripting(context))
+    {    
+      // render the id
+      renderID(context, node);
+      renderAttributesExceptID(context, node);
+      renderAttribute(context, "type", "submit");
+      String sourceParam = BaseLafUtils.getStringAttributeValue(
+                                        context, node, ID_ATTR);
+      String nameAttri =  XhtmlUtils.getEncodedParameter
+                                      (XhtmlConstants.SOURCE_PARAM)
+                          + XhtmlUtils.getEncodedParameter(sourceParam)
+                          + XhtmlUtils.getEncodedParameter
+                                      (XhtmlConstants.EVENT_PARAM)
+                          + SHOW_EVENT;
+      renderAttribute(context, "name", nameAttri);
+      renderAttribute(context, "value", getText(context,node));
+      String linkConverter = 
+              "border: none; background: inherit; text-decoration: underline;";
+      renderAttribute(context, "style", linkConverter);
+      if (isDisabled(context, node))
+      {  
+        renderAttribute(context, "disabled", Boolean.TRUE);
+      }
+    }
+    else
+    {
+      super.renderAttributes(context, node);
+    }
+  }
+
+  /**
+   * Returns the StyleClass to use to render this node.
+   */
+  @Override
+  protected Object getStyleClass(
+    UIXRenderingContext context,
+    UINode           node
+    )
+  {
+    // Handle CSS for Basic HTML browser separately since we are rendering   
+    // input element for Basic HTML browser instead of an anchor element
+    if (!supportsScripting(context) && 
+          Boolean.TRUE.equals(node.getAttributeValue(context, DISCLOSED_ATTR)))
+    {
+      return SkinSelectors.AF_SHOW_DETAIL_ITEM_SELECTED;
+    }
+    
+    String nodeStyleClass = 
+      (String)node.getAttributeValue(context, STYLE_CLASS_ATTR);
+    if (nodeStyleClass != null)
+      return nodeStyleClass;
+
+    String styleClass = null;
+
+    // We provide a default style class for links, as long
+    // as our parent hasn't explicitly disabled this.
+    if (!LinkUtils.isDefaultStyleClassDisabled(context))
+    {
+      styleClass = (isDisabled(context, node)) ? 
+                      LINK_DISABLED_STYLE_CLASS :
+                      LINK_STYLE_CLASS;
+    }
+    return styleClass;
+  }
 }

Modified: myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/resources/META-INF/adf/styles/minimal-pda.xss
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/resources/META-INF/adf/styles/minimal-pda.xss?rev=721170&r1=721169&r2=721170&view=diff
==============================================================================
--- myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/resources/META-INF/adf/styles/minimal-pda.xss (original)
+++ myfaces/trinidad/trunk_1.2.x/trinidad-impl/src/main/resources/META-INF/adf/styles/minimal-pda.xss Thu Nov 27 04:42:43 2008
@@ -420,4 +420,14 @@
       <property name="font-size">xx-small</property>    
     </style>    
   </styleSheet>    
+  
+  <styleSheet platforms="genericpda">
+  
+    <style selector="af|showDetailItem::selected">
+      <includeStyle name="AFDefaultBoldFont"/>
+      <includeStyle name="AFDarkForeground"/>
+    </style>
+    
+  </styleSheet>  
+  
 </styleSheetDocument>