diff --git a/.gitignore b/.gitignore
index 807a5ee..224d6ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,11 +2,9 @@
*.pot
*.pyc
local_settings.py
-.installed.cfg
-bin
-develop-eggs
dist
+build
downloads
-eggs
parts
src/*.egg-info
+.DS_Store
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..1360950
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,9 @@
+language: python
+python:
+ - "2.6"
+ - "2.7"
+install:
+ - pip install -r requirements.txt
+ - pip install -r requirements_test.txt
+script:
+ - python manage.py test --settings=idea.settings.test
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 43283fb..dd9e3f3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,20 +1,12 @@
-# Idea Box
-
-## Team members
-
-* CM Lubinski
-* David Kennedy
-* Jennifer Ehler
-* Jui Dai
-* Shashank Khandelwal
+## Public domain
-## Workflow
+The project is in the public domain within the United States, and
+copyright and related rights in the work worldwide are waived through
+the [CC0 1.0 Universal public domain dedication][CC0].
-1. Fork idea-box.
-2. Create a new feature with tests.
-3. Make a pull request.
+All contributions to this project will be released under the CC0
+dedication. By submitting a pull request, you are agreeing to comply
+with this waiver of copyright interest.
-## Public domain
+[CC0]: http://creativecommons.org/publicdomain/zero/1.0/
-The project is in the public domain, and all contributions to it will be
-released as such.
diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..6ca207e
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,122 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+ INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+ REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+ PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+ HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ v. rights protecting the extraction, dissemination, use and reuse of data
+ in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without
+ limitation any person's Copyright and Related Rights in the Work.
+ Further, Affirmer disclaims responsibility for obtaining any necessary
+ consents, permissions or other rights required for any use of the
+ Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
+
diff --git a/README.md b/README.md
index 64cf0a3..223f37e 100644
--- a/README.md
+++ b/README.md
@@ -1,52 +1,67 @@
-# Idea Collection
+# IdeaBox
-Collecting and surfacing ideas from everyone.
+[](https://travis-ci.org/cfpb/idea-box)
+
+IdeaBox is a Django app for collecting and surfacing ideas from users, in the vein of
+IdeaScale, IdeaX, and Django Voice. IdeaBox differs from these projects in its minimal,
+easily integrate-able interface. IdeaBox also takes a strong stance on transparency,
+such that ideas, votes, etc. are tied to specific users.
+
+## Features
+* Idea Submission
+* Tagging (via taggit)
+* Voting
+* Comments
+* Listing by trending, likes, and recently added
+* Archive/hide ideas
+* Customizable challenges for specific campaigns
+
+## Screen shot
+
+
## Requirements
-* django (1.4.3) - This is a django app, so you need django.
-* django-haystack (1.2.7) - A mapper between django models and search
-backends.
-* pysolr (3.0.3) - Library for communicating with solr.
-* django-taggit - A library for Tags within django
+* django (1.5.4) - This is a Django app, so you need Django.
+* django-taggit - A library for tags within Django
* mock - A library for creating mock objects for testing.
-* south - A library for schema and data migrations.
+* south - A library for schema and data migrations.
+* django-mptt - A library enabling nested/reply-to comments
+
+### Optional
+* [collab platform](http://github.com/cfpb/collab) - Installing IdeaBox as an app inside a collab platform provides several convenience features:
+ * Autocomplete when adding new tags (requires elasticsearch server)
+ * User can delete tags he/she created
+ * Email notifications
-* solr (and java) - A Search backend. Unfortunately, we currently require
-Solr (rather than another backend) because we need specific functionality
-that haystack doesn't give us direct access to. Eventually, we'll get a
-pull request to haystack which will reduce our solr requirement.
## Installation
-### Settings File
-Modify your settings file to add the following apps:
-* django.contrib.comments
-* haystack
-* idea
+* Use pip to install the dependencies listed above
+* If not using collab as the Django platform, you still need to install collab for `custom_comments` and `taggit`
-You will also need to configure haystack. See the haystack
-[documentation](http://django-haystack.readthedocs.org/en/v1.2.7/tutorial.html#configuration)
+```
+pip install git+https://github.com/cfpb/collab.git#egg=collab
+```
-If you'd prefer to take the quick route, add the following to your
-settings.py:
-```python
-HAYSTACK_SITECONF = 'search_sites'
-HAYSTACK_SEARCH_ENGINE = 'solr'
-HAYSTACK_SOLR_URL = 'http://localhost:8983/solr'
+### Settings File
+Modify your settings file to add the following to your `INSTALLED_APPS`:
+```
+'django.contrib.comments',
+'south',
+'mptt',
+'core.custom_comments',
+'core.taggit',
+'idea'
```
-If you are going that route, make sure that you have a search_sites.py
-module in the root of your project with something like the following:
+#### Optional: Django-taggit
-```python
-import haystack
-haystack.autodiscover()
-```
+If your project is already using [taggit](https://github.com/alex/django-taggit), you can use that instead of collab's taggit but you will lose some minor functionality. To use the generic taggit, replace `core.taggit` with `taggit` in the `INSTALLED_APPS` step above.
### Folder Structure
You will need to get the contents of the ```src/idea``` directory into
-your django project. The simplest way to do this might be a symbolic
+your Django project. The simplest way to do this might be a symbolic
link.
```
@@ -59,37 +74,23 @@ mydjango_project/
### URLs
-Add the idea.urls, haystack.urls, and comments.urls to you url.py. For
+Add the idea.urls and comments.urls to your url.py. For
example:
```python
+from mydjango_project import settings
+
if 'idea' in settings.INSTALLED_APPS and \
- 'django.contrib.comments' in settings.INSTALLED_APPS and\
- 'haystack' in settings.INSTALLED_APPS:
- urlpatterns.append(url(r'^haystack/', include('haystack.urls')))
+ 'django.contrib.comments' in settings.INSTALLED_APPS:
urlpatterns.append(url(r'^comments/',
include('django.contrib.comments.urls')))
- urlpatterns.append(url(r'^idea/', include('idea.urls')))
+ urlpatterns.append(url(r'^idea/', include('idea.urls', namespace='idea')))
```
-### Solr
-
-You will also need to modify your solr configs. Take a look at the
-configuration files included in the root's ```solr``` directory. For a
-complete (but poor) implementation,
-
-```bash
-$ wget http://mirror.reverse.net/pub/apache/lucene/solr/4.1.0/solr-4.1.0.tgz
-$ tar -xvzf solr-4.1.0.tgz
-$ cd solr-4.1.0/example/solr/collection1/conf/
-$ cp ~/idea/solr/* .
-$ cd ../../../
-$ java -jar start.jar &
-```
### Migrations
-From your project root, synchronize and migrate the new apps.
+From your project root, synchronize and migrate the new apps. Make sure to set your database settings.
```bash
$ python ./manage.py syncdb --noinput --migrate
@@ -104,3 +105,30 @@ If users in the system have a profile module specified our templates will use
this to link users to a profile page. This is specified through the
AUTH_PROFILE_MODULE setting. Your profile module will also have to specify a
get_absolute_url() method.
+
+### CSS
+
+The default CSS style for IdeaBox is not ready for production. This was done
+intentionally so that IdeaBox's style can match the style of the platform in
+which it resides (i.e. not everyone wants a green header). The simplest way to
+improve the styling is to source `src/idea/static/idea/css/sample_style.css`
+in the `css_files` block in the `/src/idea/templates/idea/idea-base.html` template:
+
+```
+{% block "css_files" %}
+ # ... existing code ...
+
+{% endblock %}
+```
+
+Ideally, your Django platform will provide styles that can be sourced in the
+`base.html` template described in the section above so IdeaBox can match the
+look and feel of your system.
+
+
+### Campaign Banner
+
+To create a challenge, use Django's administrative panel to add a Banner model object. The
+text field will be displayed at the right of the IdeaBox idea listing page. The banner
+will only be displayed between Start Date and End Date (or indefinitely after the Start
+Date if the End Date is empty.)
diff --git a/TERMS b/TERMS
deleted file mode 100644
index b136da2..0000000
--- a/TERMS
+++ /dev/null
@@ -1,8 +0,0 @@
-This software is released into the public domain. However, the authors would
-appreciate credit if this program or parts of it are used.
-
-Images
-
-Images originate from:
-Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome
-and are licensed under CC BY 3.0
diff --git a/TERMS.md b/TERMS.md
new file mode 100644
index 0000000..3456f28
--- /dev/null
+++ b/TERMS.md
@@ -0,0 +1,51 @@
+As a work of the United States Government, this package (excluding the
+exceptions below) is in the public domain within the United States.
+Additionally, we waive copyright and related rights in the work worldwide
+through the CC0 1.0 Universal public domain dedication.
+
+## CC0 1.0 Universal Summary
+
+This is a human-readable summary of the
+[Legal Code (read the full text)](http://creativecommons.org/publicdomain/zero/1.0/legalcode).
+
+### No Copyright
+
+The person who associated a work with this deed has dedicated the work to
+the public domain by waiving all of his or her rights to the work worldwide
+under copyright law, including all related and neighboring rights, to the
+extent allowed by law.
+
+You can copy, modify, distribute and perform the work, even for commercial
+purposes, all without asking permission. See Other Information below.
+
+### Other Information
+
+In no way are the patent or trademark rights of any person affected by CC0,
+nor are the rights that other persons may have in the work or in how the
+work is used, such as publicity or privacy rights.
+
+Unless expressly stated otherwise, the person who associated a work with
+this deed makes no warranties about the work, and disclaims liability for
+all uses of the work, to the fullest extent permitted by applicable law.
+When using or citing the work, you should not imply endorsement by the
+author or the affirmer.
+
+## Exceptions
+
+### Images
+
+Images originate from:
+Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome
+and are licensed under CC BY 3.0
+
+### Base Styles
+
+Much of base.css originates from:
+Fluid Baseline Grid v1.0.0
+https://github.com/thedayhascome/Fluid-Baseline-Grid
+Designed & Built by Josh Hopkins and 40 Horse, http://40horse.com
+Licensed under Unlicense, http://unlicense.org/
+
+### Selectize.js
+Selectize.js by Brian Reavis & Contributors - https://github.com/brianreavis/selectize.js
+Licensed under Apache version 2.0: http://www.apache.org/licenses/LICENSE-2.0
diff --git a/buildout.cfg b/buildout.cfg
deleted file mode 100644
index c4294b5..0000000
--- a/buildout.cfg
+++ /dev/null
@@ -1,23 +0,0 @@
-[buildout]
-parts = python django
-develop = .
-eggs = idea-collection
-
-[python]
-recipe = zc.recipe.egg
-interpreter = python
-eggs = ${buildout:eggs}
-
-[django]
-recipe = djangorecipe
-project = idea
-projectegg = idea
-settings = buildout.testsettings
-test = idea
-eggs = ${buildout:eggs}
- mock
- south
- django-taggit
- django-haystack
- pysolr
-
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..1a8eb70
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,160 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS =
+SPHINXBUILD = sphinx-build
+SPHINXAPI = sphinx-apidoc
+PAPER =
+BUILDDIR = build
+SOURCEDIR = source
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+ @echo "Please use \`make ' where is one of"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " singlehtml to make a single large HTML file"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " devhelp to make HTML files and a Devhelp project"
+ @echo " epub to make an epub"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
+ @echo " text to make text files"
+ @echo " man to make manual pages"
+ @echo " texinfo to make Texinfo files"
+ @echo " info to make Texinfo files and run them through makeinfo"
+ @echo " gettext to make PO message catalogs"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+ -rm -rf $(BUILDDIR)/*
+
+apifirst:
+ $(SPHINXAPI) -o $(SOURCEDIR)/api -H API -f ../src/idea
+ @echo
+ @echo "API documentation generated. The RST pages are in api."
+
+html: apifirst
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+ @echo
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/IdeaBox.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/IdeaBox.qhc"
+
+devhelp:
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+ @echo
+ @echo "Build finished."
+ @echo "To view the help file:"
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/IdeaBox"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/IdeaBox"
+ @echo "# devhelp"
+
+epub:
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+ @echo
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
+ "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo "Running LaTeX files through pdflatex..."
+ $(MAKE) -C $(BUILDDIR)/latex all-pdf
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+ @echo
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+ @echo
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo
+ @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+ @echo "Run \`make' in that directory to run these through makeinfo" \
+ "(use \`make info' here to do that automatically)."
+
+info:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo "Running Texinfo files through makeinfo..."
+ make -C $(BUILDDIR)/texinfo info
+ @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+ $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+ @echo
+ @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/doc/build/doctrees/api/idea.buildout.doctree b/doc/build/doctrees/api/idea.buildout.doctree
new file mode 100644
index 0000000..8ee47f4
Binary files /dev/null and b/doc/build/doctrees/api/idea.buildout.doctree differ
diff --git a/doc/build/doctrees/api/idea.doctree b/doc/build/doctrees/api/idea.doctree
new file mode 100644
index 0000000..0f23cb2
Binary files /dev/null and b/doc/build/doctrees/api/idea.doctree differ
diff --git a/doc/build/doctrees/api/idea.migrations.doctree b/doc/build/doctrees/api/idea.migrations.doctree
new file mode 100644
index 0000000..6ce2c34
Binary files /dev/null and b/doc/build/doctrees/api/idea.migrations.doctree differ
diff --git a/doc/build/doctrees/api/idea.tests.doctree b/doc/build/doctrees/api/idea.tests.doctree
new file mode 100644
index 0000000..066cf63
Binary files /dev/null and b/doc/build/doctrees/api/idea.tests.doctree differ
diff --git a/doc/build/doctrees/api/idea.utility.doctree b/doc/build/doctrees/api/idea.utility.doctree
new file mode 100644
index 0000000..b8b1227
Binary files /dev/null and b/doc/build/doctrees/api/idea.utility.doctree differ
diff --git a/doc/build/doctrees/api/modules.doctree b/doc/build/doctrees/api/modules.doctree
new file mode 100644
index 0000000..942a3df
Binary files /dev/null and b/doc/build/doctrees/api/modules.doctree differ
diff --git a/doc/build/doctrees/environment.pickle b/doc/build/doctrees/environment.pickle
new file mode 100644
index 0000000..76c80e7
Binary files /dev/null and b/doc/build/doctrees/environment.pickle differ
diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree
new file mode 100644
index 0000000..421390b
Binary files /dev/null and b/doc/build/doctrees/index.doctree differ
diff --git a/doc/build/html/.buildinfo b/doc/build/html/.buildinfo
new file mode 100644
index 0000000..0b17253
--- /dev/null
+++ b/doc/build/html/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 15c468fa0287c782ee63cde7f45b3ef5
+tags: fbb0d17656682115ca4d033fb2f83ba1
diff --git a/doc/build/html/_sources/api/idea.buildout.txt b/doc/build/html/_sources/api/idea.buildout.txt
new file mode 100644
index 0000000..bb7e3dd
--- /dev/null
+++ b/doc/build/html/_sources/api/idea.buildout.txt
@@ -0,0 +1,27 @@
+buildout Package
+================
+
+:mod:`search_sites` Module
+--------------------------
+
+.. automodule:: idea.buildout.search_sites
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`testsettings` Module
+--------------------------
+
+.. automodule:: idea.buildout.testsettings
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`urls` Module
+------------------
+
+.. automodule:: idea.buildout.urls
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
diff --git a/doc/build/html/_sources/api/idea.migrations.txt b/doc/build/html/_sources/api/idea.migrations.txt
new file mode 100644
index 0000000..c80e6e3
--- /dev/null
+++ b/doc/build/html/_sources/api/idea.migrations.txt
@@ -0,0 +1,67 @@
+migrations Package
+==================
+
+:mod:`0001_initial` Module
+--------------------------
+
+.. automodule:: idea.migrations.0001_initial
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0002_auto__del_field_comment_issue__add_field_comment_idea` Module
+------------------------------------------------------------------------
+
+.. automodule:: idea.migrations.0002_auto__del_field_comment_issue__add_field_comment_idea
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0003_auto__add_field_state_previous__chg_field_idea_text__chg_field_idea_ti` Module
+-----------------------------------------------------------------------------------------
+
+.. automodule:: idea.migrations.0003_auto__add_field_state_previous__chg_field_idea_text__chg_field_idea_ti
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0004_statuses` Module
+---------------------------
+
+.. automodule:: idea.migrations.0004_statuses
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0005_auto__chg_field_vote_time__chg_field_comment_time` Module
+--------------------------------------------------------------------
+
+.. automodule:: idea.migrations.0005_auto__chg_field_vote_time__chg_field_comment_time
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0006_auto__chg_field_vote_time__chg_field_comment_time__chg_field_idea_time` Module
+-----------------------------------------------------------------------------------------
+
+.. automodule:: idea.migrations.0006_auto__chg_field_vote_time__chg_field_comment_time__chg_field_idea_time
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0007_auto__del_comment__add_field_vote_vote` Module
+---------------------------------------------------------
+
+.. automodule:: idea.migrations.0007_auto__del_comment__add_field_vote_vote
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`0008_auto__add_banner` Module
+-----------------------------------
+
+.. automodule:: idea.migrations.0008_auto__add_banner
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
diff --git a/doc/build/html/_sources/api/idea.tests.txt b/doc/build/html/_sources/api/idea.tests.txt
new file mode 100644
index 0000000..e2d6b60
--- /dev/null
+++ b/doc/build/html/_sources/api/idea.tests.txt
@@ -0,0 +1,75 @@
+tests Package
+=============
+
+:mod:`tests` Package
+--------------------
+
+.. automodule:: idea.tests
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`addidea` Module
+---------------------
+
+.. automodule:: idea.tests.addidea
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`banner_tests` Module
+--------------------------
+
+.. automodule:: idea.tests.banner_tests
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`detailview` Module
+------------------------
+
+.. automodule:: idea.tests.detailview
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`ideaform` Module
+----------------------
+
+.. automodule:: idea.tests.ideaform
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`listview` Module
+----------------------
+
+.. automodule:: idea.tests.listview
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`search` Module
+--------------------
+
+.. automodule:: idea.tests.search
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`utils` Module
+-------------------
+
+.. automodule:: idea.tests.utils
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`voting` Module
+--------------------
+
+.. automodule:: idea.tests.voting
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
diff --git a/doc/build/html/_sources/api/idea.txt b/doc/build/html/_sources/api/idea.txt
new file mode 100644
index 0000000..216c833
--- /dev/null
+++ b/doc/build/html/_sources/api/idea.txt
@@ -0,0 +1,61 @@
+idea Package
+============
+
+:mod:`admin` Module
+-------------------
+
+.. automodule:: idea.admin
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`forms` Module
+-------------------
+
+.. automodule:: idea.forms
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`models` Module
+--------------------
+
+.. automodule:: idea.models
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`search_indexes` Module
+----------------------------
+
+.. automodule:: idea.search_indexes
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`urls` Module
+------------------
+
+.. automodule:: idea.urls
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+:mod:`views` Module
+-------------------
+
+.. automodule:: idea.views
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+Subpackages
+-----------
+
+.. toctree::
+
+ idea.buildout
+ idea.migrations
+ idea.tests
+ idea.utility
+
diff --git a/doc/build/html/_sources/api/idea.utility.txt b/doc/build/html/_sources/api/idea.utility.txt
new file mode 100644
index 0000000..cb33f77
--- /dev/null
+++ b/doc/build/html/_sources/api/idea.utility.txt
@@ -0,0 +1,11 @@
+utility Package
+===============
+
+:mod:`state_helper` Module
+--------------------------
+
+.. automodule:: idea.utility.state_helper
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
diff --git a/doc/build/html/_sources/api/modules.txt b/doc/build/html/_sources/api/modules.txt
new file mode 100644
index 0000000..c179ee1
--- /dev/null
+++ b/doc/build/html/_sources/api/modules.txt
@@ -0,0 +1,7 @@
+API
+===
+
+.. toctree::
+ :maxdepth: 4
+
+ idea
diff --git a/doc/build/html/_sources/index.txt b/doc/build/html/_sources/index.txt
new file mode 100644
index 0000000..1b7807a
--- /dev/null
+++ b/doc/build/html/_sources/index.txt
@@ -0,0 +1,24 @@
+.. Idea Box documentation master file, created by
+ sphinx-quickstart on Thu Feb 21 21:42:31 2013.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to Idea Box's documentation!
+====================================
+
+Contents:
+
+.. toctree::
+ :maxdepth: 2
+
+ api/modules
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/doc/build/html/_static/ajax-loader.gif b/doc/build/html/_static/ajax-loader.gif
new file mode 100644
index 0000000..61faf8c
Binary files /dev/null and b/doc/build/html/_static/ajax-loader.gif differ
diff --git a/doc/build/html/_static/basic.css b/doc/build/html/_static/basic.css
new file mode 100644
index 0000000..43e8baf
--- /dev/null
+++ b/doc/build/html/_static/basic.css
@@ -0,0 +1,540 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+ clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+ width: 100%;
+ font-size: 90%;
+}
+
+div.related h3 {
+ display: none;
+}
+
+div.related ul {
+ margin: 0;
+ padding: 0 0 0 10px;
+ list-style: none;
+}
+
+div.related li {
+ display: inline;
+}
+
+div.related li.right {
+ float: right;
+ margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+ padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+ float: left;
+ width: 230px;
+ margin-left: -100%;
+ font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+ list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+ margin-left: 20px;
+ list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+ margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+ width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+ width: 30px;
+}
+
+img {
+ border: 0;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+ margin: 10px 0 0 20px;
+ padding: 0;
+}
+
+ul.search li {
+ padding: 5px 0 5px 20px;
+ background-image: url(file.png);
+ background-repeat: no-repeat;
+ background-position: 0 7px;
+}
+
+ul.search li a {
+ font-weight: bold;
+}
+
+ul.search li div.context {
+ color: #888;
+ margin: 2px 0 0 30px;
+ text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+ font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+ width: 90%;
+}
+
+table.contentstable p.biglink {
+ line-height: 150%;
+}
+
+a.biglink {
+ font-size: 1.3em;
+}
+
+span.linkdescr {
+ font-style: italic;
+ padding-top: 5px;
+ font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+ width: 100%;
+}
+
+table.indextable td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+ height: 10px;
+}
+
+table.indextable tr.cap {
+ margin-top: 10px;
+ background-color: #f2f2f2;
+}
+
+img.toggler {
+ margin-right: 3px;
+ margin-top: 3px;
+ cursor: pointer;
+}
+
+div.modindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+ margin: 1em 0 1em 0;
+ padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+ visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.field-list ul {
+ padding-left: 1em;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+ clear: left;
+ float: left;
+ margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+ clear: right;
+ float: right;
+ margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left;
+}
+
+.align-center {
+ text-align: center;
+}
+
+.align-right {
+ text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+ margin: 0 0 0.5em 1em;
+ border: 1px solid #ddb;
+ padding: 7px 7px 0 7px;
+ background-color: #ffe;
+ width: 40%;
+ float: right;
+}
+
+p.sidebar-title {
+ font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+ border: 1px solid #ccc;
+ padding: 7px 7px 0 7px;
+ margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding: 7px;
+}
+
+div.admonition dt {
+ font-weight: bold;
+}
+
+div.admonition dl {
+ margin-bottom: 0;
+}
+
+p.admonition-title {
+ margin: 0px 10px 5px 0px;
+ font-weight: bold;
+}
+
+div.body p.centered {
+ text-align: center;
+ margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+ border: 0;
+ border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+ padding: 1px 8px 1px 5px;
+ border-top: 0;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px;
+}
+
+table.citation td {
+ border-bottom: none;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+ list-style: decimal;
+}
+
+ol.loweralpha {
+ list-style: lower-alpha;
+}
+
+ol.upperalpha {
+ list-style: upper-alpha;
+}
+
+ol.lowerroman {
+ list-style: lower-roman;
+}
+
+ol.upperroman {
+ list-style: upper-roman;
+}
+
+dl {
+ margin-bottom: 15px;
+}
+
+dd p {
+ margin-top: 0px;
+}
+
+dd ul, dd table {
+ margin-bottom: 10px;
+}
+
+dd {
+ margin-top: 3px;
+ margin-bottom: 10px;
+ margin-left: 30px;
+}
+
+dt:target, .highlighted {
+ background-color: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.refcount {
+ color: #060;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa;
+}
+
+.line-block {
+ display: block;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+
+.line-block .line-block {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+ font-family: sans-serif;
+}
+
+.accelerator {
+ text-decoration: underline;
+}
+
+.classifier {
+ font-style: oblique;
+}
+
+abbr, acronym {
+ border-bottom: dotted 1px;
+ cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+ overflow-y: hidden; /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+ padding: 5px 0px;
+ border: 0;
+ background-color: transparent;
+ color: #aaa;
+}
+
+table.highlighttable {
+ margin-left: 0.5em;
+}
+
+table.highlighttable td {
+ padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+tt.descclassname {
+ background-color: transparent;
+}
+
+tt.xref, a tt {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+ background-color: transparent;
+}
+
+.viewcode-link {
+ float: right;
+}
+
+.viewcode-back {
+ float: right;
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ margin: -1px -10px;
+ padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.body div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0 !important;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/doc/build/html/_static/comment-bright.png b/doc/build/html/_static/comment-bright.png
new file mode 100644
index 0000000..551517b
Binary files /dev/null and b/doc/build/html/_static/comment-bright.png differ
diff --git a/doc/build/html/_static/comment-close.png b/doc/build/html/_static/comment-close.png
new file mode 100644
index 0000000..09b54be
Binary files /dev/null and b/doc/build/html/_static/comment-close.png differ
diff --git a/doc/build/html/_static/comment.png b/doc/build/html/_static/comment.png
new file mode 100644
index 0000000..92feb52
Binary files /dev/null and b/doc/build/html/_static/comment.png differ
diff --git a/doc/build/html/_static/default.css b/doc/build/html/_static/default.css
new file mode 100644
index 0000000..21f3f50
--- /dev/null
+++ b/doc/build/html/_static/default.css
@@ -0,0 +1,256 @@
+/*
+ * default.css_t
+ * ~~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- default theme.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: sans-serif;
+ font-size: 100%;
+ background-color: #11303d;
+ color: #000;
+ margin: 0;
+ padding: 0;
+}
+
+div.document {
+ background-color: #1c4e63;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 230px;
+}
+
+div.body {
+ background-color: #ffffff;
+ color: #000000;
+ padding: 0 20px 30px 20px;
+}
+
+div.footer {
+ color: #ffffff;
+ width: 100%;
+ padding: 9px 0 9px 0;
+ text-align: center;
+ font-size: 75%;
+}
+
+div.footer a {
+ color: #ffffff;
+ text-decoration: underline;
+}
+
+div.related {
+ background-color: #133f52;
+ line-height: 30px;
+ color: #ffffff;
+}
+
+div.related a {
+ color: #ffffff;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+ font-family: 'Trebuchet MS', sans-serif;
+ color: #ffffff;
+ font-size: 1.4em;
+ font-weight: normal;
+ margin: 0;
+ padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+ color: #ffffff;
+}
+
+div.sphinxsidebar h4 {
+ font-family: 'Trebuchet MS', sans-serif;
+ color: #ffffff;
+ font-size: 1.3em;
+ font-weight: normal;
+ margin: 5px 0 0 0;
+ padding: 0;
+}
+
+div.sphinxsidebar p {
+ color: #ffffff;
+}
+
+div.sphinxsidebar p.topless {
+ margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px;
+ padding: 0;
+ color: #ffffff;
+}
+
+div.sphinxsidebar a {
+ color: #98dbcc;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #98dbcc;
+ font-family: sans-serif;
+ font-size: 1em;
+}
+
+
+
+/* -- hyperlink styles ------------------------------------------------------ */
+
+a {
+ color: #355f7c;
+ text-decoration: none;
+}
+
+a:visited {
+ color: #355f7c;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+
+
+/* -- body styles ----------------------------------------------------------- */
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: 'Trebuchet MS', sans-serif;
+ background-color: #f2f2f2;
+ font-weight: normal;
+ color: #20435c;
+ border-bottom: 1px solid #ccc;
+ margin: 20px -20px 10px -20px;
+ padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: #c60f0f;
+ font-size: 0.8em;
+ padding: 0 4px 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ background-color: #c60f0f;
+ color: white;
+}
+
+div.body p, div.body dd, div.body li {
+ text-align: justify;
+ line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+ display: inline;
+}
+
+div.admonition p {
+ margin-bottom: 5px;
+}
+
+div.admonition pre {
+ margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+ margin-bottom: 5px;
+}
+
+div.note {
+ background-color: #eee;
+ border: 1px solid #ccc;
+}
+
+div.seealso {
+ background-color: #ffc;
+ border: 1px solid #ff6;
+}
+
+div.topic {
+ background-color: #eee;
+}
+
+div.warning {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre {
+ padding: 5px;
+ background-color: #eeffcc;
+ color: #333333;
+ line-height: 120%;
+ border: 1px solid #ac9;
+ border-left: none;
+ border-right: none;
+}
+
+tt {
+ background-color: #ecf0f3;
+ padding: 0 1px 0 1px;
+ font-size: 0.95em;
+}
+
+th {
+ background-color: #ede;
+}
+
+.warning tt {
+ background: #efc2c2;
+}
+
+.note tt {
+ background: #d6d6d6;
+}
+
+.viewcode-back {
+ font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+ background-color: #f4debf;
+ border-top: 1px solid #ac9;
+ border-bottom: 1px solid #ac9;
+}
\ No newline at end of file
diff --git a/doc/build/html/_static/doctools.js b/doc/build/html/_static/doctools.js
new file mode 100644
index 0000000..d4619fd
--- /dev/null
+++ b/doc/build/html/_static/doctools.js
@@ -0,0 +1,247 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+ "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+ "profile", "profileEnd"];
+ window.console = {};
+ for (var i = 0; i < names.length; ++i)
+ window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+ return decodeURIComponent(x).replace(/\+/g, ' ');
+}
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+ if (typeof s == 'undefined')
+ s = document.location.search;
+ var parts = s.substr(s.indexOf('?') + 1).split('&');
+ var result = {};
+ for (var i = 0; i < parts.length; i++) {
+ var tmp = parts[i].split('=', 2);
+ var key = jQuery.urldecode(tmp[0]);
+ var value = jQuery.urldecode(tmp[1]);
+ if (key in result)
+ result[key].push(value);
+ else
+ result[key] = [value];
+ }
+ return result;
+};
+
+/**
+ * small function to check if an array contains
+ * a given item.
+ */
+jQuery.contains = function(arr, item) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] == item)
+ return true;
+ }
+ return false;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+ function highlight(node) {
+ if (node.nodeType == 3) {
+ var val = node.nodeValue;
+ var pos = val.toLowerCase().indexOf(text);
+ if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+ var span = document.createElement("span");
+ span.className = className;
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+ document.createTextNode(val.substr(pos + text.length)),
+ node.nextSibling));
+ node.nodeValue = val.substr(0, pos);
+ }
+ }
+ else if (!jQuery(node).is("button, select, textarea")) {
+ jQuery.each(node.childNodes, function() {
+ highlight(this);
+ });
+ }
+ }
+ return this.each(function() {
+ highlight(this);
+ });
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+ init : function() {
+ this.fixFirefoxAnchorBug();
+ this.highlightSearchWords();
+ this.initIndexTable();
+ },
+
+ /**
+ * i18n support
+ */
+ TRANSLATIONS : {},
+ PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+ LOCALE : 'unknown',
+
+ // gettext and ngettext don't access this so that the functions
+ // can safely bound to a different name (_ = Documentation.gettext)
+ gettext : function(string) {
+ var translated = Documentation.TRANSLATIONS[string];
+ if (typeof translated == 'undefined')
+ return string;
+ return (typeof translated == 'string') ? translated : translated[0];
+ },
+
+ ngettext : function(singular, plural, n) {
+ var translated = Documentation.TRANSLATIONS[singular];
+ if (typeof translated == 'undefined')
+ return (n == 1) ? singular : plural;
+ return translated[Documentation.PLURALEXPR(n)];
+ },
+
+ addTranslations : function(catalog) {
+ for (var key in catalog.messages)
+ this.TRANSLATIONS[key] = catalog.messages[key];
+ this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+ this.LOCALE = catalog.locale;
+ },
+
+ /**
+ * add context elements like header anchor links
+ */
+ addContextElements : function() {
+ $('div[id] > :header:first').each(function() {
+ $('\u00B6').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this headline')).
+ appendTo(this);
+ });
+ $('dt[id]').each(function() {
+ $('\u00B6').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this definition')).
+ appendTo(this);
+ });
+ },
+
+ /**
+ * workaround a firefox stupidity
+ */
+ fixFirefoxAnchorBug : function() {
+ if (document.location.hash && $.browser.mozilla)
+ window.setTimeout(function() {
+ document.location.href += '';
+ }, 10);
+ },
+
+ /**
+ * highlight the search words provided in the url in the text
+ */
+ highlightSearchWords : function() {
+ var params = $.getQueryParameters();
+ var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+ if (terms.length) {
+ var body = $('div.body');
+ window.setTimeout(function() {
+ $.each(terms, function() {
+ body.highlightText(this.toLowerCase(), 'highlighted');
+ });
+ }, 10);
+ $('