|wq.app|

`wq.app <https://wq.io/wq.app>`__ is a suite of Javascript modules and
related assets, created to facilitate the rapid deployment of
offline-cabable HTML5 mobile and desktop data collection apps for
**crowdsourcing**, **citizen science**, and **volunteered geographic
information**, as well as professional **field data collection**. wq.app
is the client component of the `wq framework <https://wq.io>`__, and can
be used with any REST service as a backend. In particular, when combined
with a Mustache-capable REST service like
`wq.db <https://wq.io/wq.db>`__, wq.app can be used to create
**responsive, progressively enhanced** websites / apps, that can
selectively render individual application screens `on the server or on
the client <https://wq.io/docs/templates>`__ depending on project needs,
network connectivity, and ``localStorage`` availability.

Getting Started
---------------

.. code:: bash

    pip3 install wq.app
    # Or, if using together with wq.db
    pip3 install wq

See `the documentation <https://wq.io/docs/setup>`__ for more
information.

Features
--------

wq.app's `JavaScript modules <https://wq.io/docs/app>`__ are built on `a
number of libraries <https://wq.io/docs/third-party>`__ including
`RequireJS <http://requirejs.org>`__, `jQuery
Mobile <http://jquerymobile.com>`__, `Leaflet <http://leafletjs.com>`__,
`d3 <http://d3js.org>`__, and
`Mustache.js <https://mustache.github.com/>`__. wq.app extends these
libraries with:

-  `wq/app.js <https://wq.io/docs/app-js>`__, a high-level application
   controller that combines **wq/store.js** and **wq/pages.js** into a
   full configuration-driven CRUD client (optimized for use with
   `wq.db <https://wq.io/wq.db>`__'s
   `app.py <https://wq.io/docs/app.py>`__)
-  `wq/chart.js <https://wq.io/docs/chart-js>`__, configurable d3-based
   reusable charts, including time series and boxplots
-  `wq/locate.js <https://wq.io/docs/locate-js>`__, utilities for
   requesting and displaying the user's location
-  `wq/map.js <https://wq.io/docs/map-js>`__, Leaflet integration for
   **wq/app.js** pages that contain geometry (loaded via GeoJSON)
-  `wq/pages.js <https://wq.io/docs/pages-js>`__, a PJAX-style pushState
   URL router, template renderer, and page injector
-  `wq/pandas.js <https://wq.io/docs/pandas-js>`__, a utility for
   loading and parsing CSV generated by Django REST Pandas.
-  `wq/store.js <https://wq.io/docs/store-js>`__, a robust
   ``localStorage``-cached JSON REST client (with a lightweight
   implementation of models / collections)
-  and a number of `other useful
   utilities <https://wq.io/docs/other-modules>`__

To facilitate compact deployment, wq.app provides a Python-based `build
process <https://wq.io/docs/build>`__ for compiling wq apps: inlining
templates, optimizing code (via
`r.js <https://github.com/jrburke/r.js>`__), and generating an
application cache manifest. wq.app also includes
`jquery-mobile.scss <https://wq.io/docs/jquery-mobile-scss-themes>`__, a
SASS/SCSS stylesheet for generating custom jQuery Mobile themes.

.. |wq.app| image:: https://raw.github.com/wq/wq/master/images/256/wq.app.png
   :target: https://wq.io/wq.app
