<!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 projects and libraries:

        <ol>
            <li>
                <a class="external" target="_blank" href="http://www.apache-extras.org">Apache Extras</a>
                provides a great hosting service for projects related to Apache
                software. See
                <a class="external" target="_blank" href="http://code.google.com/a/apache-extras.org/hosting/search?q=label:Click">here</a>
                for the projects related to Apache Click. You can also host your
                own Click related project at Apache Extras.
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/a/apache-extras.org/p/ajax4click/">Ajax4Click</a>
                provides common Ajax utilities for Click applications. features
                include error handling and processing of multiple DOM elements.
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/a/apache-extras.org/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/old/">http://www.dynarch.com/projects/calendar/old/</a>
            </li>
            <li>
                <a class="external" target="_blank" href="http://code.google.com/p/click-charts-enhanced/">Click Charts Enhanced</a>
                provides advanced Click chart components based on the <a rel="nofollow" class="external" target="_blank" href="http://www.jqplot.com/">jqPlot</a> jQuery plugin.
            </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/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/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>
            <a target='_blank' href='http://www.apache.org' title='Apache Software Foundation'>
            <img id="asf-logo" src="http://www.apache.org/images/asf-logo.gif" alt="Apache Software Foundation"/>
            </a>
            Copyright &copy; 2001-2013 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>

