<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    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.
     
-->
<document>
  <properties>
    <title>Release Notes</title>
  </properties>

  <body>
    <section name="Apache MyFaces Trinidad 1.0.3 Release Notes">
      <p>
        <ul>
          <li>
            <a href="#Overview">Overview</a>
          </li>
          <li>
            <a href="#Release Notes">Release Notes</a>
          </li>
          <li>
            <a href="#Supported Platforms">Supported Platforms</a>
          </li>
        </ul>
      </p>
      </section>

      <section name="Overview">
        <p>
       </p>
      </section>
      <section name="Release Notes">
<subsection name="Features">

<ul>
<li>Added tr:panelCaptionGroup component to render HTML fieldset/legend content groups.</li>
<li>A new addDomReplaceListener() method on the page Javascript
object lets a developer receive notification when DOM is
replaced by PPR.</li>
<li>A new "mode" attribute on tr:document and trh:html lets you force Trinidad to enable "quirks" mode or to a "strict" DTD.  By default, Trinidad still renders with a transitional DTD but with standards-mode rendering.  Note: "strict" mode does not currently change how Trinidad renders - it simply swaps the DTD.</li>
<li>The "toolbar" facet is now supported on showDetailItems in panelAccordion.</li>
<li>A new accessibility "profile" API has been added as a companion to the existing accessibility "mode".  The accessibility profile API provides support for finer-grained accessibility preferences than can be supported by a mode-based API.  The first two accessibility profile preferences are "high-contrast", for users who prefer high contrast styles/content, and "large-fonts", for users who prefer larger/scalable fonts.  The accessibility profile value can be specified/bound in trinidad-config.xml via the new &lt;accessibility-profile&gt; element.  Trinidad skinning has been enhanced to allow accessibility profile-specific styles/icons to be specified via within @accessibility-profile blocks.  Accessibility profile information can be accessed at runtime (eg. from within a Renderer) via the new RequestContext/RenderingContext.getAccessibilityProfile() APIs. </li>
</ul>

</subsection>

<subsection name="Changes from previous release">
<ul>
<li>In previous releases, @agent/@platform constrains in skin definitions were not applied to icons.  That is, icons which appeared within @agent/@platform objects were registered globally and were not constrained to any particular agent/platform.  This is no longer the case.  @agent/@platform constraints are now honored for both styles and icons, making it possible to define agent/platform-specific icons.
</li>
<li>In previous releases, when you change a skinning css file, the change is reflected 
in the running application on refresh. To aid in performance, this is now a configuration
option that defaults to false -- do not check for css file modifications.
The web.xml configuration parameter org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION 
is used. Set this to true if you want your skinning css file changes to be reflected
without stopping/starting the server.
</li>
<li>The style name for skinning the root of a panelAccordion has changed from "af|panelAccordion::container" to "af|panelAccordion".</li>
<li>The xOffset/yOffset attributes of panelPopup have been renamed to xoffset/yoffset.</li>
<li>A final decode method override has been added to CoreRender. This is to ensure that the client behaviors are correctly decoded in JSF 2. The method
  has been made final to ensure that it will be caused to avoid bugs. Any subclasses of CoreRenderer that override the decode method will need to
  switch to the new non-final method with the signature <code>protected void decode(FacesContext, UIComponent, FacesBean, String)</code>.</li>
</ul>
</subsection>

        
<subsection name="Bugs">
<ul>
</ul>
</subsection>

<subsection name="Improvements">
<ul>
<li>Partial-page rendering should now be much more efficient, as
many portions of the page that are not being rerendered can be
skipped entirely.
</li>
<li>UIXComponentBase.getClientId() now implements the same caching behavior that is provided by UIComponentBase.  The client id is computed and cached the first time that getClientId() is called.  The cached value is retained until any subsequent call to setId().  This caching behavior can result in a significant performance boost, particularly for views with large/deep component trees.  (See the <a href="devguide/configuration.html#org.apache.myfaces.trinidad.CLIENT_ID_CACHING">org.apache.myfaces.trinidad.CLIENT_ID_CACHING</a> system property for more information.)
</li>
</ul>
</subsection>
    
<subsection name="New Features">
<ul>
</ul>
</subsection>

<subsection name="Tasks">
<ul>
</ul>
</subsection>            

<subsection name="Tests">
<ul>
</ul>
</subsection>
<subsection name="Help">
        <p>
Please see the <a href="FAQ.html" >FAQ</a> for help.
        </p>
</subsection>
      </section>

<section name="Supported Platforms">


<p>Trinidad is currently supported on the following user agents.  We'd very
much like to add additional platforms to this list -  omission doesn't
mean it that it doesn't work, just that it hasn't been tested.
(NOTE: PDA support is definitely longer than just this list -
Blackberry support was recently added.  A separate table of 
PDA support should be added once that's been gathered.) </p>

<table summary="" border="1" cellspacing="0" cellpadding="5">
<!--
  <tr>
    <td colspan="2" rowspan="2"></td>
    <td align="center" colspan="6">Operating Systems</td>

  </tr>
-->
  <tr>
    <td>User Agents</td>

    <td>Windows</td>

    <td>Mac OS X</td>

    <td>Red Hat Linux</td>

    <td>Windows Mobile</td>

    <td>Palm OS</td>
  </tr>
  <tr>
    <td>Internet Explorer</td>
    <td align="center">6.0<span style="vertical-align:super;">*</span></td>
    <td align="center">-</td>
    <td align="center">-</td>

    <td align="center">2003+</td>

    <td align="center">-</td>

  </tr>

  <tr>
    <td>Mozilla</td>

    <td align="center">1.7.x</td>

    <td align="center">1.7.x</td>

    <td align="center">1.7.x</td>

    <td align="center">-</td>


    <td align="center">-</td>
  </tr>

  <tr>
    <td>Firefox</td>

    <td align="center">1.0.x</td>

    <td align="center">1.0.x</td>

    <td align="center">1.0.x</td>


    <td align="center">-</td>

    <td align="center">-</td>
  </tr>

  <tr>
    <td>Safari</td>


    <td align="center">-</td>

    <td align="center">1.3, 2.0<span style="vertical-align:super;">**</span></td>


    <td align="center">-</td>

    <td align="center">-</td>

    <td align="center">-</td>
  </tr>


  <tr>
    <td>WebPro (Mobile)</td>

    <td align="center">-</td>

    <td align="center">-</td>

    <td align="center">-</td>

    <td align="center">-</td>

    <td align="center">3.0</td>

  </tr>
</table>
<p>
<table>
<tr>
<td>*</td><td>Accessibility and BiDi is only supported on IE on Windows.</td>
</tr>
<tr>
<td>**</td><td>Apple bug fixes provided in Safari 1.3 patch 312.2 and Safari 2.0 patch 412.5 required.</td>
</tr>
</table>
</p>

</section>
  </body>
</document>
