<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!--
   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.
-->
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
        <meta name="Author" content="Malcolm Edgar"/>
        <meta name="description" lang="en" content="Apache Click Java web application framework"/>
        <meta name="keywords" lang="en" content="Apache Click, Click, Click Framework, Java, JEE, J2EE, web application framework, open source"/>
        <title>Apache Click</title>
        <link rel="stylesheet" type="text/css" href="../help.css"/>
        <style type="text/css">
            th { text-align: left; }
            td { vertical-align: top; white-space: nowrap; }
        </style>
    </head>
    <body>

        <h1>Apache Click Extensions</h1>

        There are a number of extension projects that provides extra features
        and components.

        <p/>
        Below is a list of third party contributions:

        <ol>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/clickclick/">ClickClick</a>
                is a community based extensions project providing many new
                components and seamless Ajax integration. 
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/click-jquery/">Click jQuery</a>
                is a community based project that aims to integrate Click with 
                <a rel="nofollow" class="external" target="_blank" href="http://jquery.com/">jQuery</a>
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/click-calendar/">Click Calendar</a>
                provides a DHTML popup Calendar component for Click. The Calendar component is
                based upon the JSCalendar library
                <a rel="nofollow" class="external" target="_blank" href="http://www.dynarch.com/projects/calendar/">http://www.dynarch.com/projects/calendar/</a>
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/click-charts/">Click Charts</a>
                provides common Chart components for Click. The Chart components
                are based upon the JavaScript library
                <a rel="nofollow" class="external" target="_blank" href="http://www.walterzorn.com">http://www.walterzorn.com</a>.
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/chainer/">Chainer</a>
                is a simple tool for generating JavaBean subclasses where
                methods can be chained. You can use Chainer to generate Control
                subclasses to enable method chaining.
            </li>
        </ol>

        If you have any questions or would like to contribute to these projects
        you can send an email to our <a href="click-online.html#mailing-lists">mailing list</a>.

        <!-- FOOTER -->
        <div id="footer">
            <hr/>
            <p>Copyright &copy; 2001-2010 Apache Software Foundation. Apache Click,
            Click, Apache, the Apache feather logo, and the Apache Click project logo are
            trademarks of The Apache Software Foundation.
            <a href="http://cayenne.apache.org/privacy-policy.html">Privacy policy.</a>
            </p>
        </div>
    </body>
</html>

