                          Apache Shindig Features

  What is it?
  -----------

  Shindig is a JavaScript container and implementations of the backend APIs
  and proxy required for hosting OpenSocial applications.

  This is the features component of Shindig.

  Documentation
  -------------

  The most up-to-date documentation can be found at http://shindig.apache.org

  Using features
  --------------

  You can automatically include new features into your shindig server by adding
  them to this directory. Features should exist in a self-contained directory
  with the following structure:

  features
    |_your-feature-name
     |_feature.xml
     |_code-to-run-inside-gadget.js
     |_code-to-run-inside-container.js

  The structure of feature.xml is as follows:
  TODO: link to xml schema for feature.xml

  <?xml version="1.0"?>
  <feature>
    <name>your-feature-name (required)</name>
    <dependency>any dependency you have (optional, may have multiple)</dependency>
    <gadget> (optional)
      <script src="code-to-run-inside-gadget.js"/> (optional, may have multiple,
          may use web resources as well but we strongly encourage bundling your
          javascript with the xml)
    </gadget>
    <container> (optional)
      <script src="code-to-run-inside-container.js"> (same as for <gadget>)
    </container>
    <all> (optional, to mean for both gadget and container)
      <script src="code-to-run-inside-either-gadget-or-container.js"> (same as for <gadget> or <container>)
      <api>
          optional, to export API in compiled JS for external usages and incremental-loading,
          via ExportJsProcessor.java and exportJs JS.
        <exports type="js">gadgets.rpc.call</exports>
            optional, the API to export, for two scenarios:
            1. the JS code internally can use obfuscated/property-renamed g.r.c() to reduce
               size, but external clients continue to use unobfuscated (exported-to-window)
               gadgets.rpc.call.
            2. incremental-loading of JS. rpc.js is loaded (gadgets.rpc.* is exported). Then,
               dynamic-height!rpc.js can be loaded without rpc (and its transitive dependencies)
               and it will use unobfuscated (or extern'ed) gadgets.rpc.
      </api>
    </all>
  </feature>

  Please always make sure that all files you provide are encoded as utf8.

  When adding new features, your javascript should conform to shindig javascript
  coding conventions. This means that you should not be producing new globals and
  your feature should be compatible with Caja.

  When committing a new feature, you should update the features.txt file by
  running the following script in a unix-like environment:

  ls -R1a features/**/*.xml > features/features.txt

  TODO: Instructions for regenerating features.txt for other operating system
  environments.

  Licensing
  ---------

  Please see the file called LICENSE.


  Shindig URLS
  ------------

  Home Page:          http://shindig.apache.org/
  Downloads:          http://shindig.apache.org/download/index.html
  Mailing Lists:      http://shindig.apache.org/mail-lists.html
  Source Code:        http://svn.apache.org/repos/asf/shindig
  Issue Tracking:     https://issues.apache.org/jira/browse/SHINDIG
  Wiki:               http://cwiki.apache.org/confluence/display/SHINDIG/
