diff --git a/.gitignore b/.gitignore index b903977..0fcf136 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,10 @@ - +.idea/ .DS_Store - # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] - # C extensions *.so - # Distribution / packaging .Python env/ @@ -25,17 +22,14 @@ var/ *.egg-info/ .installed.cfg *.egg - # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec - # Installer logs pip-log.txt pip-delete-this-directory.txt - # Unit test / coverage reports htmlcov/ .tox/ @@ -45,23 +39,62 @@ htmlcov/ nosetests.xml coverage.xml *,cover - # Translations *.mo *.pot - # Django stuff: *.log - # Sphinx documentation docs/_build/ - # PyBuilder target/ - # Downstream Project downloaded/ geoserver/ uploaded/ development.db development.db-journal +# PyCharm +.idea +venv +*.pyc +*.*~ +vagrant-fabric-lxc +django_project/media/images +visual_changelog.db +.vagrant +node_modules +id_dsa.pub +id_rsa.pub +docs/build +fabgis_resources +private.py +# Vim leftovers +# project specifc +django_project/core/settings/secret.py +xmlrunner +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos +# into it. +#PyCharm +# Virtual env +# Node +django_project/static +# Working data not intended to be versioned +data_for_import +scrap.html +.pycharm_helpers +.sudo_as_admin_successful +# Pg cluster for docker +deployment/pg +# Template for apt-cacher +# static and media dirs +deployment/static +deployment/media +deployment/docker/71-apt-cacher-ng +django_project/geonode +django_project/celerybeat-schedule +# local media +django_project/media +# OSX Crap +deployment/backups \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b94b02 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# Haitidata + +You should write some docs, it's good for the soul. + +# Docker installation + +## Install docker +This will install an Haitidata container + +Makes sure to have docker-compose installed +``` +sudo apt-get install python-pip +sudo pip install docker-compose +``` + +## Get project code +Clone the repo: +``` +git clone https://github.com/HaitiData/haitidata.git +``` + +## Run project +Run the docker container: +``` +cd deployment +make deploy +make update-migrations-localization: +``` + +then you can visit http://0.0.0.0:33300``` diff --git a/README.rst b/README.rst deleted file mode 100644 index 283d3e1..0000000 --- a/README.rst +++ /dev/null @@ -1,84 +0,0 @@ -Haitidata -======================== - -You should write some docs, it's good for the soul. - -Installation ------------- - -Install geonode with:: - - $ sudo add-apt-repository ppa:geonode/stable - - $ sudo apt-get update - - $ sudo apt-get install geonode - -Create a new template based on the geonode example project.:: - - $ django-admin startproject my_geonode --template=https://github.com/GeoNode/geonode-project/archive/2.6.zip -epy,rst - $ sudo pip install -e my_geonode - -.. note:: You should NOT use the name geonode for your project as it will conflict with the default geonode package name. - -Usage ------ - -Rename the local_settings.py.sample to local_settings.py and edit it's content by setting the SITEURL and SITENAME. - -Edit the file /etc/apache2/sites-available/geonode and change the following directive from: - - WSGIScriptAlias / /var/www/geonode/wsgi/geonode.wsgi - -to: - - WSGIScriptAlias / /path/to/my_geonode/my_geonode/wsgi.py - -To avoid having to grant apache permissions (i.e. www-data user and group) to your home dir where you likely setup the geonode-project; you may want to instead copy the wsgi.py file next to geonode.wsgi and replace the file name instead of the entire path. - - $ cp /path/to/my_geonode/my_geonode/wsgi.py /var/www/geonode/wsgi/wsgi.py - -Add the "Directory" directive for your folder like the following example: - - - - Order allow,deny - - Options Indexes FollowSymLinks - - Allow from all - - Require all granted - - IndexOptions FancyIndexing - - - -Restart apache:: - - $ sudo service apache2 restart - -Edit the templates in my_geonode/templates, the css and images to match your needs. - -In the my_geonode folder run:: - - $ python manage.py collectstatic - -Github Considerations ------------------------- - -While it is helpful to recommit your django project wrapper back to a distributed version control repository. -* It is also important to remember that production instances will store security information in the local_settings.py -* Admin/Devs should always remember to exclude this file in the .gitignore file in the same folder as the .git:: - - $ nano .gitignore - - /{project}/local_settings.py - -save, make sure the file is also removed from git cache:: - - $ git rm -f --cache //local_settings.py - - $ git status - -confirm the file is no longer staged for the next commit or that if it is as "removed" diff --git a/deployment/Makefile b/deployment/Makefile new file mode 100644 index 0000000..eed39b6 --- /dev/null +++ b/deployment/Makefile @@ -0,0 +1,386 @@ +PROJECT_ID := haitidata +PRODUCTION_HOST := haitidata.com + +SHELL := /bin/bash + +# ---------------------------------------------------------------------------- +# P R O D U C T I O N C O M M A N D S +# ---------------------------------------------------------------------------- +fresh-web: build permissions web + +# Use this for fresh build (it will restore with empty stable database) +fresh-deploy: fresh-web + @docker exec -t -i $(PROJECT_ID)-db su - postgres -c "dropdb gis" + @docker exec -t -i $(PROJECT_ID)-db su - postgres -c "createdb -O docker -T template_postgis gis" + @docker exec -t -i $(PROJECT_ID)-db pg_restore /fresh-backups/fresh-database.dmp | docker exec -i $(PROJECT_ID)-db su - postgres -c "psql gis" + + +default: web +run: build permissions web migrate collectstatic + +deploy: run + @echo + @echo "------------------------------------------------------------------" + @echo "Bringing up fresh instance " + @echo "You can access it on http://localhost:63300" + @echo "------------------------------------------------------------------" + +build: + @echo + @echo "------------------------------------------------------------------" + @echo "Building in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) build uwsgi + @docker-compose -p $(PROJECT_ID) build uwsgi-ephemeral + + +web: + @echo + @echo "------------------------------------------------------------------" + @echo "Running in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) up -d web + @docker-compose -p $(PROJECT_ID) up -d uwsgi-ephemeral + @# Dont confuse this with the dbbackup make command below + @# This one runs the postgis-backup cron container + @# We add --no-recreate so that it does not destroy & recreate the db container + @docker-compose -p $(PROJECT_ID) up --no-recreate --no-deps -d dbbackups + +permissions: + # Probably we want something more granular here.... + # Your sudo password will be needed to set the file permissions + # on logs, media, static and pg dirs + @if [ ! -d "logs" ]; then mkdir logs; fi + @if [ ! -d "media" ]; then mkdir media; fi + @if [ ! -d "static" ]; then mkdir static; fi + @if [ ! -d "backups" ]; then mkdir backups; fi + @if [ -d "logs" ]; then sudo chmod -R a+rwx logs; fi + @if [ -d "media" ]; then sudo chmod -R a+rwx media; fi + @if [ -d "static" ]; then sudo chmod -R a+rwx static; fi + @if [ -d "backups" ]; then sudo chmod -R a+rwx backups; fi + +db: + @echo + @echo "------------------------------------------------------------------" + @echo "Running db in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) up -d db + +nginx: + @echo + @echo "------------------------------------------------------------------" + @echo "Running nginx in production mode" + @echo "Normally you should use this only for testing" + @echo "In a production environment you will typically use nginx running" + @echo "on the host rather if you have a multi-site host." + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) up -d nginx + @echo "Site should now be available at http://localhost" + +migrate: + @echo + @echo "------------------------------------------------------------------" + @echo "Running migrate static in production mode" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)_uwsgi-ephemeral_1 /bin/bash -c "\ + python manage.py migrate" + +update-migrations: + @echo + @echo "------------------------------------------------------------------" + @echo "Running update migrations in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) run uwsgi-ephemeral python manage.py makemigrations + + +update-migrations-localization: + @echo + @echo "------------------------------------------------------------------" + @echo "Running update migrations in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) run uwsgi bash -c "python manage.py makemigrations && python manage.py migrate" + +collectstatic: + @echo + @echo "------------------------------------------------------------------" + @echo "Collecting static in production mode" + @echo "------------------------------------------------------------------" + #We need to run collect static in the same context as the running + # uwsgi-ephemeral container it seems so I use docker exec here + # no -it flag so we can run over remote shell + @docker-compose -p $(PROJECT_ID) run uwsgi-ephemeral python manage.py collectstatic --noinput + +reload: + @echo + @echo "------------------------------------------------------------------" + @echo "Reload django project in production mode" + @echo "------------------------------------------------------------------" + # no -it flag so we can run over remote shell + @docker exec $(PROJECT_ID)-uwsgi uwsgi --reload /tmp/django.pid + +kill: + @echo + @echo "------------------------------------------------------------------" + @echo "Killing in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) kill + +kill-uwsgi: + @echo + @echo "------------------------------------------------------------------" + @echo "Killing in uwsgi production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) kill uwsgi + +kill-uwsgi-ephemeral: + @echo + @echo "------------------------------------------------------------------" + @echo "Killing in uwsgi production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) kill uwsgi-ephemeral + +rm: dbbackup rm-only + + +rm-only: kill + @echo + @echo "------------------------------------------------------------------" + @echo "Removing production instance!!! " + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) rm + +logs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing uwsgi logs in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) logs uwsgi + +dblogs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing db logs in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) logs db + +nginxlogs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing nginx logs in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) logs web + +shell: + @echo + @echo "------------------------------------------------------------------" + @echo "Shelling in in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) run uwsgi-ephemeral /bin/bash + +superuser: + @echo + @echo "------------------------------------------------------------------" + @echo "Creating a superuser in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) run uwsgi-ephemeral python manage.py createsuperuser + +reviewaccess: + @echo + @echo "------------------------------------------------------------------" + @echo "Creating review permissions in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) run uwsgi-ephemeral python manage.py create_review_permissions + +dbbash: + @echo + @echo "------------------------------------------------------------------" + @echo "Bashing in to production database" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-db /bin/bash + +dbsnapshot: + @echo + @echo "------------------------------------------------------------------" + @echo "Grab a quick snapshot of the database and place in the host filesystem" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-db /bin/bash -c "PGPASSWORD=docker pg_dump -Fc -h localhost -U docker -f /tmp/$(PROJECT_ID)-snapshot.dmp gis" + @docker cp $(PROJECT_ID)-db:/tmp/$(PROJECT_ID)-snapshot.dmp . + @docker exec -t -i $(PROJECT_ID)-db /bin/bash -c "rm /tmp/$(PROJECT_ID)-snapshot.dmp" + @ls -lahtr *.dmp + +dbschema: + @echo + @echo "------------------------------------------------------------------" + @echo "Print the database schema to stdio" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-db /bin/bash -c "PGPASSWORD=docker pg_dump -s -h localhost -U docker gis" + +dbshell: + @echo + @echo "------------------------------------------------------------------" + @echo "Shelling in in production database" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-db psql -U docker -h localhost gis + +dbrestore: + @echo + @echo "------------------------------------------------------------------" + @echo "Restore dump from backups/latest.dmp in production mode" + @echo "------------------------------------------------------------------" + @# - prefix causes command to continue even if it fails + -@docker exec -t -i $(PROJECT_ID)-db su - postgres -c "dropdb gis" + @docker exec -t -i $(PROJECT_ID)-db su - postgres -c "createdb -O docker -T template_postgis gis" + @docker exec -t -i $(PROJECT_ID)-db pg_restore /backups/latest.dmp | docker exec -i $(PROJECT_ID)-db su - postgres -c "psql gis" + +dbbackup: + @echo + @echo "------------------------------------------------------------------" + @echo "Create `date +%d-%B-%Y`.dmp in production mode" + @echo "Warning: backups/latest.dmp will be replaced with a symlink to " + @echo "the new backup." + @echo "------------------------------------------------------------------" + @# - prefix causes command to continue even if it fails + @# Explicitly don't use -it so we can call this make target over a remote ssh session + @docker exec $(PROJECT_ID)-db-backups /backups.sh + @docker exec $(PROJECT_ID)-db-backups cat /var/log/cron.log | tail -2 | head -1 | awk '{print $4}' + -@if [ -f "backups/latest.dmp" ]; then rm backups/latest.dmp; fi + # backups is intentionally missing from front of first clause below otherwise symlink comes + # out with wrong path... + @ln -s `date +%Y`/`date +%B`/PG_$(PROJECT_ID)_gis.`date +%d-%B-%Y`.dmp backups/latest.dmp + @echo "Backup should be at: backups/`date +%Y`/`date +%B`/PG_$(PROJECT_ID)_gis.`date +%d-%B-%Y`.dmp" + +sentry: + @echo + @echo "--------------------------" + @echo "Running sentry production mode" + @echo "--------------------------" + @docker-compose -p $(PROJECT_ID) up -d sentry + +maillogs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing smtp logs in production mode" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-smtp tail -f /var/log/mail.log + +mailerrorlogs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing smtp error logs in production mode" + @echo "------------------------------------------------------------------" + @docker exec -t -i $(PROJECT_ID)-smtp tail -f /var/log/mail.err + +mediasync: + @echo + @echo "------------------------------------------------------------------" + @echo "Syncing media files and secret.py from live server" + @echo "------------------------------------------------------------------" + @rsync -av --progress $(PRODUCTION_HOST):/home/web/haitidata/deployment/media/ media + @rsync -av --progress $(PRODUCTION_HOST):/home/web/haitidata/django_project/core/settings/secret.py ../django_project/core/settings/ + +dbsync: + @echo + @echo "------------------------------------------------------------------" + @echo "Syncing database files from live server" + @echo "------------------------------------------------------------------" + -@ssh $(PRODUCTION_HOST) "cd /home/web/haitidata/deployment; make dbbackup" + @rsync -av --progress $(PRODUCTION_HOST):/home/web/haitidata/deployment/backups/ backups + +create-machine: + @echo + @echo "------------------------------------------------------------------" + @echo "Creating a docker machine." + @echo "------------------------------------------------------------------" + @docker-machine create -d virtualbox $(PROJECT_ID) + +enable-machine: + @echo + @echo "------------------------------------------------------------------" + @echo "Enabling docker machine." + @echo "------------------------------------------------------------------" + @echo "eval \"$(docker-machine env mezzanine)\"" + +create-workspace: + @echo + @echo "------------------------------------------------------------------" + @echo "Create geoserver workspace." + @echo "------------------------------------------------------------------" + @curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d "geonodetrue" http://localhost:33308/geoserver/rest/workspaces + +# ---------------------------------------------------------------------------- +# DEVELOPMENT C O M M A N D S +# --no-deps will attach to prod deps if running +# after running you will have ssh and web ports open (see dockerfile for no's) +# and you can set your pycharm to use the python in the container +# Note that pycharm will copy in resources to the /root/ user folder +# for pydevd etc. If they dont get copied, restart pycharm... +# ---------------------------------------------------------------------------- + +devweb: db + @echo + @echo "------------------------------------------------------------------" + @echo "Running in DEVELOPMENT mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) up --no-deps -d devweb + + +build-devweb: db + @echo + @echo "------------------------------------------------------------------" + @echo "Building devweb" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) build devweb + + +# --------------- help -------------------------------- + +help: + @echo "* **build** - builds all required containers." + @echo "* **build-devweb** - build the development container. See [development notes](README-dev.md)." + @echo "* **collectstatic** - run the django collectstatic command." + @echo "* **create-machine** ." + @echo "* **db** - build and run the db container." + @echo "* **dbbackup** - make a snapshot of the database, saving it to deployments/backups/YYYY/MM/project-DDMMYYYY.dmp. It also creates a symlink to backups/latest.dmp for the latest backup." + @echo "* **dbbash** - open a bash shell inside the database container." + @echo "* **dblogs** - view the database logs." + @echo "* **dbrestore** - restore deployment/backups/latest.dmp over the active database. Will delete any existing data in your database and replace with the restore, so **use with caution**." + @echo "* **dbschema** - dump the current db schema (without data) to stdio. Useful if you want to compare changes between instances." + @echo "* **dbshell** - get a psql prompt into the db container. " + @echo "* **dbsnapshot** - as above but makes the backup as deployment/snapshot.smp - replacing any pre-existing snapshot." + @echo "* **dbsync** - use this from a development or offsite machine. It will rsync all database backups from deployment/backups to your offsite machine." + @echo "* **default** ." + @echo "* **deploy** ." + @echo "* **devweb** - create an ssh container derived from uwsgi that can be used as a remote interpreter for PyCharm. See [development notes](README-dev.md)." + @echo "* **enable-machine** - " + @echo "* **kill** - kills all running containers. Does not remove them." + @echo "* **logs** - view the logs of all running containers. Note that you can also view individual logs in the deployment/logs directory." + @echo "* **mailerrorlogs** - View the error logs from the mail server." + @echo "* **maillogs** - view the transaction logs from the mail server." + @echo "* **mediasync** - use this from a development or offsite machine. It will rsync all media backups from deployment/media to your offsite machine." + @echo "* **migrate** - run any pending migrations. " + @echo "* **nginx** - builds and runs the nginx container." + @echo "* **nginxlogs** - view just the nginx activity logs." + @echo "* **permissions** - Update the permissions of shared volumes. Note this will destroy any existing permissions you have in place." + @echo "* **reload** - reload the uwsgi process. Useful when you need django to pick up any changes you may have deployed." + @echo "* **rm** - remove all containers." + @echo "* **rm-only** - remove any containers without trying to kill them first. " + @echo "* **run** - builds and runs the complete orchestrated set of containers." + @echo "* **sentry** - **currently not working I think.** The idea is to spin up a sentry instance together with your app for fault reporting." + @echo "* **shell** - open a bash shell in the uwsgi (where django runs) container." + @echo "* **superuser** - create a django superuser account." + @echo "* **update-migrations** - freshen all migration definitions to match the current code base." + @echo "* **web** - same as **run** - runs the production site." + +worker: + @echo + @echo "------------------------------------------------------------------" + @echo "Running worker production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) up -d worker + +workerlogs: + @echo + @echo "------------------------------------------------------------------" + @echo "Showing celery worker logs in production mode" + @echo "------------------------------------------------------------------" + @docker-compose -p $(PROJECT_ID) logs worker diff --git a/deployment/README-docker.md b/deployment/README-docker.md new file mode 100644 index 0000000..380f58b --- /dev/null +++ b/deployment/README-docker.md @@ -0,0 +1,99 @@ +# Deploying with docker + +**Note:** This documentation is intentionally generic so that it can +be copy-pasted between projects - do not put project specific details here. + +This document explains how to do various sysadmin related tasks when your +site has been deployed under docker. These deployment modes are supported: + +* **production**: no debug etc is enabled, has its own discrete database. Configure + your production environment in core.settings.prod_docker - this + DJANGO_SETTINGS_MODULE is used when running in production mode. +* **staging**: Configure your staging environment in core.settings.staging_docker - + this DJANGO_SETTINGS_MODULE is used when running in production mode. + +# Build your docker images and run them + +## Production + +You can simply run the provided script and it will build and deploy the docker +images for you in **production mode**. + +``` +cd deployment +# allow pg volume to be written to +sudo chmod -R a+rwX pg/postgres_data/ +make deploy +sudo chmod -R a+rwX static +``` + +Now point your browser at the ip of the web container on port 8080 or to the +host port mapping as defined in the fig.yml file. + + +To make a superuser account do: + +``` +make shell +python manage.py createsuperuser +exit +``` + +## Staging + +The procedure is exactly the same as production, but you should preceed +each command with 'staging' e.g. ``make staging-deploy``. + +**Note:** VERY IMPORTANT - for staging deployment you should use a **separate +git checkout** from the production checkout as the code from the git checkout +is shared into the source tree. + +## Using make + +The following key make commands are provided for production: + +* **build** - build production containers +* **run** - builds then runs db and uwsgi services +* **collectstatic** - collect static in production instance +* **migrate** - run django migrations in production instance + +Additional make commands are provided in the Makefile - please see there +for details. + +#### Arbitrary commands + +Running arbitrary management commands is easy + + +## Setup nginx reverse proxy + +You should create a new nginx virtual host - please see +``*-nginx.conf`` in the deployment directory for examples. There is +one provided for production and one for staging. + +Simply add the example file (renaming them as needed) to your +``/etc/nginx/sites-enabled/`` directory and then modify the contents to +match your local filesystem paths. Then use + +``` +sudo nginx -t +``` + +To verify that your configuration is correct and then reload / restart nginx +e.g. + +``` +sudo /etc/init.d/nginx restart +``` + + +### Managing containers + +Please refer to the general [fig documentation](http://www.fig.sh/cli.hyml) +for further notes on how to manage the infrastructure using fig. + +# Configuration options + +You can configure the base port used and various other options like the +image organisation namespace and postgis user/pass by editing the ``fig*.yml`` +files. diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml new file mode 100644 index 0000000..4b300eb --- /dev/null +++ b/deployment/docker-compose.yml @@ -0,0 +1,197 @@ +# +# Production server with UWSGI configured to run on port 8080 +# +# docker-compose build +# docker-compose up -d web +# +# See accompanying Make commands for easy collectstatic etc. + +rabbitmq: + image: library/rabbitmq + hostname: rabbitmq + environment: + - RABBIT_PASSWORD=rabbit_test_password + - USER=rabbit_user + - RABBITMQ_NODENAME=rabbit + + +smtp: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-smtp + image: catatnight/postfix + hostname: postfix + environment: + # You could change this to something more suitable + - maildomain=kartoza.com + - smtp_user=noreply:docker + restart: always + +db: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-db + image: kartoza/postgis:9.4-2.1 + volumes: + - ./pg/postgres_data:/var/lib/postgresql + - ./backups:/backups + - ./fresh-backups:/fresh-backups + environment: + - USERNAME=docker + - PASS=docker + restart: always + ports: + - "33305:5432" + +uwsgi-base: + # Note you cannot scale if you use conteiner_name + build: docker + hostname: uwsgi + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - GEOSERVER_PUBLIC_LOCATION=http://0.0.0.0:33300/api/geoserver/ + # Set your locale - you need to ensure this is created in Dockerfile too... + - LC_ALL=en_ZA.UTF-8 + volumes: + - ../django_project:/home/web/django_project + - ./static:/home/web/static:rw + - ./media:/home/web/media:rw + - ./reports:/home/web/reports + - ./logs:/var/log/ + user: root + +uwsgi-ephemeral: + extends: uwsgi-base + links: + - smtp:smtp + - db:db + user: root + restart: on-failure:5 + +uwsgi: + # Note you cannot scale if you use conteiner_name + extends: uwsgi-base + container_name: haitidata-uwsgi + links: + - smtp:smtp + - db:db + - geoserver:geoserver + restart: always + +dbbackups: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-db-backups + image: kartoza/pg-backup:9.4 + hostname: pg-backups + volumes: + - ./backups:/backups + links: + - db:db + environment: + # take care to let the project name below match that + # declared in the top of the makefile + - DUMPPREFIX=PG_haiti + # These are all defaults anyway, but setting explicitly in + # case we ever want to ever use different credentials + - PGUSER=docker + - PGPASSWORD=docker + - PGPORT=5432 + - PGHOST=db + - PGDATABASE=gis + restart: always + +# This is normally the main entry point for a production server +web: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-web + image: nginx + hostname: nginx + volumes: + - ./sites-enabled:/etc/nginx/conf.d:ro + # I dont use volumes_from as I want to use the ro modifier + - ./static:/home/web/static:ro + - ./media:/home/web/media:ro + - ./logs:/var/log/nginx + # - /etc/letsencrypt:/etc/letsencrypt + - ./webroot-path:/home/web/webroot-path + links: + - uwsgi:uwsgi + - geoserver:geoserver + ports: + - "33300:8080" + restart: always + +# This is the entry point for a development server. +# Run with --no-deps to run attached to the services +# from produ environment if wanted +devweb: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-dev-web + build: docker + dockerfile: Dockerfile-dev + hostname: haitidata-dev-web + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - PYTHONPATH=/home/web/django_project + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - GEOSERVER_PUBLIC_LOCATION=http://0.0.0.0:33303/api/geoserver/ + volumes: + - ../django_project:/home/web/django_project + - ./static:/home/web/static + - ./media:/home/web/media + - ./reports:/home/web/reports + - ./logs:/var/log/ + links: + - smtp:smtp + - db:db + - rabbitmq:rabbitmq + - geoserver:geoserver + ports: + # for django test server + - "33303:8080" + # for ssh + - "33302:22" + +worker: + build: docker + hostname: worker + command: celery worker -A config.celery -l info --beat + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - DATABASE_QGIS_HOST=db_gis + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - C_FORCE_ROOT=true + volumes: + - ../django_project:/home/web/django_project + - ./static:/home/web/static + - ./media:/home/web/media + - ./reports:/home/web/reports + - ./logs:/var/log/ + links: + - smtp:smtp + - db:db + - rabbitmq:rabbitmq + restart: on-failure:5 + +geoserver: + image: kartoza/geoserver + container_name: haitidata-geoserver + ports: + - "33308:8080" diff --git a/deployment/docker/71-apt-cacher-ng.template b/deployment/docker/71-apt-cacher-ng.template new file mode 100644 index 0000000..de5127d --- /dev/null +++ b/deployment/docker/71-apt-cacher-ng.template @@ -0,0 +1,4 @@ +#Acquire::http { Proxy "http://192.168.0.106:3142"; }; +#Acquire::http { Proxy "http://192.168.2.9:3142"; }; +#Acquire::http { Proxy "http://192.168.0.131:3142"; }; +#Acquire::http { Proxy "http://192.168.1.13:3142"; }; diff --git a/deployment/docker/Dockerfile b/deployment/docker/Dockerfile new file mode 100644 index 0000000..0f87b64 --- /dev/null +++ b/deployment/docker/Dockerfile @@ -0,0 +1,60 @@ +#--------- Generic stuff all our Dockerfiles should start with so we get caching ------------ +# Note this base image is based on debian +FROM kartoza/django-base +MAINTAINER Muhammad Anis + +#RUN ln -s /bin/true /sbin/initctl + +# Use local cached debs from host (saves your bandwidth!) +# Change ip below to that of your apt-cacher-ng host +# Or comment this line out if you do not with to use caching +ADD 71-apt-cacher-ng /etc/apt/apt.conf.d/71-apt-cacher-ng + +# Pandoc needed to generate rst dumps, uic compressor needed for django-pipeline +RUN apt-get update -y + +# Set the locale - change to your preferred locale ... We use South African english +# We do this as cartridge (ecommerce platform for mezzanine) relies on +# the locale to set the correct number of decimal places for the MoneyField +RUN echo "deb http://ftp.debian.org/debian jessie main" >> /etc/apt/sources.list.d/gdal.list +RUN apt-get update + +RUN apt-get install locales && \ + echo "en_ZA.UTF-8 UTF-8" >> /etc/locale.gen && \ + locale-gen en_ZA.UTF-8 +RUN apt-get install libgdal-dev -y +ENV LANG en_ZA.UTF-8 +ENV LANGUAGE en_ZA:en +ENV LC_ALL en_ZA.UTF-8 +ENV CPLUS_INCLUDE_PATH /usr/include/gdal +ENV C_INCLUDE_PATH /usr/include/gdal +ENV TEST a + +ADD REQUIREMENTS.txt /REQUIREMENTS.txt +RUN pip install -r /REQUIREMENTS.txt +RUN pip uninstall -y South +RUN pip install uwsgi + +RUN pip uninstall geonode-dialogos -y +RUN pip install git+https://github.com/meomancer/geonode-dialogos.git + +RUN pip uninstall geonode-agon-ratings -y +RUN pip install git+https://github.com/euclidian/custom-agon-ratings + +RUN pip uninstall Django -y +RUN pip install Django==1.8.18 + +RUN pip uninstall django-oauth-toolkit -y +RUN pip install django-oauth-toolkit==0.12.0 + +RUN pip uninstall django-user-accounts -y +RUN pip install git+https://github.com/GeoNode/geonode-user-accounts@invite-user + +RUN apt-get install gdal-bin +# Open port 8080 as we will be running our uwsgi socket on that +EXPOSE 8080 + +#USER www-data + +WORKDIR /home/web/django_project +CMD ["uwsgi", "--env", "LC_ALL=en_ZA.UTF-8", "--ini", "/uwsgi.conf"] diff --git a/deployment/docker/Dockerfile-cloud b/deployment/docker/Dockerfile-cloud new file mode 100644 index 0000000..75e7256 --- /dev/null +++ b/deployment/docker/Dockerfile-cloud @@ -0,0 +1,68 @@ +#--------- Generic stuff all our Dockerfiles should start with so we get caching ------------ +# Note this base image is based on debian +FROM kartoza/django-base +MAINTAINER Muhammad Anis + +#RUN ln -s /bin/true /sbin/initctl + +# Use local cached debs from host (saves your bandwidth!) +# Change ip below to that of your apt-cacher-ng host +# Or comment this line out if you do not with to use caching +# ADD 71-apt-cacher-ng /etc/apt/apt.conf.d/71-apt-cacher-ng + +# Pandoc needed to generate rst dumps, uic compressor needed for django-pipeline +RUN apt-get update -y + +# Set the locale - change to your preferred locale ... We use South African english +# We do this as cartridge (ecommerce platform for mezzanine) relies on +# the locale to set the correct number of decimal places for the MoneyField +RUN echo "deb http://ftp.debian.org/debian jessie main" >> /etc/apt/sources.list.d/gdal.list +RUN apt-get update + +RUN apt-get install locales && \ + echo "en_ZA.UTF-8 UTF-8" >> /etc/locale.gen && \ + locale-gen en_ZA.UTF-8 +RUN apt-get install libgdal-dev -y +ENV LANG en_ZA.UTF-8 +ENV LANGUAGE en_ZA:en +ENV LC_ALL en_ZA.UTF-8 +ENV CPLUS_INCLUDE_PATH /usr/include/gdal +ENV C_INCLUDE_PATH /usr/include/gdal + +ADD REQUIREMENTS.txt /REQUIREMENTS.txt +RUN pip install -r /REQUIREMENTS.txt +RUN pip uninstall -y South +RUN pip install uwsgi + +RUN pip uninstall geonode-dialogos -y +RUN pip install git+https://github.com/meomancer/geonode-dialogos.git + +RUN pip uninstall geonode-agon-ratings -y +RUN pip install git+https://github.com/euclidian/custom-agon-ratings + +RUN pip uninstall Django -y +RUN pip install Django==1.8.18 + +RUN pip uninstall django-oauth-toolkit -y +RUN pip install django-oauth-toolkit==0.12.0 + +RUN pip uninstall django-user-accounts -y +RUN pip install git+https://github.com/GeoNode/geonode-user-accounts@invite-user + +RUN apt-get install gdal-bin +# Open port 8080 as we will be running our uwsgi socket on that +EXPOSE 8080 + +#USER www-data + +WORKDIR /home/web + +# Download repository +RUN git clone https://github.com/euclidian/haitidata + +RUN make migrate +RUN make collectstatic + +WORKDIR /home/web/django_project + +CMD ["uwsgi", "--env", "LC_ALL=en_ZA.UTF-8", "--ini", "/uwsgi.conf"] diff --git a/deployment/docker/Dockerfile-dev b/deployment/docker/Dockerfile-dev new file mode 100644 index 0000000..5dd9fa2 --- /dev/null +++ b/deployment/docker/Dockerfile-dev @@ -0,0 +1,41 @@ +#--------- Generic stuff all our Dockerfiles should start with so we get caching ------------ +# Note this base image is based on debian +FROM haitidata_uwsgi +MAINTAINER Muhammad Anis + +# Use local cached debs from host (saves your bandwidth!) +# Change ip below to that of your apt-cacher-ng host +# Or comment this line out if you do not with to use caching +ADD 71-apt-cacher-ng /etc/apt/apt.conf.d/71-apt-cacher-ng + + +# This section taken on 2 July 2015 from +# https://docs.docker.com/examples/running_ssh_service/ +# Sudo is needed by pycharm when it tries to pip install packages +RUN apt-get update && apt-get install -y openssh-server sudo +RUN mkdir /var/run/sshd +RUN echo 'root:docker' | chpasswd +RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config + +# SSH login fix. Otherwise user is kicked off after login +RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd + +ENV NOTVISIBLE "in users profile" +RUN echo "export VISIBLE=now" >> /etc/profile + +# End of cut & paste section + +ADD REQUIREMENTS-dev.txt /REQUIREMENTS-dev.txt +RUN pip install -r /REQUIREMENTS-dev.txt +ADD bashrc /root/.bashrc + +# -------------------------------------------------------- +# Open ports as needed +# -------------------------------------------------------- + +# Open port 8080 as we will be running our django dev server on +EXPOSE 8080 +# Open port 22 as we will be using a remote interpreter from pycharm +EXPOSE 22 + +CMD ["/usr/sbin/sshd", "-D"] diff --git a/deployment/docker/REQUIREMENTS-dev.txt b/deployment/docker/REQUIREMENTS-dev.txt new file mode 100644 index 0000000..c2d8680 --- /dev/null +++ b/deployment/docker/REQUIREMENTS-dev.txt @@ -0,0 +1,15 @@ +django-nose +coverage +pep8>=1.5.7,<1.6 +pylint +flake8==2.5.4 +factory_boy + +django-devserver + +# documentation +Sphinx + +# pdb plus plus +pdbpp + diff --git a/deployment/docker/REQUIREMENTS.txt b/deployment/docker/REQUIREMENTS.txt new file mode 100644 index 0000000..df07c78 --- /dev/null +++ b/deployment/docker/REQUIREMENTS.txt @@ -0,0 +1,42 @@ +celery==3.1 +Django==1.10 +psycopg2 +django-compressor +icalendar==3.0.1b2 +geopy==0.95.1 +filebrowser-safe==0.4.5 +# https://github.com/getsentry/raven-python/issues/337 +raven==5.8.1 +django-sentry==1.13.5 +requests==2.13.0 + +#cartridge requirement +cartridge==0.12.0 + + +django-appconf==1.0.1 +django-model-utils==2.3.1 +django-reversion==1.9.3 +django-sitetree==1.5.1 +django-taggit==0.21.5 +django-timezone-field==1.3 +django-user-accounts==1.2.0 +easy-thumbnails==2.2 +html5lib==0.999999999 +markdown==2.6.2 +pytz==2015.6 +pyyaml==3.11 +ruamel.yaml==0.13.14 +bleach==2.0.0 + + +#geonode +django-geonode-client +git+https://github.com/GeoNode/django-osgeo-importer.git +django-jsonfield + + +python-dateutil +gdal==1.10.0 +git+https://github.com/meomancer/GeoNode-1.git +django-tastypie diff --git a/deployment/docker/bashrc b/deployment/docker/bashrc new file mode 100644 index 0000000..0c2ee35 --- /dev/null +++ b/deployment/docker/bashrc @@ -0,0 +1,11 @@ +#!/bin/bash + +# This is intended to be placed in the docker dev environment so +# that the django project is in the path when you log in + +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi +export PYTHONPATH=/home/web/django_project:$PYTHONPATH +export DJANGO_SETTINGS_MODULE=core.settings.dev_docker +cd /home/web/django_project diff --git a/deployment/docker/build.sh b/deployment/docker/build.sh new file mode 100755 index 0000000..0ecb6a3 --- /dev/null +++ b/deployment/docker/build.sh @@ -0,0 +1,2 @@ +#!/bin/sh + docker build -t kartoza/mezzanine . diff --git a/deployment/docker/uwsgi.conf b/deployment/docker/uwsgi.conf new file mode 100644 index 0000000..be68d6b --- /dev/null +++ b/deployment/docker/uwsgi.conf @@ -0,0 +1,19 @@ +[uwsgi] + +# Touch this file to reload uwsgi +touch-reload = /tmp/touch-me-to-reload +chdir = /home/web/django_project +module = core.wsgi +master = true +pidfile=/tmp/django.pid +socket = 0.0.0.0:49360 +workers = 4 +cheaper = 2 +env = DJANGO_SETTINGS_MODULE=core.settings.prod_docker +# disabled so we run in the foreground for docker +#daemonize = /tmp/django.log +reload-os-env +#uid = 1000 +#gid = 1000 +memory-report = true +harakiri = 20 diff --git a/deployment/fresh-backups/fresh-database.dmp b/deployment/fresh-backups/fresh-database.dmp new file mode 100755 index 0000000..777fb1b Binary files /dev/null and b/deployment/fresh-backups/fresh-database.dmp differ diff --git a/deployment/load-test/simple_http_get.py b/deployment/load-test/simple_http_get.py new file mode 100644 index 0000000..4cba7e7 --- /dev/null +++ b/deployment/load-test/simple_http_get.py @@ -0,0 +1,21 @@ +from locust import HttpLocust, TaskSet, task + + +class HaitiData(TaskSet): + def on_start(self): + response = self.client.get("/account/login") + csrftoken = response.cookies['csrftoken'] + self.client.post("/account/login/", + {"username": "admin", + "password": "admin"}, + headers={"X-CSRFToken": csrftoken}) + + @task + def index(self): + self.client.get("/layers/geonode:madagascar_earthquake_cqmtpiu_tif_2017_08_23_08_59_10") + + +class HaitiUser(HttpLocust): + task_set = HaitiData + min_wait = 5000 + max_wait = 15000 \ No newline at end of file diff --git a/haitidata.egg-info/dependency_links.txt b/deployment/logs/uwsgi- old mode 100644 new mode 100755 similarity index 100% rename from haitidata.egg-info/dependency_links.txt rename to deployment/logs/uwsgi- diff --git a/deployment/manual_backup.sh b/deployment/manual_backup.sh new file mode 100755 index 0000000..b9d8d48 --- /dev/null +++ b/deployment/manual_backup.sh @@ -0,0 +1,20 @@ +#!/bin/bash +MYDATE=`date +%d-%B-%Y` +MONTH=$(date +%B) +YEAR=$(date +%Y) +cd /home/web/mezzanine.kartoza.com/deployment +MYBASEDIR=`pwd`/backups +MYBACKUPDIR=${MYBASEDIR}/${YEAR}/${MONTH} +mkdir -p ${MYBACKUPDIR} + +cd ${MYBACKUPDIR} +docker exec -ti mezzanine-db /bin/bash -c "PGPASSWORD=docker pg_dump -Fc -f /tmp/latest.dmp -h localhost -U docker gis" +docker cp mezzanine-db:/tmp/latest.dmp PG_mezzanine-${MYDATE}.dmp + +cd - +rm backups/latest.dmp + +cd backups +ln -s ${MYBACKUPDIR}/PG_mezzanine-${MYDATE}.dmp latest.dmp + +cd .. diff --git a/haitidata.egg-info/top_level.txt b/deployment/playbook/haiti-ansible.retry similarity index 100% rename from haitidata.egg-info/top_level.txt rename to deployment/playbook/haiti-ansible.retry diff --git a/deployment/playbook/haiti-ansible.yaml b/deployment/playbook/haiti-ansible.yaml new file mode 100644 index 0000000..bda9a84 --- /dev/null +++ b/deployment/playbook/haiti-ansible.yaml @@ -0,0 +1,18 @@ +--- +- hosts: haitidata_swarm + vars: + http_port: 80 + max_clients: 200 + tasks: + - name: pull haiti source code from github + git: + repo: https://github.com/euclidian/haitidata.git + dest: /tmp/web_haiti + - name: run migrate + make: + chdir: /tmp/web_haiti/deployment + target: migrate + - name: run collect static + make: + chdir: /tmp/web_haiti/deployment + target: collectstatic \ No newline at end of file diff --git a/deployment/playbook/hosts b/deployment/playbook/hosts new file mode 100644 index 0000000..c7222d7 --- /dev/null +++ b/deployment/playbook/hosts @@ -0,0 +1,2 @@ +[haitidata_swarm] +haitidata \ No newline at end of file diff --git a/deployment/qgisug.nginx.conf b/deployment/qgisug.nginx.conf new file mode 100644 index 0000000..624748c --- /dev/null +++ b/deployment/qgisug.nginx.conf @@ -0,0 +1,53 @@ +upstream qgisug { + server 127.0.0.1:63300; +} + +server { + # OTF gzip compression + gzip on; + gzip_min_length 860; + gzip_comp_level 5; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain application/xml application/x-javascript text/xml text/css application/json; + gzip_disable “MSIE [1-6].(?!.*SV1)”; + + # the port your site will be served on + listen 443 ssl; + # the domain name it will serve for + server_name qgis.org.za; + + ssl on; + ssl_certificate /etc/letsencrypt/live/qgis.org.za/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/qgis.org.za/privkey.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; + + location /.well-known/acme-challenge { + default_type "text/plain"; + # set to webroot path + root /home/web/qgis.org.za/deployment/webroot-path; + } + + charset utf-8; + + # max upload size, adjust to taste + client_max_body_size 15M; + + location / { + proxy_pass http://qgisug; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $remote_addr; + } + +} + +server { + listen 80; + server_name qgis.org.za, foss4g-africa.org, www.foss4g-africa.org; + if ($host = 'www.foss4g-africa.org') { + return 301 https://foss4g-africa.org$request_uri; + } + return 301 https://$host$request_uri; +} diff --git a/deployment/rabbitmq.config b/deployment/rabbitmq.config new file mode 100644 index 0000000..3121dbd --- /dev/null +++ b/deployment/rabbitmq.config @@ -0,0 +1,7 @@ +[ +{rabbit, [ +{default_user, <<“rabbit_admin”>>}, +{default_pass, <<“rabbit_password”>>}, +{tcp_listeners,[{“0.0.0.0″,5672}]} +]} +] diff --git a/deployment/rancher-compose.yml b/deployment/rancher-compose.yml new file mode 100644 index 0000000..3d2261c --- /dev/null +++ b/deployment/rancher-compose.yml @@ -0,0 +1,2 @@ +uwsgi: + scale: 3 \ No newline at end of file diff --git a/deployment/rancher-docker-compose.yml b/deployment/rancher-docker-compose.yml new file mode 100644 index 0000000..dc2906f --- /dev/null +++ b/deployment/rancher-docker-compose.yml @@ -0,0 +1,197 @@ +# +# Production server with UWSGI configured to run on port 8080 +# +# docker-compose build +# docker-compose up -d web +# +# See accompanying Make commands for easy collectstatic etc. + +rabbitmq: + image: library/rabbitmq + hostname: rabbitmq + environment: + - RABBIT_PASSWORD=rabbit_test_password + - USER=rabbit_user + - RABBITMQ_NODENAME=rabbit + + +smtp: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-smtp + image: catatnight/postfix + hostname: postfix + environment: + # You could change this to something more suitable + - maildomain=kartoza.com + - smtp_user=noreply:docker + restart: always + +db: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-db + image: kartoza/postgis:9.4-2.1 + volumes: + - ./pg/postgres_data:/var/lib/postgresql + - ./backups:/backups + - ./fresh-backups:/fresh-backups + environment: + - USERNAME=docker + - PASS=docker + restart: always + ports: + - "33305:5432" + +uwsgi-ephemeral: + image: muhammadanis/haitidata_uwsgi + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - GEOSERVER_PUBLIC_LOCATION=http://0.0.0.0:33300/api/geoserver/ + # Set your locale - you need to ensure this is created in Dockerfile too... + - LC_ALL=en_ZA.UTF-8 + links: + - smtp:smtp + - db:db + user: root + restart: on-failure:5 + +uwsgi: + # Note you cannot scale if you use conteiner_name + image: muhammadanis/haitidata_uwsgi + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - GEOSERVER_PUBLIC_LOCATION=http://0.0.0.0:33300/api/geoserver/ + # Set your locale - you need to ensure this is created in Dockerfile too... + - LC_ALL=en_ZA.UTF-8 + user: root + links: + - smtp:smtp + - db:db + - geoserver:geoserver + restart: always + +dbbackups: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-db-backups + image: kartoza/pg-backup:9.4 + hostname: pg-backups + volumes: + - ./backups:/backups + links: + - db:db + environment: + # take care to let the project name below match that + # declared in the top of the makefile + - DUMPPREFIX=PG_haiti + # These are all defaults anyway, but setting explicitly in + # case we ever want to ever use different credentials + - PGUSER=docker + - PGPASSWORD=docker + - PGPORT=5432 + - PGHOST=db + - PGDATABASE=gis + restart: always + +# This is normally the main entry point for a production server +web: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-web + image: nginx + hostname: nginx + volumes: + - ./sites-enabled:/etc/nginx/conf.d:ro + # I dont use volumes_from as I want to use the ro modifier + - ./static:/home/web/static:ro + - ./media:/home/web/media:ro + - ./logs:/var/log/nginx + # - /etc/letsencrypt:/etc/letsencrypt + - ./webroot-path:/home/web/webroot-path + links: + - uwsgi:uwsgi + - geoserver:geoserver + ports: + - "33300:8080" + restart: always + +# This is the entry point for a development server. +# Run with --no-deps to run attached to the services +# from produ environment if wanted +devweb: + # Note you cannot scale if you use conteiner_name + container_name: haitidata-dev-web + build: docker + dockerfile: Dockerfile-dev + hostname: haitidata-dev-web + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - PYTHONPATH=/home/web/django_project + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - GEOSERVER_PUBLIC_LOCATION=http://0.0.0.0:33303/api/geoserver/ + volumes: + - ../django_project:/home/web/django_project + - ./static:/home/web/static + - ./media:/home/web/media + - ./reports:/home/web/reports + - ./logs:/var/log/ + links: + - smtp:smtp + - db:db + - rabbitmq:rabbitmq + - geoserver:geoserver + ports: + # for django test server + - "33303:8080" + # for ssh + - "33302:22" + +worker: + build: docker + hostname: worker + command: celery worker -A config.celery -l info --beat + environment: + - DATABASE_NAME=gis + - DATABASE_USERNAME=docker + - DATABASE_PASSWORD=docker + - DATABASE_HOST=db + - DATABASE_QGIS_HOST=db_gis + - RABBITMQ_HOST=rabbitmq + - DJANGO_SETTINGS_MODULE=core.settings.prod_docker + - VIRTUAL_HOST=haitidata.com + - VIRTUAL_PORT=8080 + - C_FORCE_ROOT=true + volumes: + - ../django_project:/home/web/django_project + - ./static:/home/web/static + - ./media:/home/web/media + - ./reports:/home/web/reports + - ./logs:/var/log/ + links: + - smtp:smtp + - db:db + - rabbitmq:rabbitmq + restart: on-failure:5 + +geoserver: + image: kartoza/geoserver + container_name: haitidata-geoserver + ports: + - "33308:8080" diff --git a/deployment/sites-enabled/README.md b/deployment/sites-enabled/README.md new file mode 100644 index 0000000..1372cc7 --- /dev/null +++ b/deployment/sites-enabled/README.md @@ -0,0 +1,4 @@ +This directory is used to contain nginx configuration +when using a non dockergen nginx configuration. + +See docker-compose.yml to see how it is used. diff --git a/deployment/sites-enabled/default.conf b/deployment/sites-enabled/default.conf new file mode 100644 index 0000000..1d4fc7b --- /dev/null +++ b/deployment/sites-enabled/default.conf @@ -0,0 +1,69 @@ +# Define connection details for connecting to django running in +# a docker container. +upstream uwsgi { + server uwsgi:8080; +} + +upstream geoserver { + server geoserver:8080; +} + +server { + # OTF gzip compression + gzip on; + gzip_min_length 860; + gzip_comp_level 5; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain application/xml application/x-javascript text/xml text/css application/json; + gzip_disable “MSIE [1-6].(?!.*SV1)”; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # the port your site will be served on + listen 8080; + # the domain name it will serve for + # server_name staging.foss4g-africa.org; + charset utf-8; + + # max upload size, adjust to taste + client_max_body_size 15M; + # Django media + location /media { + # your Django project's media files - amend as required + alias /home/web/media; + expires 21d; # cache for 71 days + } + location /static { + # your Django project's static files - amend as required + alias /home/web/static; + expires 21d; # cache for 21 days + } + + location /api/geoserver/ { + proxy_pass http://geoserver/geoserver/; + } + # Finally, send all non-media requests to the Django server. + location / { + uwsgi_pass uwsgi; + # the uwsgi_params file you installed needs to be passed with each + # request. + # the uwsgi_params need to be passed with each uwsgi request + uwsgi_param QUERY_STRING $query_string; + uwsgi_param REQUEST_METHOD $request_method; + uwsgi_param CONTENT_TYPE $content_type; + uwsgi_param CONTENT_LENGTH $content_length; + + uwsgi_param REQUEST_URI $request_uri; + uwsgi_param PATH_INFO $document_uri; + uwsgi_param DOCUMENT_ROOT $document_root; + uwsgi_param SERVER_PROTOCOL $server_protocol; + uwsgi_param HTTPS $https if_not_empty; + + uwsgi_param REMOTE_ADDR $remote_addr; + uwsgi_param REMOTE_PORT $remote_port; + uwsgi_param SERVER_PORT $server_port; + uwsgi_param SERVER_NAME $server_name; + } + +} diff --git a/deployment/staging.qgisug.nginx.conf b/deployment/staging.qgisug.nginx.conf new file mode 100644 index 0000000..657515e --- /dev/null +++ b/deployment/staging.qgisug.nginx.conf @@ -0,0 +1,29 @@ +upstream qgisug { + server 127.0.0.1:63300; +} + +server { + # OTF gzip compression + gzip on; + gzip_min_length 860; + gzip_comp_level 5; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain application/xml application/x-javascript text/xml text/css application/json; + gzip_disable “MSIE [1-6].(?!.*SV1)”; + + # the port your site will be served on + listen 80 + # the domain name it will serve for + # server_name staging.foss4g-africa.org; + + charset utf-8; + + # max upload size, adjust to taste + client_max_body_size 15M; + + location / { + proxy_pass http://qgisug; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $remote_addr; + } +} diff --git a/deployment/tag_and_deploy.sh b/deployment/tag_and_deploy.sh new file mode 100755 index 0000000..9fb0fbc --- /dev/null +++ b/deployment/tag_and_deploy.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "Use this to tag a version on your local" +echo "machine, push the tag upstream and then" +echo "deploy it to the remote" +echo "e.g." +echo "$0 version-1.2.3" +VERSION=$1 +make dbbackup +make mediasync +git tag $VERSION +git push --tags upstream +ssh kartoza4 "cd /home/web/kartoza.com/deployment && git fetch --tags && git checkout $VERSION && make build && make kill && make web && make migrate && make collectstatic && make reload" diff --git a/django_project/README.rst b/django_project/README.rst new file mode 100644 index 0000000..c8492e3 --- /dev/null +++ b/django_project/README.rst @@ -0,0 +1,30 @@ +# Haitidata + +You should write some docs, it's good for the soul. + +# Docker installation + +## Install docker +This will install an Haitidata container + +Makes sure to have docker-compose installed +``` +sudo apt-get install python-pip +sudo pip install docker-compose +``` + +## Get project code +Clone the repo: +``` +git clone https://github.com/HaitiData/haitidata.git +``` + +## Run project +Run the docker container: +``` +cd deployment +make deploy +make update-migrations-localization: +``` + +then you can visit http://0.0.0.0:33300``` \ No newline at end of file diff --git a/haitidata/__init__.py b/django_project/__init__.py similarity index 100% rename from haitidata/__init__.py rename to django_project/__init__.py diff --git a/haitidata/static/css/bootstrap/mixins.css b/django_project/charts-prj/__init__.py similarity index 100% rename from haitidata/static/css/bootstrap/mixins.css rename to django_project/charts-prj/__init__.py diff --git a/django_project/charts-prj/settings.py b/django_project/charts-prj/settings.py new file mode 100644 index 0000000..19b5894 --- /dev/null +++ b/django_project/charts-prj/settings.py @@ -0,0 +1,58 @@ +""" +Django settings for charts project. + +Generated by 'django-admin startproject' using Django 1.8.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.8/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.8/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +from geonode.settings import * + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +SITENAME = 'charts-prj' + +LOCAL_ROOT = os.path.abspath(os.path.dirname(__file__)) + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '*u(5zzp_wjj!^!w4$h@e#jv!*y02z17lb8gu-l)j+*79p^r8%(' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +# Application definition + +INSTALLED_APPS = INSTALLED_APPS + ( + 'charts_app', + 'wfs_harvest' +) + +WSGI_APPLICATION = 'charts-prj.wsgi.application' + +# Additional directories which hold static files +STATICFILES_DIRS.append( + os.path.join(LOCAL_ROOT, "static"), +) + +# Location of url mappings +ROOT_URLCONF = 'charts-prj.urls' + +# Location of locale files +LOCALE_PATHS = ( + os.path.join(LOCAL_ROOT, 'locale'), + ) + LOCALE_PATHS + +TEMPLATES[0]['DIRS'].insert(0, os.path.join(LOCAL_ROOT, "templates")) + +MAX_CSV_RECORDS = 20000 + +ALLOWED_HOSTS = ['*'] +PROXY_ALLOWED_HOSTS = ['*'] diff --git a/haitidata/static/README b/django_project/charts-prj/static/README similarity index 100% rename from haitidata/static/README rename to django_project/charts-prj/static/README diff --git a/haitidata/static/css/bootstrap/mixins/alerts.css b/django_project/charts-prj/static/css/site_base.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/alerts.css rename to django_project/charts-prj/static/css/site_base.css diff --git a/haitidata/static/img/README b/django_project/charts-prj/static/img/README similarity index 100% rename from haitidata/static/img/README rename to django_project/charts-prj/static/img/README diff --git a/haitidata/static/js/README b/django_project/charts-prj/static/js/README similarity index 100% rename from haitidata/static/js/README rename to django_project/charts-prj/static/js/README diff --git a/django_project/charts-prj/templates/_actions.html b/django_project/charts-prj/templates/_actions.html new file mode 100644 index 0000000..7e96144 --- /dev/null +++ b/django_project/charts-prj/templates/_actions.html @@ -0,0 +1,24 @@ +{% load i18n %} + diff --git a/haitidata/templates/geonode_base.html b/django_project/charts-prj/templates/geonode_base.html similarity index 100% rename from haitidata/templates/geonode_base.html rename to django_project/charts-prj/templates/geonode_base.html diff --git a/django_project/charts-prj/templates/site_base.html b/django_project/charts-prj/templates/site_base.html new file mode 100644 index 0000000..e6eab01 --- /dev/null +++ b/django_project/charts-prj/templates/site_base.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% block extra_head %} + +{% endblock %} +{% block extra_tab %} +{% comment %} +Add Tab for Third Party Apps +
  • + App +
  • +{% endcomment %} +{% endblock %} diff --git a/django_project/charts-prj/templates/site_index.html b/django_project/charts-prj/templates/site_index.html new file mode 100644 index 0000000..b0d3f4e --- /dev/null +++ b/django_project/charts-prj/templates/site_index.html @@ -0,0 +1,15 @@ +{% extends 'index.html' %} +{% load i18n %} +{% comment %} +This is where you can override the hero area block. You can simply modify the content below or replace it wholesale to meet your own needs. +{% endcomment %} + {% block hero %} +
    +
    +

    {% trans "Welcome to the charts GeoNode" %}

    +

    {% blocktrans %}GeoNode is an open source platform for sharing geospatial data and maps.{% endblocktrans %}

    +

    {% blocktrans %}If you have any questions about the software or service, join our mailing list.{% endblocktrans %}

    + {% trans 'Need help?' %} {% trans 'Getting Started' %} +
    +
    + {% endblock %} diff --git a/django_project/charts-prj/testing_settings.py b/django_project/charts-prj/testing_settings.py new file mode 100644 index 0000000..cb93e74 --- /dev/null +++ b/django_project/charts-prj/testing_settings.py @@ -0,0 +1,109 @@ +""" +Django settings for pippo project. + +Generated by 'django-admin startproject' using Django 1.8.7. + +For more information on this file, see +https://docs.djangoproject.com/en/1.8/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.8/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '5i81&t!#h$4ie!-kg$&@5b-1j*)d9@(6)8g8o4kg*xw3i2e=@t' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.security.SecurityMiddleware', +) + +ROOT_URLCONF = 'charts-prj.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'charts-prj.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.8/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Internationalization +# https://docs.djangoproject.com/en/1.8/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.8/howto/static-files/ + +STATIC_URL = '/static/' + +ANONYMOUS_USER_ID = 1 + +LOCAL_MEDIA_URL = '' +API_INCLUDE_REGIONS_COUNT = '' +HAYSTACK_SEARCH = '' +RESOURCE_PUBLISHING = '' \ No newline at end of file diff --git a/haitidata/static/css/bootstrap/mixins/background-variant.css b/django_project/charts-prj/urls.py similarity index 100% rename from haitidata/static/css/bootstrap/mixins/background-variant.css rename to django_project/charts-prj/urls.py diff --git a/django_project/charts-prj/wsgi.py b/django_project/charts-prj/wsgi.py new file mode 100644 index 0000000..6147efb --- /dev/null +++ b/django_project/charts-prj/wsgi.py @@ -0,0 +1,31 @@ +""" +WSGI config for charts project. + +This module contains the WSGI application used by Django's development server +and any production WSGI deployments. It should expose a module-level variable +named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover +this application via the ``WSGI_APPLICATION`` setting. + +Usually you will have the standard Django WSGI application here, but it also +might make sense to replace the whole Django WSGI application with a custom one +that later delegates to the Django one. For example, you could introduce WSGI +middleware here, or combine a Django application with an application of another +framework. + +""" +import os +import sys + +sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "charts-prj.settings") + +# This application object is used by any WSGI server configured to use this +# file. This includes Django's development server, if the WSGI_APPLICATION +# setting points here. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + +# Apply WSGI middleware here. +# from helloworld.wsgi import HelloWorldApplication +# application = HelloWorldApplication(application) diff --git a/haitidata/static/css/bootstrap/mixins/border-radius.css b/django_project/charts_app/__init__.py similarity index 100% rename from haitidata/static/css/bootstrap/mixins/border-radius.css rename to django_project/charts_app/__init__.py diff --git a/django_project/charts_app/admin.py b/django_project/charts_app/admin.py new file mode 100644 index 0000000..05e7ad9 --- /dev/null +++ b/django_project/charts_app/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from .models import Chart + + +class ChartAdmin(admin.ModelAdmin): + list_display = ['id', 'title'] + + +admin.site.register(Chart, ChartAdmin) diff --git a/django_project/charts_app/migrations/0001_initial.py b/django_project/charts_app/migrations/0001_initial.py new file mode 100644 index 0000000..04f3248 --- /dev/null +++ b/django_project/charts_app/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('layers', '24_to_26'), + ] + + operations = [ + migrations.CreateModel( + name='Chart', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=128, blank=True)), + ('category', models.CharField(max_length=200)), + ('quantity', models.CharField(max_length=200)), + ('type', models.SmallIntegerField(default=0, choices=[(0, b'Bar chart'), (1, b'Pie chart'), (2, b'Donut chart')])), + ('aggr_type', models.SmallIntegerField(default=3, choices=[(0, b'Sum'), (1, b'Mean'), (2, b'Category count'), (3, b'Max'), (4, b'Min')])), + ('abstract', models.TextField(blank=True)), + ('layer', models.ForeignKey(to='layers.Layer')), + ], + ), + ] diff --git a/django_project/charts_app/migrations/0002_auto_20170705_0742.py b/django_project/charts_app/migrations/0002_auto_20170705_0742.py new file mode 100644 index 0000000..646fed7 --- /dev/null +++ b/django_project/charts_app/migrations/0002_auto_20170705_0742.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings +import charts_app.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('charts_app', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='chart', + name='created_by', + field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True), + ), + migrations.AlterField( + model_name='chart', + name='layer', + field=models.ForeignKey(to='layers.Layer', validators=[charts_app.models.validate_wfs]), + ), + migrations.AlterField( + model_name='chart', + name='type', + field=models.SmallIntegerField(default=0, choices=[(0, b'Bar chart'), (1, b'Pie chart'), (2, b'Donut chart'), (3, b'Line chart')]), + ), + ] diff --git a/haitidata/static/css/bootstrap/mixins/buttons.css b/django_project/charts_app/migrations/__init__.py similarity index 100% rename from haitidata/static/css/bootstrap/mixins/buttons.css rename to django_project/charts_app/migrations/__init__.py diff --git a/django_project/charts_app/models.py b/django_project/charts_app/models.py new file mode 100644 index 0000000..13c2131 --- /dev/null +++ b/django_project/charts_app/models.py @@ -0,0 +1,80 @@ +from django.db import models +from django.core.urlresolvers import reverse +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from django.forms import ModelForm, ValidationError as VE + +from geonode.layers.models import Layer + +from wfs_harvest.utils import get_featno, get_fields + + +def validate_wfs(value): + lyr = Layer.objects.get(pk=value) + if lyr.service_type != 'WFS': + raise ValidationError(_('%(lyr_title)s is not a WFS layer'), + code='not_a_wfs', + params={'lyr_title': lyr.title}) + + feat_no = get_featno(value) + if feat_no > settings.MAX_CSV_RECORDS: + raise ValidationError(_('%(lyr_title)s has too many features; ' + 'chart functionality is not available ' + 'for very large datasets'), + code='too_many_records', + params={'lyr_title': lyr.title}) + + +class Chart(models.Model): + CHART_TYPES = ( + (0, 'Bar chart'), + (1, 'Pie chart'), + (2, 'Donut chart'), + (3, 'Line chart') + ) + + AGGREGATION_TYPES = ( + (0, 'Sum'), + (1, 'Mean'), + (2, 'Category count'), + (3, 'Max'), + (4, 'Min'), + ) + + layer = models.ForeignKey(Layer, validators=[validate_wfs]) + title = models.CharField(max_length=128, blank=True) + category = models.CharField(max_length=200) + quantity = models.CharField(max_length=200) + type = models.SmallIntegerField(choices=CHART_TYPES, default=0) + aggr_type = models.SmallIntegerField(choices=AGGREGATION_TYPES, default=3) + abstract = models.TextField(blank=True) + created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null = True) + + def get_absolute_url(self): + return reverse('chart_detail', kwargs={'pk': self.pk}) + +class ChartForm(ModelForm): + def clean(self): + cleaned_data = super(ChartForm, self).clean() + layer = cleaned_data.get('layer') + category = cleaned_data.get('category') + quantity = cleaned_data.get('quantity') + + categories, quantities = get_fields(layer) + + if category not in categories: + lyr = Layer.objects.get(pk=layer) + raise VE(_('%(lyr_title)s does not contain the field %(category)s'), + code='non_extant_category_field', + params={'lyr_title': lyr.title, 'category': category}) + + if quantity not in quantities: + lyr = Layer.objects.get(pk=layer) + raise VE(_('%(lyr_title)s does not contain the field %(quantity)s'), + code='non_extant_quantity_field', + params={'lyr_title': lyr.title, 'quantity': quantity}) + + class Meta: + model = Chart + fields = '__all__' \ No newline at end of file diff --git a/django_project/charts_app/templates/donut_chart_v1.html b/django_project/charts_app/templates/donut_chart_v1.html new file mode 100644 index 0000000..286f532 --- /dev/null +++ b/django_project/charts_app/templates/donut_chart_v1.html @@ -0,0 +1,68 @@ + + +Donut Chart v1 +

    Simple Donut Chart v1

    +

    Zero values excluded

    +

    D3js version 4, use canvas

    + + + + \ No newline at end of file diff --git a/django_project/charts_app/templates/donut_chart_v2.html b/django_project/charts_app/templates/donut_chart_v2.html new file mode 100644 index 0000000..c371272 --- /dev/null +++ b/django_project/charts_app/templates/donut_chart_v2.html @@ -0,0 +1,169 @@ + + +Donut Chart v2 +

    Simple Donut Chart v2

    +

    Zero values excluded, label with ticks

    +

    D3js version 3, use svg

    + + + + + \ No newline at end of file diff --git a/django_project/charts_app/templates/pie_chart_v1.html b/django_project/charts_app/templates/pie_chart_v1.html new file mode 100644 index 0000000..10e08c5 --- /dev/null +++ b/django_project/charts_app/templates/pie_chart_v1.html @@ -0,0 +1,65 @@ + + +Pie Chart v1 +

    Simple Pie Chart v1

    +

    All data

    +

    D3js version 4, use svg

    + + + + diff --git a/django_project/charts_app/templates/pie_chart_v2.html b/django_project/charts_app/templates/pie_chart_v2.html new file mode 100644 index 0000000..7a93002 --- /dev/null +++ b/django_project/charts_app/templates/pie_chart_v2.html @@ -0,0 +1,67 @@ + + +Pie Chart v2 +

    Simple Pie Chart v2

    +

    Zero values excluded

    +

    D3js version 4, use svg

    + + + + diff --git a/django_project/charts_app/tests.py b/django_project/charts_app/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/django_project/charts_app/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/django_project/charts_app/urls.py b/django_project/charts_app/urls.py new file mode 100644 index 0000000..f837ee7 --- /dev/null +++ b/django_project/charts_app/urls.py @@ -0,0 +1,11 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^(?P[0-9]+)/$', views.ChartDetail.as_view(), name='chart_detail'), + url(r'^add/(?P[0-9]+)/$', views.ChartCreate.as_view(), name='chart_add'), + url(r'^update/(?P[0-9]+)/$', views.ChartUpdate.as_view(), name='chart_update'), + url(r'^delete/(?P[0-9]+)/$', views.ChartDelete.as_view(), name='chart_delete'), + url(r'^$', views.ChartList.as_view(), name='chart_list') +] diff --git a/django_project/charts_app/views.py b/django_project/charts_app/views.py new file mode 100644 index 0000000..9ba7630 --- /dev/null +++ b/django_project/charts_app/views.py @@ -0,0 +1,106 @@ +from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView, UpdateView, DeleteView +from django.views.generic.list import ListView +from django.contrib.auth.decorators import login_required +from django.core.exceptions import PermissionDenied + + +from geonode.layers.models import Layer + +from .models import Chart, ChartForm +from wfs_harvest.utils import get_fields + + +class LoginRequiredMixin(object): + @classmethod + def as_view(cls, **initkwargs): + view = super(LoginRequiredMixin, cls).as_view(**initkwargs) + return login_required(view) + + +class ChartDetail(DetailView): + model = Chart + + def get_object(self, queryset=None): + obj = super(ChartDetail, self).get_object(queryset=queryset) + lyr_obj = Layer.objects.get(pk=obj.layer) + if not self.request.user.has_perm('download_resourcebase', lyr_obj.get_self_resource()): + raise PermissionDenied + return obj + + def get_context_data(self, **kwargs): + context = super(ChartDetail, self).get_context_data(**kwargs) + return context + + +class ChartCreate(LoginRequiredMixin, CreateView): + form_class = ChartForm + template_name_suffix = 'charts_app/chart_update_form.html' + template_name = 'charts_app/chart_update_form.html' + + def get_initial(self): + layer_id = self.kwargs['layer_id'] + initial = self.initial.copy() + initial['layer'] = layer_id + return initial + + def get_context_data(self, **kwargs): + layer_id = self.kwargs['layer_id'] + layer = Layer.objects.get(pk=layer_id) + if not self.request.user.has_perm('download_resourcebase', layer.get_self_resource()): + raise PermissionDenied + fieldnames, num_fieldnames = get_fields(layer_id) + ctx = super(ChartCreate, self).get_context_data(**kwargs) + ctx['fieldnames'] = fieldnames + ctx['num_fieldnames'] = num_fieldnames + ctx['layer'] = layer + return ctx + + def form_valid(self, form): + if not self.request.user.has_perm('download_resourcebase', form.instance.layer.get_self_resource()): + raise PermissionDenied + form.instance.created_by = self.request.user + return super(ChartCreate, self).form_valid(form) + + +class ChartUpdate(LoginRequiredMixin, UpdateView): + model = Chart + fields = '__all__' + template_name = 'charts_app/chart_update_form.html' + + def get_object(self, queryset=None): + obj = super(ChartUpdate, self).get_object(queryset=queryset) + is_chart_owner = (self.request.user == obj.created_by) + lyr_obj = Layer.objects.get(pk=obj.layer) + is_lyr_owner = (self.request.user == lyr_obj.owner) + if not (self.request.user.is_superuser or is_chart_owner or is_lyr_owner): + raise PermissionDenied + return obj + + def form_valid(self, form): + form.instance.created_by = self.request.user + return super(ChartUpdate, self).form_valid(form) + + +class ChartDelete(LoginRequiredMixin, DeleteView): + model = Chart + success_url = '/layers/' + + def get_object(self, queryset=None): + obj = super(ChartDelete, self).get_object(queryset=queryset) + is_chart_owner = (self.request.user == obj.created_by) + lyr_obj = Layer.objects.get(pk=obj.layer) + is_lyr_owner = (self.request.user == lyr_obj.owner) + if not (self.request.user.is_superuser or is_chart_owner or is_lyr_owner): + raise PermissionDenied + return obj + + +class ChartList(ListView): + model = Chart + fields = '__all__' + template_name = 'charts_app/chart_list.html' + + def get_context_data(self, **kwargs): + context = super(ChartList, self).get_context_data(**kwargs) + return context diff --git a/haitidata/static/css/bootstrap/mixins/center-block.css b/django_project/core/__init__.py similarity index 100% rename from haitidata/static/css/bootstrap/mixins/center-block.css rename to django_project/core/__init__.py diff --git a/django_project/core/base_static/README b/django_project/core/base_static/README new file mode 100644 index 0000000..a0fd00c --- /dev/null +++ b/django_project/core/base_static/README @@ -0,0 +1,8 @@ +This directory is used to store static assets for your project. User media files +(FileFields/ImageFields) are not stored here. + +The convention for this directory is: + + * css/ — stores CSS files + * js/ — stores Javascript files + * img/ — stores image files diff --git a/haitidata/static/css/bootstrap.css b/django_project/core/base_static/css/bootstrap.css similarity index 100% rename from haitidata/static/css/bootstrap.css rename to django_project/core/base_static/css/bootstrap.css diff --git a/haitidata/static/css/bootstrap/bootstrap.css b/django_project/core/base_static/css/bootstrap/bootstrap.css similarity index 100% rename from haitidata/static/css/bootstrap/bootstrap.css rename to django_project/core/base_static/css/bootstrap/bootstrap.css diff --git a/haitidata/static/css/bootstrap/media.css b/django_project/core/base_static/css/bootstrap/media.css similarity index 100% rename from haitidata/static/css/bootstrap/media.css rename to django_project/core/base_static/css/bootstrap/media.css diff --git a/haitidata/static/css/bootstrap/mixins/clearfix.css b/django_project/core/base_static/css/bootstrap/mixins.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/clearfix.css rename to django_project/core/base_static/css/bootstrap/mixins.css diff --git a/haitidata/static/css/bootstrap/mixins/forms.css b/django_project/core/base_static/css/bootstrap/mixins/alerts.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/forms.css rename to django_project/core/base_static/css/bootstrap/mixins/alerts.css diff --git a/haitidata/static/css/bootstrap/mixins/gradients.css b/django_project/core/base_static/css/bootstrap/mixins/background-variant.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/gradients.css rename to django_project/core/base_static/css/bootstrap/mixins/background-variant.css diff --git a/haitidata/static/css/bootstrap/mixins/grid-framework.css b/django_project/core/base_static/css/bootstrap/mixins/border-radius.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/grid-framework.css rename to django_project/core/base_static/css/bootstrap/mixins/border-radius.css diff --git a/haitidata/static/css/bootstrap/mixins/grid.css b/django_project/core/base_static/css/bootstrap/mixins/buttons.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/grid.css rename to django_project/core/base_static/css/bootstrap/mixins/buttons.css diff --git a/haitidata/static/css/bootstrap/mixins/hide-text.css b/django_project/core/base_static/css/bootstrap/mixins/center-block.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/hide-text.css rename to django_project/core/base_static/css/bootstrap/mixins/center-block.css diff --git a/haitidata/static/css/bootstrap/mixins/image.css b/django_project/core/base_static/css/bootstrap/mixins/clearfix.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/image.css rename to django_project/core/base_static/css/bootstrap/mixins/clearfix.css diff --git a/haitidata/static/css/bootstrap/mixins/labels.css b/django_project/core/base_static/css/bootstrap/mixins/forms.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/labels.css rename to django_project/core/base_static/css/bootstrap/mixins/forms.css diff --git a/haitidata/static/css/bootstrap/mixins/list-group.css b/django_project/core/base_static/css/bootstrap/mixins/gradients.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/list-group.css rename to django_project/core/base_static/css/bootstrap/mixins/gradients.css diff --git a/haitidata/static/css/bootstrap/mixins/nav-divider.css b/django_project/core/base_static/css/bootstrap/mixins/grid-framework.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/nav-divider.css rename to django_project/core/base_static/css/bootstrap/mixins/grid-framework.css diff --git a/haitidata/static/css/bootstrap/mixins/nav-vertical-align.css b/django_project/core/base_static/css/bootstrap/mixins/grid.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/nav-vertical-align.css rename to django_project/core/base_static/css/bootstrap/mixins/grid.css diff --git a/haitidata/static/css/bootstrap/mixins/opacity.css b/django_project/core/base_static/css/bootstrap/mixins/hide-text.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/opacity.css rename to django_project/core/base_static/css/bootstrap/mixins/hide-text.css diff --git a/haitidata/static/css/bootstrap/mixins/pagination.css b/django_project/core/base_static/css/bootstrap/mixins/image.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/pagination.css rename to django_project/core/base_static/css/bootstrap/mixins/image.css diff --git a/haitidata/static/css/bootstrap/mixins/panels.css b/django_project/core/base_static/css/bootstrap/mixins/labels.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/panels.css rename to django_project/core/base_static/css/bootstrap/mixins/labels.css diff --git a/haitidata/static/css/bootstrap/mixins/progress-bar.css b/django_project/core/base_static/css/bootstrap/mixins/list-group.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/progress-bar.css rename to django_project/core/base_static/css/bootstrap/mixins/list-group.css diff --git a/haitidata/static/css/bootstrap/mixins/reset-filter.css b/django_project/core/base_static/css/bootstrap/mixins/nav-divider.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/reset-filter.css rename to django_project/core/base_static/css/bootstrap/mixins/nav-divider.css diff --git a/haitidata/static/css/bootstrap/mixins/reset-text.css b/django_project/core/base_static/css/bootstrap/mixins/nav-vertical-align.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/reset-text.css rename to django_project/core/base_static/css/bootstrap/mixins/nav-vertical-align.css diff --git a/haitidata/static/css/bootstrap/mixins/resize.css b/django_project/core/base_static/css/bootstrap/mixins/opacity.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/resize.css rename to django_project/core/base_static/css/bootstrap/mixins/opacity.css diff --git a/haitidata/static/css/bootstrap/mixins/responsive-visibility.css b/django_project/core/base_static/css/bootstrap/mixins/pagination.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/responsive-visibility.css rename to django_project/core/base_static/css/bootstrap/mixins/pagination.css diff --git a/haitidata/static/css/bootstrap/mixins/size.css b/django_project/core/base_static/css/bootstrap/mixins/panels.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/size.css rename to django_project/core/base_static/css/bootstrap/mixins/panels.css diff --git a/haitidata/static/css/bootstrap/mixins/tab-focus.css b/django_project/core/base_static/css/bootstrap/mixins/progress-bar.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/tab-focus.css rename to django_project/core/base_static/css/bootstrap/mixins/progress-bar.css diff --git a/haitidata/static/css/bootstrap/mixins/table-row.css b/django_project/core/base_static/css/bootstrap/mixins/reset-filter.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/table-row.css rename to django_project/core/base_static/css/bootstrap/mixins/reset-filter.css diff --git a/haitidata/static/css/bootstrap/mixins/text-emphasis.css b/django_project/core/base_static/css/bootstrap/mixins/reset-text.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/text-emphasis.css rename to django_project/core/base_static/css/bootstrap/mixins/reset-text.css diff --git a/haitidata/static/css/bootstrap/mixins/text-overflow.css b/django_project/core/base_static/css/bootstrap/mixins/resize.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/text-overflow.css rename to django_project/core/base_static/css/bootstrap/mixins/resize.css diff --git a/haitidata/static/css/bootstrap/mixins/vendor-prefixes.css b/django_project/core/base_static/css/bootstrap/mixins/responsive-visibility.css similarity index 100% rename from haitidata/static/css/bootstrap/mixins/vendor-prefixes.css rename to django_project/core/base_static/css/bootstrap/mixins/responsive-visibility.css diff --git a/haitidata/static/css/bootstrap/variables.css b/django_project/core/base_static/css/bootstrap/mixins/size.css similarity index 100% rename from haitidata/static/css/bootstrap/variables.css rename to django_project/core/base_static/css/bootstrap/mixins/size.css diff --git a/haitidata/static/css/variables.css b/django_project/core/base_static/css/bootstrap/mixins/tab-focus.css similarity index 100% rename from haitidata/static/css/variables.css rename to django_project/core/base_static/css/bootstrap/mixins/tab-focus.css diff --git a/django_project/core/base_static/css/bootstrap/mixins/table-row.css b/django_project/core/base_static/css/bootstrap/mixins/table-row.css new file mode 100644 index 0000000..e69de29 diff --git a/django_project/core/base_static/css/bootstrap/mixins/text-emphasis.css b/django_project/core/base_static/css/bootstrap/mixins/text-emphasis.css new file mode 100644 index 0000000..e69de29 diff --git a/django_project/core/base_static/css/bootstrap/mixins/text-overflow.css b/django_project/core/base_static/css/bootstrap/mixins/text-overflow.css new file mode 100644 index 0000000..e69de29 diff --git a/django_project/core/base_static/css/bootstrap/mixins/vendor-prefixes.css b/django_project/core/base_static/css/bootstrap/mixins/vendor-prefixes.css new file mode 100644 index 0000000..e69de29 diff --git a/haitidata/static/css/bootstrap/normalize.css b/django_project/core/base_static/css/bootstrap/normalize.css similarity index 100% rename from haitidata/static/css/bootstrap/normalize.css rename to django_project/core/base_static/css/bootstrap/normalize.css diff --git a/haitidata/static/css/bootstrap/print.css b/django_project/core/base_static/css/bootstrap/print.css similarity index 100% rename from haitidata/static/css/bootstrap/print.css rename to django_project/core/base_static/css/bootstrap/print.css diff --git a/haitidata/static/css/bootstrap/responsive-embed.css b/django_project/core/base_static/css/bootstrap/responsive-embed.css similarity index 100% rename from haitidata/static/css/bootstrap/responsive-embed.css rename to django_project/core/base_static/css/bootstrap/responsive-embed.css diff --git a/haitidata/static/css/bootstrap/theme.css b/django_project/core/base_static/css/bootstrap/theme.css similarity index 100% rename from haitidata/static/css/bootstrap/theme.css rename to django_project/core/base_static/css/bootstrap/theme.css diff --git a/django_project/core/base_static/css/bootstrap/variables.css b/django_project/core/base_static/css/bootstrap/variables.css new file mode 100644 index 0000000..e69de29 diff --git a/django_project/core/base_static/css/custom_haitidata.css b/django_project/core/base_static/css/custom_haitidata.css new file mode 100644 index 0000000..f6f2b86 --- /dev/null +++ b/django_project/core/base_static/css/custom_haitidata.css @@ -0,0 +1,4 @@ +.btn-primary:disabled { + background-color: #ff7129; + border-color: #ca580b +} \ No newline at end of file diff --git a/haitidata/static/css/font-awesome.min.css b/django_project/core/base_static/css/font-awesome.min.css similarity index 100% rename from haitidata/static/css/font-awesome.min.css rename to django_project/core/base_static/css/font-awesome.min.css diff --git a/haitidata/static/css/fonts.css b/django_project/core/base_static/css/fonts.css similarity index 100% rename from haitidata/static/css/fonts.css rename to django_project/core/base_static/css/fonts.css diff --git a/django_project/core/base_static/css/haitidata.css b/django_project/core/base_static/css/haitidata.css new file mode 100644 index 0000000..e832b5d --- /dev/null +++ b/django_project/core/base_static/css/haitidata.css @@ -0,0 +1,5 @@ +@import "../css/font-awesome.min.css";@import "../css/thinkhazard.css";/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:'Fira Sans',sans-serif;font-size:16px;line-height:1.42857143;color:#37474f;background-color:#eceff1}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#ff5722;text-decoration:none}a:hover,a:focus{color:#d43300;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#eceff1;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #eceff1}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#b0bec5}h1,.h1,h2,.h2,h3,.h3{margin-top:22px;margin-bottom:11px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:11px;margin-bottom:11px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:41px}h2,.h2{font-size:34px}h3,.h3{font-size:28px}h4,.h4{font-size:20px}h5,.h5{font-size:16px}h6,.h6{font-size:14px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:18px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:24px}}small,.small{font-size:87%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#b0bec5}.text-primary{color:#ff5722}a.text-primary:hover,a.text-primary:focus{color:#ee3900}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#ff5722}a.bg-primary:hover,a.bg-primary:focus{background-color:#ee3900}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eceff1}ul,ol{margin-top:0;margin-bottom:11px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:22px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #b0bec5}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:11px 22px;margin:0 0 22px;font-size:20px;border-left:5px solid #eceff1}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#b0bec5}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eceff1;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:22px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:10.5px;margin:0 0 11px;font-size:15px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#546e7a;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#b0bec5;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:22px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#eceff1}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:22px;font-size:24px;line-height:inherit;color:#546e7a;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:16px;line-height:1.42857143;color:#78909c}.form-control{display:block;width:100%;height:36px;padding:6px 12px;font-size:16px;line-height:1.42857143;color:#78909c;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eceff1;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:36px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:33px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:49px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:38px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm{height:33px;line-height:33px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:33px;line-height:33px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:33px;min-height:36px;padding:6px 10px;font-size:14px;line-height:1.5}.input-lg{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-lg{height:49px;line-height:49px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:49px;line-height:49px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:49px;min-height:42px;padding:11px 16px;font-size:20px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:49px;height:49px;line-height:49px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:33px;height:33px;line-height:33px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#6c8a99}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:20px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:14px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:16px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#ff5722;border-color:#ff4408}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#ee3900;border-color:#882100}.btn-primary:hover{color:#fff;background-color:#ee3900;border-color:#ca3100}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#ee3900;border-color:#ca3100}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#ca3100;border-color:#882100}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#ff5722;border-color:#ff4408}.btn-primary .badge{color:#ff5722;background-color:#fff}.btn-success{color:#fff;background-color:#27ca3b;border-color:#23b535}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1f9f2f;border-color:#0e4a16}.btn-success:hover{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#198126;border-color:#0e4a16}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#27ca3b;border-color:#23b535}.btn-success .badge{color:#27ca3b;background-color:#fff}.btn-info{color:#fff;background-color:#1fa0a0;border-color:#1b8b8b}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#177575;border-color:#062020}.btn-info:hover{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#115757;border-color:#062020}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#1fa0a0;border-color:#1b8b8b}.btn-info .badge{color:#1fa0a0;background-color:#fff}.btn-warning{color:#fff;background-color:#ff8f31;border-color:#ff8118}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#fd7300;border-color:#974500}.btn-warning:hover{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d96300;border-color:#974500}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ff8f31;border-color:#ff8118}.btn-warning .badge{color:#ff8f31;background-color:#fff}.btn-danger{color:#fff;background-color:#af0900;border-color:#960800}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#7c0600;border-color:#160100}.btn-danger:hover{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#580500;border-color:#160100}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#af0900;border-color:#960800}.btn-danger .badge{color:#af0900;background-color:#fff}.btn-link{color:#ff5722;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#d43300;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#b0bec5;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:14px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:16px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#546e7a;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#4a606b;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#ff5722}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#b0bec5}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:14px;line-height:1.42857143;color:#b0bec5;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:49px;line-height:49px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:33px;line-height:33px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:16px;font-weight:normal;line-height:1;color:#78909c;text-align:center;background-color:#eceff1;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:14px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:20px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eceff1}.nav>li.disabled>a{color:#b0bec5}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#b0bec5;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eceff1;border-color:#ff5722}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eceff1 #eceff1 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#78909c;background-color:#eceff1;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#eceff1}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#ff5722}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#eceff1}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:22px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:7px;margin-bottom:7px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-btn.btn-sm{margin-top:8.5px;margin-bottom:8.5px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#dce2e5}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#dce2e5}.navbar-inverse .navbar-nav>li>a{color:#dce2e5}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#dce2e5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#dce2e5}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#dce2e5}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#b0bec5}.pagination{display:inline-block;padding-left:0;margin:22px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#ff5722;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#d43300;background-color:#eceff1;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#ff5722;border-color:#ff5722;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#b0bec5;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:20px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:14px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eceff1}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#b0bec5;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#b0bec5}.label-default[href]:hover,.label-default[href]:focus{background-color:#93a6af}.label-primary{background-color:#ff5722}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#ee3900}.label-success{background-color:#27ca3b}.label-success[href]:hover,.label-success[href]:focus{background-color:#1f9f2f}.label-info{background-color:#1fa0a0}.label-info[href]:hover,.label-info[href]:focus{background-color:#177575}.label-warning{background-color:#ff8f31}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#fd7300}.label-danger{background-color:#af0900}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#7c0600}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:14px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#b0bec5;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#ff5722;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:2em;padding-bottom:2em;margin-bottom:2em;color:inherit;background-color:#ff5722}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:1em;font-size:24px;font-weight:200}.jumbotron>hr{border-top-color:#ee3900}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:3.2em;padding-bottom:3.2em}.container .jumbotron,.container-fluid .jumbotron{padding-left:4em;padding-right:4em}.jumbotron h1,.jumbotron .h1{font-size:72px}}.thumbnail{display:block;padding:4px;margin-bottom:22px;line-height:1.42857143;background-color:#eceff1;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#ff5722}.thumbnail .caption{padding:9px;color:#37474f}.alert{padding:15px;margin-bottom:22px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:22px;margin-bottom:22px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:14px;line-height:22px;color:#fff;text-align:center;background-color:#ff5722;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#27ca3b}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#1fa0a0}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff8f31}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#af0900}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eceff1;color:#b0bec5;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#b0bec5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#ff5722;border-color:#ff5722}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#fff2ee}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:18px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:22px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#546e7a;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#546e7a}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#ff5722}.panel-primary>.panel-heading{color:#fff;background-color:#ff5722;border-color:#ff5722}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ff5722}.panel-primary>.panel-heading .badge{color:#ff5722;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ff5722}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:24px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:'Fira Sans',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:'Fira Sans',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:16px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:16px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on June 1, 2017 */@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-light-webfont.woff2') format('woff2'),url('../fonts/firasans-light-webfont.woff') format('woff'),url('../fonts/firasans-light.otf') format("opentype");font-weight:200;font-style:normal}@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-book-webfont.woff2') format('woff2'),url('../fonts/firasans-book-webfont.woff') format('woff'),url('../fonts/firasans-book.otf') format("opentype");font-weight:400;font-style:normal}@font-face{font-family:'Fira Sans';src:url('../fonts/firasans-bold-webfont.woff2') format('woff2'),url('../fonts/firasans-bold-webfont.woff') format('woff'),url('../fonts/firasans-bold.otf') format("opentype");font-weight:700;font-style:normal}html{-webkit-font-smoothing:antialiased !important}body{background:#37474f;font-family:'Fira Sans',sans-serif;font-size:16px;padding-top:60px}a{color:#ff5722}h1,h2,h3,h4,h5,h6{font-weight:700}select{background:#fff;border:1px solid #b0bec5;height:30px;line-height:30px}code{background-color:#eceff1;color:#1fa0a0;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}form label{margin-right:2.5em}form input{padding:5px}.navbar{margin-bottom:0}.navbar .toolbar{margin-left:1em}.navbar-default{background:#fff;border:0;box-shadow:1px 1px 2px rgba(0,0,0,0.1)}.navbar-default .navbar-nav>li>a{color:#546e7a;font-weight:400;padding-top:25px;padding-bottom:25px}.navbar-default .navbar-nav>li>a:hover{color:#ff5722}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#ff5722;color:#fff}.navbar-nav .dropdown-menu{background-color:#ff5722;border-top:1px solid #ff5722}.navbar-nav .dropdown-menu a{color:#fff}.navbar-nav .dropdown-menu li a:hover{background-color:#ee3900;color:#fff}.navbar-nav .dropdown-menu .divider{background-color:#ee3900}.navbar-nav .search{left:15px;position:relative;color:#444;top:20px;margin-right:25px}.navbar-nav .search .fa-search{position:absolute;top:8px;left:10px}.navbar-nav .search input{background:#eceff1;width:120px;height:32px;border:1px solid #eceff1;border-radius:5px;outline-width:0;text-indent:32px;-webkit-transition:width .2s;transition:width .2s}.navbar-nav .search input:focus{width:240px}.navbar-nav .avatar img{border-radius:50%;margin-bottom:-15px;margin-right:10px;margin-top:-15px;height:42px;width:42px}.navbar-nav .fa-angle-down{margin-left:10px}.navbar-brand{background:url("../img/logo.png") 0 12px no-repeat;background-size:100%;margin-right:2em;text-indent:-9999px;height:65px;width:200px}.navbar-collapse{max-height:none}.navbar-header i{color:#ff5722;font-size:2em}.navbar-header button{border:0;margin-top:.75em}header{background:#ff5722;color:#fff;margin-bottom:2em;padding-top:1em;padding-bottom:1em}header .btn-primary{background:#ee3900;border:1px solid #ee3900}header .btn-primary:hover{background:#d43300}header .btn-icon{background:#d43300;border:1px solid #d43300}header .btn-icon:hover{background:#bb2d00}#wrap{background:#fbfbfc;padding-bottom:2.5em;width:100%}article.tab-pane{padding:20px 0}.no-style-list{list-style-type:none;margin-top:20px}.dl-horizontal dt{text-overflow:clip;white-space:normal;overflow:hidden}.page-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}section#subheader{background:#fff;border-bottom:1px solid #eceff1;margin-bottom:1em;margin-top:-2em;padding-bottom:.4em;padding-top:0}section#subheader p{color:#b0bec5;display:inline-block}section#subheader .btn-group{margin-top:-1em}section#contact{background:#0e4b4b;color:#fff;padding-bottom:3em;padding-top:1em}section#contact h3{font-weight:400}footer{background:#37474f;color:#fff;padding-bottom:3em;padding-top:2em}footer a{color:#ff5722}footer img{margin-right:-10px;width:50%}footer select{color:#37474f}.home #wrap{margin-top:0;padding-bottom:0}.home .jumbotron{background:#ff5722;color:#fff;margin-bottom:0;padding:5em 0;text-shadow:2px 2px 2px rgba(0,0,0,0.4)}.home .jumbotron a{color:#37474f}.home .jumbotron p{font-weight:400;margin-bottom:0}.home .jumbotron .btn-default{background:rgba(0,0,0,0.4);border:2px solid #fff;color:#fff;font-weight:600;margin-top:1em;min-width:320px}.home .jumbotron .btn-default:hover{background:rgba(128,0,0,0.4)}.home .big-search{background:#546e7a;color:#fff;padding-bottom:3em;padding-top:1em}.home .big-search h1,.home .big-search p{text-align:center}.home .big-search a{color:#ff5722}.home .big-search .search{left:0;position:relative;color:#444;top:20px;padding-bottom:2em;margin:auto;width:50%}.home .big-search .search input{width:100%;height:56px;border:1px solid #546e7a;border-radius:5px;outline-width:0;font-size:1.5em}.home .big-search .search input{text-indent:64px}.home .big-search .search .fa-search{position:absolute;top:10px;left:15px}.home .big-search .btn-default{background:transparent;border:none}.home .big-search .btn-default:hover{text-decoration:underline}.home #datasets{background:#ff5722;color:#fff;padding:1em 0}.home #datasets p{font-size:14px}.home #datasets h4{text-transform:uppercase;font-size:14px}.home #datasets a{color:#fff}.home #datasets a:hover{text-decoration:none}.home #datasets a .category{background:#ff5722;border-radius:4px;margin:0 -15px;padding:2em 0}.home #datasets a .category:hover{background:#d43300}.home #datasets a span{font-size:4em}.home #hazards{background:#37474f;color:#fff;padding:2em 0 3em;text-align:center}.home #hazards h2{margin-bottom:1em}.home #hazards a{color:#fff}.home #hazards a:hover{background:#ee3900;text-decoration:none}.home #hazards span{font-size:4em}.home #imagery{background:linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.2)),url('../img/jumbotron.jpg') no-repeat;background-position:center;background-size:cover;color:#fff;margin-bottom:0;padding:5em 0;text-shadow:2px 2px 2px rgba(0,0,0,0.4)}.home #imagery h3{padding-top:2em}.home #imagery a{color:#37474f}.home #imagery p{font-weight:400;margin-bottom:0}.home #showcase{background:#eceff1;padding-bottom:2em;padding-top:1em;text-align:center}.home #showcase .col-md-3{padding:2em 1em}.home #showcase .col-md-3 img{box-shadow:2px 2px 2px rgba(0,0,0,0.125);height:180px;width:100%}.home #showcase p{font-size:18px}.home #osm{background:linear-gradient(to right, rgba(0,0,0,0) 0, rgba(0,0,0,0) 50%, #ff5722 50%, #ff5722 100%),url("../img/osm-02.jpg") no-repeat;min-height:320px;padding:0}.home #osm .col-md-8{background:#ff5722;color:#fff;min-height:320px;padding:1em 2em}.home #osm .col-md-8 .btn-primary{border-color:#fff;width:160px}.home #osm p{font-size:18px}.yourlabs-autocomplete{top:100%}.input-group .yourlabs-autocomplete{top:30px !important}.actions .fa,.filter .fa{margin-right:8px}.items-list{padding:10px 0}.items-list .btn{margin-right:5px;margin-top:10px}.items-list .item-info{border-top:1px solid #eceff1}.items-list h4{font-weight:400;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.items-list h4 a{color:#37474f}.items-list h4 a:hover{color:#af0900;text-decoration:none}.items-list .owner{color:#37474f;font-size:14px}.items-list .owner a{color:#37474f}.items-list .owner a:hover{color:#af0900;text-decoration:none}.items-list .thumb img{border:1px solid #eceff1;width:100%}.items-list .abstract{color:#b0bec5;font-weight:300;min-height:80px}.items-list .actions{color:#b0bec5;font-weight:300}.items-list .actions i{margin-right:.75em}.items-list .actions a{color:#b0bec5;margin-right:.5em}.items-list .actions a:hover{color:#78909c;text-decoration:none}.item-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #b0bec5;padding:0}.profile-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .list-inline{margin:.5em 0}.item-thumb{padding-left:0;padding-right:0}.item-thumb img{width:100%}.item-details{background:#fff;color:#37474f}.item-details .item-meta{margin-top:1em}.item-details .item-meta .item-category{font-size:12px;text-transform:uppercase}.item-details .btn-sm{margin-right:-17px;margin-top:-1px;padding:.5em 1em}.item-details .item-items{border-top:1px solid #eceff1}.item-details .item-items ul{margin:0 0 0 -15px;padding:.5em}.item-details .item-items ul i{margin-right:.5em}.detail-page-actions{margin-top:20px}.detail-page-actions i{padding-right:3px}.layer-actions{margin-top:20px}.layer-actions i{padding-right:3px}.edit-modal{text-align:center}.arcgis-legend>li{text-align:right}.arcgis-legend>li>img{padding-right:25px}.grid-spacer{margin-top:30px}#accordion .panel{border-radius:0;border-top:2px solid #b0bec5;line-height:1em}#accordion .panel-heading{background:none;border:0}#accordion .panel-body img{margin-bottom:1em}#accordion .panel-body small{color:#78909c;font-size:.825em}#accordion .panel-body form{font-size:.825em}#accordion .panel-body form .form-control{background:none;color:#546e7a;font-size:.825em;height:24px;line-height:1;-webkit-box-shadow:none;box-shadow:none}#create-chart small{color:#78909c;font-size:.825em}#create-chart form{font-size:.825em}#create-chart form .form-control{background:none;color:#546e7a;font-size:.825em;height:24px;line-height:1;-webkit-box-shadow:none;box-shadow:none}body.importer h4{margin-bottom:1.5em}body.importer .well{background:#fff;border:1px solid #b0bec5;padding:1.25em 1.5em .5em 1em}body.importer .well p{line-height:.5em}body.importer .well hr{margin:.5em 0}body.importer .well .layer-in-upload{background-color:#fff;padding:.5em}body.importer .well .table-condensed{font-size:.75em}.controls{width:320px}.controls>div,.controls>input,.controls>select,.controls>textarea{width:320px}.map-actions{margin-top:20px}.map-actions i{padding-right:3px}.documents-actions{margin-top:20px}.documents-actions i{padding-right:3px}.profile-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #eceff1;padding:0}.profile-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items{border-top:1px solid #eceff1;color:#78909c}.profile-avatar .profile-items i{margin-left:0;margin-right:.125em}.profile-avatar .profile-items i a:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items .list-inline{margin:.5em 0}.profile-avatar li a{color:#78909c;margin-right:.5em}.profile-avatar li a:hover{color:#af0900;text-decoration:none}.profile-avatar img{margin:0;width:100%}.profile-image{padding-left:0;padding-right:0}.profile-image img{width:100%}.profile-details{background:#fff;color:#37474f}.profile-details .group-logo{margin:.5em;padding:0}.profile-details .group-logo img{width:60px}nav.filter h4{background:#546e7a;font-size:14px;font-weight:600;padding:10px 0;text-transform:uppercase;border-radius:3px}nav.filter h4 a{color:#fff}nav.filter h4 a.toggle{text-decoration:none}nav.filter h4 i{margin-left:8px}nav.filter .active{color:#1fa0a0}nav.filter .active .badge{background:#1fa0a0}nav.filter .closed{display:none}nav.filter li a{border-bottom:1px solid #eceff1;cursor:pointer;padding:5px 10px}.selections h5{font-weight:400}.selections .thumb{float:left}#sort{cursor:pointer}#sort a{color:#b0bec5}#sort .selected{font-weight:700}.group-container{padding:1em}.group-avatar{border:1px solid #eceff1;padding:0}.group-avatar h5 a{color:#37474f;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-avatar h5 a:hover{color:#af0900;text-decoration:none}.group-avatar h5 a i{margin-left:.75em}.group-avatar h5 a i:hover{color:#af0900;text-decoration:none}.group-items{border-top:1px solid #eceff1;color:#78909c}.group-items i{margin-left:0;margin-right:.125em}.group-items i a:hover{color:#af0900;text-decoration:none}.group-items .list-inline{margin:.5em 0}.group-image{height:120px;overflow:hidden}.group-container .group-logo{padding:1em 0;width:100%}.group-details .group-logo img{width:100%}#drop-zone{background:#eceff1;margin-bottom:10px;padding:5px;border:2px dashed #b0bec5}#drop-zone h3{color:#b0bec5;margin:20px 0;text-align:center}#drop-zone h3 i{font-size:3em}#clear-button,#upload-button{margin-top:20px}#upload_form input[type="text"]{display:block;margin:0;width:480px;appearance:none;box-shadow:none;border-radius:none;transition:box-shadow .3s,border .3s}#upload_form input[type="text"]:focus{border:solid 1px #707070;box-shadow:0 0 5px 1px #969696;outline:none}#upload_form #id_doc_file{padding:.5em;width:480px}#upload_form #id_doc_url{display:block;width:480px}#upload_form #s2id_resource{display:block;width:480px}@media (max-width:991px){#upload_form input[type="text"]{width:360px}#upload_form #id_doc_file,#upload_form #id_doc_url,#upload_form #s2id_resource{width:360px}}.rotate-45{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.select2-container-multi .select2-choices .select2-search-field input{font-family:'Fira Sans',sans-serif;height:auto}.datepicker{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.filter input.datepicker{width:100%}#composerCart .list-group i{margin-right:0}.selections{margin-top:1em}.form-horizontal .form-group{margin-left:0;margin-right:0}.comment{padding:1em 0 .5em}.comment .avatar img{border-radius:50%}.comment small{font-weight:bold;color:#777;margin-left:10px}.comment button,.comment p{margin-left:58px;margin-top:-0.5em}.list-group-item .avatar img{border-radius:50%;margin-right:.5em}.no-style-list{list-style-type:none;margin-top:20px}.activity-item{border-bottom:1px solid #b0bec5;border-left:1px solid #b0bec5;color:#b0bec5;margin-top:-10px;padding:20px 18px}.activity-item .comment{content:"\f086"}.activity-item .comment:before{content:"\f086"}.activity-item .delete{content:"\f014"}.activity-item .delete:before{content:"\f014"}.activity-item .edit{content:"\f14b"}.activity-item .edit:before{content:"\f14b"}.activity-item .layer{content:"\f096";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.activity-item .layer:before{content:"\f096"}.activity-item .map{content:"\f041"}.activity-item .map:before{content:"\f041"}.activity-item .upload{content:"\f093"}.activity-item .upload:before{content:"\f093"}.icon-activity{background:#b0bec5;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;border:2px solid #fff;color:#fff;float:left;font-family:FontAwesome;font-weight:normal;font-size:1.3em;font-style:normal;height:35px;line-height:1.25em;margin:0 10px 10px -35px;padding:4px;text-align:center;text-decoration:inherit;width:35px}.thumb-activity{clear:both;height:60px}.thumb-activity img{border:1px solid #78909c;float:left;margin-right:5px;width:60px}.activity{content:"\f045"}.activity:before{content:"\f045"}.activity-timestamp{margin-top:-10px}#permission_form .select2-container{width:250px}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin .checkbox,.form-signin .form-signin-heading{margin-bottom:10px}.form-signin .checkbox{font-weight:normal}.form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:1em}.form-signin .form-control:focus{z-index:2}.form-signin input[type="username"]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.form-signin input[type="password"]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.modal-body .list-unstyled a{color:#37474f;font-size:1.14285714em;line-height:2em}.modal-body .list-unstyled a i{margin-right:8px}.modal-body .list-unstyled a:hover{color:#1fa0a0;text-decoration:none}.modal-divider{padding-top:1px;margin:5px 1px 6px;border-bottom:1px solid #e1e8ed}.list-group i{margin-right:8px}@media (max-width:991px){.navbar-header{float:none}.navbar-toggle{display:block}.navbar-collapse{border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1)}.navbar-collapse.collapse{display:none !important}.navbar-nav{float:none !important;margin:7.5px -15px}.navbar-nav>li{float:none}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-collapse.collapse.in{display:block !important}.collapsing{overflow:hidden !important}.home .navbar-inverse{background-color:#546e7a}.navbar-inverse .navbar-nav>li>a{padding-bottom:.75em;padding-top:.75em}.navbar-inverse .navbar-nav .search{padding-bottom:.75em;top:0}.navbar-inverse .navbar-nav .search input{width:100%}}#member_form_container .select2-container{padding:0}.table-user-profile-attribute{font-weight:bold}body.blog h1{margin-top:-0.5em}.page-content p{font-size:1.125em;line-height:1.5em}ul.links{margin:0 0 1.5em;padding:5px 0}ul.links .category{text-transform:uppercase}ul.links li{color:#b0bec5;font-size:1em;margin-right:.875em;display:inline-block}ul.links li ul{display:inline;padding:0}ul.sidebar{border-bottom:1px solid #eceff1;border-left:1px solid #eceff1;padding:1.5em;margin-bottom:0;list-style:none}ul.sidebar h4{font-size:1em;color:#37474f;margin-bottom:1.25em;margin-top:0}ul.sidebar li{margin:0 4px 10px 0;list-style:none}ul.sidebar li.tag{display:inline-block;background-color:#ff5722;padding:3px 10px}ul.sidebar li.tag a{color:#fff;font-size:.875em}ul.sidebar li a{font-size:.875em;color:#546e7a}ul.sidebar ul li i{color:#546e7a}ul.sidebar li>ul{padding-left:0}ul.sidebar ul li>ul li{padding-left:1.25em}a{transition:.5s all;-webkit-transition:.5s all;-moz-transition:.5s all;-o-transition:.5s all;-ms-transition:.5s all}a:hover{color:#ff5722}.blog_btn{border-radius:0}.blog_btn.continue{display:block;margin-bottom:50px;text-align:right;background-color:transparent;color:#ff5722;padding:10px 0}.blog_btn.continue:focus,.blog_btn.continue:hover{text-decoration:none}.blog_btn.continue:active{outline:inherit}span img{width:100%;margin-bottom:2em}.responsive-object{padding-bottom:10px !important}.blog_sidebar{padding:0 1.5em 0 0}.blog_sidebar ul>ul{padding:0}.blog_sidebar form.search_form{margin-bottom:0}.blog_sidebar form.search_form input[type="search"]{width:100%;border:1px solid #eceff1;padding:6px 10px}.blog_sidebar .input-group-btn{background:#ff5722;-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.blog_sidebar .input-group-btn .btn.btn-default{border-color:transparent;background-color:transparent}.blog_sidebar .input-group-btn .btn.btn-default i{color:#fff}.blog_sidebar .rss-sitemap{margin-bottom:1em;text-align:right}.blog_sidebar .rss-sitemap a{color:#b0bec5;font-size:.875em;text-decoration:none}.blog_sidebar .rss-sitemap i{color:#ff5722}.blog_sidebar .rss-sitemap span{font-size:.875em;color:#b0bec5}.post-summary{margin-bottom:1.25em}.post-summary ul{margin-top:-0.5em;padding:0}.post-summary ul li{margin-bottom:0}.relatedPosts{margin:50px 0 100px}.relatedPosts img{width:100%;height:auto;margin-bottom:15px}.lateralPosts h4{margin:0}.lateralPosts .boxCircle{width:80px;height:80px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lateralPosts li{font-size:.875em;display:inline-block;color:#78909c}.searchTerm{margin:10px 0 30px;padding:20px;background-color:#ededed;color:#666}.blog_grid{position:relative;border-bottom:0}.blog_grid p{color:#546e7a;font-size:1em;line-height:1.5em;margin-top:1em}.rich-text{margin-bottom:5%;margin-top:10px}.rich-text h3{margin-bottom:10px}.itemPosts{margin-top:10px;padding-top:1em;border-top:1px solid #eceff1}.itemPosts h3{font-size:16px;margin-bottom:5px}.itemPosts p{font-size:15px}.itemPosts .box.feature a{color:#ff5722}.pagination{width:100%;margin:30px 0;text-align:center}.pagination .endless_separator{background:transparent;color:#358c8b;font-size:18px}.pagination .endless_page_link,.pagination span.endless_page_current{padding:7px 11px;color:#ff5722}.menu li{margin:0 0 3px}.menu ul{padding-left:0}.menu li a{background-color:#f2f2f2;background-color:rgba(0,0,0,0.05);color:#1e1e1e;display:block;padding:9px 9px 9px 60px;position:relative;text-decoration:none;-webkit-transition:all .2s linear;transition:all .2s linear}.menu li a:before{background:#e1e1e1;background:rgba(255,255,255,0.4);bottom:0;content:"";display:block;left:45px;position:absolute;top:0;width:1px}.menu li a:hover{background-color:#e9e9e9;background-color:rgba(0,0,0,0.1);-webkit-transition:all .2s linear;transition:all .2s linear}.menu li.active>a{background-color:#ff5722;color:#fff;-webkit-transition:all .2s linear;transition:all .2s linear}.menu li.active>a:before{background:#444;background:rgba(255,255,255,0.2)}.menu li.parent>a .open-sub{bottom:0;display:block;left:0;position:absolute;top:0;width:45px}.menu li.parent>a .open-sub:after,.menu li.parent>a .open-sub:before{background:#ff5722;content:"";display:block;height:2px;left:0;margin:19px 0 0 15px;position:absolute;top:0;width:16px}.menu li.parent>a .open-sub:after{height:16px;margin:12px 0 0 22px;width:2px}.menu li.parent.active>a .open-sub:after,.menu li.parent.active>a .open-sub:before{background:#fff}.menu li.parent.active>a .open-sub:after{display:none}.menu .sub{background-color:#f2f2f2;background-color:rgba(0,0,0,0.05);padding:7px 0 4px 5px}.menu .sub li{margin:0}.menu .sub a{background:none;color:#7f7f7f;margin:0;padding:4px 9px 4px 60px}.menu .sub a:before{display:none}.menu .sub a:hover{background-color:#e9e9e9;background-color:rgba(0,0,0,0.05)}.menu .sub .active>a{background:none;color:#000}.menu .sub .sub{background:none}.menu .sub li.parent>a .open-sub{left:10px}.menu .sub li.parent>a .open-sub:after,.menu .sub li.parent>a .open-sub:before{background:#7f7f7f;margin:14px 0 0 22px;width:12px}.menu .sub li.parent>a .open-sub:after{height:12px;margin:9px 0 0 27px;width:2px}.menu .sub li{padding:0}.menu li>a .item-icon{left:15px;position:absolute;top:13px}.menu li:not(.active)>a .item-icon{opacity:.5;filter:alpha(opacity=50)}@media (max-width:991px){.blog_sidebar{padding:5px 5px 0 20px}}@media (max-width:768px){.blog_sidebar{padding:5px 10px 0}} \ No newline at end of file diff --git a/django_project/core/base_static/css/index.css b/django_project/core/base_static/css/index.css new file mode 100644 index 0000000..5a958c2 --- /dev/null +++ b/django_project/core/base_static/css/index.css @@ -0,0 +1,39 @@ +/* Add shadow effect to chart. If you don't like it, get rid of it. */ +svg { + -webkit-filter: drop-shadow( 0px 3px 3px rgba(0,0,0,.3) ); + filter: drop-shadow( 0px 3px 3px rgba(0,0,0,.25) ); +} + +/*Styling for the lines connecting the labels to the slices*/ +polyline{ + opacity: .3; + stroke: black; + stroke-width: 2px; + fill: none; +} + +/* Make the percentage on the text labels bold*/ +.labelName tspan { + font-style: normal; + font-weight: 700; +} + +/* In biology we generally italicise species names. */ +.labelName { + font-size: 0.9em; + font-style: italic; +} + +/* Tooltip for line chart */ + +div.tooltip { + position: absolute; + text-align: center; + width: 60px; + height: 28px; + padding: 2px; + background: lightsteelblue; + border: 0px; + border-radius: 8px; + pointer-events: none; +} \ No newline at end of file diff --git a/haitidata/static/css/map_geoexplorer.css b/django_project/core/base_static/css/map_geoexplorer.css similarity index 100% rename from haitidata/static/css/map_geoexplorer.css rename to django_project/core/base_static/css/map_geoexplorer.css diff --git a/haitidata/static/css/thinkhazard.css b/django_project/core/base_static/css/thinkhazard.css similarity index 100% rename from haitidata/static/css/thinkhazard.css rename to django_project/core/base_static/css/thinkhazard.css diff --git a/django_project/core/base_static/css/variables.css b/django_project/core/base_static/css/variables.css new file mode 100644 index 0000000..e69de29 diff --git a/haitidata/static/fonts/firaSans-light.otf b/django_project/core/base_static/fonts/firaSans-light.otf similarity index 100% rename from haitidata/static/fonts/firaSans-light.otf rename to django_project/core/base_static/fonts/firaSans-light.otf diff --git a/haitidata/static/fonts/firasans-bold-webfont.woff b/django_project/core/base_static/fonts/firasans-bold-webfont.woff similarity index 100% rename from haitidata/static/fonts/firasans-bold-webfont.woff rename to django_project/core/base_static/fonts/firasans-bold-webfont.woff diff --git a/haitidata/static/fonts/firasans-bold-webfont.woff2 b/django_project/core/base_static/fonts/firasans-bold-webfont.woff2 similarity index 100% rename from haitidata/static/fonts/firasans-bold-webfont.woff2 rename to django_project/core/base_static/fonts/firasans-bold-webfont.woff2 diff --git a/haitidata/static/fonts/firasans-bold.otf b/django_project/core/base_static/fonts/firasans-bold.otf similarity index 100% rename from haitidata/static/fonts/firasans-bold.otf rename to django_project/core/base_static/fonts/firasans-bold.otf diff --git a/haitidata/static/fonts/firasans-book-webfont.woff b/django_project/core/base_static/fonts/firasans-book-webfont.woff similarity index 100% rename from haitidata/static/fonts/firasans-book-webfont.woff rename to django_project/core/base_static/fonts/firasans-book-webfont.woff diff --git a/haitidata/static/fonts/firasans-book-webfont.woff2 b/django_project/core/base_static/fonts/firasans-book-webfont.woff2 similarity index 100% rename from haitidata/static/fonts/firasans-book-webfont.woff2 rename to django_project/core/base_static/fonts/firasans-book-webfont.woff2 diff --git a/haitidata/static/fonts/firasans-book.otf b/django_project/core/base_static/fonts/firasans-book.otf similarity index 100% rename from haitidata/static/fonts/firasans-book.otf rename to django_project/core/base_static/fonts/firasans-book.otf diff --git a/haitidata/static/fonts/firasans-light-webfont.woff b/django_project/core/base_static/fonts/firasans-light-webfont.woff similarity index 100% rename from haitidata/static/fonts/firasans-light-webfont.woff rename to django_project/core/base_static/fonts/firasans-light-webfont.woff diff --git a/haitidata/static/fonts/firasans-light-webfont.woff2 b/django_project/core/base_static/fonts/firasans-light-webfont.woff2 similarity index 100% rename from haitidata/static/fonts/firasans-light-webfont.woff2 rename to django_project/core/base_static/fonts/firasans-light-webfont.woff2 diff --git a/haitidata/static/fonts/fontawesome-webfont.eot b/django_project/core/base_static/fonts/fontawesome-webfont.eot similarity index 100% rename from haitidata/static/fonts/fontawesome-webfont.eot rename to django_project/core/base_static/fonts/fontawesome-webfont.eot diff --git a/haitidata/static/fonts/fontawesome-webfont.svg b/django_project/core/base_static/fonts/fontawesome-webfont.svg similarity index 100% rename from haitidata/static/fonts/fontawesome-webfont.svg rename to django_project/core/base_static/fonts/fontawesome-webfont.svg diff --git a/haitidata/static/fonts/fontawesome-webfont.ttf b/django_project/core/base_static/fonts/fontawesome-webfont.ttf similarity index 100% rename from haitidata/static/fonts/fontawesome-webfont.ttf rename to django_project/core/base_static/fonts/fontawesome-webfont.ttf diff --git a/haitidata/static/fonts/fontawesome-webfont.woff b/django_project/core/base_static/fonts/fontawesome-webfont.woff similarity index 100% rename from haitidata/static/fonts/fontawesome-webfont.woff rename to django_project/core/base_static/fonts/fontawesome-webfont.woff diff --git a/haitidata/static/fonts/fontawesome-webfont.woff2 b/django_project/core/base_static/fonts/fontawesome-webfont.woff2 similarity index 100% rename from haitidata/static/fonts/fontawesome-webfont.woff2 rename to django_project/core/base_static/fonts/fontawesome-webfont.woff2 diff --git a/haitidata/static/fonts/thinkhazard.eot b/django_project/core/base_static/fonts/thinkhazard.eot similarity index 100% rename from haitidata/static/fonts/thinkhazard.eot rename to django_project/core/base_static/fonts/thinkhazard.eot diff --git a/haitidata/static/fonts/thinkhazard.svg b/django_project/core/base_static/fonts/thinkhazard.svg similarity index 100% rename from haitidata/static/fonts/thinkhazard.svg rename to django_project/core/base_static/fonts/thinkhazard.svg diff --git a/haitidata/static/fonts/thinkhazard.ttf b/django_project/core/base_static/fonts/thinkhazard.ttf similarity index 100% rename from haitidata/static/fonts/thinkhazard.ttf rename to django_project/core/base_static/fonts/thinkhazard.ttf diff --git a/haitidata/static/fonts/thinkhazard.woff b/django_project/core/base_static/fonts/thinkhazard.woff similarity index 100% rename from haitidata/static/fonts/thinkhazard.woff rename to django_project/core/base_static/fonts/thinkhazard.woff diff --git a/django_project/core/base_static/img/README b/django_project/core/base_static/img/README new file mode 100644 index 0000000..e69de29 diff --git a/haitidata/static/img/jumbotron.jpg b/django_project/core/base_static/img/jumbotron.jpg similarity index 100% rename from haitidata/static/img/jumbotron.jpg rename to django_project/core/base_static/img/jumbotron.jpg diff --git a/haitidata/static/img/logo.png b/django_project/core/base_static/img/logo.png similarity index 100% rename from haitidata/static/img/logo.png rename to django_project/core/base_static/img/logo.png diff --git a/django_project/core/base_static/js/README b/django_project/core/base_static/js/README new file mode 100644 index 0000000..e69de29 diff --git a/django_project/core/base_static/js/bar.js b/django_project/core/base_static/js/bar.js new file mode 100644 index 0000000..29b6eb6 --- /dev/null +++ b/django_project/core/base_static/js/bar.js @@ -0,0 +1,185 @@ +function barChart(cat, qnt, title,id){ + var width = function(){ return document.getElementById(id).offsetWidth}, + height = 500, + padding = 5, + xScale = d3.scaleBand(), + yScale = d3.scaleLinear(), + colour = d3.scaleOrdinal(d3.schemeCategory20), + x, + y, + margin = { top: 30, bottom: 30, left: 30, right: 120 }, + floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), + xAxis = d3.axisBottom(xScale), + yAxis = d3.axisLeft(yScale); + + function my(selection){ + + selection.each(function(data) { + + var svg_name = "chart_svg" + id; + var svg = selection.append('svg') + .attr("id", svg_name) + .attr("width", width()) + .attr("height", height); + + var g = svg.selectAll("g") + .data([1]); + g = g.enter().append("g") + .merge(g) + .attr("class", svg_name) + .attr("transform", + "translate(" + margin.left + "," + margin.top +")"); + + + var innerWidth = width() - margin.left - margin.right ; + var innerHeight = function(){ return height - margin.top - margin.bottom} ; + + + xScale + .domain(data.map(function (d){ return d[x]; })) + .range([0, (innerWidth - margin.right)]); + + + // X axis + var xAxis_name = "x-axis_" + id; + var xAxis_call = "." + xAxis_name; + var xAxisG = g.selectAll(xAxis_call).data([1]); + xAxisG.enter().append("g") + .attr("class", xAxis_name) + .merge(xAxisG) + .attr("transform", "translate(0," + innerHeight() +")") + .call(xAxis); + + // labels X axis + // rotate text if is longer than... + var rotate = 0; + d3.select(this).select(xAxis_call).selectAll("text").each(function(){ + if (this.getBBox().width > (xScale.bandwidth() - (padding*2))){ + rotate = 1; + d3.select(xAxis_call).selectAll("text").attr("transform", "rotate(-90)") + .attr("y", 0) + .attr("x", -10) + .attr("dy", ".35em") + .style("text-anchor", "end"); + }}); + + // adjust margin and x axis title + var maxh = 15; + if (rotate == 1) { + d3.select(this).select(xAxis_call).selectAll("text").each(function(){ + if (this.getBBox().width > maxh) + maxh = this.getBBox().width; + });}; + margin.bottom = margin.bottom + maxh; + d3.select(xAxis_call).attr("transform", "translate(0," + (innerHeight()) + ")"); + + var text_name = "text_" + id; + g.append("text") + .attr("class", text_name) + .attr("transform", "translate(" + (innerWidth/2) + ", " + (innerHeight() + margin.bottom - 5) + ")") + .style("font-size", "12px") + .style("text-anchor", "middle") + .text(cat); + + yScale + .domain([0, d3.max(data, function (d){ return d[y] ;})]) + .range([innerHeight(), 0]); + + // Y axis + var yAxis_name = "y-axis_" + id; + var yAxis_call = "." + yAxis_name; + var yAxisG = g.selectAll(yAxis_call).data([1]); + yAxisG.enter().append("g") + .attr("class", yAxis_name) + .merge(yAxisG) + .call(yAxis); + + //labels Y axis + var maxw = 0; + d3.select(this).select(yAxis_call).selectAll("text").each(function(){ + if (this.getBBox().width > maxw) { + maxw = this.getBBox().width; + } + }); + margin.left = margin.left + maxw; + g.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + var yLabel = function(){ + if (title == "Count"){ + return "Count"; + } else { + return qnt; + }}; + + g.append("text") + .attr("class", text_name) + .attr("transform", "rotate(-90)") + .attr("x", 0 - (innerHeight()/2)) + .attr("y", 0 - (margin.left)) + .attr("dy", "1em") + .style("font-size", "12px") + .style("text-anchor", "middle") + .text(yLabel); + + // bars + var rects = g.selectAll("rect") + .data(data); + rects.exit().remove(); + rects.enter().append("rect") + .merge(rects) + .attr("x", function (d){ return xScale(d[x]) + padding; }) + .attr("y", function (d){ return yScale(d[y]); }) + .attr("fill", function(d) { return colour(xScale(d[x])); }) + .attr("width", xScale.bandwidth() - (padding*2)) + .attr("height", function (d){ + return innerHeight() - yScale(d.value); + }); + + //chart legend + var leg_name = "legend" + id; + var leg_call = "." + leg_name; + var legend = svg.selectAll("leg_call") + .data(data) + .enter().append("g") + .attr("class", leg_name) + .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; }); + + legend.append("rect") + .attr("x", width() - 18) + .attr("width", 18) + .attr("height", 18) + .style("fill", function(d) { return colour(xScale(d[x]))} ); + + legend.append("text") + .attr("class", text_name) + .attr("x", width() - 24) + .attr("y", 9) + .attr("dy", ".35em") + .style("text-anchor", "end") + .text(function (d){ return d[x] + ": " + floatFormat(d[y]); }); + + }); + } + + my.x = function (_){ + return arguments.length ? (x = _, my) : x; + }; + + my.y = function (_){ + return arguments.length ? (y = _, my) : y; + }; + + my.width = function (_){ + return arguments.length ? (width = _, my) : width; + }; + + my.height = function (_){ + return arguments.length ? (height = _, my) : height; + }; + + my.padding = function (_){ + return arguments.length ? (xScale.padding(_), my) : xScale.padding(); + }; + + return my; + } diff --git a/haitidata/static/js/bootstrap.js b/django_project/core/base_static/js/bootstrap.js similarity index 100% rename from haitidata/static/js/bootstrap.js rename to django_project/core/base_static/js/bootstrap.js diff --git a/haitidata/static/js/bootstrap.min.js b/django_project/core/base_static/js/bootstrap.min.js similarity index 100% rename from haitidata/static/js/bootstrap.min.js rename to django_project/core/base_static/js/bootstrap.min.js diff --git a/django_project/core/base_static/js/csv.js b/django_project/core/base_static/js/csv.js new file mode 100644 index 0000000..373a620 --- /dev/null +++ b/django_project/core/base_static/js/csv.js @@ -0,0 +1,163 @@ +var getCsv = function(csv_link, category, quantity, agg, chartType, id){ + var data = []; + d3.csv(csv_link, function(error, csv) { + if (error) throw error; + csv.forEach(function(row){ + var qnty_v; var ctgy_v; var i = 0; + while (i < Object.keys(row).length){ + if (Object.keys(row)[i] == quantity){ + qnty_v = +Object.values(row)[i] + } else if (Object.keys(row)[i] == category){ + if (Object.values(row)[i].length >= 20){ + + ctgy_v = Object.values(row)[i].substring(0, 17) + "..."; + } else { + ctgy_v = Object.values(row)[i]; + }; + } + i++; + }; + data.push({qnty : qnty_v , ctgy : ctgy_v }); + }) + + + var dropZeros = function(dato){ + return dato.filter(function(d){ + if (d.qnty !== 0){ + return d.qnty; + }}) + }; + + function groupData_sum(dato){ + return d3.nest().key(function(d) {return d.ctgy;}) + .rollup(function(v) {return d3.sum(v, function(d) {return d.qnty;});}) + .entries(dato); + }; + + function groupData_mean(dato){ + return d3.nest().key(function(d) {return d.ctgy;}) + .rollup(function(v) {return d3.mean(v, function(d) {return d.qnty;});}) + .entries(dato); + }; + + function groupData_min(dato){ + return d3.nest().key(function(d) {return d.ctgy;}) + .rollup(function(v) {return d3.min(v, function(d) {return d.qnty;});}) + .entries(dato); + }; + + function groupData_max(dato){ + return d3.nest().key(function(d) {return d.ctgy;}) + .rollup(function(v) {return d3.max(v, function(d) {return d.qnty;});}) + .entries(dato); + }; + + function groupData_count(dato){ + return d3.nest().key(function(d) {return d.ctgy;}) + .rollup(function(v) { return v.length;}) + .entries(dato); + }; + + function descendent(a,b){ + if (a.value < b.value) return 1; + if (a.value > b.value) return -1; + return 0; + } + + + var title; + var dati; + function aggregateData(data, agg){ + + if (agg == 0){ + dati = groupData_sum(dropZeros(data)).sort(descendent); + title = "Sum"; + } else if (agg == 1){ + dati = groupData_mean(data).sort(descendent); + title = "Mean"; + } else if (agg == 2){ + dati = groupData_count(data).sort(descendent); + title = "Count"; + } else if (agg == 3){ + dati = groupData_max(dropZeros(data)).sort(descendent); + title = "Maximum"; + } else if (agg == 4){ + dati = groupData_min(dropZeros(data)).sort(descendent);; + title = "Minimum"; + }; + return dati; + }; + + function create(chartType){ + if (chartType == 0){ + aggregateData(data, agg); + if (dati.length > 20){ + var firstSet = dati.slice(0,19); + var lastSet = dati.slice(19,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); + firstSet.push(lastSet); + dati = firstSet; + }; + var chartArea = "#" + id; + var bar = barChart(category, quantity, title, id) + .x('key') + .y('value') + d3.select(chartArea) + .datum(dati) + .call(bar); + } else if (chartType == 1){ + aggregateData(data, agg) + if (dati.length > 10){ + var firstSet = dati.slice(0,9); + var lastSet = dati.slice(9,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); + firstSet.push(lastSet); + dati = firstSet; + }; + var chartArea = "#" + id; + var pie = pieChart(category, quantity, title, id) + .variable('value') + .category('key') + d3.select(chartArea) + .datum(dati) + .call(pie); + } else if (chartType == 2){ + aggregateData(data, agg) + if (dati.length > 10){ + var firstSet = dati.slice(0,9); + var lastSet = dati.slice(9,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); + firstSet.push(lastSet); + dati = firstSet; + }; + var chartArea = "#" + id; + var donut = donutChart(category, quantity, title, id) + .variable('value') + .category('key') + d3.select(chartArea) + .datum(dati) + .call(donut); + } else if (chartType == 3){ + aggregateData(data, agg) + if (dati.length > 20){ + var firstSet = dati.slice(0,19); + var lastSet = dati.slice(19,).reduce(function(a, b){ return {key: 'others', value: a.value + b.value }}); + firstSet.push(lastSet); + dati = firstSet; + }; + var chartArea = "#" + id; + var line = lineChart(category, quantity, title, id) + .x('key') + .y('value') + d3.select(chartArea) + .datum(dati) + .call(line); + } + }; + + create(chartType); + }); +}; + + + + + + diff --git a/django_project/core/base_static/js/donut.js b/django_project/core/base_static/js/donut.js new file mode 100644 index 0000000..03348e2 --- /dev/null +++ b/django_project/core/base_static/js/donut.js @@ -0,0 +1,415 @@ +function donutChart(cat, qnt, title, id){ + var width = function(){ return document.getElementById(id).parentNode.offsetWidth}, + height = 500, + margin = {top: 80, right: 10, bottom: 10, left: 10}, + colour = d3.scaleOrdinal(d3.schemeCategory20c), // colour scheme + variable, // value in data that will dictate proportions on chart + category, // compare data by + padAngle = 0.015, // effectively dictates the gap between slices + transTime, // transition time + updateData, + floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), + cornerRadius = 3; // sets how rounded the corners are on each slice + + function chart(selection){ + selection.each(function() { + // generate chart + // =========================================================================================== + // Set up constructors for making donut. See https://github.com/d3/d3-shape/blob/master/README.md + var radius = Math.min(width(), (height - margin.top)) / 2; + + // creates a new pie generator + var pie = d3.pie() + .value(function(d) { return floatFormat(d[variable]); }) + .sort(null); + + // contructs and arc generator. This will be used for the donut. The difference between outer and inner + // radius will dictate the thickness of the donut + var arc = d3.arc() + .outerRadius(radius * 0.8) + .innerRadius(radius * 0.6) + .cornerRadius(cornerRadius) + .padAngle(padAngle); + + // this arc is used for aligning the text labels + var outerArc = d3.arc() + .outerRadius(radius * 0.83) + .innerRadius(radius * 0.83); + // =========================================================================================== + + // =========================================================================================== + // append the svg object to the selection + // var svg = selection.append('svg') + var svg = selection.append('svg') + .attr("id", "chart_svg") + .attr('width', width() + margin.left + margin.right) + .attr('height', height + margin.top + margin.bottom) + .append('g') + .attr('transform', 'translate(' + width() / 2 + ',' + height / 2 + ')'); + // =========================================================================================== + + // =========================================================================================== + // g elements to keep elements within svg modular + svg.append('g').attr('class', 'slices'); + svg.append('g').attr('class', 'labelName'); + svg.append('g').attr('class', 'lines'); + // =========================================================================================== + + // =========================================================================================== + // add and colour the donut slices + var path = svg.select('.slices') + .selectAll('path') + .data(pie) + .enter().append('path') + .attr('fill', function(d) { return colour(d.data[category]); }) + .attr('d', arc); + // =========================================================================================== + + // =========================================================================================== + // add text labels + var occupedLabel = []; + var label = svg.select('.labelName').selectAll('text') + .data(pie) + .enter().append('text') + .attr('dy', '.35em') + .html(updateLabelText) + .attr('transform', labelTransform) + .style('text-anchor', function(d) { + // if slice centre is on the left, anchor text to start, otherwise anchor to end + return (midAngle(d)) < Math.PI ? 'start' : 'end'; + }); + // =========================================================================================== + + // =========================================================================================== + // add lines connecting labels to slice. A polyline creates straight lines connecting several points + var occupedPoint = []; + var polyline = svg.select('.lines') + .selectAll('polyline') + .data(pie) + .enter().append('polyline') + .attr('points', calculatePoints); + // =========================================================================================== + + // =========================================================================================== + // add tooltip to mouse events on slices and labels + d3.selectAll('.labelName text, .slices path').call(toolTip); + // =========================================================================================== + + // =========================================================================================== + // FUNCTION TO UPDATE CHART + updateData = function() { + + var updatePath = d3.select('.slices').selectAll('path'); + var updateLines = d3.select('.lines').selectAll('polyline'); + var updateLabels = d3.select('.labelName').selectAll('text'); + + var data0 = path.data(), // store the current data before updating to the new + data1 = pie(data); + + // update data attached to the slices, labels, and polylines. the key function assigns the data to + // the correct element, rather than in order of how the data appears. This means that if a category + // already exists in the chart, it will have its data updated rather than removed and re-added. + updatePath = updatePath.data(data1, key); + updateLines = updateLines.data(data1, key); + updateLabels = updateLabels.data(data1, key); + + // adds new slices/lines/labels + updatePath.enter().append('path') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .attr('fill', function(d) { return colour(d.data[category]); }) + .attr('d', arc); + + updateLines.enter().append('polyline') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .attr('points', calculatePoints); + + updateLabels.enter().append('text') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .html(updateLabelText) + .attr('transform', labelTransform) + .style('text-anchor', function(d) { return (midAngle(d)) < Math.PI ? 'start' : 'end'; }); + + // removes slices/labels/lines that are not in the current dataset + updatePath.exit() + .transition() + .duration(transTime) + .attrTween("d", arcTween) + .remove(); + + updateLines.exit() + .transition() + .duration(transTime) + .attrTween("points", pointTween) + .remove(); + + updateLabels.exit() + .remove(); + + // animates the transition from old angle to new angle for slices/lines/labels + updatePath.transition().duration(transTime) + .attrTween('d', arcTween); + + updateLines.transition().duration(transTime) + .attrTween('points', pointTween); + + updateLabels.transition().duration(transTime) + .attrTween('transform', labelTween) + .styleTween('text-anchor', labelStyleTween); + + updateLabels.html(updateLabelText); // update the label text + + // add tooltip to mouse events on slices and labels + d3.selectAll('.labelName text, .slices path').call(toolTip); + + }; + // =========================================================================================== + // Functions + // calculates the angle for the middle of a slice + function midAngle(d) { return d.startAngle + (d.endAngle - d.startAngle) / 2; } + + // function that creates and adds the tool tip to a selected element + function toolTip(selection) { + + // add tooltip (svg circle element) when mouse enters label or slice + selection.on('mouseenter', function (data) { + + svg.append('text') + .attr('class', 'toolCircle') + .attr('dy', -15) // hard-coded. can adjust this to adjust text vertical alignment in tooltip + .html(toolTipHTML(data)) // add text to the circle. + .style('font-size', '.9em') + .style('text-anchor', 'middle'); // centres text in tooltip + + svg.append('circle') + .attr('class', 'toolCircle') + .attr('r', radius * 0.55) // radius of tooltip circle + .style('fill', colour(data.data[category])) // colour based on category mouse is over + .style('fill-opacity', 0.35); + + }); + + // remove the tooltip when mouse leaves the slice/label + selection.on('mouseout', function () { + d3.selectAll('.toolCircle').remove(); + }); + } + + // function to create the HTML string for the tool tip. Loops through each key in data object + // and returns the html string key: value + function toolTipHTML(data) { + + var tip = '', + i = 0; + + for (var key in data.data) { + + // if value is a number, format it as float + var value = (!isNaN(parseFloat(data.data[key]))) ? parseFloat(data.data[key]) : data.data[key]; + qnt = (title == "Count" ? "Count" : qnt); + + // leave off 'dy' attr for first tspan so the 'dy' attr on text element works. The 'dy' attr on + // tspan effectively imitates a line break. + if (i === 0) tip += '' + cat + ': ' + value + ''; + else tip += '' + qnt + ': ' + value + ''; + i++; + } + + return tip; + } + + // calculate the points for the polyline to pass through + function calculatePoints(d) { + // see label transform function for explanations of these three lines. + var pos = outerArc.centroid(d); + var rev_pos = outerArc.centroid(d); + pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); + // verify label conflict: if overlaps move up of 10 + if (pos[0] < 0 && pos[1] < 0) { + var i = 0; + if (occupedPoint.length >= 1){ + for (i = 0; i < occupedPoint.length; i++){ + if (pos[1] <= (occupedPoint[i] + 10) && (pos[1] >= (occupedPoint[i] - 10))){ + pos[1] = pos[1] - 20; + rev_pos[1] = rev_pos[1] - 20; + } + } + } occupedPoint.push(pos[1]); + } + return [arc.centroid(d), rev_pos, pos] + } + + function labelTransform(d) { + // effectively computes the centre of the slice. + // see https://github.com/d3/d3-shape/blob/master/README.md#arc_centroid + var pos = outerArc.centroid(d); + // verify label conflict: if overlaps move up of 10 + if (pos[0] < 0 && pos[1] < 0) { + var i = 0; + if (occupedLabel.length >= 1){ + for (i = 0; i < occupedLabel.length; i++){ + if (pos[1] <= (occupedLabel[i] + 10) && (pos[1] >= (occupedLabel[i] - 10))){ + pos[1] = pos[1] - 20; + } + } + } occupedLabel.push(pos[1]); + } + // changes the point to be on left or right depending on where label is. + pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); + return 'translate(' + pos + ')'; + } + + function updateLabelText(d) { + return d.data[category] + ': ' + floatFormat(d.data[variable]) + ''; + } + + // function that calculates transition path for label and also it's text anchoring + function labelStyleTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t); + return midAngle(d2) < Math.PI ? 'start':'end'; + }; + } + + function labelTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t), + pos = outerArc.centroid(d2); // computes the midpoint [x,y] of the centre line that would be + // generated by the given arguments. It is defined as startangle + endangle/2 and innerR + outerR/2 + pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1); // aligns the labels on the sides + return 'translate(' + pos + ')'; + }; + } + + function pointTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t), + pos = outerArc.centroid(d2); + pos[0] = radius * 0.95 * (midAngle(d2) < Math.PI ? 1 : -1); + return [arc.centroid(d2), outerArc.centroid(d2), pos]; + }; + } + + // function to calculate the tween for an arc's transition. + // see http://bl.ocks.org/mbostock/5100636 for a thorough explanation. + function arcTween(d) { + var i = d3.interpolate(this._current, d); + this._current = i(0); + return function(t) { return arc(i(t)); }; + } + + function findNeighborArc(i, data0, data1, key) { + var d; + return (d = findPreceding(i, data0, data1, key)) ? {startAngle: d.endAngle, endAngle: d.endAngle} + : (d = findFollowing(i, data0, data1, key)) ? {startAngle: d.startAngle, endAngle: d.startAngle} + : null; + } + // Find the element in data0 that joins the highest preceding element in data1. + function findPreceding(i, data0, data1, key) { + var m = data0.length; + while (--i >= 0) { + var k = key(data1[i]); + for (var j = 0; j < m; ++j) { + if (key(data0[j]) === k) return data0[j]; + } + } + } + + function key(d) { + return d.data[category]; + } + + // Find the element in data0 that joins the lowest following element in data1. + function findFollowing(i, data0, data1, key) { + var n = data1.length, m = data0.length; + while (++i < n) { + var k = key(data1[i]); + for (var j = 0; j < m; ++j) { + if (key(data0[j]) === k) return data0[j]; + } + } + } + + // =========================================================================================== + + }); + } + + // getter and setter functions. See Mike Bostocks post "Towards Reusable Charts" for a tutorial on how this works. + chart.width = function(value) { + if (!arguments.length) return width; + width = value; + return chart; + }; + + chart.height = function(value) { + if (!arguments.length) return height; + height = value; + return chart; + }; + + chart.margin = function(value) { + if (!arguments.length) return margin; + margin = value; + return chart; + }; + + chart.radius = function(value) { + if (!arguments.length) return radius; + radius = value; + return chart; + }; + + chart.padAngle = function(value) { + if (!arguments.length) return padAngle; + padAngle = value; + return chart; + }; + + chart.cornerRadius = function(value) { + if (!arguments.length) return cornerRadius; + cornerRadius = value; + return chart; + }; + + chart.colour = function(value) { + if (!arguments.length) return colour; + colour = value; + return chart; + }; + + chart.variable = function(value) { + if (!arguments.length) return variable; + variable = value; + return chart; + }; + + chart.category = function(value) { + if (!arguments.length) return category; + category = value; + return chart; + }; + + chart.transTime = function(value) { + if (!arguments.length) return transTime; + transTime = value; + return chart; + }; + + chart.data = function(value) { + if (!arguments.length) return data; + data = value; + if (typeof updateData === 'function') updateData(); + return chart; + }; + + return chart; +} \ No newline at end of file diff --git a/django_project/core/base_static/js/getChart.js b/django_project/core/base_static/js/getChart.js new file mode 100644 index 0000000..4c0f007 --- /dev/null +++ b/django_project/core/base_static/js/getChart.js @@ -0,0 +1,56 @@ +var dict_title_tc = {0:"Bar",1:"Pie", 2:"Donut", 3:"Line"}; +var dict_title_agg = {0:"Sum",1:"Mean",2:"Count", 3:"Max", 4:"Min"}; + +function get_chart_detail(){ + var id = "chart_area_plain" + //create area for chart + var createChartArea = function() { + var chartArea = document.getElementById(id); + chartArea.style= "display:table; height:100%"; + }; + + // update chart + var replaceChart = function(){ + doc_chart = document.getElementById(id); + if(doc_chart.childElementCount >= 1){ + doc_chart.removeChild(doc_chart.childNodes[1]); + createChartArea(); + }; + }; + + var chartArea = document.getElementById(id); + createChartArea(); + replaceChart(); + console.log("son qui") + getCsv(csv_url, category, quantity, agg, chart_type, id); +} + +function title_detail(){ + + chart_type = dict_title_tc[chart_type] + return document.getElementById("title_detail").innerHTML = chart_type + " chart based on " + lyr + " layer (Category field: " + category + ", Quantity field: " + quantity + ")"; +} + +function get_chart_popup(){ + var id = "chart_area"; + //create area for chart + var createChartArea = function() { + var chartArea = document.getElementById(id); + chartArea.style= "display:table"; + }; + // update chart + var replaceChart = function(){ + doc_chart = document.getElementById(id); + if(doc_chart.childElementCount >= 1){ + doc_chart.removeChild(doc_chart.childNodes[1]); + createChartArea(); + }; + }; + if (document.getElementById("id_title").value == ""){ + document.getElementById("chart_title").innerHTML = suggestedTitle; + }else document.getElementById("chart_title").innerHTML = document.getElementById("id_title").value; + createChartArea(); + replaceChart(); + attachAbstract(); + getCsv(csv_url, category, quantity, agg, chart_type, id); +} diff --git a/django_project/core/base_static/js/line.js b/django_project/core/base_static/js/line.js new file mode 100644 index 0000000..7eb3266 --- /dev/null +++ b/django_project/core/base_static/js/line.js @@ -0,0 +1,192 @@ +function lineChart(cat, qnt, title, id){ + var width = function(){ return document.getElementById(id).offsetWidth}, + height = 500, + xScale = d3.scaleBand(), + yScale = d3.scaleLinear(), + colour = "steelblue", + x, + y, + margin = { top: 30, bottom: 30, left: 30, right: 30 }, + floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), + xAxis = d3.axisBottom(xScale), + yAxis = d3.axisLeft(yScale); + + function my(selection){ + + selection.each(function(data) { + + var svg_name = "chart_svg" + id; + var svg = selection.append('svg') + .attr("id", svg_name) + .attr("width", width()) + .attr("height", height); + + var g = svg.selectAll("g") + .data([1]); + g = g.enter().append("g") + .merge(g) + .attr("class", svg_name) + .attr("transform", + "translate(" + margin.left + "," + margin.top +")"); + + + var innerWidth = width() - margin.left - margin.right ; + var innerHeight = function(){ return height - margin.top - margin.bottom} ; + + + xScale + .domain(data.map(function (d){ return d[x]; })) + .range([0, (innerWidth - margin.right)]); + + + // X axis + var xAxis_name = "x-axis_" + id; + var xAxis_call = "." + xAxis_name; + var xAxisG = g.selectAll(xAxis_call).data([1]); + xAxisG.enter().append("g") + .attr("class", xAxis_name) + .merge(xAxisG) + .attr("transform", "translate(0," + innerHeight() +")") + .call(xAxis); + + // labels X ax,is + // rotate text if is longer than... + var rotate = 0; + d3.select(this).select(xAxis_call).selectAll("text").each(function(){ + if (this.getBBox().width > xScale.bandwidth()){ + rotate = 1 + d3.select(xAxis_call).selectAll("text").attr("transform", "rotate(-90)") + .attr("y", 0) + .attr("x", -10) + .attr("dy", ".35em") + .style("text-anchor", "end"); + }}); + + // adjust margin and x axis title + var maxh = 15; + if (rotate == 1) { + d3.select(this).select(".x-axis").selectAll("text").each(function(){ + if (this.getBBox().width > maxh) + maxh = this.getBBox().width; + });}; + margin.bottom = margin.bottom + maxh; + d3.select(xAxis_call).attr("transform", "translate(0," + (innerHeight()) + ")"); + + var text_name = "text_" + id; + g.append("text") + .attr("class", text_name) + .attr("transform", "translate(" + (innerWidth/2) + ", " + (innerHeight() + margin.bottom - 5) + ")") + .style("font-size", "12px") + .style("text-anchor", "middle") + .text(cat); + + yScale + .domain([0, d3.max(data, function (d){ return d[y] ;})]) + .range([innerHeight(), 0]); + + // Y axis + var yAxis_name = "y-axis_" + id; + var yAxis_call = "." + yAxis_name; + var yAxisG = g.selectAll(yAxis_call).data([1]); + yAxisG.enter().append("g") + .attr("class", yAxis_name) + .merge(yAxisG) + .call(yAxis); + + //labels Y axis + var maxw = 0; + d3.select(this).select(yAxis_call).selectAll("text").each(function(){ + if (this.getBBox().width > maxw) { + maxw = this.getBBox().width; + } + }); + margin.left = margin.left + maxw; + g.attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + var yLabel = function(){ + if (title == "Count"){ + return "Count"; + } else { + return qnt; + }}; + + g.append("text") + .attr("class", text_name) + .attr("transform", "rotate(-90)") + .attr("x", 0 - (innerHeight()/2)) + .attr("y", 0 - (margin.left)) + .attr("dy", "1em") + .style("font-size", "12px") + .style("text-anchor", "middle") + .text(yLabel); + + //div for tooltip + var div = d3.select("body").append("div") + .style("width","auto") + .style("height", "auto") + .attr("class", "tooltip") + .style("opacity", 0); + + + // lines + var line = d3.line() + .x(function(d) { return xScale(d[x]); }) + .y(function(d) { return yScale(d[y]); }); + + + g.append("path") + .data([data]) + .attr("fill", "none") + .attr("stroke", "steelblue") + .attr("stroke-linejoin", "round") + .attr("stroke-linecap", "round") + .attr("stroke-width", 1.5) + .attr("transform", "translate(" + (xScale.bandwidth() /2) + ", 0)") + .attr("d", line); + + g.selectAll("dot") + .data(data) + .enter().append("circle") + .attr("r", 3.5) + .attr("transform", "translate(" + (xScale.bandwidth() /2) + ", 0)") + .attr("cx", function(d) { return xScale(d[x]); }) + .attr("cy", function(d) { return yScale(d[y]); }) + .on("mouseover", function(d){ + div.transition() + .duration(200) + .style("opacity", 1); + div.html(cat + ": " + d.key + "
    " + yLabel() + ": " + d.value) + .style("left", (d3.event.pageX) + "px") + .style("top", (d3.event.pageY - 40) + "px"); + }) + .on("mouseout", function(d) { + div.transition() + .duration(500) + .style("opacity", 0); + }); + + }); + } + + my.x = function (_){ + return arguments.length ? (x = _, my) : x; + }; + + my.y = function (_){ + return arguments.length ? (y = _, my) : y; + }; + + my.width = function (_){ + return arguments.length ? (width = _, my) : width; + }; + + my.height = function (_){ + return arguments.length ? (height = _, my) : height; + }; + + my.padding = function (_){ + return arguments.length ? (xScale.padding(_), my) : xScale.padding(); + }; + + return my; + } \ No newline at end of file diff --git a/haitidata/static/js/npm.js b/django_project/core/base_static/js/npm.js similarity index 100% rename from haitidata/static/js/npm.js rename to django_project/core/base_static/js/npm.js diff --git a/django_project/core/base_static/js/pie.js b/django_project/core/base_static/js/pie.js new file mode 100644 index 0000000..ea9478b --- /dev/null +++ b/django_project/core/base_static/js/pie.js @@ -0,0 +1,415 @@ +function pieChart(cat, qnt, title, id){ + var width = function(){ return document.getElementById(id).parentNode.offsetWidth}, + height = 500, + margin = {top: 80, right: 100, bottom: 10, left: 10}, + colour = d3.scaleOrdinal(d3.schemeCategory20c), // colour scheme + variable, // value in data that will dictate proportions on chart + category, // compare data by + padAngle = 0.015, // effectively dictates the gap between slices + transTime, // transition time + updateData, + floatFormat = d3.format("." + d3.precisionFixed(0.5) + "f"), + cornerRadius = 3; // sets how rounded the corners are on each slice + + function chart(selection){ + selection.each(function() { + // generate chart + // =========================================================================================== + // Set up constructors for making donut. See https://github.com/d3/d3-shape/blob/master/README.md + var radius = Math.min(width(), (height - margin.top)) / 2; + + // creates a new pie generator + var pie = d3.pie() + .value(function(d) { return floatFormat(d[variable]); }) + .sort(null); + + // contructs and arc generator. This will be used for the donut. The difference between outer and inner + // radius will dictate the thickness of the donut + var arc = d3.arc() + .outerRadius(radius * 0.8) + .innerRadius(2) + .cornerRadius(cornerRadius) + .padAngle(padAngle); + + // this arc is used for aligning the text labels + var outerArc = d3.arc() + .outerRadius(radius * 0.83) + .innerRadius(radius * 0.83); + // =========================================================================================== + + // =========================================================================================== + // append the svg object to the selection + var svg = selection.append('svg') + .attr("id", "chart_svg") + .attr('width', width() + margin.left + margin.right) + .attr('height', height + margin.top + margin.bottom) + .append('g') + .attr('transform', 'translate(' + width() / 2 + ',' + height / 2 + ')'); + // =========================================================================================== + + // =========================================================================================== + // g elements to keep elements within svg modular + svg.append('g').attr('class', 'slices'); + svg.append('g').attr('class', 'labelName'); + svg.append('g').attr('class', 'lines'); + // =========================================================================================== + + // =========================================================================================== + // add and colour the donut slices + var path = svg.select('.slices') + .selectAll('path') + .data(pie) + .enter().append('path') + .attr('fill', function(d) { return colour(d.data[category]); }) + .attr('d', arc); + // =========================================================================================== + + // =========================================================================================== + // add text labels + var occupedLabel = []; + var label = svg.select('.labelName').selectAll('text') + .data(pie) + .enter().append('text') + .attr('dy', '.35em') + .html(updateLabelText) + .attr('transform', labelTransform) + .style('text-anchor', function(d) { + // if slice centre is on the left, anchor text to start, otherwise anchor to end + return (midAngle(d)) < Math.PI ? 'start' : 'end'; + }); + // =========================================================================================== + + // =========================================================================================== + // add lines connecting labels to slice. A polyline creates straight lines connecting several points + var occupedPoint = []; + var polyline = svg.select('.lines') + .selectAll('polyline') + .data(pie) + .enter().append('polyline') + .attr('points', calculatePoints); + // =========================================================================================== + + // =========================================================================================== + // add tooltip to mouse events on slices and labels + d3.selectAll('.labelName text, .slices path').call(toolTip); + // =========================================================================================== + + // =========================================================================================== + // FUNCTION TO UPDATE CHART + updateData = function() { + + var updatePath = d3.select('.slices').selectAll('path'); + var updateLines = d3.select('.lines').selectAll('polyline'); + var updateLabels = d3.select('.labelName').selectAll('text'); + + var data0 = path.data(), // store the current data before updating to the new + data1 = pie(data); + + // update data attached to the slices, labels, and polylines. the key function assigns the data to + // the correct element, rather than in order of how the data appears. This means that if a category + // already exists in the chart, it will have its data updated rather than removed and re-added. + updatePath = updatePath.data(data1, key); + updateLines = updateLines.data(data1, key); + updateLabels = updateLabels.data(data1, key); + + // adds new slices/lines/labels + updatePath.enter().append('path') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .attr('fill', function(d) { return colour(d.data[category]); }) + .attr('d', arc); + + updateLines.enter().append('polyline') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .attr('points', calculatePoints); + + updateLabels.enter().append('text') + .each(function(d, i) { this._current = findNeighborArc(i, data0, data1, key) || d; }) + .html(updateLabelText) + .attr('transform', labelTransform) + .style('text-anchor', function(d) { return (midAngle(d)) < Math.PI ? 'start' : 'end'; }); + + // removes slices/labels/lines that are not in the current dataset + updatePath.exit() + .transition() + .duration(transTime) + .attrTween("d", arcTween) + .remove(); + + updateLines.exit() + .transition() + .duration(transTime) + .attrTween("points", pointTween) + .remove(); + + updateLabels.exit() + .remove(); + + // animates the transition from old angle to new angle for slices/lines/labels + updatePath.transition().duration(transTime) + .attrTween('d', arcTween); + + updateLines.transition().duration(transTime) + .attrTween('points', pointTween); + + updateLabels.transition().duration(transTime) + .attrTween('transform', labelTween) + .styleTween('text-anchor', labelStyleTween); + + updateLabels.html(updateLabelText); // update the label text + + // add tooltip to mouse events on slices and labels + d3.selectAll('.labelName text, .slices path').call(toolTip); + + }; + // =========================================================================================== + // Functions + // calculates the angle for the middle of a slice + function midAngle(d) { return d.startAngle + (d.endAngle - d.startAngle) / 2}; + + // function that creates and adds the tool tip to a selected element + function toolTip(selection) { + + // add tooltip (svg circle element) when mouse enters label or slice + selection.on('mouseenter', function (data) { + + svg.append('rect') + .attr('transform', "translate(-320, 230)") + .attr('class', 'toolRect') + .attr("width", 190) + .attr("height", 60) + .style('fill', colour(data.data[category])) // colour based on category mouse is over + .style('fill-opacity', 0.35); + + svg.append('text') + .attr('transform', "translate(-310, 255)") + .attr('class', 'toolRect') + .html(toolTipHTML(data)) // add text to the rect + .style('font-size', '.9em'); // centres text in tooltip + }); + + // remove the tooltip when mouse leaves the slice/label + selection.on('mouseout', function () { + d3.selectAll('.toolRect').remove(); + }); + } + + // function to create the HTML string for the tool tip. Loops through each key in data object + // and returns the html string key: value + function toolTipHTML(data) { + + var tip = '', + i = 0; + + for (var key in data.data) { + + // if value is a number, format it as a float + var value = (!isNaN(data.data[key])) ? parseFloat(data.data[key]) : data.data[key]; + qnt = (title == "Count" ? "Count" : qnt); + + // leave off 'dy' attr for first tspan so the 'dy' attr on text element works. The 'dy' attr on + // tspan effectively imitates a line break. + if (i === 0) tip += '' + cat + ': ' + value + ''; + else tip += '' + qnt + ': ' + floatFormat(value) + ''; + i++; + } + + return tip; + } + + // calculate the points for the polyline to pass through + function calculatePoints(d) { + // see label transform function for explanations of these three lines. + var pos = outerArc.centroid(d); + var rev_pos = outerArc.centroid(d); + pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); + // verify label conflict: if overlaps move up of 10 + if (pos[0] < 0 && pos[1] < 0) { + var i = 0; + if (occupedPoint.length >= 1){ + for (i = 0; i < occupedPoint.length; i++){ + if (pos[1] <= (occupedPoint[i] + 10) && (pos[1] >= (occupedPoint[i] - 10))){ + pos[1] = pos[1] - 20; + rev_pos[1] = rev_pos[1] - 20; + } + } + } occupedPoint.push(pos[1]); + } + return [arc.centroid(d), rev_pos, pos] + } + + + function labelTransform(d) { + // effectively computes the centre of the slice. + // see https://github.com/d3/d3-shape/blob/master/README.md#arc_centroid + var pos = outerArc.centroid(d); + // verify label conflict: if overlaps move up of 10 + if (pos[0] < 0 && pos[1] < 0) { + var i = 0; + if (occupedLabel.length >= 1){ + for (i = 0; i < occupedLabel.length; i++){ + if (pos[1] <= (occupedLabel[i] + 10) && (pos[1] >= (occupedLabel[i] - 10))){ + pos[1] = pos[1] - 20; + } + } + } occupedLabel.push(pos[1]); + } + // changes the point to be on left or right depending on where label is. + pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); + return 'translate(' + pos + ')'; + } + + function updateLabelText(d) { + return d.data[category] + ': ' + floatFormat(d.data[variable]) + ''; + } + + // function that calculates transition path for label and also it's text anchoring + function labelStyleTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t); + return midAngle(d2) < Math.PI ? 'start':'end'; + }; + } + + function labelTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t), + pos = outerArc.centroid(d2); // computes the midpoint [x,y] of the centre line that would be + // generated by the given arguments. It is defined as startangle + endangle/2 and innerR + outerR/2 + pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1); // aligns the labels on the sides + return 'translate(' + pos + ')'; + }; + } + + function pointTween(d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function(t){ + var d2 = interpolate(t), + pos = outerArc.centroid(d2); + pos[0] = radius * 0.95 * (midAngle(d2) < Math.PI ? 1 : -1); + return [arc.centroid(d2), outerArc.centroid(d2), pos]; + }; + } + + // function to calculate the tween for an arc's transition. + // see http://bl.ocks.org/mbostock/5100636 for a thorough explanation. + function arcTween(d) { + var i = d3.interpolate(this._current, d); + this._current = i(0); + return function(t) { return arc(i(t)); }; + } + + function findNeighborArc(i, data0, data1, key) { + var d; + return (d = findPreceding(i, data0, data1, key)) ? {startAngle: d.endAngle, endAngle: d.endAngle} + : (d = findFollowing(i, data0, data1, key)) ? {startAngle: d.startAngle, endAngle: d.startAngle} + : null; + } + // Find the element in data0 that joins the highest preceding element in data1. + function findPreceding(i, data0, data1, key) { + var m = data0.length; + while (--i >= 0) { + var k = key(data1[i]); + for (var j = 0; j < m; ++j) { + if (key(data0[j]) === k) return data0[j]; + } + } + } + + function key(d) { + return d.data[category]; + } + + // Find the element in data0 that joins the lowest following element in data1. + function findFollowing(i, data0, data1, key) { + var n = data1.length, m = data0.length; + while (++i < n) { + var k = key(data1[i]); + for (var j = 0; j < m; ++j) { + if (key(data0[j]) === k) return data0[j]; + } + } + } + + // =========================================================================================== + + }); + } + + // getter and setter functions. See Mike Bostocks post "Towards Reusable Charts" for a tutorial on how this works. + chart.width = function(value) { + if (!arguments.length) return width; + width = value; + return chart; + }; + + chart.height = function(value) { + if (!arguments.length) return height; + height = value; + return chart; + }; + + chart.margin = function(value) { + if (!arguments.length) return margin; + margin = value; + return chart; + }; + + chart.radius = function(value) { + if (!arguments.length) return radius; + radius = value; + return chart; + }; + + chart.padAngle = function(value) { + if (!arguments.length) return padAngle; + padAngle = value; + return chart; + }; + + chart.cornerRadius = function(value) { + if (!arguments.length) return cornerRadius; + cornerRadius = value; + return chart; + }; + + chart.colour = function(value) { + if (!arguments.length) return colour; + colour = value; + return chart; + }; + + chart.variable = function(value) { + if (!arguments.length) return variable; + variable = value; + return chart; + }; + + chart.category = function(value) { + if (!arguments.length) return category; + category = value; + return chart; + }; + + chart.transTime = function(value) { + if (!arguments.length) return transTime; + transTime = value; + return chart; + }; + + chart.data = function(value) { + if (!arguments.length) return data; + data = value; + if (typeof updateData === 'function') updateData(); + return chart; + }; + + return chart; +} \ No newline at end of file diff --git a/haitidata/static/less/bootstrap.less b/django_project/core/base_static/less/bootstrap.less similarity index 100% rename from haitidata/static/less/bootstrap.less rename to django_project/core/base_static/less/bootstrap.less diff --git a/haitidata/static/less/bootstrap/alerts.less b/django_project/core/base_static/less/bootstrap/alerts.less similarity index 100% rename from haitidata/static/less/bootstrap/alerts.less rename to django_project/core/base_static/less/bootstrap/alerts.less diff --git a/haitidata/static/less/bootstrap/badges.less b/django_project/core/base_static/less/bootstrap/badges.less similarity index 100% rename from haitidata/static/less/bootstrap/badges.less rename to django_project/core/base_static/less/bootstrap/badges.less diff --git a/haitidata/static/less/bootstrap/bootstrap.less b/django_project/core/base_static/less/bootstrap/bootstrap.less similarity index 100% rename from haitidata/static/less/bootstrap/bootstrap.less rename to django_project/core/base_static/less/bootstrap/bootstrap.less diff --git a/haitidata/static/less/bootstrap/breadcrumbs.less b/django_project/core/base_static/less/bootstrap/breadcrumbs.less similarity index 100% rename from haitidata/static/less/bootstrap/breadcrumbs.less rename to django_project/core/base_static/less/bootstrap/breadcrumbs.less diff --git a/haitidata/static/less/bootstrap/button-groups.less b/django_project/core/base_static/less/bootstrap/button-groups.less similarity index 100% rename from haitidata/static/less/bootstrap/button-groups.less rename to django_project/core/base_static/less/bootstrap/button-groups.less diff --git a/haitidata/static/less/bootstrap/buttons.less b/django_project/core/base_static/less/bootstrap/buttons.less similarity index 100% rename from haitidata/static/less/bootstrap/buttons.less rename to django_project/core/base_static/less/bootstrap/buttons.less diff --git a/haitidata/static/less/bootstrap/carousel.less b/django_project/core/base_static/less/bootstrap/carousel.less similarity index 100% rename from haitidata/static/less/bootstrap/carousel.less rename to django_project/core/base_static/less/bootstrap/carousel.less diff --git a/haitidata/static/less/bootstrap/close.less b/django_project/core/base_static/less/bootstrap/close.less similarity index 100% rename from haitidata/static/less/bootstrap/close.less rename to django_project/core/base_static/less/bootstrap/close.less diff --git a/haitidata/static/less/bootstrap/code.less b/django_project/core/base_static/less/bootstrap/code.less similarity index 100% rename from haitidata/static/less/bootstrap/code.less rename to django_project/core/base_static/less/bootstrap/code.less diff --git a/haitidata/static/less/bootstrap/component-animations.less b/django_project/core/base_static/less/bootstrap/component-animations.less similarity index 100% rename from haitidata/static/less/bootstrap/component-animations.less rename to django_project/core/base_static/less/bootstrap/component-animations.less diff --git a/haitidata/static/less/bootstrap/dropdowns.less b/django_project/core/base_static/less/bootstrap/dropdowns.less similarity index 100% rename from haitidata/static/less/bootstrap/dropdowns.less rename to django_project/core/base_static/less/bootstrap/dropdowns.less diff --git a/haitidata/static/less/bootstrap/forms.less b/django_project/core/base_static/less/bootstrap/forms.less similarity index 100% rename from haitidata/static/less/bootstrap/forms.less rename to django_project/core/base_static/less/bootstrap/forms.less diff --git a/haitidata/static/less/bootstrap/glyphicons.less b/django_project/core/base_static/less/bootstrap/glyphicons.less similarity index 100% rename from haitidata/static/less/bootstrap/glyphicons.less rename to django_project/core/base_static/less/bootstrap/glyphicons.less diff --git a/haitidata/static/less/bootstrap/grid.less b/django_project/core/base_static/less/bootstrap/grid.less similarity index 100% rename from haitidata/static/less/bootstrap/grid.less rename to django_project/core/base_static/less/bootstrap/grid.less diff --git a/haitidata/static/less/bootstrap/input-groups.less b/django_project/core/base_static/less/bootstrap/input-groups.less similarity index 100% rename from haitidata/static/less/bootstrap/input-groups.less rename to django_project/core/base_static/less/bootstrap/input-groups.less diff --git a/haitidata/static/less/bootstrap/jumbotron.less b/django_project/core/base_static/less/bootstrap/jumbotron.less similarity index 100% rename from haitidata/static/less/bootstrap/jumbotron.less rename to django_project/core/base_static/less/bootstrap/jumbotron.less diff --git a/haitidata/static/less/bootstrap/labels.less b/django_project/core/base_static/less/bootstrap/labels.less similarity index 100% rename from haitidata/static/less/bootstrap/labels.less rename to django_project/core/base_static/less/bootstrap/labels.less diff --git a/haitidata/static/less/bootstrap/list-group.less b/django_project/core/base_static/less/bootstrap/list-group.less similarity index 100% rename from haitidata/static/less/bootstrap/list-group.less rename to django_project/core/base_static/less/bootstrap/list-group.less diff --git a/haitidata/static/less/bootstrap/media.less b/django_project/core/base_static/less/bootstrap/media.less similarity index 100% rename from haitidata/static/less/bootstrap/media.less rename to django_project/core/base_static/less/bootstrap/media.less diff --git a/haitidata/static/less/bootstrap/mixins.less b/django_project/core/base_static/less/bootstrap/mixins.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins.less rename to django_project/core/base_static/less/bootstrap/mixins.less diff --git a/haitidata/static/less/bootstrap/mixins/alerts.less b/django_project/core/base_static/less/bootstrap/mixins/alerts.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/alerts.less rename to django_project/core/base_static/less/bootstrap/mixins/alerts.less diff --git a/haitidata/static/less/bootstrap/mixins/background-variant.less b/django_project/core/base_static/less/bootstrap/mixins/background-variant.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/background-variant.less rename to django_project/core/base_static/less/bootstrap/mixins/background-variant.less diff --git a/haitidata/static/less/bootstrap/mixins/border-radius.less b/django_project/core/base_static/less/bootstrap/mixins/border-radius.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/border-radius.less rename to django_project/core/base_static/less/bootstrap/mixins/border-radius.less diff --git a/haitidata/static/less/bootstrap/mixins/buttons.less b/django_project/core/base_static/less/bootstrap/mixins/buttons.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/buttons.less rename to django_project/core/base_static/less/bootstrap/mixins/buttons.less diff --git a/haitidata/static/less/bootstrap/mixins/center-block.less b/django_project/core/base_static/less/bootstrap/mixins/center-block.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/center-block.less rename to django_project/core/base_static/less/bootstrap/mixins/center-block.less diff --git a/haitidata/static/less/bootstrap/mixins/clearfix.less b/django_project/core/base_static/less/bootstrap/mixins/clearfix.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/clearfix.less rename to django_project/core/base_static/less/bootstrap/mixins/clearfix.less diff --git a/haitidata/static/less/bootstrap/mixins/forms.less b/django_project/core/base_static/less/bootstrap/mixins/forms.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/forms.less rename to django_project/core/base_static/less/bootstrap/mixins/forms.less diff --git a/haitidata/static/less/bootstrap/mixins/gradients.less b/django_project/core/base_static/less/bootstrap/mixins/gradients.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/gradients.less rename to django_project/core/base_static/less/bootstrap/mixins/gradients.less diff --git a/haitidata/static/less/bootstrap/mixins/grid-framework.less b/django_project/core/base_static/less/bootstrap/mixins/grid-framework.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/grid-framework.less rename to django_project/core/base_static/less/bootstrap/mixins/grid-framework.less diff --git a/haitidata/static/less/bootstrap/mixins/grid.less b/django_project/core/base_static/less/bootstrap/mixins/grid.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/grid.less rename to django_project/core/base_static/less/bootstrap/mixins/grid.less diff --git a/haitidata/static/less/bootstrap/mixins/hide-text.less b/django_project/core/base_static/less/bootstrap/mixins/hide-text.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/hide-text.less rename to django_project/core/base_static/less/bootstrap/mixins/hide-text.less diff --git a/haitidata/static/less/bootstrap/mixins/image.less b/django_project/core/base_static/less/bootstrap/mixins/image.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/image.less rename to django_project/core/base_static/less/bootstrap/mixins/image.less diff --git a/haitidata/static/less/bootstrap/mixins/labels.less b/django_project/core/base_static/less/bootstrap/mixins/labels.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/labels.less rename to django_project/core/base_static/less/bootstrap/mixins/labels.less diff --git a/haitidata/static/less/bootstrap/mixins/list-group.less b/django_project/core/base_static/less/bootstrap/mixins/list-group.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/list-group.less rename to django_project/core/base_static/less/bootstrap/mixins/list-group.less diff --git a/haitidata/static/less/bootstrap/mixins/nav-divider.less b/django_project/core/base_static/less/bootstrap/mixins/nav-divider.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/nav-divider.less rename to django_project/core/base_static/less/bootstrap/mixins/nav-divider.less diff --git a/haitidata/static/less/bootstrap/mixins/nav-vertical-align.less b/django_project/core/base_static/less/bootstrap/mixins/nav-vertical-align.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/nav-vertical-align.less rename to django_project/core/base_static/less/bootstrap/mixins/nav-vertical-align.less diff --git a/haitidata/static/less/bootstrap/mixins/opacity.less b/django_project/core/base_static/less/bootstrap/mixins/opacity.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/opacity.less rename to django_project/core/base_static/less/bootstrap/mixins/opacity.less diff --git a/haitidata/static/less/bootstrap/mixins/pagination.less b/django_project/core/base_static/less/bootstrap/mixins/pagination.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/pagination.less rename to django_project/core/base_static/less/bootstrap/mixins/pagination.less diff --git a/haitidata/static/less/bootstrap/mixins/panels.less b/django_project/core/base_static/less/bootstrap/mixins/panels.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/panels.less rename to django_project/core/base_static/less/bootstrap/mixins/panels.less diff --git a/haitidata/static/less/bootstrap/mixins/progress-bar.less b/django_project/core/base_static/less/bootstrap/mixins/progress-bar.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/progress-bar.less rename to django_project/core/base_static/less/bootstrap/mixins/progress-bar.less diff --git a/haitidata/static/less/bootstrap/mixins/reset-filter.less b/django_project/core/base_static/less/bootstrap/mixins/reset-filter.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/reset-filter.less rename to django_project/core/base_static/less/bootstrap/mixins/reset-filter.less diff --git a/haitidata/static/less/bootstrap/mixins/reset-text.less b/django_project/core/base_static/less/bootstrap/mixins/reset-text.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/reset-text.less rename to django_project/core/base_static/less/bootstrap/mixins/reset-text.less diff --git a/haitidata/static/less/bootstrap/mixins/resize.less b/django_project/core/base_static/less/bootstrap/mixins/resize.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/resize.less rename to django_project/core/base_static/less/bootstrap/mixins/resize.less diff --git a/haitidata/static/less/bootstrap/mixins/responsive-visibility.less b/django_project/core/base_static/less/bootstrap/mixins/responsive-visibility.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/responsive-visibility.less rename to django_project/core/base_static/less/bootstrap/mixins/responsive-visibility.less diff --git a/haitidata/static/less/bootstrap/mixins/size.less b/django_project/core/base_static/less/bootstrap/mixins/size.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/size.less rename to django_project/core/base_static/less/bootstrap/mixins/size.less diff --git a/haitidata/static/less/bootstrap/mixins/tab-focus.less b/django_project/core/base_static/less/bootstrap/mixins/tab-focus.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/tab-focus.less rename to django_project/core/base_static/less/bootstrap/mixins/tab-focus.less diff --git a/haitidata/static/less/bootstrap/mixins/table-row.less b/django_project/core/base_static/less/bootstrap/mixins/table-row.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/table-row.less rename to django_project/core/base_static/less/bootstrap/mixins/table-row.less diff --git a/haitidata/static/less/bootstrap/mixins/text-emphasis.less b/django_project/core/base_static/less/bootstrap/mixins/text-emphasis.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/text-emphasis.less rename to django_project/core/base_static/less/bootstrap/mixins/text-emphasis.less diff --git a/haitidata/static/less/bootstrap/mixins/text-overflow.less b/django_project/core/base_static/less/bootstrap/mixins/text-overflow.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/text-overflow.less rename to django_project/core/base_static/less/bootstrap/mixins/text-overflow.less diff --git a/haitidata/static/less/bootstrap/mixins/vendor-prefixes.less b/django_project/core/base_static/less/bootstrap/mixins/vendor-prefixes.less similarity index 100% rename from haitidata/static/less/bootstrap/mixins/vendor-prefixes.less rename to django_project/core/base_static/less/bootstrap/mixins/vendor-prefixes.less diff --git a/haitidata/static/less/bootstrap/modals.less b/django_project/core/base_static/less/bootstrap/modals.less similarity index 100% rename from haitidata/static/less/bootstrap/modals.less rename to django_project/core/base_static/less/bootstrap/modals.less diff --git a/haitidata/static/less/bootstrap/navbar.less b/django_project/core/base_static/less/bootstrap/navbar.less similarity index 100% rename from haitidata/static/less/bootstrap/navbar.less rename to django_project/core/base_static/less/bootstrap/navbar.less diff --git a/haitidata/static/less/bootstrap/navs.less b/django_project/core/base_static/less/bootstrap/navs.less similarity index 100% rename from haitidata/static/less/bootstrap/navs.less rename to django_project/core/base_static/less/bootstrap/navs.less diff --git a/haitidata/static/less/bootstrap/normalize.less b/django_project/core/base_static/less/bootstrap/normalize.less similarity index 100% rename from haitidata/static/less/bootstrap/normalize.less rename to django_project/core/base_static/less/bootstrap/normalize.less diff --git a/haitidata/static/less/bootstrap/pager.less b/django_project/core/base_static/less/bootstrap/pager.less similarity index 100% rename from haitidata/static/less/bootstrap/pager.less rename to django_project/core/base_static/less/bootstrap/pager.less diff --git a/haitidata/static/less/bootstrap/pagination.less b/django_project/core/base_static/less/bootstrap/pagination.less similarity index 100% rename from haitidata/static/less/bootstrap/pagination.less rename to django_project/core/base_static/less/bootstrap/pagination.less diff --git a/haitidata/static/less/bootstrap/panels.less b/django_project/core/base_static/less/bootstrap/panels.less similarity index 100% rename from haitidata/static/less/bootstrap/panels.less rename to django_project/core/base_static/less/bootstrap/panels.less diff --git a/haitidata/static/less/bootstrap/popovers.less b/django_project/core/base_static/less/bootstrap/popovers.less similarity index 100% rename from haitidata/static/less/bootstrap/popovers.less rename to django_project/core/base_static/less/bootstrap/popovers.less diff --git a/haitidata/static/less/bootstrap/print.less b/django_project/core/base_static/less/bootstrap/print.less similarity index 100% rename from haitidata/static/less/bootstrap/print.less rename to django_project/core/base_static/less/bootstrap/print.less diff --git a/haitidata/static/less/bootstrap/progress-bars.less b/django_project/core/base_static/less/bootstrap/progress-bars.less similarity index 100% rename from haitidata/static/less/bootstrap/progress-bars.less rename to django_project/core/base_static/less/bootstrap/progress-bars.less diff --git a/haitidata/static/less/bootstrap/responsive-embed.less b/django_project/core/base_static/less/bootstrap/responsive-embed.less similarity index 100% rename from haitidata/static/less/bootstrap/responsive-embed.less rename to django_project/core/base_static/less/bootstrap/responsive-embed.less diff --git a/haitidata/static/less/bootstrap/responsive-utilities.less b/django_project/core/base_static/less/bootstrap/responsive-utilities.less similarity index 100% rename from haitidata/static/less/bootstrap/responsive-utilities.less rename to django_project/core/base_static/less/bootstrap/responsive-utilities.less diff --git a/haitidata/static/less/bootstrap/scaffolding.less b/django_project/core/base_static/less/bootstrap/scaffolding.less similarity index 100% rename from haitidata/static/less/bootstrap/scaffolding.less rename to django_project/core/base_static/less/bootstrap/scaffolding.less diff --git a/haitidata/static/less/bootstrap/tables.less b/django_project/core/base_static/less/bootstrap/tables.less similarity index 100% rename from haitidata/static/less/bootstrap/tables.less rename to django_project/core/base_static/less/bootstrap/tables.less diff --git a/haitidata/static/less/bootstrap/theme.less b/django_project/core/base_static/less/bootstrap/theme.less similarity index 100% rename from haitidata/static/less/bootstrap/theme.less rename to django_project/core/base_static/less/bootstrap/theme.less diff --git a/haitidata/static/less/bootstrap/thumbnails.less b/django_project/core/base_static/less/bootstrap/thumbnails.less similarity index 100% rename from haitidata/static/less/bootstrap/thumbnails.less rename to django_project/core/base_static/less/bootstrap/thumbnails.less diff --git a/haitidata/static/less/bootstrap/tooltip.less b/django_project/core/base_static/less/bootstrap/tooltip.less similarity index 100% rename from haitidata/static/less/bootstrap/tooltip.less rename to django_project/core/base_static/less/bootstrap/tooltip.less diff --git a/haitidata/static/less/bootstrap/type.less b/django_project/core/base_static/less/bootstrap/type.less similarity index 100% rename from haitidata/static/less/bootstrap/type.less rename to django_project/core/base_static/less/bootstrap/type.less diff --git a/haitidata/static/less/bootstrap/utilities.less b/django_project/core/base_static/less/bootstrap/utilities.less similarity index 100% rename from haitidata/static/less/bootstrap/utilities.less rename to django_project/core/base_static/less/bootstrap/utilities.less diff --git a/haitidata/static/less/bootstrap/variables.less b/django_project/core/base_static/less/bootstrap/variables.less similarity index 100% rename from haitidata/static/less/bootstrap/variables.less rename to django_project/core/base_static/less/bootstrap/variables.less diff --git a/haitidata/static/less/bootstrap/wells.less b/django_project/core/base_static/less/bootstrap/wells.less similarity index 100% rename from haitidata/static/less/bootstrap/wells.less rename to django_project/core/base_static/less/bootstrap/wells.less diff --git a/haitidata/static/less/fonts.less b/django_project/core/base_static/less/fonts.less similarity index 100% rename from haitidata/static/less/fonts.less rename to django_project/core/base_static/less/fonts.less diff --git a/haitidata/static/less/haitidata.less b/django_project/core/base_static/less/haitidata.less similarity index 97% rename from haitidata/static/less/haitidata.less rename to django_project/core/base_static/less/haitidata.less index bfb7224..80cea58 100755 --- a/haitidata/static/less/haitidata.less +++ b/django_project/core/base_static/less/haitidata.less @@ -175,7 +175,7 @@ form { .navbar-header { i { - color: white; + color: @brand-primary; font-size: 2em; } @@ -712,6 +712,60 @@ footer { .grid-spacer { margin-top: 30px; } + +#accordion { + .panel { + border-radius: 0; + border-top: 2px solid @gray-light; + line-height: 1em; + } + .panel-heading { + background: none; + border: 0; + } + .panel-body { + img { + margin-bottom: 1em; + } + small { + color: @gray; + font-size: 0.825em; + } + form { + font-size: 0.825em; + .form-control { + background: none; + color: @gray-dark; + font-size: 0.825em; + height: 24px; + line-height: 1; + -webkit-box-shadow: none; + box-shadow: none; + } + } + } +} + +#create-chart { + small { + color: @gray; + font-size: 0.825em; + } + form { + font-size: 0.825em; + .form-control { + background: none; + color: @gray-dark; + font-size: 0.825em; + height: 24px; + line-height: 1; + -webkit-box-shadow: none; + box-shadow: none; + } + } +} + + /* ------ OSGeo Importer ------------------------------ */ body.importer { diff --git a/haitidata/static/less/variables.less b/django_project/core/base_static/less/variables.less similarity index 100% rename from haitidata/static/less/variables.less rename to django_project/core/base_static/less/variables.less diff --git a/haitidata/static/osgeo_importer/partials/upload.html b/django_project/core/base_static/osgeo_importer/partials/upload.html similarity index 100% rename from haitidata/static/osgeo_importer/partials/upload.html rename to django_project/core/base_static/osgeo_importer/partials/upload.html diff --git a/haitidata/static/osgeo_importer/partials/uploadModal.html b/django_project/core/base_static/osgeo_importer/partials/uploadModal.html similarity index 100% rename from haitidata/static/osgeo_importer/partials/uploadModal.html rename to django_project/core/base_static/osgeo_importer/partials/uploadModal.html diff --git a/haitidata/static/osgeo_importer/partials/uploadWizard.html b/django_project/core/base_static/osgeo_importer/partials/uploadWizard.html similarity index 100% rename from haitidata/static/osgeo_importer/partials/uploadWizard.html rename to django_project/core/base_static/osgeo_importer/partials/uploadWizard.html diff --git a/django_project/core/geonode_static/.bowerrc b/django_project/core/geonode_static/.bowerrc new file mode 100644 index 0000000..149efed --- /dev/null +++ b/django_project/core/geonode_static/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : ".components" +} diff --git a/django_project/core/geonode_static/bower.json b/django_project/core/geonode_static/bower.json new file mode 100644 index 0000000..c93970f --- /dev/null +++ b/django_project/core/geonode_static/bower.json @@ -0,0 +1,33 @@ +{ + "name": "geonode", + "version": "2.0.0", + "main": "geonode/css/base.css", + "componentsDirectory": ".components", + "dependencies": { + "datatables": "1.10", + "select2": "3.2.0", + "jquery": ">=1.8.0", + "jquery-timeago": "0.11.4", + "jquery-ui": "1.10.4", + "requirejs": "2.1.2", + "requirejs-text": "2.0.3", + "underscore": "1.4.2", + "jquery-waypoints": "1.1.7", + "bootstrap": "3.1.1", + "moment": "2.8.3", + "raty": "2.5.2", + "json2": "43d7836c8ec9b31a02a31ae0c400bdae04d3650d", + "bootstrap-wysiwyghtml5": "https://github.com/jhollingworth/bootstrap-wysihtml5.git", + "fontselect-jquery-plugin": "https://github.com/tommoor/fontselect-jquery-plugin.git", + "multi-select": "https://github.com/lou/multi-select.git", + "jquery-ajaxprogress": "https://github.com/kpozin/jquery-ajaxprogress.git", + "jquery.ajaxQueue": "https://github.com/gnarf/jquery-ajaxQueue.git", + "angular": "1.3.0", + "angular-leaflet-directive": "0.7.9", + "zeroclipboard": "2.1.5", + "leaflet-fullscreen": "https://github.com/Leaflet/Leaflet.fullscreen.git", + "eonasdan-bootstrap-datetimepicker": "~3.1.3", + "bootstrap-treeview": "1.2.0", + "bootstrap-tokenfield": "0.12.0" + } +} diff --git a/django_project/core/geonode_static/geonode/css/base.css b/django_project/core/geonode_static/geonode/css/base.css new file mode 100644 index 0000000..7261180 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/base.css @@ -0,0 +1,5 @@ +@import "../css/font-awesome.min.css";/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:'Lato',sans-serif;font-size:16px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2c689c;text-decoration:none}a:hover,a:focus{color:#1b4060;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:22px;margin-bottom:11px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:11px;margin-bottom:11px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:41px}h2,.h2{font-size:34px}h3,.h3{font-size:28px}h4,.h4{font-size:20px}h5,.h5{font-size:16px}h6,.h6{font-size:14px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:18px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:24px}}small,.small{font-size:87%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#2c689c}a.text-primary:hover,a.text-primary:focus{color:#204d74}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#2c689c}a.bg-primary:hover,a.bg-primary:focus{background-color:#204d74}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:11px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:22px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:11px 22px;margin:0 0 22px;font-size:20px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:22px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:10.5px;margin:0 0 11px;font-size:15px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:22px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:22px;font-size:24px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:16px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:36px;padding:6px 12px;font-size:16px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:36px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:33px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:49px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:38px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm{height:33px;line-height:33px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:33px;line-height:33px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:33px;min-height:36px;padding:6px 10px;font-size:14px;line-height:1.5}.input-lg{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-lg{height:49px;line-height:49px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:49px;line-height:49px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:49px;min-height:42px;padding:11px 16px;font-size:20px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:49px;height:49px;line-height:49px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:33px;height:33px;line-height:33px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:20px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:14px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:16px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#2c689c;border-color:#265a88}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#0a1824}.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#193b58}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#204d74;border-color:#193b58}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#193b58;border-color:#0a1824}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#2c689c;border-color:#265a88}.btn-primary .badge{color:#2c689c;background-color:#fff}.btn-success{color:#fff;background-color:#27ca3b;border-color:#23b535}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1f9f2f;border-color:#0e4a16}.btn-success:hover{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#1f9f2f;border-color:#198126}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#198126;border-color:#0e4a16}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#27ca3b;border-color:#23b535}.btn-success .badge{color:#27ca3b;background-color:#fff}.btn-info{color:#fff;background-color:#1fa0a0;border-color:#1b8b8b}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#177575;border-color:#062020}.btn-info:hover{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#177575;border-color:#115757}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#115757;border-color:#062020}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#1fa0a0;border-color:#1b8b8b}.btn-info .badge{color:#1fa0a0;background-color:#fff}.btn-warning{color:#fff;background-color:#ff8f31;border-color:#ff8118}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#fd7300;border-color:#974500}.btn-warning:hover{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#fd7300;border-color:#d96300}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d96300;border-color:#974500}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ff8f31;border-color:#ff8118}.btn-warning .badge{color:#ff8f31;background-color:#fff}.btn-danger{color:#fff;background-color:#af0900;border-color:#960800}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#7c0600;border-color:#160100}.btn-danger:hover{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#7c0600;border-color:#580500}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#580500;border-color:#160100}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#af0900;border-color:#960800}.btn-danger .badge{color:#af0900;background-color:#fff}.btn-link{color:#2c689c;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#1b4060;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:14px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:16px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2c689c}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:14px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:49px;padding:10px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:49px;line-height:49px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:33px;line-height:33px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:16px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:14px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:20px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#2c689c}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#2c689c}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:22px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:7px;margin-bottom:7px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-btn.btn-sm{margin-top:8.5px;margin-bottom:8.5px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:22px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#2c689c;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#1b4060;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#2c689c;border-color:#2c689c;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:20px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:14px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#2c689c}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#204d74}.label-success{background-color:#27ca3b}.label-success[href]:hover,.label-success[href]:focus{background-color:#1f9f2f}.label-info{background-color:#1fa0a0}.label-info[href]:hover,.label-info[href]:focus{background-color:#177575}.label-warning{background-color:#ff8f31}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#fd7300}.label-danger{background-color:#af0900}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#7c0600}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:14px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2c689c;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:2em;padding-bottom:2em;margin-bottom:2em;color:inherit;background-color:#2c689c}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:1em;font-size:24px;font-weight:200}.jumbotron>hr{border-top-color:#204d74}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:3.2em;padding-bottom:3.2em}.container .jumbotron,.container-fluid .jumbotron{padding-left:4em;padding-right:4em}.jumbotron h1,.jumbotron .h1{font-size:72px}}.thumbnail{display:block;padding:4px;margin-bottom:22px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2c689c}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:22px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:22px;margin-bottom:22px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:14px;line-height:22px;color:#fff;text-align:center;background-color:#2c689c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#27ca3b}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#1fa0a0}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff8f31}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#af0900}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#2c689c;border-color:#2c689c}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#accce8}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:18px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:22px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#2c689c}.panel-primary>.panel-heading{color:#fff;background-color:#2c689c;border-color:#2c689c}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2c689c}.panel-primary>.panel-heading .badge{color:#2c689c;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2c689c}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:24px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:'Lato',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:'Lato',sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:16px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:16px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}@font-face{font-family:'Lato';font-style:normal;font-weight:700;src:local('Lato Bold'),local('Lato-Bold'),url(../fonts/lato_bold.ttf) format('truetype')}@font-face{font-family:'Lato';font-style:normal;font-weight:300;src:local('Lato Light'),local('Lato-Light'),url(../fonts/lato_light.ttf) format('truetype')}@font-face{font-family:'Lato';font-style:normal;font-weight:400;src:local('Lato Regular'),local('Lato-Regular'),url(../fonts/lato_regular.ttf) format('truetype')}body{background:#333;font-family:'Lato',sans-serif;font-size:16px;padding-top:60px}a{color:#2c689c}h1,h2,h3,h4,h5,h6{font-weight:700}select{background:#fff;border:1px solid #777;height:30px;line-height:30px}code{background-color:#eee;color:#333;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}form label{margin-right:2.5em}form input{border:1px solid #eee;padding:5px}#wrap{background:#fff;padding-bottom:40px;padding-top:10px;width:100%}article.tab-pane{padding:20px 0}.no-style-list{list-style-type:none;margin-top:20px}.dl-horizontal dt{text-overflow:clip;white-space:normal;overflow:hidden}.page-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-inverse{background-color:#333;border:0}.navbar-inverse .navbar-nav>li>a{color:#fff;font-weight:600;padding-top:25px;padding-bottom:25px}.navbar-inverse .navbar-nav>li>a:hover{background-color:#2c689c}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#2c689c}.navbar-nav .dropdown-menu{background-color:#2c689c;border-top:1px solid #2c689c}.navbar-nav .dropdown-menu a{color:#fff}.navbar-nav .dropdown-menu li a:hover{background-color:#204d74;color:#fff}.navbar-nav .dropdown-menu .divider{background-color:#204d74}.navbar-nav .search{left:15px;position:relative;color:#444;top:20px;margin-right:25px}.navbar-nav .search .fa-search{position:absolute;top:8px;left:10px}.navbar-nav .search input{width:120px;height:32px;border:1px solid #333;border-radius:5px;outline-width:0;text-indent:32px;-webkit-transition:width .2s;transition:width .2s}.navbar-nav .search input:focus{width:240px}.navbar-nav .avatar img{border-radius:50%;margin-bottom:-15px;margin-right:10px;margin-top:-15px;height:42px;width:42px}.navbar-nav .fa-angle-down{margin-left:10px}.navbar-brand{background:url("../img/logo.png") 0 10px no-repeat;background-size:100%;text-indent:-9999px;height:65px;width:200px}.navbar-collapse{max-height:none}.navbar-header i{color:#fff;font-size:2em}.navbar-header button{border:0;margin-top:.75em}.home .navbar-inverse{background-color:rgba(0,0,0,0.5)}.home #wrap{margin-top:-60px;padding-bottom:0}.home .jumbotron{background:#2c689c;color:#fff;margin-bottom:0;padding:7.5em 0 3.75em;text-shadow:2px 2px 2px rgba(0,0,0,0.4)}.home .jumbotron a{color:#ff8f31}.home .jumbotron p{margin-bottom:0}.home .jumbotron .btn-default{background:rgba(0,0,0,0.2);border:2px solid #fff;color:#fff;font-weight:600;margin-top:1em;min-width:320px}.home .jumbotron .btn-default:hover{background:rgba(0,0,0,0.4)}.home .big-search{background:#333;color:#fff;padding-bottom:3em;padding-top:1em}.home .big-search h1,.home .big-search p{text-align:center}.home .big-search a{color:#2c689c}.home .big-search .search{left:0;position:relative;color:#444;top:20px;padding-bottom:2em;margin:auto;width:50%}.home .big-search .search input{width:100%;height:56px;border:1px solid #333;border-radius:5px;outline-width:0;font-size:1.5em}.home .big-search .search input{text-indent:64px}.home .big-search .search .fa-search{position:absolute;top:10px;left:15px}.home .big-search .btn-default{background:transparent;border:none;color:#ff8f31}.home .big-search .btn-default:hover{text-decoration:underline}.home #datasets{padding:1em 0}.home #datasets p{font-size:14px}.home #datasets h4{text-transform:uppercase;font-size:14px}.home #datasets a{color:#333}.home #datasets a:hover{text-decoration:none}.home #datasets a .category{margin:0 -15px;padding:2em 0}.home #datasets a .category:hover{color:#2c689c}.home #datasets a span{font-size:4em}.home #showcase{background:#eee;padding:2em 0;text-align:center}.home #showcase .col-md-3{padding:2em 1em}.home #showcase .col-md-3 img{height:180px;width:100%}.home #showcase p{font-size:18px}.yourlabs-autocomplete{top:100%;max-height:360px;overflow:auto}.yourlabs-autocomplete .choice,.yourlabs-autocomplete [data-value],.yourlabs-autocomplete em{max-width:800px}.input-group .yourlabs-autocomplete{top:30px !important;margin-top:40px}.jumbotron{background:#2c689c;color:#fff;padding:40px 0 60px;text-shadow:2px 2px 2px rgba(0,0,0,0.4);margin-top:-10px}.jumbotron a{color:#ff8f31}.jumbotron p{margin-bottom:0}.home-facets{text-align:center;padding:2em 0}.home-facets a{color:#000}.home-facets a:hover{color:#2c689c;text-decoration:none}.actions .fa,.filter .fa{margin-right:8px}.items-list{padding:10px 0}.items-list .btn{margin-right:5px;margin-top:10px}.items-list .item-info{border-top:1px solid #eee}.items-list h4{font-weight:400;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.items-list h4 a{color:#333}.items-list h4 a:hover{color:#af0900;text-decoration:none}.items-list .owner{color:#333;font-size:14px}.items-list .owner a{color:#333}.items-list .owner a:hover{color:#af0900;text-decoration:none}.items-list .thumb img{border:1px solid #eee;width:100%}.items-list .abstract{color:#777;font-weight:300;min-height:80px}.items-list .actions{color:#777;font-weight:300}.items-list .actions i{margin-right:.75em}.items-list .actions a{color:#777;margin-right:.5em}.items-list .actions a:hover{color:#555;text-decoration:none}.item-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #777;padding:0}.profile-avatar h5 a{color:#333;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .list-inline{margin:.5em 0}.item-thumb{padding-left:0;padding-right:0}.item-thumb img{width:100%}.item-details{background:#fff;color:#333}.item-details .item-meta{margin-top:1em}.item-details .item-meta .item-category{font-size:12px;text-transform:uppercase}.item-details .btn-sm{margin-right:-17px;margin-top:-1px;padding:.5em 1em}.item-details .item-items{border-top:1px solid #eee}.item-details .item-items ul{margin:0 0 0 -15px;padding:.5em}.item-details .item-items ul i{margin-right:.5em}.detail-page-actions{margin-top:20px}.detail-page-actions i{padding-right:3px}.layer-actions{margin-top:20px}.layer-actions i{padding-right:3px}.edit-modal{text-align:center}.arcgis-legend>li{text-align:right}.arcgis-legend>li>img{padding-right:25px}.grid-spacer{margin-top:30px}.controls{width:320px}.controls>div,.controls>input,.controls>select,.controls>textarea{width:320px}.map-actions{margin-top:20px}.map-actions i{padding-right:3px}.documents-actions{margin-top:20px}.documents-actions i{padding-right:3px}.profile-container{padding:1em}.profile-avatar{background:#fff;border:1px solid #eee;padding:0}.profile-avatar h5 a{color:#333;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-avatar h5 a:hover{color:#af0900;text-decoration:none}.profile-avatar h5 a i{margin-left:.75em}.profile-avatar h5 a i:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items{border-top:1px solid #eee;color:#555}.profile-avatar .profile-items i{margin-left:0;margin-right:.125em}.profile-avatar .profile-items i a:hover{color:#af0900;text-decoration:none}.profile-avatar .profile-items .list-inline{margin:.5em 0}.profile-avatar li a{color:#555;margin-right:.5em}.profile-avatar li a:hover{color:#af0900;text-decoration:none}.profile-avatar img{margin:0;width:100%}.profile-image{padding-left:0;padding-right:0}.profile-image img{width:100%}.profile-details{background:#fff;color:#333}.profile-details .group-logo{margin:.5em;padding:0}.profile-details .group-logo img{width:60px}nav.filter h4{background:#555;font-size:14px;font-weight:300;padding:10px 0;text-transform:uppercase;border-radius:3px}nav.filter h4 a{color:#fff}nav.filter h4 a.toggle{text-decoration:none}nav.filter h4 i{margin-left:8px}nav.filter .active{color:#2c689c}nav.filter .active .badge{background:#2c689c}nav.filter .closed{display:none}nav.filter li a{border-bottom:1px solid #eee;cursor:pointer;padding:5px 10px}.selections h5{font-weight:400}.selections .thumb{float:left}#sort{cursor:pointer}#sort a{color:#777}#sort .selected{color:#2c689c}.group-container{padding:1em}.group-avatar{border:1px solid #eee;padding:0}.group-avatar h5 a{color:#333;display:block;margin-bottom:-0.5em;margin-top:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-avatar h5 a:hover{color:#af0900;text-decoration:none}.group-avatar h5 a i{margin-left:.75em}.group-avatar h5 a i:hover{color:#af0900;text-decoration:none}.group-items{border-top:1px solid #eee;color:#555}.group-items i{margin-left:0;margin-right:.125em}.group-items i a:hover{color:#af0900;text-decoration:none}.group-items .list-inline{margin:.5em 0}.group-image{height:120px;overflow:hidden}.group-container .group-logo{padding:1em 0;width:100%}.group-details .group-logo img{width:100%}#drop-zone{background:#eee;margin-bottom:10px;padding:5px;border:2px dashed #777}#drop-zone h3{color:#777;margin:20px 0;text-align:center}#drop-zone h3 i{font-size:3em}#clear-button,#upload-button{margin-top:20px}#upload_form input[type="text"]{display:block;margin:0;width:480px;appearance:none;box-shadow:none;border-radius:none;transition:box-shadow .3s,border .3s}#upload_form input[type="text"]:focus{border:solid 1px #707070;box-shadow:0 0 5px 1px #969696;outline:none}#upload_form #id_doc_file{padding:.5em;width:480px}#upload_form #id_doc_url{display:block;width:480px}#upload_form #s2id_resource{display:block;width:480px}@media (max-width:991px){#upload_form input[type="text"]{width:360px}#upload_form #id_doc_file,#upload_form #id_doc_url,#upload_form #s2id_resource{width:360px}}footer{color:#fff;padding:1.5em}footer a{color:#ff8f31}footer a:hover{color:#eb6b00}footer form{color:#333}.rotate-45{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.select2-container-multi .select2-choices .select2-search-field input{height:auto}.datepicker{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.filter input.datepicker{width:100%}#composerCart .list-group i{margin-right:0}.selections{margin-top:1em}.comment{padding:1em 0 .5em}.comment .avatar img{border-radius:50%}.comment small{font-weight:bold;color:#777;margin-left:10px}.comment button,.comment p{margin-left:58px;margin-top:-0.5em}.list-group-item .avatar img{border-radius:50%;padding-right:.5em}.no-style-list{list-style-type:none;margin-top:20px}.activity-item{border-bottom:1px solid #777;border-left:1px solid #777;color:#777;margin-top:-10px;padding:20px 18px}.activity-item .comment{content:"\f086"}.activity-item .comment:before{content:"\f086"}.activity-item .delete{content:"\f014"}.activity-item .delete:before{content:"\f014"}.activity-item .edit{content:"\f14b"}.activity-item .edit:before{content:"\f14b"}.activity-item .layer{content:"\f096";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.activity-item .layer:before{content:"\f096"}.activity-item .map{content:"\f041"}.activity-item .map:before{content:"\f041"}.activity-item .upload{content:"\f093"}.activity-item .upload:before{content:"\f093"}.icon-activity{background:#777;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;border:2px solid #fff;color:#fff;float:left;font-family:FontAwesome;font-weight:normal;font-size:1.3em;font-style:normal;height:35px;line-height:1.25em;margin:0 10px 10px -35px;padding:4px;text-align:center;text-decoration:inherit;width:35px}.thumb-activity{clear:both;height:60px}.thumb-activity img{border:1px solid #555;float:left;margin-right:5px;width:60px}.activity{content:"\f045"}.activity:before{content:"\f045"}.activity-timestamp{margin-top:-10px}#permission_form .select2-container{width:250px}.form-signin{max-width:330px;padding:15px;margin:0 auto}.form-signin .checkbox,.form-signin .form-signin-heading{margin-bottom:10px}.form-signin .checkbox{font-weight:normal}.form-signin .form-control{position:relative;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px;font-size:1em}.form-signin .form-control:focus{z-index:2}.form-signin input[type="username"]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.form-signin input[type="password"]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.modal-body .list-unstyled a{color:#333;font-size:1.14285714em;line-height:2em}.modal-body .list-unstyled a i{margin-right:8px}.modal-body .list-unstyled a:hover{color:#2c689c;text-decoration:none}.modal-divider{padding-top:1px;margin:5px 1px 6px;border-bottom:1px solid #e1e8ed}.list-group i{margin-right:8px}@media (max-width:991px){.navbar-header{float:none}.navbar-toggle{display:block}.navbar-collapse{border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1)}.navbar-collapse.collapse{display:none !important}.navbar-nav{float:none !important;margin:7.5px -15px}.navbar-nav>li{float:none}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-collapse.collapse.in{display:block !important}.collapsing{overflow:hidden !important}.home .navbar-inverse{background-color:#333}.navbar-inverse .navbar-nav>li>a{padding-bottom:.75em;padding-top:.75em}.navbar-inverse .navbar-nav .search{padding-bottom:.75em;top:0}.navbar-inverse .navbar-nav .search input{width:100%}}#member_form_container .select2-container{padding:0}.table-user-profile-attribute{font-weight:bold} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/css/ext-compatibility.css b/django_project/core/geonode_static/geonode/css/ext-compatibility.css new file mode 100644 index 0000000..2bc0671 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/ext-compatibility.css @@ -0,0 +1,50 @@ +/* Fixes for compatibility issues between extjs and bootstrap */ + +img { + max-width: none; +} + +.x-panel table, .x-window table { + margin: 0; + padding: 0; + border-top: none; + margin-bottom: 0px; + margin-top: 0px; + width: auto; +} + +.x-panel td, .x-panel th, .x-window td, .x-window th{ + border-top: none; + margin: 0; + padding: 0; +} + +.x-panel-body { + border: none; + list-style:none; +} +.x-panel-body ul{ +list-style:none; +} + +.x-grid3-hd-inner{ +height:20px; +font-size: 14px; +} +.x-grid3-cell-inner{ +height:20px; +font-size: 14px; +padding-top:5px; +} +.hero-unit h1{ +font-size:40px +} + +.x-panel * { + -moz-box-sizing: content-box; /* firefox */ + -ms-box-sizing: content-box; /* ie */ + -webkit-box-sizing: content-box; /* webkit */ + -khtml-box-sizing: content-box; /* konqueror */ + box-sizing: content-box; /* css3 */ +} + diff --git a/django_project/core/geonode_static/geonode/css/fileuploadfield.css b/django_project/core/geonode_static/geonode/css/fileuploadfield.css new file mode 100644 index 0000000..18a8b51 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/fileuploadfield.css @@ -0,0 +1,33 @@ +/*! + * Ext JS Library 3.2.1 + * Copyright(c) 2006-2010 Ext JS, Inc. + * licensing@extjs.com + * http://www.extjs.com/license + */ +/* + * FileUploadField component styles + */ +.x-form-file-wrap { + position: relative; + height: 22px; +} +.x-form-file-wrap .x-form-file { + position: absolute; + right: 0; + -moz-opacity: 0; + filter:alpha(opacity: 0); + opacity: 0; + z-index: 2; + height: 22px; +} +.x-form-file-wrap .x-form-file-btn { + position: absolute; + right: 0; + z-index: 1; +} +.x-form-file-wrap .x-form-file-text { + position: absolute; + left: 0; + z-index: 3; + color: #777; +} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/css/font-awesome.css b/django_project/core/geonode_static/geonode/css/font-awesome.css new file mode 100644 index 0000000..880eb82 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/font-awesome.css @@ -0,0 +1,2026 @@ +/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.4.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} diff --git a/django_project/core/geonode_static/geonode/css/font-awesome.min.css b/django_project/core/geonode_static/geonode/css/font-awesome.min.css new file mode 100644 index 0000000..ee4e978 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/django_project/core/geonode_static/geonode/css/geoexplorer/map_geoexplorer.css b/django_project/core/geonode_static/geonode/css/geoexplorer/map_geoexplorer.css new file mode 100644 index 0000000..d509cde --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/geoexplorer/map_geoexplorer.css @@ -0,0 +1,16 @@ +body {font-family: Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;} +#aboutbutton { + display: none; +} +#paneltbar { + margin-top: 68px; +} +button.logout { + display: none; +} +button.login { + display:none; +} +.map-title-header { + margin-right: 10px; +} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/css/images/layers-2x.png b/django_project/core/geonode_static/geonode/css/images/layers-2x.png new file mode 100755 index 0000000..200c333 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/layers-2x.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/layers.png b/django_project/core/geonode_static/geonode/css/images/layers.png new file mode 100755 index 0000000..1a72e57 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/layers.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/marker-icon-2x.png b/django_project/core/geonode_static/geonode/css/images/marker-icon-2x.png new file mode 100755 index 0000000..e4abba3 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/marker-icon-2x.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/marker-icon.png b/django_project/core/geonode_static/geonode/css/images/marker-icon.png new file mode 100755 index 0000000..950edf2 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/marker-icon.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/marker-shadow.png b/django_project/core/geonode_static/geonode/css/images/marker-shadow.png new file mode 100755 index 0000000..9fd2979 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/marker-shadow.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/spritesheet-2x.png b/django_project/core/geonode_static/geonode/css/images/spritesheet-2x.png new file mode 100755 index 0000000..1525c9f Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/spritesheet-2x.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/spritesheet.png b/django_project/core/geonode_static/geonode/css/images/spritesheet.png new file mode 100755 index 0000000..f7035a1 Binary files /dev/null and b/django_project/core/geonode_static/geonode/css/images/spritesheet.png differ diff --git a/django_project/core/geonode_static/geonode/css/images/spritesheet.svg b/django_project/core/geonode_static/geonode/css/images/spritesheet.svg new file mode 100755 index 0000000..5423793 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/images/spritesheet.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/django_project/core/geonode_static/geonode/css/leaflet.draw.css b/django_project/core/geonode_static/geonode/css/leaflet.draw.css new file mode 100755 index 0000000..9a6f261 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/leaflet.draw.css @@ -0,0 +1,9 @@ +.leaflet-draw-section{position:relative}.leaflet-draw-toolbar{margin-top:12px}.leaflet-draw-toolbar-top{margin-top:0}.leaflet-draw-toolbar-notop a:first-child{border-top-right-radius:0}.leaflet-draw-toolbar-nobottom a:last-child{border-bottom-right-radius:0}.leaflet-draw-toolbar a{background-image:url('images/spritesheet.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg');background-repeat:no-repeat;background-size:270px 30px;background-clip:padding-box}.leaflet-retina .leaflet-draw-toolbar a{background-image:url('images/spritesheet-2x.png');background-image:linear-gradient(transparent,transparent),url('images/spritesheet.svg')} +.leaflet-draw a{display:block;text-align:center;text-decoration:none}.leaflet-draw a .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.leaflet-draw-actions{display:none;list-style:none;margin:0;padding:0;position:absolute;left:26px;top:0;white-space:nowrap}.leaflet-touch .leaflet-draw-actions{left:32px}.leaflet-right .leaflet-draw-actions{right:26px;left:auto}.leaflet-touch .leaflet-right .leaflet-draw-actions{right:32px;left:auto}.leaflet-draw-actions li{display:inline-block} +.leaflet-draw-actions li:first-child a{border-left:0}.leaflet-draw-actions li:last-child a{-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.leaflet-right .leaflet-draw-actions li:last-child a{-webkit-border-radius:0;border-radius:0}.leaflet-right .leaflet-draw-actions li:first-child a{-webkit-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.leaflet-draw-actions a{background-color:#919187;border-left:1px solid #AAA;color:#FFF;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:28px;text-decoration:none;padding-left:10px;padding-right:10px;height:28px} +.leaflet-touch .leaflet-draw-actions a{font-size:12px;line-height:30px;height:30px}.leaflet-draw-actions-bottom{margin-top:0}.leaflet-draw-actions-top{margin-top:1px}.leaflet-draw-actions-top a,.leaflet-draw-actions-bottom a{height:27px;line-height:27px}.leaflet-draw-actions a:hover{background-color:#a0a098}.leaflet-draw-actions-top.leaflet-draw-actions-bottom a{height:26px;line-height:26px}.leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:-2px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:0 -1px} +.leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-31px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-29px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-62px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-60px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-92px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-90px -1px} +.leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-122px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-120px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-152px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-150px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-182px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-180px -1px} +.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-212px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-210px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-242px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-240px -2px}.leaflet-mouse-marker{background-color:#fff;cursor:crosshair}.leaflet-draw-tooltip{background:#363636;background:rgba(0,0,0,0.5);border:1px solid transparent;-webkit-border-radius:4px;border-radius:4px;color:#fff;font:12px/18px "Helvetica Neue",Arial,Helvetica,sans-serif;margin-left:20px;margin-top:-21px;padding:4px 8px;position:absolute;visibility:hidden;white-space:nowrap;z-index:6} +.leaflet-draw-tooltip:before{border-right:6px solid black;border-right-color:rgba(0,0,0,0.5);border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:7px;left:-7px}.leaflet-error-draw-tooltip{background-color:#f2dede;border:1px solid #e6b6bd;color:#b94a48}.leaflet-error-draw-tooltip:before{border-right-color:#e6b6bd}.leaflet-draw-tooltip-single{margin-top:-12px}.leaflet-draw-tooltip-subtext{color:#f8d5e4}.leaflet-draw-guide-dash{font-size:1%;opacity:.6;position:absolute;width:5px;height:5px} +.leaflet-edit-marker-selected{background-color:rgba(254,87,161,0.1);border:4px dashed rgba(254,87,161,0.6);-webkit-border-radius:4px;border-radius:4px;box-sizing:content-box}.leaflet-edit-move{cursor:move}.leaflet-edit-resize{cursor:pointer}.leaflet-oldie .leaflet-draw-toolbar{border:1px solid #999} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/css/map_leaflet.css b/django_project/core/geonode_static/geonode/css/map_leaflet.css new file mode 100644 index 0000000..07b70c5 --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/map_leaflet.css @@ -0,0 +1,80 @@ +/* New Map */ +.pad0 { + padding: 0; +} +.options-panel .form-group { + padding: 20px; + background: #fafafa; + border-bottom: 1px solid #eee; +} +.newmap h4, .newmap > div { + padding: 0 20px; +} +.newmap > div { + padding-bottom: 20px; +} +.newmap label { + display: block; +} +.newmap #add_layer_select { + display: inline-block; + width: 68%; + vertical-align: middle; +} +.newmap #add_layer_button { + display: inline-block; + width: 30%; + vertical-align: middle; +} +.newmap #layer-list { + list-style: none; + padding: 0; +} + +.newmap #background-layer-list { + list-style: none; + padding: 0; +} +.newmap #layer-list li { + margin-bottom: 5px; + padding: 5px 7px; + border-radius: 3px; + background: #fcfcfc; + border: 1Px solid #eee; + position: relative; + max-width: 450px; +} +.newmap #layer-list input[type="checkbox"] { + margin-right: 5px; + vertical-align: text-bottom; + margin-top: 0; + margin-bottom: 2px; +} +.newmap #layer-list button { + color: #fff; + background-color: #5bc0de; + line-height: 15px; + border-radius: 3px; + border: 1px solid #46b8da; + font-size: 10px; + padding: 0 4px; + position: absolute; + top: 7px; + right: 7px; +} +.newmap #layer-list button:hover { + background-color: #39b3d7; + border-color: 1px solid #269abc; +} +.newmap input[type="radio"] { + margin-right: 5px; + vertical-align: text-bottom; + margin-top: 0; + margin-bottom: 2px; +} +.newmap .buttons { + margin-top: 30px; +} +.newmap .buttons button { + margin-right: 5px; +} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/css/social_twitter.css b/django_project/core/geonode_static/geonode/css/social_twitter.css new file mode 100644 index 0000000..ca05d5a --- /dev/null +++ b/django_project/core/geonode_static/geonode/css/social_twitter.css @@ -0,0 +1,34 @@ +.tweetbutton { + inherit: none; + height: 16px; + display: inline-block; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + /* gradient background -- thanks http://ie.microsoft.com/testdrive/graphics/cssgradientbackgroundmaker/ */ +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -ms-linear-gradient(top, #FEFEFE 0%, #DFDFDF 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -moz-linear-gradient(top, #FEFEFE 0%, #DFDFDF 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -o-linear-gradient(top, #FEFEFE 0%, #DFDFDF 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -webkit-gradient(linear, left top, left bottom, color-stop(0, #FEFEFE), color-stop(1, #DFDFDF)); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -webkit-linear-gradient(top, #FEFEFE 0%, #DFDFDF 100%); + + border: 1px solid #cccccc; + padding-left: 22px; + padding-right: 4px; + padding-top: 2px; + + font-weight: bold; + font-size: 0.7em; + font-family: Arial; + + color: #333333; + text-decoration: none; +} + +.tweetbutton:hover { + background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -ms-linear-gradient(top, #f7f7f7 0%, #d9d9d9 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -moz-linear-gradient(top, #f7f7f7 0%, #d9d9d9 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -o-linear-gradient(top, #f7f7f7 0%, #d9d9d9 100%); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -webkit-gradient(linear, left top, left bottom, color-stop(0, #f7f7f7), color-stop(1, #d9d9d9)); +background: url('https://si0.twimg.com/images/dev/cms/intents/bird/bird_blue/bird_16_blue.png') no-repeat 2px 1px, -webkit-linear-gradient(top, #f7f7f7 0%, #d9d9d9 100%); +} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/fonts/FontAwesome.otf b/django_project/core/geonode_static/geonode/fonts/FontAwesome.otf new file mode 100644 index 0000000..681bdd4 Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/FontAwesome.otf differ diff --git a/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.eot b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..a30335d Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.eot differ diff --git a/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.svg b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..6fd19ab --- /dev/null +++ b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.svg @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.ttf b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..d7994e1 Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.ttf differ diff --git a/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..6fd4ede Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff differ diff --git a/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff2 b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..5560193 Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/fontawesome-webfont.woff2 differ diff --git a/django_project/core/geonode_static/geonode/fonts/lato_bold.ttf b/django_project/core/geonode_static/geonode/fonts/lato_bold.ttf new file mode 100644 index 0000000..7434369 Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/lato_bold.ttf differ diff --git a/django_project/core/geonode_static/geonode/fonts/lato_light.ttf b/django_project/core/geonode_static/geonode/fonts/lato_light.ttf new file mode 100644 index 0000000..a958067 Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/lato_light.ttf differ diff --git a/django_project/core/geonode_static/geonode/fonts/lato_regular.ttf b/django_project/core/geonode_static/geonode/fonts/lato_regular.ttf new file mode 100644 index 0000000..04ea8ef Binary files /dev/null and b/django_project/core/geonode_static/geonode/fonts/lato_regular.ttf differ diff --git a/django_project/core/geonode_static/geonode/img/arrows_gr_sm.png b/django_project/core/geonode_static/geonode/img/arrows_gr_sm.png new file mode 100644 index 0000000..7bd356b Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/arrows_gr_sm.png differ diff --git a/django_project/core/geonode_static/geonode/img/avatar.png b/django_project/core/geonode_static/geonode/img/avatar.png new file mode 100644 index 0000000..6882d97 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/avatar.png differ diff --git a/django_project/core/geonode_static/geonode/img/calendar_in.png b/django_project/core/geonode_static/geonode/img/calendar_in.png new file mode 100644 index 0000000..c6458eb Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/calendar_in.png differ diff --git a/django_project/core/geonode_static/geonode/img/default-avatar.jpg b/django_project/core/geonode_static/geonode/img/default-avatar.jpg new file mode 100644 index 0000000..37a6276 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/default-avatar.jpg differ diff --git a/django_project/core/geonode_static/geonode/img/facebook.png b/django_project/core/geonode_static/geonode/img/facebook.png new file mode 100644 index 0000000..15c083c Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/facebook.png differ diff --git a/django_project/core/geonode_static/geonode/img/favicon.ico b/django_project/core/geonode_static/geonode/img/favicon.ico new file mode 100644 index 0000000..a70eb83 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/favicon.ico differ diff --git a/django_project/core/geonode_static/geonode/img/glyphicons-halflings-white.png b/django_project/core/geonode_static/geonode/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/glyphicons-halflings-white.png differ diff --git a/django_project/core/geonode_static/geonode/img/glyphicons-halflings.png b/django_project/core/geonode_static/geonode/img/glyphicons-halflings.png new file mode 100644 index 0000000..a996999 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/glyphicons-halflings.png differ diff --git a/django_project/core/geonode_static/geonode/img/google_plus.png b/django_project/core/geonode_static/geonode/img/google_plus.png new file mode 100644 index 0000000..796e159 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/google_plus.png differ diff --git a/django_project/core/geonode_static/geonode/img/loading.gif b/django_project/core/geonode_static/geonode/img/loading.gif new file mode 100644 index 0000000..d0bce15 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/loading.gif differ diff --git a/django_project/core/geonode_static/geonode/img/logo-bg.png b/django_project/core/geonode_static/geonode/img/logo-bg.png new file mode 100644 index 0000000..a5cceb2 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/logo-bg.png differ diff --git a/django_project/core/geonode_static/geonode/img/logo.png b/django_project/core/geonode_static/geonode/img/logo.png new file mode 100644 index 0000000..251334d Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/logo.png differ diff --git a/django_project/core/geonode_static/geonode/img/missing_thumb.png b/django_project/core/geonode_static/geonode/img/missing_thumb.png new file mode 100644 index 0000000..76c61d0 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/missing_thumb.png differ diff --git a/django_project/core/geonode_static/geonode/img/pointer.png b/django_project/core/geonode_static/geonode/img/pointer.png new file mode 100644 index 0000000..763b694 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/pointer.png differ diff --git a/django_project/core/geonode_static/geonode/img/twitter.png b/django_project/core/geonode_static/geonode/img/twitter.png new file mode 100644 index 0000000..e9bcb29 Binary files /dev/null and b/django_project/core/geonode_static/geonode/img/twitter.png differ diff --git a/django_project/core/geonode_static/geonode/js/base/base.js b/django_project/core/geonode_static/geonode/js/base/base.js new file mode 100644 index 0000000..e726c38 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/base/base.js @@ -0,0 +1,10 @@ +$(function() { +$(".announcement").find(".close").on("click", function (e) { + url = $(e.target).data('dismiss-url'); + + $.ajax({ + type: "POST", + url: url + }) + }); +}); \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/draw/leaflet.draw.js b/django_project/core/geonode_static/geonode/js/draw/leaflet.draw.js new file mode 100755 index 0000000..070f9b2 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/draw/leaflet.draw.js @@ -0,0 +1,9 @@ +/* + Leaflet.draw 0.4.10, a plugin that adds drawing and editing tools to Leaflet powered maps. + (c) 2012-2017, Jacob Toye, Jon West, Smartrak, Leaflet + + https://github.com/Leaflet/Leaflet.draw + http://leafletjs.com + */ +!function(t,e,i){L.drawVersion="0.4.10",L.Draw={},L.drawLocal={draw:{toolbar:{actions:{title:"Cancel drawing",text:"Cancel"},finish:{title:"Finish drawing",text:"Finish"},undo:{title:"Delete last point drawn",text:"Delete last point"},buttons:{polyline:"Draw a polyline",polygon:"Draw a polygon",rectangle:"Draw a rectangle",circle:"Draw a circle",marker:"Draw a marker"}},handlers:{circle:{tooltip:{start:"Click and drag to draw circle."},radius:"Radius"},marker:{tooltip:{start:"Click map to place marker."}},polygon:{tooltip:{start:"Click to start drawing shape.",cont:"Click to continue drawing shape.",end:"Click first point to close this shape."}},polyline:{error:"Error: shape edges cannot cross!",tooltip:{start:"Click to start drawing line.",cont:"Click to continue drawing line.",end:"Click last point to finish line."}},rectangle:{tooltip:{start:"Click and drag to draw rectangle."}},simpleshape:{tooltip:{end:"Release mouse to finish drawing."}}}},edit:{toolbar:{actions:{save:{title:"Save changes.",text:"Save"},cancel:{title:"Cancel editing, discards all changes.",text:"Cancel"},clearAll:{title:"clear all layers.",text:"Clear All"}},buttons:{edit:"Edit layers.",editDisabled:"No layers to edit.",remove:"Delete layers.",removeDisabled:"No layers to delete."}},handlers:{edit:{tooltip:{text:"Drag handles, or marker to edit feature.",subtext:"Click cancel to undo changes."}},remove:{tooltip:{text:"Click on a feature to remove"}}}}},L.Draw.Event={},L.Draw.Event.CREATED="draw:created",L.Draw.Event.EDITED="draw:edited",L.Draw.Event.DELETED="draw:deleted",L.Draw.Event.DRAWSTART="draw:drawstart",L.Draw.Event.DRAWSTOP="draw:drawstop",L.Draw.Event.DRAWVERTEX="draw:drawvertex",L.Draw.Event.EDITSTART="draw:editstart",L.Draw.Event.EDITMOVE="draw:editmove",L.Draw.Event.EDITRESIZE="draw:editresize",L.Draw.Event.EDITVERTEX="draw:editvertex",L.Draw.Event.EDITSTOP="draw:editstop",L.Draw.Event.DELETESTART="draw:deletestart",L.Draw.Event.DELETESTOP="draw:deletestop",L.Draw=L.Draw||{},L.Draw.Feature=L.Handler.extend({includes:L.Mixin.Events,initialize:function(t,e){this._map=t,this._container=t._container,this._overlayPane=t._panes.overlayPane,this._popupPane=t._panes.popupPane,e&&e.shapeOptions&&(e.shapeOptions=L.Util.extend({},this.options.shapeOptions,e.shapeOptions)),L.setOptions(this,e)},enable:function(){this._enabled||(L.Handler.prototype.enable.call(this),this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.DRAWSTART,{layerType:this.type}))},disable:function(){this._enabled&&(L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DRAWSTOP,{layerType:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(L.DomUtil.disableTextSelection(),t.getContainer().focus(),this._tooltip=new L.Draw.Tooltip(this._map),L.DomEvent.on(this._container,"keyup",this._cancelDrawing,this))},removeHooks:function(){this._map&&(L.DomUtil.enableTextSelection(),this._tooltip.dispose(),this._tooltip=null,L.DomEvent.off(this._container,"keyup",this._cancelDrawing,this))},setOptions:function(t){L.setOptions(this,t)},_fireCreatedEvent:function(t){this._map.fire(L.Draw.Event.CREATED,{layer:t,layerType:this.type})},_cancelDrawing:function(t){this._map.fire("draw:canceled",{layerType:this.type}),27===t.keyCode&&this.disable()}}),L.Draw.Polyline=L.Draw.Feature.extend({statics:{TYPE:"polyline"},Poly:L.Polyline,options:{allowIntersection:!0,repeatMode:!1,drawError:{color:"#b00b00",timeout:2500},icon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon"}),touchIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-touch-icon"}),guidelineDistance:20,maxGuideLineLength:4e3,shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!1,clickable:!0},metric:!0,feet:!0,nautic:!1,showLength:!0,zIndexOffset:2e3},initialize:function(t,e){L.Browser.touch&&(this.options.icon=this.options.touchIcon),this.options.drawError.message=L.drawLocal.draw.handlers.polyline.error,e&&e.drawError&&(e.drawError=L.Util.extend({},this.options.drawError,e.drawError)),this.type=L.Draw.Polyline.TYPE,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._markers=[],this._markerGroup=new L.LayerGroup,this._map.addLayer(this._markerGroup),this._poly=new L.Polyline([],this.options.shapeOptions),this._tooltip.updateContent(this._getTooltipText()),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:"leaflet-mouse-marker",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on("mouseout",this._onMouseOut,this).on("mousemove",this._onMouseMove,this).on("mousedown",this._onMouseDown,this).on("mouseup",this._onMouseUp,this).addTo(this._map),this._map.on("mouseup",this._onMouseUp,this).on("mousemove",this._onMouseMove,this).on("zoomlevelschange",this._onZoomEnd,this).on("touchstart",this._onTouch,this).on("zoomend",this._onZoomEnd,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._clearHideErrorTimeout(),this._cleanUpShape(),this._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers,this._map.removeLayer(this._poly),delete this._poly,this._mouseMarker.off("mousedown",this._onMouseDown,this).off("mouseout",this._onMouseOut,this).off("mouseup",this._onMouseUp,this).off("mousemove",this._onMouseMove,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._clearGuides(),this._map.off("mouseup",this._onMouseUp,this).off("mousemove",this._onMouseMove,this).off("zoomlevelschange",this._onZoomEnd,this).off("zoomend",this._onZoomEnd,this).off("touchstart",this._onTouch,this).off("click",this._onTouch,this)},deleteLastVertex:function(){if(!(this._markers.length<=1)){var t=this._markers.pop(),e=this._poly,i=e.getLatLngs(),o=i.splice(-1,1)[0];this._poly.setLatLngs(i),this._markerGroup.removeLayer(t),e.getLatLngs().length<2&&this._map.removeLayer(e),this._vertexChanged(o,!1)}},addVertex:function(t){if(this._markers.length>=2&&!this.options.allowIntersection&&this._poly.newLatLngIntersects(t))return void this._showErrorTooltip();this._errorShown&&this._hideErrorTooltip(),this._markers.push(this._createMarker(t)),this._poly.addLatLng(t),2===this._poly.getLatLngs().length&&this._map.addLayer(this._poly),this._vertexChanged(t,!0)},completeShape:function(){this._markers.length<=1||(this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable())},_finishShape:function(){var t=this._poly._defaultShape?this._poly._defaultShape():this._poly.getLatLngs(),e=this._poly.newLatLngIntersects(t[t.length-1]);if(!this.options.allowIntersection&&e||!this._shapeIsValid())return void this._showErrorTooltip();this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()},_shapeIsValid:function(){return!0},_onZoomEnd:function(){null!==this._markers&&this._updateGuide()},_onMouseMove:function(t){var e=this._map.mouseEventToLayerPoint(t.originalEvent),i=this._map.layerPointToLatLng(e);this._currentLatLng=i,this._updateTooltip(i),this._updateGuide(e),this._mouseMarker.setLatLng(i),L.DomEvent.preventDefault(t.originalEvent)},_vertexChanged:function(t,e){this._map.fire(L.Draw.Event.DRAWVERTEX,{layers:this._markerGroup}),this._updateFinishHandler(),this._updateRunningMeasure(t,e),this._clearGuides(),this._updateTooltip()},_onMouseDown:function(t){if(!this._clickHandled&&!this._touchHandled&&!this._disableMarkers){this._onMouseMove(t),this._clickHandled=!0,this._disableNewMarkers();var e=t.originalEvent,i=e.clientX,o=e.clientY;this._startPoint.call(this,i,o)}},_startPoint:function(t,e){this._mouseDownOrigin=L.point(t,e)},_onMouseUp:function(t){var e=t.originalEvent,i=e.clientX,o=e.clientY;this._endPoint.call(this,i,o,t),this._clickHandled=null},_endPoint:function(e,i,o){if(this._mouseDownOrigin){var n=L.point(e,i).distanceTo(this._mouseDownOrigin);this._calculateFinishDistance(o.latlng)<10&&L.Browser.touch?this._finishShape():Math.abs(n)<9*(t.devicePixelRatio||1)&&this.addVertex(o.latlng),this._enableNewMarkers()}this._mouseDownOrigin=null},_onTouch:function(t){var e,i,o=t.originalEvent;!o.touches||!o.touches[0]||this._clickHandled||this._touchHandled||this._disableMarkers||(e=o.touches[0].clientX,i=o.touches[0].clientY,this._disableNewMarkers(),this._touchHandled=!0,this._startPoint.call(this,e,i),this._endPoint.call(this,e,i,t),this._touchHandled=null),this._clickHandled=null},_onMouseOut:function(){this._tooltip&&this._tooltip._onMouseOut.call(this._tooltip)},_calculateFinishDistance:function(t){var e;if(this._markers.length>0){var i;if(this.type===L.Draw.Polyline.TYPE)i=this._markers[this._markers.length-1];else{if(this.type!==L.Draw.Polygon.TYPE)return 1/0;i=this._markers[0]}var o=this._map.latLngToContainerPoint(i.getLatLng()),n=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset}),s=this._map.latLngToContainerPoint(n.getLatLng());e=o.distanceTo(s)}else e=1/0;return e},_updateFinishHandler:function(){var t=this._markers.length;t>1&&this._markers[t-1].on("click",this._finishShape,this),t>2&&this._markers[t-2].off("click",this._finishShape,this)},_createMarker:function(t){var e=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset});return this._markerGroup.addLayer(e),e},_updateGuide:function(t){var e=this._markers?this._markers.length:0;e>0&&(t=t||this._map.latLngToLayerPoint(this._currentLatLng),this._clearGuides(),this._drawGuide(this._map.latLngToLayerPoint(this._markers[e-1].getLatLng()),t))},_updateTooltip:function(t){var e=this._getTooltipText();t&&this._tooltip.updatePosition(t),this._errorShown||this._tooltip.updateContent(e)},_drawGuide:function(t,e){var i,o,n,s=Math.floor(Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))),a=this.options.guidelineDistance,r=this.options.maxGuideLineLength,l=s>r?s-r:a;for(this._guidesContainer||(this._guidesContainer=L.DomUtil.create("div","leaflet-draw-guides",this._overlayPane));l1&&this._markers[this._markers.length-1].off("click",this._finishShape,this)},_fireCreatedEvent:function(){var t=new this.Poly(this._poly.getLatLngs(),this.options.shapeOptions);L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Draw.Polygon=L.Draw.Polyline.extend({statics:{TYPE:"polygon"},Poly:L.Polygon,options:{showArea:!1,showLength:!1,shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},metric:!0,feet:!0,nautic:!1,precision:{}},initialize:function(t,e){L.Draw.Polyline.prototype.initialize.call(this,t,e),this.type=L.Draw.Polygon.TYPE},_updateFinishHandler:function(){var t=this._markers.length;1===t&&this._markers[0].on("click",this._finishShape,this),t>2&&(this._markers[t-1].on("dblclick",this._finishShape,this),t>3&&this._markers[t-2].off("dblclick",this._finishShape,this))},_getTooltipText:function(){var t,e;return 0===this._markers.length?t=L.drawLocal.draw.handlers.polygon.tooltip.start:this._markers.length<3?(t=L.drawLocal.draw.handlers.polygon.tooltip.cont,e=this._getMeasurementString()):(t=L.drawLocal.draw.handlers.polygon.tooltip.end,e=this._getMeasurementString()),{text:t,subtext:e}},_getMeasurementString:function(){var t=this._area,e="";return t||this.options.showLength?(this.options.showLength&&(e=L.Draw.Polyline.prototype._getMeasurementString.call(this)),t&&(e+="
    "+L.GeometryUtil.readableArea(t,this.options.metric,this.options.precision)),e):null},_shapeIsValid:function(){return this._markers.length>=3},_vertexChanged:function(t,e){var i;!this.options.allowIntersection&&this.options.showArea&&(i=this._poly.getLatLngs(),this._area=L.GeometryUtil.geodesicArea(i)),L.Draw.Polyline.prototype._vertexChanged.call(this,t,e)},_cleanUpShape:function(){var t=this._markers.length;t>0&&(this._markers[0].off("click",this._finishShape,this),t>2&&this._markers[t-1].off("dblclick",this._finishShape,this))}}),L.SimpleShape={},L.Draw.SimpleShape=L.Draw.Feature.extend({options:{repeatMode:!1},initialize:function(t,e){this._endLabelText=L.drawLocal.draw.handlers.simpleshape.tooltip.end,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._mapDraggable=this._map.dragging.enabled(),this._mapDraggable&&this._map.dragging.disable(),this._container.style.cursor="crosshair",this._tooltip.updateContent({text:this._initialLabelText}),this._map.on("mousedown",this._onMouseDown,this).on("mousemove",this._onMouseMove,this).on("touchstart",this._onMouseDown,this).on("touchmove",this._onMouseMove,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._mapDraggable&&this._map.dragging.enable(),this._container.style.cursor="",this._map.off("mousedown",this._onMouseDown,this).off("mousemove",this._onMouseMove,this).off("touchstart",this._onMouseDown,this).off("touchmove",this._onMouseMove,this),L.DomEvent.off(e,"mouseup",this._onMouseUp,this),L.DomEvent.off(e,"touchend",this._onMouseUp,this),this._shape&&(this._map.removeLayer(this._shape),delete this._shape)),this._isDrawing=!1},_getTooltipText:function(){return{text:this._endLabelText}},_onMouseDown:function(t){this._isDrawing=!0,this._startLatLng=t.latlng,L.DomEvent.on(e,"mouseup",this._onMouseUp,this).on(e,"touchend",this._onMouseUp,this).preventDefault(t.originalEvent)},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._isDrawing&&(this._tooltip.updateContent(this._getTooltipText()),this._drawShape(e))},_onMouseUp:function(){this._shape&&this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()}}),L.Draw.Rectangle=L.Draw.SimpleShape.extend({statics:{TYPE:"rectangle"},options:{shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,showArea:!0,clickable:!0},metric:!0},initialize:function(t,e){this.type=L.Draw.Rectangle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.rectangle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},_drawShape:function(t){this._shape?this._shape.setBounds(new L.LatLngBounds(this._startLatLng,t)):(this._shape=new L.Rectangle(new L.LatLngBounds(this._startLatLng,t),this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Rectangle(this._shape.getBounds(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_getTooltipText:function(){var t,e,i,o=L.Draw.SimpleShape.prototype._getTooltipText.call(this),n=this._shape,s=this.options.showArea;return n&&(t=this._shape._defaultShape?this._shape._defaultShape():this._shape.getLatLngs(),e=L.GeometryUtil.geodesicArea(t),i=s?L.GeometryUtil.readableArea(e,this.options.metric):""),{text:o.text,subtext:i}}}),L.Draw.Circle=L.Draw.SimpleShape.extend({statics:{TYPE:"circle"},options:{shapeOptions:{stroke:!0,color:"#3388ff",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},showRadius:!0,metric:!0,feet:!0,nautic:!1},initialize:function(t,e){this.type=L.Draw.Circle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.circle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},_drawShape:function(t){this._shape?this._shape.setRadius(this._startLatLng.distanceTo(t)):(this._shape=new L.Circle(this._startLatLng,this._startLatLng.distanceTo(t),this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Circle(this._startLatLng,this._shape.getRadius(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_onMouseMove:function(t){var e,i=t.latlng,o=this.options.showRadius,n=this.options.metric;if(this._tooltip.updatePosition(i),this._isDrawing){this._drawShape(i),e=this._shape.getRadius().toFixed(1);var s="";o&&(s=L.drawLocal.draw.handlers.circle.radius+": "+L.GeometryUtil.readableDistance(e,n,this.options.feet,this.options.nautic)),this._tooltip.updateContent({text:this._endLabelText,subtext:s})}}}),L.Draw.Marker=L.Draw.Feature.extend({statics:{TYPE:"marker"},options:{icon:new L.Icon.Default,repeatMode:!1,zIndexOffset:2e3},initialize:function(t,e){this.type=L.Draw.Marker.TYPE,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._tooltip.updateContent({text:L.drawLocal.draw.handlers.marker.tooltip.start}),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:"leaflet-mouse-marker",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on("click",this._onClick,this).addTo(this._map),this._map.on("mousemove",this._onMouseMove,this),this._map.on("click",this._onTouch,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._marker&&(this._marker.off("click",this._onClick,this),this._map.off("click",this._onClick,this).off("click",this._onTouch,this).removeLayer(this._marker),delete this._marker),this._mouseMarker.off("click",this._onClick,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._map.off("mousemove",this._onMouseMove,this))},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._mouseMarker.setLatLng(e),this._marker?(e=this._mouseMarker.getLatLng(),this._marker.setLatLng(e)):(this._marker=new L.Marker(e,{icon:this.options.icon,zIndexOffset:this.options.zIndexOffset}),this._marker.on("click",this._onClick,this),this._map.on("click",this._onClick,this).addLayer(this._marker))},_onClick:function(){this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()},_onTouch:function(t){this._onMouseMove(t),this._onClick()},_fireCreatedEvent:function(){var t=new L.Marker.Touch(this._marker.getLatLng(),{icon:this.options.icon});L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Edit=L.Edit||{},L.Edit.Marker=L.Handler.extend({initialize:function(t,e){this._marker=t,L.setOptions(this,e)},addHooks:function(){var t=this._marker;t.dragging.enable(),t.on("dragend",this._onDragEnd,t),this._toggleMarkerHighlight()},removeHooks:function(){var t=this._marker;t.dragging.disable(),t.off("dragend",this._onDragEnd,t),this._toggleMarkerHighlight()},_onDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_toggleMarkerHighlight:function(){var t=this._marker._icon;t&&(t.style.display="none",L.DomUtil.hasClass(t,"leaflet-edit-marker-selected")?(L.DomUtil.removeClass(t,"leaflet-edit-marker-selected"),this._offsetMarker(t,-4)):(L.DomUtil.addClass(t,"leaflet-edit-marker-selected"),this._offsetMarker(t,4)),t.style.display="")},_offsetMarker:function(t,e){var i=parseInt(t.style.marginTop,10)-e,o=parseInt(t.style.marginLeft,10)-e;t.style.marginTop=i+"px",t.style.marginLeft=o+"px"}}),L.Marker.addInitHook(function(){L.Edit.Marker&&(this.editing=new L.Edit.Marker(this),this.options.editable&&this.editing.enable())}),L.Edit=L.Edit||{},L.Edit.Poly=L.Handler.extend({options:{},initialize:function(t,e){this.latlngs=[t._latlngs],t._holes&&(this.latlngs=this.latlngs.concat(t._holes)),this._poly=t,L.setOptions(this,e),this._poly.on("revert-edited",this._updateLatLngs,this)},_defaultShape:function(){return L.Polyline._flat?L.Polyline._flat(this._poly._latlngs)?this._poly._latlngs:this._poly._latlngs[0]:this._poly._latlngs},_eachVertexHandler:function(t){for(var e=0;et&&(i._index+=e)})},_createMiddleMarker:function(t,e){var i,o,n,s=this._getMiddleLatLng(t,e),a=this._createMarker(s);a.setOpacity(.6),t._middleRight=e._middleLeft=a,o=function(){a.off("touchmove",o,this);var n=e._index;a._index=n,a.off("click",i,this).on("click",this._onMarkerClick,this),s.lat=a.getLatLng().lat,s.lng=a.getLatLng().lng,this._spliceLatLngs(n,0,s),this._markers.splice(n,0,a),a.setOpacity(1),this._updateIndexes(n,1),e._index++,this._updatePrevNext(t,a),this._updatePrevNext(a,e),this._poly.fire("editstart")},n=function(){a.off("dragstart",o,this),a.off("dragend",n,this),a.off("touchmove",o,this),this._createMiddleMarker(t,a),this._createMiddleMarker(a,e)},i=function(){o.call(this),n.call(this),this._fireEdit()},a.on("click",i,this).on("dragstart",o,this).on("dragend",n,this).on("touchmove",o,this),this._markerGroup.addLayer(a)},_updatePrevNext:function(t,e){t&&(t._next=e),e&&(e._prev=t)},_getMiddleLatLng:function(t,e){var i=this._poly._map,o=i.project(t.getLatLng()),n=i.project(e.getLatLng());return i.unproject(o._add(n)._divideBy(2))}}),L.Polyline.addInitHook(function(){this.editing||(L.Edit.Poly&&(this.editing=new L.Edit.Poly(this,this.options.poly),this.options.editable&&this.editing.enable()),this.on("add",function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()}),this.on("remove",function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()}))}),L.Edit=L.Edit||{},L.Edit.SimpleShape=L.Handler.extend({options:{moveIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-move"}),resizeIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize"}),touchMoveIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-move leaflet-touch-icon"}),touchResizeIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize leaflet-touch-icon"})},initialize:function(t,e){L.Browser.touch&&(this.options.moveIcon=this.options.touchMoveIcon,this.options.resizeIcon=this.options.touchResizeIcon),this._shape=t,L.Util.setOptions(this,e)},addHooks:function(){var t=this._shape;this._shape._map&&(this._map=this._shape._map,t.setStyle(t.options.editing),t._map&&(this._map=t._map,this._markerGroup||this._initMarkers(),this._map.addLayer(this._markerGroup)))},removeHooks:function(){var t=this._shape;if(t.setStyle(t.options.original),t._map){this._unbindMarker(this._moveMarker);for(var e=0,i=this._resizeMarkers.length;e100&&i<500||t.target._simulatedClick&&!t._simulated?(L.DomEvent.stop(t),!1):(L.DomEvent._lastClick=e,!0)},_onTouchStart:function(t){if(this._map._loaded){this._touchEvent(t,"touchstart")}},_onTouchEnd:function(t){if(this._map._loaded){this._touchEvent(t,"touchend")}},_onTouchCancel:function(t){if(this._map._loaded){var e="touchcancel";this._detectIE()&&(e="pointercancel"),this._touchEvent(t,e)}},_onTouchLeave:function(t){if(this._map._loaded){this._touchEvent(t,"touchleave")}},_onTouchMove:function(t){if(this._map._loaded){this._touchEvent(t,"touchmove")}},_detectIE:function(){var e=t.navigator.userAgent,i=e.indexOf("MSIE ");if(i>0)return parseInt(e.substring(i+5,e.indexOf(".",i)),10);if(e.indexOf("Trident/")>0){var o=e.indexOf("rv:");return parseInt(e.substring(o+3,e.indexOf(".",o)),10)}var n=e.indexOf("Edge/");return n>0&&parseInt(e.substring(n+5,e.indexOf(".",n)),10)}}),L.Map.addInitHook("addHandler","touchExtend",L.Map.TouchExtend),L.Marker.Touch=L.Marker.extend({_initInteraction:function(){return this.addInteractiveTarget?L.Marker.prototype._initInteraction.apply(this):this._initInteractionLegacy()},_initInteractionLegacy:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu","touchstart","touchend","touchmove"];this._detectIE?e.concat(["MSPointerDown","MSPointerUp","MSPointerMove","MSPointerCancel"]):e.concat(["touchcancel"]),L.DomUtil.addClass(t,"leaflet-clickable"),L.DomEvent.on(t,"click",this._onMouseClick,this),L.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;i0)return parseInt(e.substring(i+5,e.indexOf(".",i)),10);if(e.indexOf("Trident/")>0){var o=e.indexOf("rv:");return parseInt(e.substring(o+3,e.indexOf(".",o)),10)}var n=e.indexOf("Edge/");return n>0&&parseInt(e.substring(n+5,e.indexOf(".",n)),10)}}),L.LatLngUtil={cloneLatLngs:function(t){for(var e=[],i=0,o=t.length;i2){for(var a=0;a1&&(i=i+a+r[1])}return i},readableArea:function(e,i,o){var n,s,o=L.Util.extend({},t,o);return i?(s=["ha","m"],type=typeof i,"string"===type?s=[i]:"boolean"!==type&&(s=i),n=e>=1e6&&-1!==s.indexOf("km")?L.GeometryUtil.formattedNumber(1e-6*e,o.km)+" km²":e>=1e4&&-1!==s.indexOf("ha")?L.GeometryUtil.formattedNumber(1e-4*e,o.ha)+" ha":L.GeometryUtil.formattedNumber(e,o.m)+" m²"):(e/=.836127,n=e>=3097600?L.GeometryUtil.formattedNumber(e/3097600,o.mi)+" mi²":e>=4840?L.GeometryUtil.formattedNumber(e/4840,o.ac)+" acres":L.GeometryUtil.formattedNumber(e,o.yd)+" yd²"),n},readableDistance:function(e,i,o,n,s){var a,s=L.Util.extend({},t,s);switch(i?"string"==typeof i?i:"metric":o?"feet":n?"nauticalMile":"yards"){case"metric":a=e>1e3?L.GeometryUtil.formattedNumber(e/1e3,s.km)+" km":L.GeometryUtil.formattedNumber(e,s.m)+" m";break;case"feet":e*=3.28083,a=L.GeometryUtil.formattedNumber(e,s.ft)+" ft";break;case"nauticalMile":e*=.53996,a=L.GeometryUtil.formattedNumber(e/1e3,s.nm)+" nm";break;case"yards":default:e*=1.09361,a=e>1760?L.GeometryUtil.formattedNumber(e/1760,s.mi)+" miles":L.GeometryUtil.formattedNumber(e,s.yd)+" yd"}return a}})}(),L.Util.extend(L.LineUtil,{segmentsIntersect:function(t,e,i,o){return this._checkCounterclockwise(t,i,o)!==this._checkCounterclockwise(e,i,o)&&this._checkCounterclockwise(t,e,i)!==this._checkCounterclockwise(t,e,o)},_checkCounterclockwise:function(t,e,i){return(i.y-t.y)*(e.x-t.x)>(e.y-t.y)*(i.x-t.x)}}),L.Polyline.include({intersects:function(){var t,e,i,o=this._getProjectedPoints(),n=o?o.length:0;if(this._tooFewPointsForIntersection())return!1;for(t=n-1;t>=3;t--)if(e=o[t-1],i=o[t],this._lineSegmentsIntersectsRange(e,i,t-2))return!0;return!1},newLatLngIntersects:function(t,e){return!!this._map&&this.newPointIntersects(this._map.latLngToLayerPoint(t),e)},newPointIntersects:function(t,e){var i=this._getProjectedPoints(),o=i?i.length:0,n=i?i[o-1]:null,s=o-2;return!this._tooFewPointsForIntersection(1)&&this._lineSegmentsIntersectsRange(n,t,s,e?1:0)},_tooFewPointsForIntersection:function(t){var e=this._getProjectedPoints(),i=e?e.length:0;return i+=t||0,!e||i<=3},_lineSegmentsIntersectsRange:function(t,e,i,o){var n,s,a=this._getProjectedPoints();o=o||0;for(var r=i;r>o;r--)if(n=a[r-1],s=a[r],L.LineUtil.segmentsIntersect(t,e,n,s))return!0;return!1},_getProjectedPoints:function(){if(!this._defaultShape)return this._originalPoints;for(var t=[],e=this._defaultShape(),i=0;i0&&this._singleLineLabel&&(L.DomUtil.removeClass(this._container,"leaflet-draw-tooltip-single"),this._singleLineLabel=!1):(L.DomUtil.addClass(this._container,"leaflet-draw-tooltip-single"),this._singleLineLabel=!0),this._container.innerHTML=(t.subtext.length>0?''+t.subtext+"
    ":"")+""+t.text+"",t.text||t.subtext?(this._visible=!0,this._container.style.visibility="inherit"):(this._visible=!1,this._container.style.visibility="hidden"),this):this},updatePosition:function(t){var e=this._map.latLngToLayerPoint(t),i=this._container;return this._container&&(this._visible&&(i.style.visibility="inherit"),L.DomUtil.setPosition(i,e)),this},showAsError:function(){return this._container&&L.DomUtil.addClass(this._container,"leaflet-error-draw-tooltip"),this},removeError:function(){return this._container&&L.DomUtil.removeClass(this._container,"leaflet-error-draw-tooltip"),this},_onMouseOut:function(){this._container&&(this._container.style.visibility="hidden")}}),L.DrawToolbar=L.Toolbar.extend({statics:{TYPE:"draw"},options:{polyline:{},polygon:{},rectangle:{},circle:{},marker:{}},initialize:function(t){for(var e in this.options)this.options.hasOwnProperty(e)&&t[e]&&(t[e]=L.extend({},this.options[e],t[e]));this._toolbarClass="leaflet-draw-draw",L.Toolbar.prototype.initialize.call(this,t)},getModeHandlers:function(t){return[{enabled:this.options.polyline,handler:new L.Draw.Polyline(t,this.options.polyline),title:L.drawLocal.draw.toolbar.buttons.polyline},{enabled:this.options.polygon,handler:new L.Draw.Polygon(t,this.options.polygon),title:L.drawLocal.draw.toolbar.buttons.polygon},{enabled:this.options.rectangle,handler:new L.Draw.Rectangle(t,this.options.rectangle),title:L.drawLocal.draw.toolbar.buttons.rectangle},{enabled:this.options.circle,handler:new L.Draw.Circle(t,this.options.circle),title:L.drawLocal.draw.toolbar.buttons.circle},{enabled:this.options.marker,handler:new L.Draw.Marker(t,this.options.marker),title:L.drawLocal.draw.toolbar.buttons.marker}]},getActions:function(t){return[{enabled:t.completeShape,title:L.drawLocal.draw.toolbar.finish.title,text:L.drawLocal.draw.toolbar.finish.text,callback:t.completeShape,context:t},{enabled:t.deleteLastVertex,title:L.drawLocal.draw.toolbar.undo.title,text:L.drawLocal.draw.toolbar.undo.text,callback:t.deleteLastVertex,context:t},{title:L.drawLocal.draw.toolbar.actions.title,text:L.drawLocal.draw.toolbar.actions.text,callback:this.disable,context:this}]},setOptions:function(t){L.setOptions(this,t);for(var e in this._modes)this._modes.hasOwnProperty(e)&&t.hasOwnProperty(e)&&this._modes[e].handler.setOptions(t[e])}}),L.EditToolbar=L.Toolbar.extend({statics:{TYPE:"edit"},options:{edit:{selectedPathOptions:{dashArray:"10, 10",fill:!0,fillColor:"#fe57a1",fillOpacity:.1,maintainColor:!1}},remove:{},poly:null,featureGroup:null},initialize:function(t){t.edit&&(void 0===t.edit.selectedPathOptions&&(t.edit.selectedPathOptions=this.options.edit.selectedPathOptions),t.edit.selectedPathOptions=L.extend({},this.options.edit.selectedPathOptions,t.edit.selectedPathOptions)),t.remove&&(t.remove=L.extend({},this.options.remove,t.remove)),t.poly&&(t.poly=L.extend({},this.options.poly,t.poly)),this._toolbarClass="leaflet-draw-edit",L.Toolbar.prototype.initialize.call(this,t),this._selectedFeatureCount=0},getModeHandlers:function(t){var e=this.options.featureGroup;return[{enabled:this.options.edit,handler:new L.EditToolbar.Edit(t,{featureGroup:e,selectedPathOptions:this.options.edit.selectedPathOptions,poly:this.options.poly}),title:L.drawLocal.edit.toolbar.buttons.edit},{enabled:this.options.remove,handler:new L.EditToolbar.Delete(t,{featureGroup:e}),title:L.drawLocal.edit.toolbar.buttons.remove}]},getActions:function(){return[{title:L.drawLocal.edit.toolbar.actions.save.title,text:L.drawLocal.edit.toolbar.actions.save.text,callback:this._save,context:this},{title:L.drawLocal.edit.toolbar.actions.cancel.title,text:L.drawLocal.edit.toolbar.actions.cancel.text,callback:this.disable,context:this},{title:L.drawLocal.edit.toolbar.actions.clearAll.title,text:L.drawLocal.edit.toolbar.actions.clearAll.text,callback:this._clearAllLayers,context:this}]},addToolbar:function(t){var e=L.Toolbar.prototype.addToolbar.call(this,t);return this._checkDisabled(),this.options.featureGroup.on("layeradd layerremove",this._checkDisabled,this),e},removeToolbar:function(){this.options.featureGroup.off("layeradd layerremove",this._checkDisabled,this),L.Toolbar.prototype.removeToolbar.call(this)},disable:function(){this.enabled()&&(this._activeMode.handler.revertLayers(),L.Toolbar.prototype.disable.call(this))},_save:function(){this._activeMode.handler.save(),this._activeMode&&this._activeMode.handler.disable()},_clearAllLayers:function(){this._activeMode.handler.removeAllLayers(),this._activeMode&&this._activeMode.handler.disable()},_checkDisabled:function(){var t,e=this.options.featureGroup,i=0!==e.getLayers().length;this.options.edit&&(t=this._modes[L.EditToolbar.Edit.TYPE].button,i?L.DomUtil.removeClass(t,"leaflet-disabled"):L.DomUtil.addClass(t,"leaflet-disabled"),t.setAttribute("title",i?L.drawLocal.edit.toolbar.buttons.edit:L.drawLocal.edit.toolbar.buttons.editDisabled)),this.options.remove&&(t=this._modes[L.EditToolbar.Delete.TYPE].button,i?L.DomUtil.removeClass(t,"leaflet-disabled"):L.DomUtil.addClass(t,"leaflet-disabled"),t.setAttribute("title",i?L.drawLocal.edit.toolbar.buttons.remove:L.drawLocal.edit.toolbar.buttons.removeDisabled))}}),L.EditToolbar.Edit=L.Handler.extend({statics:{TYPE:"edit"},includes:L.Mixin.Events,initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.setOptions(this,e),this._featureGroup=e.featureGroup,!(this._featureGroup instanceof L.FeatureGroup))throw new Error("options.featureGroup must be a L.FeatureGroup");this._uneditedLayerProps={},this.type=L.EditToolbar.Edit.TYPE},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.EDITSTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._featureGroup.on("layeradd",this._enableLayerEdit,this).on("layerremove",this._disableLayerEdit,this))},disable:function(){this._enabled&&(this._featureGroup.off("layeradd",this._enableLayerEdit,this).off("layerremove",this._disableLayerEdit,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.EDITSTOP,{handler:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._featureGroup.eachLayer(this._enableLayerEdit,this),this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}),t._editTooltip=this._tooltip,this._updateTooltip(),this._map.on("mousemove",this._onMouseMove,this).on("touchmove",this._onMouseMove,this).on("MSPointerMove",this._onMouseMove,this).on(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},removeHooks:function(){this._map&&(this._featureGroup.eachLayer(this._disableLayerEdit,this),this._uneditedLayerProps={},this._tooltip.dispose(),this._tooltip=null,this._map.off("mousemove",this._onMouseMove,this).off("touchmove",this._onMouseMove,this).off("MSPointerMove",this._onMouseMove,this).off(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},revertLayers:function(){this._featureGroup.eachLayer(function(t){this._revertLayer(t)},this)},save:function(){var t=new L.LayerGroup;this._featureGroup.eachLayer(function(e){e.edited&&(t.addLayer(e),e.edited=!1)}),this._map.fire(L.Draw.Event.EDITED,{layers:t})},_backupLayer:function(t){var e=L.Util.stamp(t);this._uneditedLayerProps[e]||(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?this._uneditedLayerProps[e]={latlngs:L.LatLngUtil.cloneLatLngs(t.getLatLngs())}:t instanceof L.Circle?this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng()),radius:t.getRadius()}:t instanceof L.Marker&&(this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng())}))},_getTooltipText:function(){return{text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}},_updateTooltip:function(){this._tooltip.updateContent(this._getTooltipText())},_revertLayer:function(t){var e=L.Util.stamp(t);t.edited=!1,this._uneditedLayerProps.hasOwnProperty(e)&&(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?t.setLatLngs(this._uneditedLayerProps[e].latlngs):t instanceof L.Circle?(t.setLatLng(this._uneditedLayerProps[e].latlng),t.setRadius(this._uneditedLayerProps[e].radius)):t instanceof L.Marker&&t.setLatLng(this._uneditedLayerProps[e].latlng),t.fire("revert-edited",{layer:t}))},_enableLayerEdit:function(t){var e,i,o=t.layer||t.target||t;this._backupLayer(o),this.options.poly&&(i=L.Util.extend({},this.options.poly),o.options.poly=i),this.options.selectedPathOptions&&(e=L.Util.extend({},this.options.selectedPathOptions),e.maintainColor&&(e.color=o.options.color,e.fillColor=o.options.fillColor),o.options.original=L.extend({},o.options),o.options.editing=e),o instanceof L.Marker?(o.editing&&o.editing.enable(),o.dragging.enable(),o.on("dragend",this._onMarkerDragEnd).on("touchmove",this._onTouchMove,this).on("MSPointerMove",this._onTouchMove,this).on("touchend",this._onMarkerDragEnd,this).on("MSPointerUp",this._onMarkerDragEnd,this)):o.editing.enable()},_disableLayerEdit:function(t){var e=t.layer||t.target||t;e.edited=!1,e.editing&&e.editing.disable(),delete e.options.editing,delete e.options.original,this._selectedPathOptions&&(e instanceof L.Marker?this._toggleMarkerHighlight(e):(e.setStyle(e.options.previousOptions),delete e.options.previousOptions)),e instanceof L.Marker?(e.dragging.disable(),e.off("dragend",this._onMarkerDragEnd,this).off("touchmove",this._onTouchMove,this).off("MSPointerMove",this._onTouchMove,this).off("touchend",this._onMarkerDragEnd,this).off("MSPointerUp",this._onMarkerDragEnd,this)):e.editing.disable()},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_onMarkerDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_onTouchMove:function(t){var e=t.originalEvent.changedTouches[0],i=this._map.mouseEventToLayerPoint(e),o=this._map.layerPointToLatLng(i);t.target.setLatLng(o)},_hasAvailableLayers:function(){return 0!==this._featureGroup.getLayers().length}}),L.EditToolbar.Delete=L.Handler.extend({statics:{TYPE:"remove"},includes:L.Mixin.Events,initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.Util.setOptions(this,e),this._deletableLayers=this.options.featureGroup,!(this._deletableLayers instanceof L.FeatureGroup))throw new Error("options.featureGroup must be a L.FeatureGroup");this.type=L.EditToolbar.Delete.TYPE},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire("enabled",{handler:this.type}),this._map.fire(L.Draw.Event.DELETESTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._deletableLayers.on("layeradd",this._enableLayerDelete,this).on("layerremove",this._disableLayerDelete,this))},disable:function(){this._enabled&&(this._deletableLayers.off("layeradd",this._enableLayerDelete,this).off("layerremove",this._disableLayerDelete,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DELETESTOP,{handler:this.type}),this.fire("disabled",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._deletableLayers.eachLayer(this._enableLayerDelete,this),this._deletedLayers=new L.LayerGroup,this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.remove.tooltip.text}),this._map.on("mousemove",this._onMouseMove,this))},removeHooks:function(){this._map&&(this._deletableLayers.eachLayer(this._disableLayerDelete,this),this._deletedLayers=null,this._tooltip.dispose(),this._tooltip=null,this._map.off("mousemove",this._onMouseMove,this))},revertLayers:function(){this._deletedLayers.eachLayer(function(t){this._deletableLayers.addLayer(t),t.fire("revert-deleted",{layer:t})},this)},save:function(){this._map.fire(L.Draw.Event.DELETED,{layers:this._deletedLayers})},removeAllLayers:function(){this._deletableLayers.eachLayer(function(t){this._removeLayer({layer:t})},this),this.save()},_enableLayerDelete:function(t){(t.layer||t.target||t).on("click",this._removeLayer,this)},_disableLayerDelete:function(t){var e=t.layer||t.target||t;e.off("click",this._removeLayer,this),this._deletedLayers.removeLayer(e)},_removeLayer:function(t){var e=t.layer||t.target||t;this._deletableLayers.removeLayer(e),this._deletedLayers.addLayer(e),e.fire("deleted")},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_hasAvailableLayers:function(){return 0!==this._deletableLayers.getLayers().length}})}(window,document); \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/extjs/GeoNode-GeoExplorer.js b/django_project/core/geonode_static/geonode/js/extjs/GeoNode-GeoExplorer.js new file mode 100644 index 0000000..c2d83c0 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/extjs/GeoNode-GeoExplorer.js @@ -0,0 +1,488 @@ +Ext.ns("GeoNode.plugins"); + +/** api: constructor + * .. class:: Save(config) + * + * Plugin for saving maps. Will provide a Save button as an action if not + * configured with an empty actions array. + */ +GeoNode.plugins.Save = Ext.extend(gxp.plugins.Tool, { + + // i18n + metadataFormCancelText : "UT:Cancel", + metadataFormSaveAsCopyText : "UT:Save as Copy", + metadataFormSaveText : "UT:Save", + metaDataHeader: 'UT:About this Map', + metaDataMapAbstract: 'UT:Abstract', + metaDataMapTitle: 'UT:Title', + // end i18n + + /** api: ptype = gn_save */ + ptype: 'gn_save', + + /** private: method[init] + * :arg target: ``Object`` The object initializing this plugin. + */ + init: function(target) { + GeoNode.plugins.Save.superclass.init.apply(this, arguments); + this.target.on("beforesave", function(requestConfig, callback) { + if (this._doSave === true) { + delete this._doSave; + if (this.target.id) { + requestConfig.url = this.target.rest + this.target.id + "/data"; + } else { + requestConfig.url = this.target.rest + "new/data"; + } + return true; + } else { + this.showMetadataForm(callback); + return false; + } + }, this); + this.target.on("beforehashchange", function(hash) { + return false; + }); + }, + + /** api: method[addActions] + * :returns: ``Array`` The actions added. + */ + addActions: function() { + var actions = this.actions || [{ + text: 'Save', + handler: function() { + this.target.doAuthorized(["ROLE_ADMINISTRATOR"], function() { + this.target.save(this.target.showEmbedWindow); + }, this); + }, + scope: this + }]; + return GeoNode.plugins.Save.superclass.addActions.apply(this, actions); + }, + + /** private: method[initMetadataForm] + * + * Initialize metadata entry form. + */ + initMetadataForm: function(callback){ + + var titleField = new Ext.form.TextField({ + width: '95%', + fieldLabel: this.metaDataMapTitle, + value: this.target.about.title, + allowBlank: false, + enableKeyEvents: true, + listeners: { + "valid": function() { + saveAsButton.enable(); + saveButton.enable(); + }, + "invalid": function() { + saveAsButton.disable(); + saveButton.disable(); + } + } + }); + + var abstractField = new Ext.form.TextArea({ + width: '95%', + height: 200, + fieldLabel: this.metaDataMapAbstract, + value: this.target.about["abstract"] + }); + + var metaDataPanel = new Ext.FormPanel({ + bodyStyle: {padding: "5px"}, + labelAlign: "top", + items: [ + titleField, + abstractField + ] + }); + metaDataPanel.enable(); + + var saveAsButton = new Ext.Button({ + text: this.metadataFormSaveAsCopyText, + disabled: !this.target.about.title, + handler: function(e){ + delete this.target.id; + this.target.about.title = Ext.util.Format.stripTags(titleField.getValue()); + this.target.about["abstract"] = Ext.util.Format.stripTags(abstractField.getValue()); + this.metadataForm.hide(); + this._doSave = true; + this.target.save(this.metadataForm.saveCallback); + }, + scope: this + }); + var saveButton = new Ext.Button({ + text: this.metadataFormSaveText, + disabled: !this.target.about.title, + handler: function(e){ + this.target.about.title = Ext.util.Format.stripTags(titleField.getValue()); + this.target.about["abstract"] = Ext.util.Format.stripTags(abstractField.getValue()); + this.metadataForm.hide(); + this._doSave = true; + this.target.save(this.metadataForm.saveCallback); + }, + scope: this + }); + + this.metadataForm = new Ext.Window({ + title: this.metaDataHeader, + closeAction: 'hide', + saveCallback: callback, + items: metaDataPanel, + modal: true, + width: 400, + autoHeight: true, + bbar: [ + "->", + saveAsButton, + saveButton, + new Ext.Button({ + text: this.metadataFormCancelText, + handler: function() { + titleField.setValue(this.target.about.title); + abstractField.setValue(this.target.about["abstract"]); + this.metadataForm.hide(); + }, + scope: this + }) + ] + }); + }, + + /** private: method[showMetadataForm] + * Shows the window with a metadata form + */ + showMetadataForm: function(callback) { + if(!this.metadataForm) { + this.initMetadataForm(callback); + } else { + this.metadataForm.saveCallback = callback; + } + this.metadataForm.show(); + } + +}); + +Ext.preg(GeoNode.plugins.Save.prototype.ptype, GeoNode.plugins.Save); + +/** api: constructor + * .. class:: SaveHyperlink(config) + * + * Plugin for showing hyperlinks for going to the list of maps as well as + * going to the current saved map. + */ +GeoNode.plugins.SaveHyperlink = Ext.extend(gxp.plugins.Tool, { + + /** api: ptype = gn_savehyperlink */ + ptype: 'gn_savehyperlink', + + /** private: method[init] + * :arg target: ``Object`` The object initializing this plugin. + */ + init: function(target) { + GeoNode.plugins.SaveHyperlink.superclass.init.apply(this, arguments); + this.titleTemplate = new Ext.Template("Maps / {title}"); + this.target.on("save", function(id) { + this.actions[0].update(this.getMapTitle()); + }, this); + }, + + /** api: method[addActions] + * :returns: ``Array`` The actions added. + */ + addActions: function() { + return GeoNode.plugins.SaveHyperlink.superclass.addActions.apply(this, [ + new Ext.Container({cls: "map-title-header", html: this.getMapTitle()}) + ]); + }, + + /** private: method[getPermalink] + * :return: ``String`` + * + * Get the permalink for the current map. + */ + getPermalink: function() { + permalinkTemplate = new Ext.Template("{protocol}//{host}/maps/{id}"); + return permalinkTemplate.apply({ + protocol: window.location.protocol, + host: window.location.host, + id: this.target.id + }); + }, + + /** private: getMapTitle + * :return: ``String`` + * + * Get the HTML to use in the map title container which is shown in the + * top right of the panel top toolbar. + */ + getMapTitle: function() { + var title; + if (this.target.id) { + title = '' + this.target.about.title + ''; + } else { + title = "This map is currently unsaved"; + } + return this.titleTemplate.apply({title: title}); + } + +}); + +Ext.preg(GeoNode.plugins.SaveHyperlink.prototype.ptype, GeoNode.plugins.SaveHyperlink); + +GeoNode.plugins.XHRTrouble = Ext.extend(gxp.plugins.Tool, { + + /** api: ptype = gn_xhrtrouble */ + ptype: 'gn_xhrtrouble', + + // i18n + connErrorTitleText: "UT:Connection Error", + connErrorText: "UT:The server returned an error", + connErrorDetailsText: "UT:Details...", + // end i18n + + /** private: method[init] + * :arg target: ``Object`` The object initializing this plugin. + */ + init: function(target) { + // global request proxy and error handling + OpenLayers.Request.events.on({ + "failure": function(evt) { + this.displayXHRTrouble(evt.request); + }, + scope: this + }); + Ext.util.Observable.observeClass(Ext.data.Connection); + Ext.data.Connection.on({ + "requestexception": function(conn, response, options) { + if(!options.failure) { + var url = options.url; + if (response.status === 401 && url.indexOf("http" !== 0) && + url.indexOf(this.proxy) === -1) { + this.authenticate(options); + } else if (response.status != 405 && url != "/geoserver/rest/styles") { + // 405 from /rest/styles is ok because we use it to + // test whether we're authenticated or not + this.displayXHRTrouble(response); + } + } + }, + scope: this + }); + GeoNode.plugins.XHRTrouble.superclass.init.apply(this, arguments); + }, + + /** private method[displayXHRTrouble] + * :arg respoonse: ``Object`` The XHR response object. + * + * If something goes wrong with an AJAX request, show an error dialog + * with a button to view the details (Django error). + */ + displayXHRTrouble: function(response) { + response.status && Ext.Msg.show({ + title: this.connErrorTitleText, + msg: this.connErrorText + + ": " + response.status + " " + response.statusText, + icon: Ext.MessageBox.ERROR, + buttons: {ok: this.connErrorDetailsText, cancel: true}, + fn: function(result) { + if(result == "ok") { + var details = new Ext.Window({ + title: response.status + " " + response.statusText, + width: 400, + height: 300, + items: { + xtype: "container", + cls: "error-details", + html: response.responseText + }, + autoScroll: true, + buttons: [{ + text: "OK", + handler: function() { details.close(); } + }] + }); + details.show(); + } + } + }); + } + +}); + +Ext.preg(GeoNode.plugins.XHRTrouble.prototype.ptype, GeoNode.plugins.XHRTrouble); + +/** api: constructor + * .. class:: LayerInfo(config) + * + * Plugin for navigating to the GeoNode layer info page. + * Will only be enabled for local layers. + */ +GeoNode.plugins.LayerInfo = Ext.extend(gxp.plugins.Tool, { + + /** api: ptype = gxp_removelayer */ + ptype: "gn_layerinfo", + + /** api: config[menuText] + * ``String`` + * i18n text to use on the menu item. + */ + menuText: "Layer Info", + + /** api: config[iconCls] + * ``String`` + * iconCls to use on the menu item. + */ + iconCls: "gxp-icon-layerproperties", + + /** api: method[addActions] + * :returns: ``Array`` The actions added. + */ + addActions: function() { + var actions = GeoNode.plugins.LayerInfo.superclass.addActions.apply(this, [{ + menuText: this.menuText, + iconCls: this.iconCls, + disabled: true, + handler: function() { + if (this.link) { + window.open(this.link); + } + }, + scope: this + }]); + var layerInfoAction = actions[0]; + + this.target.on("layerselectionchange", function(record) { + var remote=null; + if (record) { + if (record.get("source_params")) { + remote = record.get("source_params").name; + } + else { + var store = this.target.sources[record.get("source")]; + if (store && store["name"]){ + remote = store["name"]; + } + } + // TODO is there a way to get this from a template variable? + var layerid = (remote? remote + ":" : "") + this.target.selectedLayer.get("name"); + if (record && record.getLayer() instanceof OpenLayers.Layer.ArcGIS93Rest) { + layerid = layerid.replace("show:",""); + } + + this.link = "/layers/" + layerid; + } + + layerInfoAction.setDisabled(!record || (!record.get('restUrl') && !remote)); + + + }, this); + return actions; + } +}); + +Ext.preg(GeoNode.plugins.LayerInfo.prototype.ptype, GeoNode.plugins.LayerInfo); + +/** api: constructor + * .. class:: Composer(config) + * + * The GeoNode Composer application class. + * Changes compared to out-of-the-box GeoExplorer: + * - before saving a map, show a metadata form + * - add a tool that will show the map title and that will have a clickable + * link. + * - a generic XHRTrouble dialog that gives easier access to underlying + * Django errors. + * - adds catalogue search through the GeoNode search api + * - only enable editing if user has the right permissions + * - integrate with GeoNode AJAX login + * - publish map will show the iframe text directly, and not a wizard + * like interface that GeoExplorer has + * - when saving a map, do not set window.location.hash + * - use different urls for saving a new map and updating an existing map + * than GeoExplorer does. + */ +GeoNode.Composer = window.GeoExplorer && Ext.extend(GeoExplorer.Composer, { + + ajaxLoginUrl: null, + + /** private: method[showUrl] + * Do not show the url after map save. + */ + showUrl: Ext.emptyFn, + + /** api: method[loadConfig] + * :arg config: ``Object`` The config object passed to the constructor. + * + * Subclasses that load config asynchronously can override this to load + * any configuration before applyConfig is called. + */ + loadConfig: function(config) { + // find out what the key of the local source is + var catalogSourceKey, key; + for (key in config.sources) { + var source = config.sources[key]; + if (source.ptype === "gxp_wmscsource" && source.restUrl) { + catalogSourceKey = key; + break; + } + } + for (var i=0, ii=config.tools.length; i 0) { + csrfToken = csrfMatch[1]; + } + return csrfToken; + }, + + /** private: method[authenticate] + * Show the login dialog for the user to login. + */ + authenticate: function(options) { + var submit = function() { + form.getForm().submit({ + waitMsg: "Logging in...", + success: function(form, action) { + this.setAuthorizedRoles(["ROLE_ADMINISTRATOR"]); + win.close(); + OpenLayers.Request.DEFAULT_CONFIG.headers['X-CSRFToken'] = this.getCRSFToken(); + // resend the original request + if (options) { + Ext.Ajax.request(options); + } + }, + failure: function(form, action) { + var username = form.items.get(0); + var password = form.items.get(1); + username.markInvalid(); + password.markInvalid(); + username.focus(true); + }, + scope: this + }); + }.createDelegate(this); + var csrfToken = this.getCRSFToken(); + var win = new Ext.Window({ + title: "GeoNode Login", + modal: true, + width: 230, + autoHeight: true, + layout: "fit", + items: [{ + xtype: "form", + autoHeight: true, + labelWidth: 55, + border: false, + bodyStyle: "padding: 10px;", + url: this.ajaxLoginUrl, + waitMsgTarget: true, + errorReader: { + // teach ExtJS a bit of RESTfulness + read: function(response) { + return { + success: response.status == 200, + records: [] + }; + } + }, + defaults: { + anchor: "100%" + }, + items: [{ + xtype: "textfield", + name: "username", + fieldLabel: "Username" + }, { + xtype: "textfield", + name: "password", + fieldLabel: "Password", + inputType: "password" + }, { + xtype: "hidden", + name: "csrfmiddlewaretoken", + value: csrfToken + }, { + xtype: "button", + text: "Login", + inputType: "submit", + handler: submit + }] + }], + keys: { + "key": Ext.EventObject.ENTER, + "fn": submit + } + }); + win.show(); + var form = win.items.get(0); + form.items.get(0).focus(false, 100); + } +}; diff --git a/django_project/core/geonode_static/geonode/js/extjs/Geonode-CatalogueApiSearch.js b/django_project/core/geonode_static/geonode/js/extjs/Geonode-CatalogueApiSearch.js new file mode 100644 index 0000000..b5c62e3 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/extjs/Geonode-CatalogueApiSearch.js @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2008-2011 The Open Planning Project + * + * Published under the GPL license. + * See https://github.com/opengeo/gxp/raw/master/license.txt for the full text + * of the license. + */ + +/** + * @requires plugins/CatalogueSource.js + */ + +/** api: (define) + * module = gxp.plugins + * class = GeoNodeAPICatalogueSource + */ + +/** api: (extends) + * plugins/CatalogueSource.js + */ +Ext.namespace("gxp.plugins"); + +/** api: constructor + * .. class:: GeoNodeCatalogueSource(config) + * + */ +gxp.plugins.GeoNodeAPICatalogueSource = Ext.extend(gxp.plugins.CatalogueSource, { + + /** api: ptype = gxp_geonodeapicataloguesource */ + ptype: "gxp_geonodeapicataloguesource", + + /** api: config[rootProperty] + * ``String`` Root property in the JSON response. Defaults to 'objects'. + */ + rootProperty: 'objects', + + /** api: config[rootProperty] + * ``String`` Total Object Count property in the JSON response. Defaults to 'meta.total_count'. + */ + totalProperty : 'meta.total_count', + + /** api: config[baseParams] + * ``Object`` Optional additional params to send in the requests. + */ + baseParams: null, + + /** api: config[fields] + * ``Array`` Fields to use for the JsonReader. By default the following + * fields are provided: title, abstract, bounds and URI. Optionally this + * can be overridden by applications to provide different or additional + * mappings. + */ + fields: [ + {name: "title", convert: function(v) { + return [v]; + }}, + {name: "abstract", mapping: "description"}, + {name: "bounds", mapping: "csw_wkt_geometry", convert: function(v) { + var wkt = new OpenLayers.Format.WKT(); + var features = wkt.read(v); + var bounds = features.geometry.getBounds(); + return { + left: bounds.left, + right: bounds.right, + bottom: bounds.bottom, + top: bounds.top + }; + }}, + {name: "URI", mapping: "detail_url", convert: function(v) { + var result = []; + for (var key in v) { + result.push({value: app.localGeoServerBaseUrl + "wms", protocol:"OGC:WMS", name: decodeURIComponent(v.substr(8))}); + } + return result; + }} + ], + + /** api: method[createStore] + * Create the store that will be used for the GeoNode searches. + */ + createStore: function() { + this.store = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy(Ext.apply({ + url: this.url, + method: 'GET' + }, this.proxyOptions || {})), + reader: new Ext.data.JsonReader({ + root: this.rootProperty, + totalProperty: this.totalProperty + }, this.fields) + }); + gxp.plugins.LayerSource.prototype.createStore.apply(this, arguments); + }, + + /** api: method[getPagingStart] + * :return: ``Integer`` Where does paging start at? + */ + getPagingStart: function() { + return 0; + }, + + /** api: method[getPagingParamNames] + * :return: ``Object`` with keys start and limit. + * + * Get the names of the parameters to use for paging. + */ + getPagingParamNames: function() { + return { + start: 'offset', + limit: 'limit' + }; + }, + + /** api: method[filter] + * Filter the store by querying the catalogue service. + * :param options: ``Object`` An object with the following keys: + * + * .. list-table:: + * :widths: 20 80 + * + * * - ``queryString`` + * - the search string + * * - ``limit`` + * - the maximum number of records to retrieve + * * - ``filters`` + * - additional filters to include in the query + */ + filter: function(options) { + var bbox = undefined; + + // check for the filters property before using it + if (options.filters !== undefined) { + for (var i=0, ii=options.filters.length; i ';},beforeExpand:function(record,body,rowIndex){if(this.fireEvent('beforeexpand',this,record,body,rowIndex)!==false){if(this.tpl&&this.lazyRender){body.innerHTML=this.getBodyContent(record,rowIndex);} +return true;}else{return false;}},toggleRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);} +this[Ext.fly(row).hasClass('x-grid3-row-collapsed')?'expandRow':'collapseRow'](row);},expandRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);} +var record=this.grid.store.getAt(row.rowIndex);var body=Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body',row);if(this.beforeExpand(record,body,row.rowIndex)){this.state[record.id]=true;Ext.fly(row).replaceClass('x-grid3-row-collapsed','x-grid3-row-expanded');this.fireEvent('expand',this,record,body,row.rowIndex);}},collapseRow:function(row){if(typeof row=='number'){row=this.grid.view.getRow(row);} +var record=this.grid.store.getAt(row.rowIndex);var body=Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body',true);if(this.fireEvent('beforecollapse',this,record,body,row.rowIndex)!==false){this.state[record.id]=false;Ext.fly(row).replaceClass('x-grid3-row-expanded','x-grid3-row-collapsed');this.fireEvent('collapse',this,record,body,row.rowIndex);}}});Ext.namespace("Styler");Styler.ColorManager=function(config){Ext.apply(this,config);};Ext.apply(Styler.ColorManager.prototype,{field:null,init:function(field){this.register(field);},destroy:function(){if(this.field){this.unregister(this.field);}},register:function(field){if(this.field){this.unregister(this.field);} +this.field=field;field.on({focus:this.fieldFocus,destroy:this.destroy,scope:this});},unregister:function(field){field.un("focus",this.fieldFocus,this);field.un("destroy",this.destroy,this);if(Styler.ColorManager.picker&&field==this.field){Styler.ColorManager.picker.un("pickcolor",this.setFieldValue,this);} +this.field=null;},fieldFocus:function(field){if(!Styler.ColorManager.pickerWin){Styler.ColorManager.picker=new Ext.ux.ColorPanel({hidePanel:false,autoHeight:false});Styler.ColorManager.pickerWin=new Ext.Window({title:"Color Picker",layout:"fit",closeAction:"hide",width:405,height:300,plain:true,items:Styler.ColorManager.picker});} +Styler.ColorManager.picker.purgeListeners();this.setPickerValue();Styler.ColorManager.picker.on({pickcolor:this.setFieldValue,scope:this});Styler.ColorManager.pickerWin.show();},setFieldValue:function(picker,color){if(this.field.isVisible()){this.field.setValue("#"+color);}},setPickerValue:function(){var field=this.field;var hex=field.getHexValue?field.getHexValue():field.getValue();if(hex){Styler.ColorManager.picker.setColor(hex.substring(1));}}});Styler.ColorManager.picker=null;Styler.ColorManager.pickerWin=null;Ext.namespace('Ext.ux');Ext.ux.ColorPicker=function(config){config.bodyStyle={'padding':'3px'};Ext.ux.ColorPicker.superclass.constructor.call(this,config);this.initialize(config);} +Ext.extend(Ext.ux.ColorPicker,Ext.util.Observable,{HCHARS:'0123456789ABCDEF',initialize:function(config){this.events={};this.config=this.config||config;this.config.captions=this.config.captions||{};this.config.pickerHotPoint=this.config.pickerHotPoint||{x:3,y:3};this._HSV={h:0,s:100,v:100};this._RGB={r:255,g:255,b:255};this._HEX='000000';this.lastXYRgb={x:0,y:0};this.lastYHue=0;this.domElement=this.config.renderTo||Ext.DomHelper.append(document.body,{},true);this.domElement.addClass('x-cp-panel');this.cpCreateDomObjects();if(this.config.hidePanel){this.formContainer.hide();} +this.rgbPicker.on('mousedown',this.rgbPickerClick.createDelegate(this),this);this.huePicker.on('mousedown',this.huePickerClick.createDelegate(this),this);this.wsColorContainer.on('mousedown',this.setColorFromWebsafe.createDelegate(this),this);this.inColorContainer.on('mousedown',this.setColorFromInvert.createDelegate(this),this);Ext.getCmp('redValue'+this.domElement.id).on('change',this.changeRGBField.createDelegate(this));Ext.getCmp('greenValue'+this.domElement.id).on('change',this.changeRGBField.createDelegate(this));Ext.getCmp('blueValue'+this.domElement.id).on('change',this.changeRGBField.createDelegate(this));Ext.getCmp('hueValue'+this.domElement.id).on('change',this.changeHSVField.createDelegate(this));Ext.getCmp('saturationValue'+this.domElement.id).on('change',this.changeHSVField.createDelegate(this));Ext.getCmp('brightnessValue'+this.domElement.id).on('change',this.changeHSVField.createDelegate(this));Ext.getCmp('colorValue'+this.domElement.id).on('change',this.changeHexaField.createDelegate(this));Ext.getCmp('redValue'+this.domElement.id).on('specialkey',this.changeRGBField.createDelegate(this));Ext.getCmp('greenValue'+this.domElement.id).on('specialkey',this.changeRGBField.createDelegate(this));Ext.getCmp('blueValue'+this.domElement.id).on('specialkey',this.changeRGBField.createDelegate(this));Ext.getCmp('hueValue'+this.domElement.id).on('specialkey',this.changeHSVField.createDelegate(this));Ext.getCmp('saturationValue'+this.domElement.id).on('specialkey',this.changeHSVField.createDelegate(this));Ext.getCmp('brightnessValue'+this.domElement.id).on('specialkey',this.changeHSVField.createDelegate(this));Ext.getCmp('colorValue'+this.domElement.id).on({'specialkey':function(field,evt){if(evt.getKey()===evt.ENTER){this.changeHexaField(field,field.getValue());}},scope:this});this.checkConfig();this.addEvents({pickcolor:true,changergb:true,changehsv:true,changehexa:true});},cpCreateDomObjects:function(){this.rgbPicker=Ext.DomHelper.append(this.domElement,{tag:'div',cls:'x-cp-rgb-msk'},true);this.rgbPointer=Ext.DomHelper.append(this.rgbPicker,{tag:'div',cls:'x-cp-rgb-picker'},true);this.rgbPointer.setXY([this.rgbPicker.getLeft()-this.config.pickerHotPoint.x,this.rgbPicker.getTop()-this.config.pickerHotPoint.y]);this.huePicker=Ext.DomHelper.append(this.domElement,{tag:'div',cls:'x-cp-hue-msk'},true);this.huePointer=Ext.DomHelper.append(this.huePicker,{tag:'div',cls:'x-cp-hue-picker'},true);this.huePointer.setXY([this.huePicker.getLeft()+(this.huePointer.getWidth()/2)+1,this.huePicker.getTop()-this.config.pickerHotPoint.y]);this.formContainer=Ext.DomHelper.append(Ext.DomHelper.append(this.domElement,{tag:'div',cls:'x-cp-control-container'},true),{tag:'div',cls:'x-cp-rgb-container',style:'clear:both'},true);this.colorContainer=Ext.DomHelper.append(this.formContainer,{cls:'x-cp-coloro-container'},true).update(this.config.captions.color||'Color');this.form=new Ext.FormPanel({frame:true,width:'auto',height:227,cls:'x-cp-form',labelWidth:12,items:[{xtype:'fieldset',title:'RGB',autoHeight:true,style:'padding: 2px',defaultType:'numberfield',items:[{fieldLabel:'Red',id:'redValue'+this.domElement.id},{fieldLabel:'Green',id:'greenValue'+this.domElement.id},{fieldLabel:'Blue',id:'blueValue'+this.domElement.id}]},{xtype:'fieldset',title:'HSV',autoHeight:true,style:'padding: 2px',defaultType:'numberfield',items:[{fieldLabel:'Hue',id:'hueValue'+this.domElement.id},{fieldLabel:'Satur.',id:'saturationValue'+this.domElement.id},{fieldLabel:'Bright.',id:'brightnessValue'+this.domElement.id}]},{xtype:'fieldset',title:'Color',autoHeight:true,style:'padding: 2px',defaultType:'textfield',items:[{fieldLabel:'Color',id:'colorValue'+this.domElement.id}]}]});this.form.render(this.formContainer);var temp=Ext.DomHelper.append(this.form.body,{cls:'x-cp-colors-container x-unselectable'},true);this.wsColorContainer=Ext.DomHelper.append(temp,{cls:'x-cp-color-container x-unselectable'},true).update(this.config.captions.websafe||'Websafe');this.inColorContainer=Ext.DomHelper.append(temp,{cls:'x-cp-color-container x-unselectable'},true).update(this.config.captions.inverse||'Inverse');Ext.DomHelper.append(temp,{tag:'div',style:'height:0px;border:none;clear:both;font-size:1px;'});this.form.render(this.formContainer);Ext.DomHelper.append(this.domElement,{tag:'div',style:'height:0px;border:none;clear:both;font-size:1px;'});},realToDec:function(n){return Math.min(255,Math.round(n*256));},hsvToRgb:function(h,s,v){if(h instanceof Array){return this.hsvToRgb.call(this,h[0],h[1],h[2]);} +var r,g,b,i,f,p,q,t;i=Math.floor((h/60)%6);f=(h/60)-i;p=v*(1-s);q=v*(1-f*s);t=v*(1-(1-f)*s);switch(i){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;break;} +return[this.realToDec(r),this.realToDec(g),this.realToDec(b)];},rgbToHsv:function(r,g,b){if(r instanceof Array){return this.rgbToHsv.call(this,r[0],r[1],r[2]);} +r=r/255;g=g/255;b=b/255;var min,max,delta,h,s,v;min=Math.min(Math.min(r,g),b);max=Math.max(Math.max(r,g),b);delta=max-min;switch(max){case min:h=0;break;case r:h=60*(g-b)/delta;if(g255||n<0)?0:n;return this.HCHARS.charAt((n-n%16)/16)+this.HCHARS.charAt(n%16);},getHCharPos:function(c){return this.HCHARS.indexOf(c.toUpperCase());},hexToDec:function(hex){var s=hex.split('');return((this.getHCharPos(s[0])*16)+this.getHCharPos(s[1]));},hexToRgb:function(hex){return[this.hexToDec(hex.substr(0,2)),this.hexToDec(hex.substr(2,2)),this.hexToDec(hex.substr(4,2))];},checkSafeNumber:function(v){if(!isNaN(v)){v=Math.min(Math.max(0,v),255);var i,next;for(i=0;i<256;i=i+51){next=i+51;if(v>=i&&v<=next){return(v-i>25)?next:i;}}} +return v;},websafe:function(r,g,b){if(r instanceof Array){return this.websafe.call(this,r[0],r[1],r[2]);} +return[this.checkSafeNumber(r),this.checkSafeNumber(g),this.checkSafeNumber(b)];},invert:function(r,g,b){if(r instanceof Array){return this.invert.call(this,r[0],r[1],r[2]);} +return[255-r,255-g,255-b];},getHue:function(y){var hue=360-Math.round(((this.huePicker.getHeight()-y)/this.huePicker.getHeight())*360);return hue===360?0:hue;},getHPos:function(hue){return hue*(this.huePicker.getHeight()/360);},getSaturation:function(x){return x/this.rgbPicker.getWidth();},getSPos:function(saturation){return saturation*this.rgbPicker.getWidth();},getValue:function(y){return(this.rgbPicker.getHeight()-y)/this.rgbPicker.getHeight();},getVPos:function(value){return this.rgbPicker.getHeight()-(value*this.rgbPicker.getHeight());},updateColorsFromRGBPicker:function(){this._HSV={h:this._HSV.h,s:this.getSaturation(this.lastXYRgb.x),v:this.getValue(this.lastXYRgb.y)};},updateColorsFromHUEPicker:function(){this._HSV.h=this.getHue(this.lastYHue);var temp=this.hsvToRgb(this._HSV.h,1,1);temp=this.rgbToHex(temp[0],temp[1],temp[2]);this.rgbPicker.setStyle({backgroundColor:'#'+temp});},updateColorsFromRGBFields:function(){var temp=this.rgbToHsv(Ext.getCmp('redValue'+this.domElement.id).getValue(),Ext.getCmp('greenValue'+this.domElement.id).getValue(),Ext.getCmp('blueValue'+this.domElement.id).getValue());this._HSV={h:temp[0],s:temp[1],v:temp[2]};},updateColorsFromHexaField:function(){var temp=this.hexToRgb(this._HEX);this._RGB={r:temp[0],g:temp[1],b:temp[2]};temp=this.rgbToHsv(temp[0],temp[1],temp[2]);this._HSV={h:temp[0],s:temp[1],v:temp[2]};},updateColorsFromHSVFields:function(){var temp=this.hsvToRgb(this._HSV.h,this._HSV.s,this._HSV.v);this._RGB={r:temp[0],g:temp[1],b:temp[2]};},updateRGBFromHSV:function(){var temp=this.hsvToRgb(this._HSV.h,this._HSV.s,this._HSV.v);this._RGB={r:temp[0],g:temp[1],b:temp[2]};},updateInputFields:function(){Ext.getCmp('redValue'+this.domElement.id).setValue(this._RGB.r);Ext.getCmp('greenValue'+this.domElement.id).setValue(this._RGB.g);Ext.getCmp('blueValue'+this.domElement.id).setValue(this._RGB.b);Ext.getCmp('hueValue'+this.domElement.id).setValue(this._HSV.h);Ext.getCmp('saturationValue'+this.domElement.id).setValue(Math.round(this._HSV.s*100));Ext.getCmp('brightnessValue'+this.domElement.id).setValue(Math.round(this._HSV.v*100));Ext.getCmp('colorValue'+this.domElement.id).setValue(this._HEX);},updateColor:function(){this._HEX=this.rgbToHex(this._RGB.r,this._RGB.g,this._RGB.b);this.colorContainer.setStyle({backgroundColor:'#'+this._HEX});this.colorContainer.set({title:'#'+this._HEX});var temp=this.rgbToHex(this.websafe(this._RGB.r,this._RGB.g,this._RGB.b));this.wsColorContainer.setStyle({backgroundColor:'#'+temp});this.wsColorContainer.set({title:'#'+temp});this.wsColorContainer.setStyle({color:'#'+this.rgbToHex(this.invert(this.websafe(this._RGB.r,this._RGB.g,this._RGB.b)))});var temp=this.rgbToHex(this.invert(this._RGB.r,this._RGB.g,this._RGB.b));this.inColorContainer.setStyle({backgroundColor:'#'+temp});this.inColorContainer.setStyle({color:'#'+this._HEX});this.inColorContainer.set({title:'#'+temp});this.colorContainer.setStyle({color:'#'+temp});this.updateInputFields();this.fireEvent('pickcolor',this,this._HEX);},updatePickers:function(){this.lastXYRgb={x:this.getSPos(this._HSV.s),y:this.getVPos(this._HSV.v)};this.rgbPointer.setXY([this.lastXYRgb.x-this.config.pickerHotPoint.x+this.rgbPicker.getLeft(),this.lastXYRgb.y-this.config.pickerHotPoint.y+this.rgbPicker.getTop()],this.config.animate);this.lastYHue=this.getHPos(this._HSV.h);this.huePointer.setXY([this.huePicker.getLeft()+(this.huePointer.getWidth()/2)+1,this.lastYHue+this.huePicker.getTop()-this.config.pickerHotPoint.y],this.config.animate);var temp=this.hsvToRgb(this._HSV.h,1,1);temp=this.rgbToHex(temp[0],temp[1],temp[2]);this.rgbPicker.setStyle({backgroundColor:'#'+temp});},rgbPickerClick:function(event,cp){this.lastXYRgb={x:event.getPageX()-this.rgbPicker.getLeft(),y:event.getPageY()-this.rgbPicker.getTop()};this.rgbPointer.setXY([event.getPageX()-this.config.pickerHotPoint.x,event.getPageY()-this.config.pickerHotPoint.y],this.config.animate);this.updateColorsFromRGBPicker();this.updateRGBFromHSV();this.updateColor();},huePickerClick:function(event,cp){this.lastYHue=event.getPageY()-this.huePicker.getTop();this.huePointer.setY([event.getPageY()-3],this.config.animate);this.updateColorsFromHUEPicker();this.updateRGBFromHSV();this.updateColor();},changeRGBField:function(element,newValue,oldValue){if(!(newValue instanceof String)){newValue=element.getValue();} +if(newValue<0){newValue=0;} +if(newValue>255){newValue=255;} +if(element==Ext.getCmp('redValue'+this.domElement.id)){this._RGB.r=newValue;} +else if(element==Ext.getCmp('greenValue'+this.domElement.id)){this._RGB.g=newValue;} +else if(element==Ext.getCmp('blueValue'+this.domElement.id)){this._RGB.b=newValue;} +this.updateColorsFromRGBFields();this.updateColor();this.updatePickers();this.fireEvent('changergb',this,this._RGB);},changeHSVField:function(element,newValue,oldValue){if(!(newValue instanceof String)){newValue=element.getValue();} +if(element==Ext.getCmp('hueValue'+this.domElement.id)){if(newValue<0){newValue=0;} +if(newValue>360){newValue=360;} +this._HSV.h=newValue;}else{if(newValue<0){newValue=0;} +if(newValue>100){newValue=100;} +if(element==Ext.getCmp('saturationValue'+this.domElement.id)){this._HSV.s=(newValue/100);} +else if(element==Ext.getCmp('brightnessValue'+this.domElement.id)){this._HSV.v=(newValue/100);}} +this.updateColorsFromHSVFields();this.updateColor();this.updatePickers();this.fireEvent('changehsv',this,this._HSV);},changeHexaField:function(element,newValue,oldValue){newValue=newValue.trim().substring(0,6);if(newValue.length===3){newValue=newValue[0]+newValue[0]+newValue[1]+newValue[1]+newValue[2]+newValue[2];} +if(!newValue.match(/^[0-9a-f]{6}$/i)){newValue="000000";} +this._HEX=newValue;this.updateColorsFromHexaField();this.updateColor();this.updatePickers();this.fireEvent('changehexa',this,this._HEX);},setColorFromWebsafe:function(){this.setColor(this.wsColorContainer.getColor('backgroundColor','',''));},setColorFromInvert:function(){this.setColor(this.inColorContainer.getColor('backgroundColor','',''));},checkConfig:function(){if(this.config){if(this.config.color){this.setColor(this.config.color);} +else if(this.config.hsv){this.setHSV(this.config.hsv);} +else if(this.config.rgb){this.setRGB(this.config.rgb);}}},setColor:function(hexa){var temp=this.hexToRgb(hexa);this._RGB={r:temp[0],g:temp[1],b:temp[2]} +var temp=this.rgbToHsv(temp);this._HSV={h:temp[0],s:temp[1],v:temp[2]};this.updateColor();this.updatePickers();},setRGB:function(rgb){this._RGB=rgb;var temp=this.rgbToHsv(rgb.r,rgb.g,rgb.b);this._HSV={h:temp[0],s:temp[1],v:temp[2]};this.updateColor();this.updatePickers();},setHSV:function(hsv){this._HSV={h:hsv.h,s:(hsv.s/100),v:(hsv.v/100)};var temp=this.hsvToRgb(hsv.h,(hsv.s/100),(hsv.v/100));this._RGB={r:temp[0],g:temp[1],b:temp[2]};this.updateColor();this.updatePickers();},getColor:function(hash){return(hash?'':'#')+this._HEX;},getRGB:function(){return this._RGB;},getHSV:function(){return this._HSV;},setPanelVisible:function(show,animate){return this.formContainer.setVisible(show,animate);},isPanelVisible:function(){return this.formContainer.isDisplayed();},showPicker:function(){this.domElement.show();},hidePicker:function(){this.domElement.hide();}});Ext.ux.ColorPanel=function(config){this.config=config;this.config.renderTo=this.config.renderTo||Ext.DomHelper.append(document.body,{},true);Ext.ux.ColorPanel.superclass.constructor.call(this,config);this.domElement=Ext.get(this.config.renderTo);this.render(this.domElement);this.config.renderTo=this.body;this.initialize(this.config);this.getEl().addClass('x-cp-panel');this.domElement.removeClass('x-cp-panel') +this.body.setStyle({'padding':'5px'});} +Ext.extend(Ext.ux.ColorPanel,Ext.Panel);Ext.applyIf(Ext.ux.ColorPanel.prototype,Ext.ux.ColorPicker.prototype);Ext.ux.ColorDialog=function(config){this.config=config;this.config.resizable=false;this.config.renderTo=this.config.renderTo||Ext.DomHelper.append(document.body,{},true);Ext.ux.ColorDialog.superclass.constructor.call(this,config);this.domElement=Ext.get(this.config.renderTo);this.render(this.domElement);this.config.renderTo=this.body;this.initialize(this.config);this.body.addClass('x-cp-panel') +this.body.setStyle({padding:'5px'});this.setSize(398,300);} +Ext.extend(Ext.ux.ColorDialog,Ext.Window);Ext.applyIf(Ext.ux.ColorDialog.prototype,Ext.ux.ColorPicker.prototype);Ext.ns('Ext.ux.form');Ext.ux.form.FileUploadField=Ext.extend(Ext.form.TextField,{buttonText:'Browse...',buttonOnly:false,buttonOffset:3,readOnly:true,autoSize:Ext.emptyFn,initComponent:function(){Ext.ux.form.FileUploadField.superclass.initComponent.call(this);this.addEvents('fileselected');},onRender:function(ct,position){Ext.ux.form.FileUploadField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'});this.el.addClass('x-form-file-text');this.el.dom.removeAttribute('name');this.createFileInput();var btnCfg=Ext.applyIf(this.buttonCfg||{},{text:this.buttonText});this.button=new Ext.Button(Ext.apply(btnCfg,{renderTo:this.wrap,cls:'x-form-file-btn'+(btnCfg.iconCls?' x-btn-icon':'')}));if(this.buttonOnly){this.el.hide();this.wrap.setWidth(this.button.getEl().getWidth());} +this.bindListeners();this.resizeEl=this.positionEl=this.wrap;},bindListeners:function(){this.fileInput.on({scope:this,mouseenter:function(){this.button.addClass(['x-btn-over','x-btn-focus'])},mouseleave:function(){this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])},mousedown:function(){this.button.addClass('x-btn-click')},mouseup:function(){this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])},change:function(){var v=this.fileInput.dom.value;this.setValue(v);this.fireEvent('fileselected',this,v);}});},createFileInput:function(){this.fileInput=this.wrap.createChild({id:this.getFileInputId(),name:this.name||this.getId(),cls:'x-form-file',tag:'input',type:'file',size:1});},reset:function(){this.fileInput.remove();this.createFileInput();this.bindListeners();Ext.ux.form.FileUploadField.superclass.reset.call(this);},getFileInputId:function(){return this.id+'-file';},onResize:function(w,h){Ext.ux.form.FileUploadField.superclass.onResize.call(this,w,h);this.wrap.setWidth(w);if(!this.buttonOnly){var w=this.wrap.getWidth()-this.button.getEl().getWidth()-this.buttonOffset;this.el.setWidth(w);}},onDestroy:function(){Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);Ext.destroy(this.fileInput,this.button,this.wrap);},onDisable:function(){Ext.ux.form.FileUploadField.superclass.onDisable.call(this);this.doDisable(true);},onEnable:function(){Ext.ux.form.FileUploadField.superclass.onEnable.call(this);this.doDisable(false);},doDisable:function(disabled){this.fileInput.dom.disabled=disabled;this.button.setDisabled(disabled);},preFocus:Ext.emptyFn,alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);}});Ext.reg('fileuploadfield',Ext.ux.form.FileUploadField);Ext.form.FileUploadField=Ext.ux.form.FileUploadField; \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/search/cart.js b/django_project/core/geonode_static/geonode/js/search/cart.js new file mode 100644 index 0000000..7b64169 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/search/cart.js @@ -0,0 +1,125 @@ +'use strict'; + +(function(){ + angular.module('cart', []) + .controller('CartList', function($scope, cart){ + $scope.cart = cart; + $scope.layers_params = ''; + + $scope.newMap = function(){ + var items = cart.getCart().items; + var params = ''; + for(var i=0; i 0){ + message.find('.message').html('Permissions correctly registered, although the following resources were'+ + ' skipped because you don\'t have the rights to edit their permissions:'); + message.find('.extra_content').html(not_changed.join('
    ')); + message.addClass('alert-warning').removeClass('alert-success alert-danger hidden'); + } + else{ + message.find('.message').html('Permissions correctly registered.'); + message.addClass('alert-success').removeClass('alert-warning alert-danger hidden'); + } + }, + error: function(data){ + message.find('.message').html($.parseJSON(data).error); + message.addClass('alert-danger').removeClass('alert-success alert-warning hidden'); + } + } + ); + }; + }) + + .directive('resourceCart', [function(){ + return { + restrict: 'E', + templateUrl: "/static/geonode/js/templates/cart.html" + }; + }]) + + .service('cart', function(){ + + this.init = function(){ + this.$cart = { + items: [] + }; + }; + + this.getCart = function(){ + return this.$cart; + } + + this.addItem = function(item){ + if(this.getItemById(item.id) === null){ + this.getCart().items.push(item); + } + } + + this.removeItem = function(item){ + if(this.getItemById(item.id) !== null){ + var cart = this.getCart(); + angular.forEach(cart.items, function(cart_item, index){ + if(cart_item.id === item.id){ + cart.items.splice(index, 1); + } + }); + } + } + + this.toggleItem = function(item){ + if(this.getItemById(item.id) === null){ + this.addItem(item); + }else{ + this.removeItem(item); + } + } + + this.getItemById = function (itemId) { + var items = this.getCart().items; + var the_item = null; + angular.forEach(items, function(item){ + if(item.id === itemId){ + the_item = item; + } + }); + return the_item; + } + + this.getFaClass = function(id){ + if(this.getItemById(id) === null){ + return 'fa-cart-plus'; + }else{ + return 'fa-remove' + } + } + }) + + .run(['cart', function(cart){ + cart.init(); + }]) +})(); \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/search/explore.js b/django_project/core/geonode_static/geonode/js/search/explore.js new file mode 100644 index 0000000..65e0cb6 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/search/explore.js @@ -0,0 +1,40 @@ +$(function() { + + $(".datepicker").datetimepicker({autoclose:true}); + + $("#slide-pane a.toggle-pane").click(function(e) { + e.preventDefault(); + var span$ = $("#slide-pane").parents(".col-md-3"); + if(!span$.is('.hidden')) { + span$.addClass("hidden").animate({ + marginLeft: "-310px" + }, 500, function() { + setContentWidth(); + }); + $(this).find("i").attr("class", "fa fa-chevron-right"); + } else { + span$.removeClass("hidden").animate({ + marginLeft: "0px" + }, 500, function() { + setContentWidth(); + }); + $(this).find("i").attr("class", "fa fa-chevron-left"); + } + }); + $("nav a.toggle-nav").click(function(e) { + e.preventDefault(); + if ($(this).parents("h4").siblings(".nav").is(":visible")) { + $(this).parents("h4").siblings(".nav").slideUp(); + $(this).find("i").attr("class", "fa fa-chevron-right"); + } else { + $(this).parents("h4").siblings(".nav").slideDown(); + $(this).find("i").attr("class", "fa fa-chevron-down"); + } + }); +}); + +function setContentWidth() { + var lm = parseInt($("#slide-pane").parents(".col-md-3").css("marginLeft").replace("px", "")) + 51; + var w = $("#contain-slider").width() - ($("#slide-pane").outerWidth() + lm); + $(".tab-content").css('width', w + "px"); +} \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/search/search.js b/django_project/core/geonode_static/geonode/js/search/search.js new file mode 100644 index 0000000..948bb55 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/search/search.js @@ -0,0 +1,634 @@ +'use strict'; + +(function(){ + + var module = angular.module('geonode_main_search', [], function($locationProvider) { + if (window.navigator.userAgent.indexOf("MSIE") == -1){ + $locationProvider.html5Mode({ + enabled: true, + requireBase: false + }); + + // make sure that angular doesn't intercept the page links + angular.element("a").prop("target", "_self"); + } + }); + + // Used to set the class of the filters based on the url parameters + module.set_initial_filters_from_query = function (data, url_query, filter_param){ + for(var i=0;i 0){ + module.load_categories($http, $rootScope, $location); + } + //if ($('#keywords').length > 0){ + // module.load_keywords($http, $rootScope, $location); + //} + module.load_h_keywords($http, $rootScope, $location); + + if ($('#regions').length > 0){ + module.load_regions($http, $rootScope, $location); + } + if ($('#owners').length > 0){ + module.load_owners($http, $rootScope, $location); + } + if ($('#tkeywords').length > 0){ + module.load_t_keywords($http, $rootScope, $location); + } + + + // Activate the type filters if in the url + if($location.search().hasOwnProperty('type__in')){ + var types = $location.search()['type__in']; + if(types instanceof Array){ + for(var i=0;i 1 and a + // subsequent query returns less pages, then + // reset the page to one and search again. + if($scope.numpages < $scope.page){ + $scope.page = 1; + $scope.query.offset = 0; + query_api($scope.query); + } + + // In case of no results, the number of pages is one. + if($scope.numpages == 0){$scope.numpages = 1}; + }); + + $scope.paginate_down = function(){ + if($scope.page > 1){ + $scope.page -= 1; + $scope.query.offset = $scope.query.limit * ($scope.page - 1); + query_api($scope.query); + } + } + + $scope.paginate_up = function(){ + if($scope.numpages > $scope.page){ + $scope.page += 1; + $scope.query.offset = $scope.query.limit * ($scope.page - 1); + query_api($scope.query); + } + } + /* + * End pagination + */ + + + if (!Configs.hasOwnProperty("disableQuerySync")) { + // Keep in sync the page location with the query object + $scope.$watch('query', function(){ + $location.search($scope.query); + }, true); + } + + // Hyerarchical keywords listeners + $scope.$on('select_h_keyword', function($event, element){ + var data_filter = 'keywords__slug__in'; + var query_entry = []; + var value = element.text; + // If the query object has the record then grab it + if ($scope.query.hasOwnProperty(data_filter)){ + + // When in the location are passed two filters of the same + // type then they are put in an array otherwise is a single string + if ($scope.query[data_filter] instanceof Array){ + query_entry = $scope.query[data_filter]; + }else{ + query_entry.push($scope.query[data_filter]); + } + } + + // Add the entry in the correct query + if (query_entry.indexOf(value) == -1){ + query_entry.push(value); + } + + //save back the new query entry to the scope query + $scope.query[data_filter] = query_entry; + + query_api($scope.query); + }); + + $scope.$on('unselect_h_keyword', function($event, element){ + var data_filter = 'keywords__slug__in'; + var query_entry = []; + var value = element.text; + // If the query object has the record then grab it + if ($scope.query.hasOwnProperty(data_filter)){ + + // When in the location are passed two filters of the same + // type then they are put in an array otherwise is a single string + if ($scope.query[data_filter] instanceof Array){ + query_entry = $scope.query[data_filter]; + }else{ + query_entry.push($scope.query[data_filter]); + } + } + + query_entry.splice(query_entry.indexOf(value), 1); + + //save back the new query entry to the scope query + $scope.query[data_filter] = query_entry; + + //if the entry is empty then delete the property from the query + if(query_entry.length == 0){ + delete($scope.query[data_filter]); + } + query_api($scope.query); + }); + + /* + * Add the selection behavior to the element, it adds/removes the 'active' class + * and pushes/removes the value of the element from the query object + */ + $scope.multiple_choice_listener = function($event){ + var element = $($event.target); + var query_entry = []; + var data_filter = element.attr('data-filter'); + var value = element.attr('data-value'); + + // If the query object has the record then grab it + if ($scope.query.hasOwnProperty(data_filter)){ + + // When in the location are passed two filters of the same + // type then they are put in an array otherwise is a single string + if ($scope.query[data_filter] instanceof Array){ + query_entry = $scope.query[data_filter]; + }else{ + query_entry.push($scope.query[data_filter]); + } + } + + // If the element is active active then deactivate it + if(element.hasClass('active')){ + // clear the active class from it + element.removeClass('active'); + + // Remove the entry from the correct query in scope + + query_entry.splice(query_entry.indexOf(value), 1); + } + // if is not active then activate it + else if(!element.hasClass('active')){ + // Add the entry in the correct query + if (query_entry.indexOf(value) == -1){ + query_entry.push(value); + } + element.addClass('active'); + } + + //save back the new query entry to the scope query + $scope.query[data_filter] = query_entry; + + //if the entry is empty then delete the property from the query + if(query_entry.length == 0){ + delete($scope.query[data_filter]); + } + query_api($scope.query); + } + + $scope.single_choice_listener = function($event){ + var element = $($event.target); + var query_entry = []; + var data_filter = element.attr('data-filter'); + var value = element.attr('data-value'); + // Type of data being displayed, use 'content' instead of 'all' + $scope.dataValue = (value == 'all') ? 'content' : value; + + // If the query object has the record then grab it + if ($scope.query.hasOwnProperty(data_filter)){ + query_entry = $scope.query[data_filter]; + } + + if(!element.hasClass('selected')){ + // Add the entry in the correct query + query_entry = value; + + // clear the active class from it + element.parents('ul').find('a').removeClass('selected'); + + element.addClass('selected'); + + //save back the new query entry to the scope query + $scope.query[data_filter] = query_entry; + + query_api($scope.query); + } + } + + /* + * Text search management + */ + var text_autocomplete = $('#text_search_input').yourlabsAutocomplete({ + url: AUTOCOMPLETE_URL_RESOURCEBASE, + choiceSelector: 'span', + hideAfter: 200, + minimumCharacters: 1, + placeholder: gettext('Enter your text here ...'), + autoHilightFirst: false + }); + + $('#text_search_input').keypress(function(e) { + if(e.which == 13) { + $('#text_search_btn').click(); + $('.yourlabs-autocomplete').hide(); + } + }); + + $('#text_search_input').bind('selectChoice', function(e, choice, text_autocomplete) { + if(choice[0].children[0] == undefined) { + $('#text_search_input').val($(choice[0]).text()); + $('#text_search_btn').click(); + } + }); + + $('#text_search_btn').click(function(){ + if (HAYSTACK_SEARCH) + $scope.query['q'] = $('#text_search_input').val(); + else + if (AUTOCOMPLETE_URL_RESOURCEBASE == "/autocomplete/ProfileAutocomplete/") + // a user profile has no title; if search was triggered from + // the /people page, filter by username instead + var query_key = 'username__icontains'; + else + var query_key = 'title__icontains'; + $scope.query[query_key] = $('#text_search_input').val(); + query_api($scope.query); + }); + + /* + * Region search management + */ + var region_autocomplete = $('#region_search_input').yourlabsAutocomplete({ + url: AUTOCOMPLETE_URL_REGION, + choiceSelector: 'span', + hideAfter: 200, + minimumCharacters: 1, + appendAutocomplete: $('#region_search_input'), + placeholder: gettext('Enter your region here ...') + }); + $('#region_search_input').bind('selectChoice', function(e, choice, region_autocomplete) { + if(choice[0].children[0] == undefined) { + $('#region_search_input').val(choice[0].innerHTML); + $('#region_search_btn').click(); + } + }); + + $('#region_search_btn').click(function(){ + $scope.query['regions__name__in'] = $('#region_search_input').val(); + query_api($scope.query); + }); + + $scope.feature_select = function($event){ + var element = $($event.target); + var article = $(element.parents('article')[0]); + if (article.hasClass('resource_selected')){ + element.html('Select'); + article.removeClass('resource_selected'); + } + else{ + element.html('Deselect'); + article.addClass('resource_selected'); + } + }; + + /* + * Date management + */ + + $scope.date_query = { + 'date__gte': '', + 'date__lte': '' + }; + var init_date = true; + $scope.$watch('date_query', function(){ + if($scope.date_query.date__gte != '' && $scope.date_query.date__lte != ''){ + $scope.query['date__range'] = $scope.date_query.date__gte + ',' + $scope.date_query.date__lte; + delete $scope.query['date__gte']; + delete $scope.query['date__lte']; + }else if ($scope.date_query.date__gte != ''){ + $scope.query['date__gte'] = $scope.date_query.date__gte; + delete $scope.query['date__range']; + delete $scope.query['date__lte']; + }else if ($scope.date_query.date__lte != ''){ + $scope.query['date__lte'] = $scope.date_query.date__lte; + delete $scope.query['date__range']; + delete $scope.query['date__gte']; + }else{ + delete $scope.query['date__range']; + delete $scope.query['date__gte']; + delete $scope.query['date__lte']; + } + if (!init_date){ + query_api($scope.query); + }else{ + init_date = false; + } + + }, true); + + /* + * Spatial search + */ + if ($('.leaflet_map').length > 0) { + angular.extend($scope, { + layers: { + baselayers: { + stamen: { + name: 'Toner Lite', + type: 'xyz', + url: 'http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png', + layerOptions: { + subdomains: ['a', 'b', 'c'], + attribution: 'Map tiles by Stamen Design', + continuousWorld: true + } + } + } + }, + map_center: { + lat: 5.6, + lng: 3.9, + zoom: 0 + }, + defaults: { + zoomControl: false + } + }); + + + var leafletData = $injector.get('leafletData'), + map = leafletData.getMap('filter-map'); + + map.then(function(map){ + map.on('moveend', function(){ + $scope.query['extent'] = map.getBounds().toBBoxString(); + query_api($scope.query); + }); + }); + + var showMap = false; + $('#_extent_filter').click(function(evt) { + showMap = !showMap + if (showMap){ + leafletData.getMap().then(function(map) { + map.invalidateSize(); + }); + } + }); + } + }); +})(); diff --git a/django_project/core/geonode_static/geonode/js/status/UploadSession.js b/django_project/core/geonode_static/geonode/js/status/UploadSession.js new file mode 100644 index 0000000..2ef6927 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/status/UploadSession.js @@ -0,0 +1,65 @@ +/*global define: true, $:true */ + +define(function () { + 'use strict'; + + var UploadSession = function (options) { + this.name = null; + this.id = null; + this.layer_name = null; + this.layer_id = null; + this.state = null; + this.url = null; + this.date = null; + + $.extend(this, options || {}); + }; + + + UploadSession.prototype.handle_edit = function (event) { + var target = $(event.target), + session = target.data('session'); + console.log(session); + }; + + + UploadSession.prototype.wrap_value = function (value) { + var td = $(''); + + if ((typeof value === 'object') && (value)) { + value.appendTo(td); + } else { + $('

    ', {text: value}).appendTo(td); + } + return td; + }; + + // TODO, use a template for this + UploadSession.prototype.formatTr = function () { + var tr = $(''), + input, + name, + div, + a; + tr.data('session', this); + input = $('', {type: 'checkbox'}); + this.wrap_value(input).appendTo(tr); + + a = $('', {text: 'Edit'}); + a.on('click', this.handle_edit); + if (this.url) { + this.wrap_value($('', {text: this.layer_name, href: this.url})) + .appendTo(tr); + } else { + this.wrap_value(this.layer_name).appendTo(tr); + } + this.wrap_value(a).appendTo(tr); + this.wrap_value(this.date).appendTo(tr); + this.wrap_value(this.state).appendTo(tr); + this.element = tr; + return tr; + }; + + return UploadSession; + +}); diff --git a/django_project/core/geonode_static/geonode/js/status/main.js b/django_project/core/geonode_static/geonode/js/status/main.js new file mode 100644 index 0000000..504bcef --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/status/main.js @@ -0,0 +1,24 @@ +/*global define: true, requirejs:true */ + +requirejs.config({ + baseUrl: '/static/libs/js', + shim: { + 'underscore': { exports: '_'} + }, + paths: { + 'status': '../js/status', + 'templates': '../js/templates' + } +}); + +define(['jquery', 'status/status'], function ($, status) { + 'use strict'; + + $(function () { + status.initialize({ + delete_selector: '#delete', + permission_selector: '#set-permissions', + }); + }); + +}); diff --git a/django_project/core/geonode_static/geonode/js/status/status.js b/django_project/core/geonode_static/geonode/js/status/status.js new file mode 100644 index 0000000..ee728ea --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/status/status.js @@ -0,0 +1,73 @@ +/*global $:true, define: true */ + + +define(['jquery', 'status/UploadSession'], function ($, UploadSession) { + 'use strict'; + + var initialize, get_session, load_sessions; + + + get_session = function (element) { + var tr = $(element).parent().parent(); + return tr.data('session'); + }; + + + load_sessions = function (url) { + var tbody = $('#session-table').find('tbody').first(); + tbody.empty(); + + $.ajax({url: '/data/upload/sessions/'}).done(function (sessions) { + $.each(sessions, function (idx, s) { + var session = new UploadSession(s), + tr = session.formatTr(); + tr.appendTo(tbody); + }); + }); + }; + + + initialize = function (options) { + var delete_sessions, + set_permissions, + find_selected_layers; + + + find_selected_layers = function (table) { + var inputs = table.find('input:checkbox:checked'), + res = [], + session, + i, + length = inputs.length; + + for (i = 0; i < length; i += 1) { + session = get_session(inputs[i]); + res.push(session); + } + return res; + }; + + delete_sessions = function (event) { + var table = $(options.table_selector), + sessions = find_selected_layers(table); + console.log(sessions); + $.each(sessions, function (idx, session) { + session.delete(); + }); + }; + + set_permissions = function (event) { + }; + + + load_sessions(options.status_url); + + $(options.delete_selector).on('click', delete_sessions); + $(options.permission_selector).on('click', set_permissions); + }; + + return { + initialize: initialize + }; + +}); \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/templates/cart.html b/django_project/core/geonode_static/geonode/js/templates/cart.html new file mode 100644 index 0000000..5603672 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/templates/cart.html @@ -0,0 +1,9 @@ +

    \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/templates/upload.html b/django_project/core/geonode_static/geonode/js/templates/upload.html new file mode 100644 index 0000000..c6cd758 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/templates/upload.html @@ -0,0 +1,138 @@ + + + + + + + + + + + diff --git a/django_project/core/geonode_static/geonode/js/tests/SpecRunner.html b/django_project/core/geonode_static/geonode/js/tests/SpecRunner.html new file mode 100644 index 0000000..a95a97d --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/tests/SpecRunner.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
    + + + + + + + + diff --git a/django_project/core/geonode_static/geonode/js/tests/run-tests.sh b/django_project/core/geonode_static/geonode/js/tests/run-tests.sh new file mode 100755 index 0000000..8957963 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/tests/run-tests.sh @@ -0,0 +1 @@ +java -jar libs/js.jar -opt -1 libs/bootstrap.js SpecRunner.html diff --git a/django_project/core/geonode_static/geonode/js/tests/test.js b/django_project/core/geonode_static/geonode/js/tests/test.js new file mode 100644 index 0000000..aec0d94 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/tests/test.js @@ -0,0 +1,223 @@ +/*global $:true, requirejs: true, define: true, module: true, test: true, ok:true, strictEqual:true */ +'use strict'; +requirejs.config({ + baseUrl: 'js/', + + paths: { + underscore: '../libs/underscore', + jquery: '../../libs/js/jquery' + } +}); + +define(function (require) { + + var FileType = require('upload/FileType'), + FileTypes = require('upload/FileTypes'), + LayerInfo = require('upload/LayerInfo'), + UploadSession = require('status/UploadSession'), + getBase = require('upload/path').getBase, + getExt = require('upload/path').getExt, + getName = require('upload/path').getName; + + + + module('Test correctly splitting the file name'); + test('That layer names without an extension are correctly parsed', function () { + var n1 = {name: 'test.shp'}, + n2 = {name: 'test'}, + awfulName = {name: 'This --- []is .an awful.shp.shpfile.shp'}; + + + ok(getBase(n1), 'Make sure getBase works with name with an extension'); + + strictEqual( + getBase(n2)[0], + 'test', + 'Make sure getBase works with names without an extension' + ); + + strictEqual( + getBase({name: 'thingaf [(.shp'})[0], + 'thingaf [(', + 'Make sure that the getBase function can handle file names with strange chars' + ); + + strictEqual( + getExt({name: 'name.shp'}), + 'shp', + 'Make sure that getExt works with names with an extension' + ); + + strictEqual( + getExt({name: 'name'}), + null, + 'Make sure that getExt works with a file without an extension' + ); + + + strictEqual( + getExt({name: 'name.SHP'}), + 'shp', + 'Make sure case does not matter' + ); + + strictEqual( + getExt(awfulName), + 'shp', + 'Make sure getExt (get extension) works on a poor file name' + ); + + strictEqual( + getName(awfulName), + 'This --- []is .an awful.shp.shpfile', + 'Make sure getName (get name) works on a poor file name' + ); + + strictEqual( + getName({name: 'File Name without extension'}), + 'File Name without extension', + 'Make sure that file names without extensions work' + ); + + + + }); + + + module('FileType'); + test('if FileType class works', function () { + var type = new FileType({ + name: 'Test type', + main: 'test', + requires: ['test'] + }); + + ok(type instanceof FileType, 'Make sure the FileType constructor returns the correct type'); + + strictEqual( + type.isType({name: 'this-is-not.ls'}), + false, + 'Make sure the type can check files that are not its type' + ); + + strictEqual( + type.isType({name: 'this-is.test'}), + true, + 'Make sure the type can correctly identify its own type' + ); + + strictEqual( + type.findTypeErrors(['test']).length, + 0, + 'Make sure no errors are returned for the correct type' + ); + + }); + + + + module('LayerInfo'); + test('Make sure that the file selector is safe', function () { + var unSafe = '[a](b)'; + strictEqual( + LayerInfo.safeSelector(unSafe), + '_a__b_' + ); + }); + + test('LayerInfo should work on a valid shapefile', function () { + var shpInfo = new LayerInfo({ + name: 'nybb', + files: [{name: 'nybb.shp'}, {name: 'nybb.dbf'}, {name: 'nybb.prj'}, {name: 'nybb.shx'}] + }), + res = {}, + errors, + mock_form_data = {append: function (key, value) { res[key] = value; }}; + + strictEqual( + shpInfo instanceof LayerInfo, + true, + 'The constructor should return the correct type' + ); + + shpInfo.prepareFormData(mock_form_data); + $.each(['base_file', 'permissions', 'prj_file', 'dbf_file', 'shx_file'], function (i, thing) { + strictEqual(res.hasOwnProperty(thing), true, 'Do we have a ' + thing + ' ?'); + }); + + strictEqual(shpInfo.type, FileTypes.SHP, 'Should be the correct file type'); + strictEqual(shpInfo.files.length, 4, 'Should have the correct amount of associated files'); + + shpInfo.removeFile('nybb.dbf'); + strictEqual(shpInfo.files.length, 3, 'Should correctly remove an associated file'); + errors = shpInfo.collectErrors(); + strictEqual(errors.length, 1, 'Should build the errors when need'); + + + }); + + module('Layer Info of unknown type'); + test('The LayerInfo object on an unknown type', function () { + var unknownType = new LayerInfo({ + name: 'pdf', + files: [{name: 'test.pdf'}] + }); + + strictEqual(unknownType instanceof LayerInfo, true); + strictEqual(unknownType.errors.length, 1, 'Should return one error'); + + }); + + // can we roll this into a single test case? + // module('LayerInfo csv file'); + // test('The LayerInfo type on a CSV file', function () { + // var csvInfo = new LayerInfo({ + // name: 'test-csv', + // files: [{name: 'test.csv'}] + // }); + // strictEqual(csvInfo instanceof LayerInfo, true, 'Should return the correct class'); + // strictEqual(csvInfo.type, FileTypes.CSV, 'Should return the correct type'); + // strictEqual(csvInfo.errors.length, 0, 'Should return no errors'); + + // }); + + module('LayerInfo Tiff'); + test('The LayerInfo type on a Tiff file', function () { + var tifInfo = new LayerInfo({name: 'test-tif', files: [{name: 'test.tif'}]}); + strictEqual(tifInfo instanceof LayerInfo, true, 'Should return the correct class'); + strictEqual(tifInfo.type, FileTypes.TIF, 'Should return the correct file type'); + strictEqual(tifInfo.errors.length, 0, 'Should return no errors'); + }); + + // module('LayerInfo Zip'); + // test('The LayerInfo type on a Zip file', function () { + // var tifInfo = new LayerInfo({name: 'test-zip', files: [{name: 'test.zip'}]}); + // strictEqual(tifInfo instanceof LayerInfo, true, 'Should return the correct class'); + // strictEqual(tifInfo.type, FileTypes.ZIP, 'Should return the correct file type'); + // strictEqual(tifInfo.errors.length, 0, 'Should return on errors'); + // }); + + module('Upload Session'); + test('The UploadSession should be able', function () { + var ses = new UploadSession({ + name: 'test session', + id: 1, + layer_name: 'test', + layer_id: 1, + state: 'PEDDING', + url: '', + date: 'Date', + }); + strictEqual(ses instanceof UploadSession, true, 'Should return the correct class'); + + }); + + // describe('The UploadSession should be able', function () { + + // it('Should return the correct class', function () { + // expect(ses instanceof UploadSession).toBeTruthy(); + // }); + + // }); + +}); diff --git a/django_project/core/geonode_static/geonode/js/upload/FileType.js b/django_project/core/geonode_static/geonode/js/upload/FileType.js new file mode 100644 index 0000000..229e964 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/upload/FileType.js @@ -0,0 +1,46 @@ +/*global define: true, $:true */ +'use strict'; + +define(function (require, exports) { + var getExt = require('upload/path').getExt, + FileType; + + /** Create an instance of a FileType object + * @constructor + * @author Ivan Willig + * @this {FileType} + * @param {name, main, requires} + */ + + FileType = function (options) { + this.name = null; + this.main = null; + this.requires = !('requires' in options) ? [options.main] : null; + $.extend(this, options || {}); + }; + + + FileType.prototype.isType = function (file) { + return (this.main === getExt(file)); + }; + + FileType.prototype.findTypeErrors = function (extensions) { + var errors = []; + + $.each(this.requires, function (idx, req) { + idx = $.inArray(req, extensions); + if (idx === -1) { + errors.push(interpolate(gettext('Missing a %s file, which is required'),[req])); + } + }); + return errors; + + }; + + return FileType; + +}); + + + + diff --git a/django_project/core/geonode_static/geonode/js/upload/FileTypes.js b/django_project/core/geonode_static/geonode/js/upload/FileTypes.js new file mode 100644 index 0000000..1bb4e11 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/upload/FileTypes.js @@ -0,0 +1,141 @@ +/*globals define: true */ + +define(['./FileType'], function (FileType) { + 'use strict'; + var file_types = {}; + file_types['SHP'] = new FileType({ + name: gettext('ESRI Shapefile'), + format: 'vector', + main: 'shp', + requires: ['shp', 'prj', 'dbf', 'shx'] + }); + file_types['TIF'] = new FileType({ + name: gettext('GeoTIFF'), + format: 'raster', + main: 'tif' + }); + file_types['TIFF'] = new FileType({ + name: gettext('GeoTIFF'), + format: 'raster', + main: 'tiff' + }); + // requires geonode.importer + file_types['CSV'] = new FileType({ + name: gettext('Comma Separated Value'), + format: 'vector', + main: 'csv' + }); + file_types['KML'] = new FileType({ + name: gettext('Google Earth KML'), + format: 'vector', + main: 'kml' + }); + file_types['GEOJSON'] = new FileType({ + name: gettext('GeoJSON'), + format: 'vector', + main: 'geojson' + }); + file_types['ZIP'] = new FileType({ + name: gettext('Zip Archive'), + format: 'archive', + main: 'zip' + }); + // requires geonode.importer + gs gdal ext + file_types['IMG'] = new FileType({ + name: gettext('ERDAS Imagine'), + format: 'raster', + main: 'img' + }); + file_types['NTF'] = new FileType({ + name: gettext('National Imagery Transmission Format'), + format: 'raster', + main: 'ntf' + }); + file_types['NITF'] = new FileType({ + name: gettext('National Imagery Transmission Format'), + format: 'raster', + main: 'nitf' + }); + for (var i = 0; i < 10; i++) { + file_types['CIB_I4' + i] = new FileType({ + name: gettext('Controlled Image Base-1 Meter'), + format: 'raster', + main: 'i4' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['CIB_I2' + i] = new FileType({ + name: gettext('Controlled Image Base-5 Meter'), + format: 'raster', + main: 'i2' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['CIB_I1' + i] = new FileType({ + name: gettext('Controlled Image Base-10 Meter'), + format: 'raster', + main: 'i1' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['GNC_GN' + i] = new FileType({ + name: gettext('CADRG-Global Navigation Chart'), + format: 'raster', + main: 'gn' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['JNC_JN' + i] = new FileType({ + name: gettext('CADRG-Jet Navigation Chart'), + format: 'raster', + main: 'jn' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['ONC_ON' + i] = new FileType({ + name: gettext('CADRG-Operational Navigation Chart'), + format: 'raster', + main: 'on' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['TPC_TP' + i] = new FileType({ + name: gettext('CADRG-Tactical Pilotage Chart'), + format: 'raster', + main: 'tp' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['JOG_JA' + i] = new FileType({ + name: gettext('CADRG-Joint Operations Graphic'), + format: 'raster', + main: 'ja' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['TLM_TC' + i] = new FileType({ + name: gettext('CADRG-Topographic Line Map 100K'), + format: 'raster', + main: 'tc' + i + }); + }; + for (var i = 0; i < 10; i++) { + file_types['TLM_TL' + i] = new FileType({ + name: gettext('CADRG-Topographic Line Map 50K'), + format: 'raster', + main: 'tl' + i + }); + }; + // requires gdal to be built with mrsid and jp2 + file_types['JP2'] = new FileType({ + name: gettext('JPEG2000'), + format: 'raster', + main: 'jp2' + }); + file_types['SID'] = new FileType({ + name: gettext('MrSID-Multi-resolution Seamless Image Database'), + format: 'raster', + main: 'sid' + }); + return file_types; +}); diff --git a/django_project/core/geonode_static/geonode/js/upload/LayerInfo.js b/django_project/core/geonode_static/geonode/js/upload/LayerInfo.js new file mode 100644 index 0000000..164395c --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/upload/LayerInfo.js @@ -0,0 +1,888 @@ +/*jslint nomen: true */ +/*global define:true, $:true, FormData: true, alert: true, window:true */ +'use strict'; + +define(function (require, exports) { + + var _ = require('underscore'), + fileTypes = require('upload/FileTypes'), + path = require('upload/path'), + common = require('upload/common'), + LayerInfo; + + /** Creates an instance of a LayerInfo + * @constructor + * @author Ivan Willig + * @this {LayerInfo} + * @param {name, files} + */ + LayerInfo = function (options) { + + this.id = null; + this.name = null; + this.files = null; + + this.type = null; + this.main = null; + + this.element = null; + $.extend(this, options || {}); + if (!this.main || !this.type) { + this.guessFileType(); + } + + // need to find a way converting this name to a safe selector + this.selector = '#' + LayerInfo.safeSelector(this.name) + '-element'; + this.selector = this.selector.replace(' ','_'); + this.name = this.name.replace(' ','_'); + this.errors = this.collectErrors(); + this.polling = false; + }; + + /** Function to safely select a filename + * + * @params name + * @returns string + */ + LayerInfo.safeSelector = function (name) { + return name.replace(/\[|\]|\(|\)|./g, '_'); + }; + + /** Function to return the success template + * + * @params {options} + * @returns + */ + LayerInfo.prototype.successTemplate = function (options) { + var template = _.template($('#successTemplate').html()); + return template(options); + }; + + /* Function to iterates through all of the known types and returns the + * type if it matches, if not return null + * @params {File} + * @returns {object} + */ + LayerInfo.prototype.findFileType = function (file) { + var i, type, res; + $.each(fileTypes, function (name, type) { + if (type.isType(file)) { + res = {type: type, file: file}; + return false; + } + }); + return res; + }; + + /** Function to check the type of a Layer + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.guessFileType = function () { + var self = this; + $.each(this.files, function (idx, file) { + var results = self.findFileType(file); + // if we find the type of the file, we also find the "main" + // file + if (results) { + self.type = results.type; + self.main = results.file; + } + }); + }; + + /** Delegates to the Layer Type to find all of the errors + * associated with this type. + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.collectErrors = function () { + var errors = []; + + var mosaic_is_valid = true; + var is_granule = $('#' + this.name + '-mosaic').is(':checked'); + + var is_time_enabled = $('#' + this.name + '-timedim').is(':checked'); + var is_time_valid = is_time_enabled && !$('#' + this.name + '-timedim-value-valid').is(':visible'); + + if (is_granule && is_time_enabled) { + mosaic_is_valid = is_time_valid; + } + + if (is_granule && !mosaic_is_valid) { + errors.push('The configuration of the file as a Mosaic Granule is not valid, please fix the issue and try again'); + } + + if (this.type) { + errors = this.type.findTypeErrors(this.getExtensions()); + } else { + errors.push('Unknown type, please try again'); + } + return errors; + }; + + /** Function to get all the file extensions in + * the current list of files being handled. + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.getExtensions = function () { + var files = this.files, + extension, + file, + res = [], + i; + + for (i = 0; i < files.length; i += 1) { + file = files[i]; + extension = path.getExt(file); + res.push(extension); + } + return res; + }; + + /** Build a new FormData object from the current state of the + * LayerInfo object. + * + * @returns {FromData} + */ + LayerInfo.prototype.prepareFormData = function (form_data) { + var i, ext, file, perm, geogig, geogig_store, time, mosaic; + + var base_ext = this.main.name.split('.').pop(); + var base_name = this.main.name.slice(0, -(base_ext.length+1)); + + var base_ext = this.main.name.split('.').pop(); + var base_name = this.main.name.slice(0, -(base_ext.length+1)); + + var base_ext = this.main.name.split('.').pop(); + var base_name = this.main.name.slice(0, -(base_ext.length+1)); + + if (!form_data) { + form_data = new FormData(); + } + // this should be generate from the permission widget + if (typeof permissionsString == 'undefined'){ + perm = {} + } + else { + perm = permissionsString('#permission_form','layers'); + } + + if (geogig_enabled) { + geogig_store = $('#' + base_name + '\\:geogig_store').val(); + geogig = $('#' + base_name + '\\:geogig_toggle').is(':checked') && geogig_store.length != 0; + if (geogig) { + form_data.append('geogig_store', geogig_store); + } else { + form_data.append('geogig_store', ""); + } + form_data.append('geogig', geogig); + } + if (time_enabled) { + time = $('#' + base_name + '-time').is(':checked'); + form_data.append('time', time); + } + if (mosaic_enabled) { + mosaic = $('#' + base_name + '-mosaic').is(':checked'); + var is_time_valid = $('#' + base_name + '-timedim').is(':checked') && !$('#' + base_name + '-timedim-value-valid').is(':visible'); + + if (mosaic /*&& is_time_valid*/) { + form_data.append('mosaic', mosaic); + + var append_to_mosaic_opts = $('#' + base_name + '-mosaic-granule').is(':checked'); + var append_to_mosaic_name = $('#' + base_name + '-mosaic-granule-format-select').val(); + + //console.log("append_to_mosaic_opts:" + append_to_mosaic_opts + " / append_to_mosaic_name:" + append_to_mosaic_name); + + if (is_time_valid) { + var time_regex = $('#' + base_name + '-timedim-format-select').val(); + var time_value = $('#' + base_name + '-timedim-value').val(); + + //console.log("time_regex:" + time_regex + " / time_value:" + time_value); + + var time_presentation_opts = $('#' + base_name + '-timedim-presentation').is(':checked'); + var time_presentation = "LIST"; + var time_presentation_res = 0; + var time_presentation_default_value = ""; + var time_presentation_reference_value = ""; + if (time_presentation_opts) { + time_presentation = $('#' + base_name + '-timedim-presentation-format-select').val(); + + if (time_presentation === 'DISCRETE_INTERVAL') { + // Years + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-years').val() ) * 31536000000; + // Months + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-months').val() ) * 2628000000; + // Weeks + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-weeks').val() ) * 604800000; + // Days + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-days').val() ) * 86400000; + // Hours + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-hours').val() ) * 3600000; + // Minutes + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-minutes').val() ) * 60000; + // Seconds + time_presentation_res += parseInt( $('#' + base_name + '-timedim-presentation-seconds').val() ) * 1000; + } + + time_presentation_default_value = $('#' + base_name + '-timedim-defaultvalue-format-select').val(); + + if (time_presentation_default_value == 'NEAREST' || time_presentation_default_value == 'FIXED') { + time_presentation_reference_value = $('#' + base_name + '-timedim-defaultvalue-ref-value').val(); + } + } + + //console.log("time_presentation:" + time_presentation + " / time_presentation_res:" + time_presentation_res); + + form_data.append('mosaic_time_regex', time_regex); + form_data.append('mosaic_time_value', time_value); + + form_data.append('time_presentation', time_presentation); + form_data.append('time_presentation_res', time_presentation_res); + + form_data.append('time_presentation_default_value', time_presentation_default_value); + form_data.append('time_presentation_reference_value', time_presentation_reference_value); + } + + form_data.append('append_to_mosaic_opts', append_to_mosaic_opts); + if (append_to_mosaic_opts) { + form_data.append('append_to_mosaic_name', append_to_mosaic_name); + } + } + } + + form_data.append('base_file', this.main); + form_data.append('permissions', JSON.stringify(perm)); + + for (i = 0; i < this.files.length; i += 1) { + file = this.files[i]; + if (file.name !== this.main.name) { + ext = path.getExt(file); + form_data.append(ext + '_file', file); + } + } + + form_data.append('charset', $('#charset').val()); + if ($('#id_metadata_uploaded_preserve').prop('checked')) { + form_data.append('metadata_uploaded_preserve', true); + } + return form_data; + }; + + /** Log the status to the status div + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.logStatus = function (options) { + options.element = this.element.find('#status'); + common.logStatus(options); + }; + + /** Function to mark errors in the the status + * + * @params {error} + * @returns {string} + */ + LayerInfo.prototype.markError = function (error, status) { + common.logError(error, this.element.find('#status')); + }; + + /** Function to mark the start of the upload + * + * @params {options} + * @returns {string} + * + * TODO: make this into an abstract method so we can mark events in a + * more generic way + */ + LayerInfo.prototype.markStart = function () { + this.logStatus({ + msg: 'Your upload has started
    ', + level: 'alert-success', + empty: 'true' + }); + }; + + LayerInfo.prototype.doResume = function (event) { + common.make_request({ + url: event.data.url, + async: true, + failure: function (resp, status) { + self.markError(resp.errors, status); + }, + success: function (resp, status) { + if(resp.url && resp.input_required){ + window.location = resp.url; + }else { + window.location = resp.redirect_to; + } + }, + }); + return false; + }; + + LayerInfo.prototype.displayUploadedLayerLinks = function(resp) { + var self = this; + var a = '
    ' + gettext('Layer Info') + ''; + var b = '' + gettext('Edit Metadata') + ''; + var c = '' + gettext('Manage Styles') + ''; + var msg_col = ""; + if (resp.info){ + var msg_template = gettext('The column %1 was renamed to %2
    '); + for (var key in resp.info){ + msg_col += format(msg_template,[key,resp.info[key]]); + } + } + self.logStatus({ + msg: '

    ' + gettext('Your layer was successfully uploaded') + '
    ' + msg_col + '
    ' + a + '   ' + b + '   ' + c + '

    ', + level: 'alert-success', + empty: 'true' + }); + }; + + LayerInfo.prototype.startPolling = function() { + var self = this; + if (self.polling) { + $.ajax({ url: updateUrl("/upload/progress", 'id', self.id), type: 'GET', success: function(data){ + // TODO: Not sure we need to do anything here? + //console.log('polling'); + }, dataType: "json", complete: setTimeout(function() {self.startPolling()}, 3000), timeout: 30000 }); + } + }; + + /** Function to deal with the final step in the upload process + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.doFinal = function (resp) { + var self = this; + if (resp.hasOwnProperty('redirect_to') && resp.redirect_to.indexOf('/upload/final') > -1) { + common.make_request({ + url: resp.redirect_to, + async: true, + beforeSend: function() { + self.logStatus({ + msg: '

    ' + gettext('Performing Final GeoServer Config Step') + '

    ', + level: 'alert-success', + empty: 'true' + }); + self.polling = true; + self.startPolling(); + }, + failure: function (resp, status) { + self.polling = false; + self.markError(resp.errors, status); + }, + success: function (resp, status) { + self.polling = false; + if (resp.status === "other") { + self.logStatus({ + msg:'

    ' + gettext('You need to specify more information in order to complete your upload') + '

    ', + level: 'alert-success', + empty: 'true' + }); + } else if (resp.status === "pending") { + setTimeout(function() { + self.doFinal(resp); + }, 5000); + } else { + self.displayUploadedLayerLinks(resp); + } + } + }); + } else if (resp.status === "incomplete") { + var id = common.parseQueryString(resp.url).id; + var element = 'next_step_' + id + var a = 'Continue'; + self.logStatus({ + msg:'

    ' + gettext('You need to specify more information in order to complete your upload.') + '

    ' + gettext('You can continue configuring your layer.') + '

    ' + a + '

    ', + level: 'alert-success', + empty: 'true' + }); + $("#" + element).on('click', resp, self.doResume); + return; + } else if (resp.status === "other") { + self.logStatus({ + msg:'

    ' + gettext('You need to specify more information in order to complete your upload') + '

    ', + level: 'alert-success', + empty: 'true' + }); + } else if (resp.success === true) { + self.polling = false; + self.displayUploadedLayerLinks(resp); + } else { + self.polling = false; + self.logStatus({ + msg:'

    ' + gettext('Unexpected Error') + '

    ', + level: 'alert-error', + empty: 'true' + }); + } + + }; + + /** Function to deal with the Steps in the upload process + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.doStep = function (resp) { + var self = this; + self.logStatus({ + msg: '

    ' + gettext('Performing GeoServer Config Step') + '

    ', + level: 'alert-success', + empty: 'true' + }); + if (resp.success === true && resp.status === 'incomplete') { + common.make_request({ + url: updateUrl(resp.redirect_to, 'force_ajax', 'true'), + async: true, + failure: function (resp, status) { + self.polling = false; + self.markError(resp.errors, status); + }, + success: function (resp, status) { + self.id = resp.id; + if (resp.status === 'incomplete') { + if (resp.input_required === true) { + self.doFinal(resp); + } else { + self.doStep(resp); + } + } else if (resp.redirect_to.indexOf('/upload/final') > -1) { + self.doFinal(resp); + } else { + window.location = resp.url; + } + } + }); + } else if (resp.success === true && typeof resp.url != 'undefined') { + self.doFinal(resp); + } else if (resp.success === true && resp.redirect_to.indexOf('/upload/final') > -1) { + self.doFinal(resp); + } + }; + + /** Function to upload the files against the specified endpoint + * + * @params + * @returns + */ + LayerInfo.prototype.uploadFiles = function () { + var form_data = this.prepareFormData(), + self = this; + var prog = ""; + + $.ajaxQueue({ + url: form_target, + async: true, + type: "POST", + data: form_data, + processData: false, + contentType: false, + xhr: function() { + var req = $.ajaxSettings.xhr(); + if (req) { + req.upload.addEventListener('progress', function(evt) { + if(evt.lengthComputable) { + var pct = (evt.loaded / evt.total) * 100; + $('#prog > .progress-bar').css('width', pct.toPrecision(3) + '%'); + } + }, false); + } + return req; + }, + beforeSend: function () { + self.markStart(); + self.polling = true; + self.startPolling(); + }, + error: function (jqXHR) { + self.polling = false; + if (jqXHR === null) { + self.markError(gettext('Unexpected Error')); + } else { + self.markError(jqXHR); + } + }, + success: function (resp, status) { + self.logStatus({ + msg: '

    ' + gettext('Layer files uploaded, configuring in GeoServer') + '

    ', + level: 'alert-success', + empty: 'true' + }); + self.id = resp.id; + self.doStep(resp); + } + }); + }; + + LayerInfo.prototype.setupGeogigDropdown = function(selector){ + function format(item){return item.name;}; + $(selector).select2({ + data: {results:geogig_stores, text:'name'}, + formatSelection: format, + formatResult: format, + placeholder: gettext('Select or create a Geogig repository.'), + + id: function(object) { + return object.name; + }, + createSearchChoice:function(term, data) { + if ($(data).filter( function() { + return this.name.localeCompare(term)===0; + }).length===0) { + return {name:term.replace(/[`~!@#$%^&*()|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '')}; + } + } + }); + } + + /** Function to display the layers collected from the files + * selected for uploading + * + * @params {file_queue} + * @returns {string} + */ + LayerInfo.prototype.display = function (file_queue) { + + var layerTemplate = _.template($('#layerTemplate').html()), + li = layerTemplate({ + name: this.name, + selector: LayerInfo.safeSelector(this.name), + type: this.type.name, + format: this.type.format, + geogig: geogig_enabled, + time: time_enabled, + mosaic: mosaic_enabled + }); + file_queue.append(li); + this.errors = this.collectErrors(); + this.displayFiles(); + this.displayErrors(); + this.element = $(this.selector); + + var time_re_txt = "[0-9]{8}"; + + $('#' + this.name + '-mosaic').on('change', this.doImageMosaicToggle); + $('#' + this.name + '-mosaic-granule').on('change', this.doImageMosaicGranuleOptionsToggle); + $('#' + this.name + '-timedim').on('change', this.doImageMosaicTimedimOptionsToggle); + $('#' + this.name + '-timedim-presentation').on('change', this.doImageMosaicTimedimPresentationOptionsToggle); + $('#' + this.name + '-mosaic-granule-format-select').on('change', this.doImageMosaicGranuleLayerSelect); + + $('#' + this.name + '-timedim-format-select').on('change', function() { + var input = $(this); + + time_re_txt = input.val(); + + var base_name = this.name.split('-timedim')[0]; + + $('#' + base_name + '-timedim-value-valid').show(); + }); + + $('#' + this.name + '-timedim-presentation-format-select').on('change', function() { + var input = $(this); + + var base_name = this.name.split('-timedim')[0]; + + if (input.val() === 'DISCRETE_INTERVAL') { + $('#' + base_name + '-mosaic-timedim-presentation-res-options').show(); + } else { + $('#' + base_name + '-mosaic-timedim-presentation-res-options').hide(); + } + }); + + $('#' + this.name + '-timedim-defaultvalue-format-select').on('change', function() { + var input = $(this); + + var base_name = this.name.split('-timedim')[0]; + + if (input.val() === 'NEAREST' || input.val() === 'FIXED') { + $('#' + base_name + '-mosaic-timedim-defaultvalue-res-options').show(); + } else { + $('#' + base_name + '-mosaic-timedim-defaultvalue-res-options').hide(); + } + }); + + $('#' + this.name + '-timedim-value').on('input', function() { + var input = $(this); + + var re = new RegExp(time_re_txt, "g"); + var is_valid = re.test(input.val()); + if(is_valid){ + $('#' + this.name + '-valid').hide(); + } else { + $('#' + this.name + '-valid').show(); + } + }); + + $('#' + this.name + '-timedim-defaultvalue-ref-value').on('input', function() { + var input = $(this); + + var re = /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})[+-](\d{2})\:(\d{2})/; + var is_valid = re.test(input.val()); + if(is_valid){ + $('#' + this.name + '-valid').hide(); + } else { + $('#' + this.name + '-valid').show(); + } + }); + + $('#' + this.name + '\\:geogig_toggle').on('change', this.doGeoGigToggle); + + // Add values to the geogig store dropdown and hide. + this.setupGeogigDropdown($('#' + this.main.name.split('.')[0] + '\\:geogig_store')); + $("#s2id_" + this.name + "\\:geogig_store").hide() + + return li; + }; + + /** Event handler to deal with user clicking on remove link + * + * @params event + * @returns none + */ + LayerInfo.prototype.removeFileHandler = function (event) { + var target = $(event.target), + layer_info, + layer_name = target.data('layer'), + file_name = target.data('file'); + this.removeFile(file_name); + this.displayRefresh(); + }; + + /** Function to remove a file from the file list + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.removeFile = function (name) { + var length = this.files.length, + i, + file; + + for (i = 0; i < length; i += 1) { + file = this.files[i]; + if (name === file.name) { + this.files.splice(i, 1); + break; + } + } + }; + + /** Function to display the files selected for uploading + * + * @params + * @returns + */ + LayerInfo.prototype.displayFiles = function () { + var self = this, + ul = $('#' + LayerInfo.safeSelector(this.name) + '-element .files'); + + ul.empty(); + + $.each(this.files, function (idx, file) { + var file_ext = file.name.substr(file.name.lastIndexOf('.') + 1); + + var li = $('
  • ').appendTo(ul), + p = $('

    ', {text: file.name}).appendTo(li), + a = $('', {text: ' ' + gettext('Remove')}); + + if (file_ext === 'xml') { + $('#metadata_uploaded_preserve_check').show(); + } + a.data('layer', self.name); + a.data('file', file.name); + a.attr('class', 'remove-file'); + a.appendTo(p); + a.on('click', function (event) { + var target = $(event.target), + layer_info, + layer_name = target.data('layer'), + file_name = target.data('file'); + self.removeFile(file_name); + if (self.files.length == 0) { + delete layers[self.name]; + } + if (file_ext === 'xml') { + $('#metadata_uploaded_preserve_check').hide(); + } + self.errors = self.collectErrors(); + self.displayErrors(); + }); + }); + }; + + /** Function to display errors + * + * @params + * @returns + */ + LayerInfo.prototype.displayErrors = function () { + var ul = $('#' + LayerInfo.safeSelector(this.name) + '-element .errors').first(); + ul.empty(); + + $.each(this.errors, function (idx, error) { + var li = $('

  • ', {text: error, 'class': 'alert alert-error'}); + li.appendTo(ul); + li.animate({opacity:1}, 5000, 'linear', function() { + li.animate({opacity:0}, 1000, 'linear', function() {li.remove(); }); + }); + }); + }; + + /** Function to refresh display after adding or removing files + * + * @params {options} + * @returns {string} + */ + LayerInfo.prototype.displayRefresh = function () { + this.errors = this.collectErrors(); + this.displayFiles(); + this.displayErrors(); + }; + + LayerInfo.prototype.doGeoGigToggle = function (event) { + var target = event.target || event.srcElement; + var id = target.id; + var base_name = id.split(':')[0]; + var geogig = $('#' + id.replace(':', '\\:')).is(':checked'); + if (geogig) { + $('#' + base_name + '\\:geogig_store').show(); + $("#s2id_" + base_name + "\\:geogig_store").show() + } else { + $("#s2id_" + base_name + "\\:geogig_store").hide() + $('#' + base_name + '\\:geogig_store').hide(); + } + }; + + LayerInfo.prototype.doImageMosaicToggle = function (event) { + var target = event.target || event.srcElement; + var id = target.id; + var base_name = id.split('-mosaic')[0]; + var mosaic_chkbox = $('#' + id).is(':checked'); + if (mosaic_chkbox) { + $('#' + base_name + '-mosaic-options').show(); + } else { + $('#' + base_name + '-mosaic-options').hide(); + } + }; + + LayerInfo.prototype.doImageMosaicTimedimOptionsToggle = function (event) { + var target = event.target || event.srcElement; + var id = target.id; + var base_name = id.split('-timedim')[0]; + var mosaic_chkbox = $('#' + id).is(':checked'); + if (mosaic_chkbox) { + $('#' + base_name + '-mosaic-timedim-options').show(); + } else { + $('#' + base_name + '-mosaic-timedim-options').hide(); + } + }; + + LayerInfo.prototype.doImageMosaicTimedimPresentationOptionsToggle = function (event) { + var target = event.target || event.srcElement; + var id = target.id; + var base_name = id.split('-timedim')[0]; + var mosaic_chkbox = $('#' + id).is(':checked'); + if (mosaic_chkbox) { + $('#' + base_name + '-mosaic-timedim-presentation-options').show(); + } else { + $('#' + base_name + '-mosaic-timedim-presentation-options').hide(); + } + }; + + LayerInfo.prototype.doImageMosaicGranuleOptionsToggle = function (event) { + var target = event.target || event.srcElement; + var id = target.id; + var base_name = id.split('-mosaic')[0]; + var mosaic_chkbox = $('#' + id).is(':checked'); + if (mosaic_chkbox) { + $('#' + base_name + '-mosaic-granule-format-options').show(); + + var dropdown = $('#' + base_name + '-mosaic-granule-format-select'); + // Clear drop down list + $(dropdown).empty(); + $("
    ').closest('form').get(0).reset(); + $("#file-input").unwrap(); + // set the global layer object to empty + layers = {}; + // redraw the file display view + displayFiles(file_queue); + }, + runUpload = function (files) { + buildFileInfo(_.groupBy(files, path.getName)); + displayFiles(file_queue); + }, + handleDragOver = function (e) { + // this seems to be required in order for dragging and dropping to work + e.stopPropagation(); + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + return false; + }; + + // setup the drop zone target + dropZone.addEventListener('dragover', handleDragOver, false); + + dropZone.addEventListener('drop', function (e) { + e.preventDefault(); + var files = e.dataTransfer.files; + runUpload(files); + }); + + $(options.form).change(function (event) { + // this is a mess + buildFileInfo(_.groupBy(file_input.files, path.getName)); + displayFiles(file_queue); + // Reset the file upload form so the user can reupload the same file + $('#file-uploader').get(0).reset(); + }); + // Detect click on "Remove" link and update the file_queue + $(options.file_queue).on('click', '.remove-file', function () { + displayFiles(file_queue); + }); + $(options.clear_button).on('click', doClearState); + $(options.upload_button).on('click', doUploads); + $("[id^=delete]").on('click', doDelete); + $("[id^=resume]").on('click', doResume); + if (geogig_enabled) { + init_geogig_stores(); + } + }; + + // public api + + return { + initialize: initialize, + doSrs: doSrs, + doDelete: doDelete, + doResume: doResume + }; + +}); diff --git a/django_project/core/geonode_static/geonode/js/utils/batch_ops.js b/django_project/core/geonode_static/geonode/js/utils/batch_ops.js new file mode 100644 index 0000000..6b0cc49 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/utils/batch_ops.js @@ -0,0 +1,87 @@ +/*globals define: true, requirejs: true */ + +requirejs.config({ + baseUrl: '/static/libs/js' +}); + +define(['jquery'],function($){ + return { + batch_delete: function() { + var form = $(this); + var action = form.attr("action"); + + var postdata = { + layers: [], + maps: [] + }; + var selected = $(".asset-selector:checked"); + + $.each(selected, function(index, value) { + var el = $(value); + if (el.data("type") === "map") { + postdata.maps.push(el.data("id")); + } else if (el.data("type") === "layer") { + postdata.layers.push(el.data("id")); + } + }); + + if (!postdata.layers.length) { + delete postdata.layers; + } + if (!postdata.maps.length) { + delete postdata.maps; + } + + $.ajax({ + type: "POST", + url: action, + data: JSON.stringify(postdata), + success: function(data) { + $("#delete_form").modal("hide"); + } + }); + return false; + }, + + batch_perms_submit: function() { + var form = $(this); + var action = form.attr("action"); + + var postdata = { + layers: [], + maps: [], + permissions: {} + }; + + var selected = $(".asset-selector:checked"); + + $.each(selected, function(index, value) { + var el = $(value); + if (el.data("type") === "map") { + postdata.maps.push(el.data("id")); + } else if (el.data("type") === "layer") { + postdata.layers.push(el.data("id")); + } + }); + + if (!postdata.layers.length) { + delete postdata.layers; + } + + if (!postdata.maps.length) { + delete postdata.maps; + } + + postdata.permissions = permissionsString(form, "bulk"); + $.ajax({ + type: "POST", + url: action, + data: JSON.stringify(postdata), + success: function(data) { + $("#modal_perms").modal("hide"); + } + }); + return false; + } + } +}); \ No newline at end of file diff --git a/django_project/core/geonode_static/geonode/js/utils/thumbnail.js b/django_project/core/geonode_static/geonode/js/utils/thumbnail.js new file mode 100644 index 0000000..87796e1 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/utils/thumbnail.js @@ -0,0 +1,34 @@ +var createMapThumbnail = function(obj_id) { + var xmap = $('.olMapViewport'); + height = xmap.height(); + width = xmap.width(); + var map = xmap.clone(); + map.find('*').each(function(i) { + e = $(this); + if(e.css('display') === 'none' || (e.attr("class") !== undefined && (e.attr("class").indexOf('olControl') >= 0 || e.attr("class").indexOf('x-') >= 0))) { + e.remove(); + } else if (e.attr('src') === '/static/geoexplorer/externals/ext/resources/images/default/s.gif') { + e.remove(); + } else { + e.removeAttr("id"); + } + }); + + var url = window.location.pathname.replace('/view', ''); + + if (typeof obj_id != 'undefined' && url.indexOf('new')){ + url = url.replace('new', obj_id); + } + + url+= '/thumbnail'; + + $.ajax({ + type: "POST", + url: url, + data: ("
    " + map.html() + "
    "), + success: function(data, status, jqXHR) { + return true; + } + }); + return true; +}; diff --git a/django_project/core/geonode_static/geonode/js/utils/utils.js b/django_project/core/geonode_static/geonode/js/utils/utils.js new file mode 100644 index 0000000..8f23db2 --- /dev/null +++ b/django_project/core/geonode_static/geonode/js/utils/utils.js @@ -0,0 +1,70 @@ +$(function() { + // Topbar active tab support + $(".main-nav li").removeClass("current"); + +// $('[rel=tooltip]').tooltip({placement:"left"}); + + var class_list = $("body").attr("class").split(/\s+/); + $.each(class_list, function(index, item) { + var selector = ".main-nav li#nav_" + item; + $(selector).addClass("current"); + }); + +}); + +$(function(){ + $(document).ajaxSend(function(event, xhr, settings) { + function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie !== '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = $.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + + function sameOrigin(url) { + // url could be relative or scheme relative or absolute + var host = document.location.host; // host + port + var protocol = document.location.protocol; + var sr_origin = '//' + host; + var origin = protocol + sr_origin; + // Allow absolute or scheme relative URLs to same origin + return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || + // or any other URL that isn't scheme relative or absolute i.e relative. + !(/^(\/\/|http:|https:).*/.test(url)); + } + + function safeMethod(method) { + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); + } + + if (!safeMethod(settings.type) && sameOrigin(settings.url)) { + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); + } + }); +}); + +$.fn.serializeObject = function() { + var o = {}; + var a = this.serializeArray(); + + $.each(a, function() { + if (o[this.name] !== undefined) { + if (!o[this.name].push) { + o[this.name] = [o[this.name]]; + } + o[this.name].push(this.value || ''); + } else { + o[this.name] = this.value || ''; + } + }); + return o; +}; diff --git a/django_project/core/geonode_static/geonode/less/base.less b/django_project/core/geonode_static/geonode/less/base.less new file mode 100644 index 0000000..46bea8b --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/base.less @@ -0,0 +1,1302 @@ +@import "bootstrap"; +@import "variables"; +@import "fonts"; +@import "../css/font-awesome.min.css"; +/* Basics +----------------------- */ +body { + background: @gray-dark; + font-family: @font-family-sans-serif; + font-size: @font-size-base; + padding-top: 60px; +} + +a { + color: @brand-primary; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: @headings-font-weight; +} + +select { + background: white; + border: 1px solid @gray-light; + height: 30px; + line-height: 30px; +} + +code { + background-color: @gray-lighter; + color: @gray-dark; + white-space: pre-wrap; + /* css-3 */ + white-space: -moz-pre-wrap; + /* Mozilla, since 1999 */ + white-space: -pre-wrap; + /* Opera 4-6 */ + white-space: -o-pre-wrap; + /* Opera 7 */ + word-wrap: break-word; + /* Internet Explorer 5.5+ */ +} + +form { + label { + margin-right: 2.5em; + } + + input { + border: 1px solid @gray-lighter; + padding: 5px; + } +} +/* Layout +----------------------- */ +#wrap { + background: @body-bg; + padding-bottom: 40px; + padding-top: 10px; + width: 100%; +} + +article.tab-pane { + padding: 20px 0; +} + +.no-style-list { + list-style-type: none; + margin-top: 20px; +} + +.dl-horizontal dt { + text-overflow: clip; + white-space: normal; + overflow: hidden; +} + +.page-title { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +/* ------ Nav +------------------------------ */ +.navbar-inverse { + background-color: @gray-dark; + border: 0; + + .navbar-nav > li > a { + color: white; + font-weight: 600; + padding-top: 25px; + padding-bottom: 25px; + + &:hover { + background-color: @brand-primary; + } + } +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:focus, +.navbar-inverse .navbar-nav > .open > a:hover { + background-color: @brand-primary; +} + +.navbar-nav { + .dropdown-menu { + background-color: @brand-primary; + border-top: 1px solid @brand-primary; + + a { + color: white; + } + + li a { + &:hover { + background-color: darken(@brand-primary, 10%); + color: white; + } + } + + .divider { + background-color: darken(@brand-primary, 10%); + } + } + + .search { + left: 15px; + position: relative; + color: #444; + top: 20px; + margin-right: 25px; + + .fa-search { + position: absolute; + top: 8px; + left: 10px; + } + } + + .search input { + width: 120px; + height: 32px; + border: 1px solid @gray-dark; + border-radius: 5px; + outline-width: 0; + text-indent: 32px; + -webkit-transition: width 0.2s; + transition: width 0.2s; + + &:focus { + width: 240px; + } + } + + .avatar img { + border-radius: 50%; + margin-bottom: -15px; + margin-right: 10px; + margin-top: -15px; + height: 42px; + width: 42px; + } + + .fa-angle-down { + margin-left: 10px; + } +} + +.navbar-brand { + background: url("../img/logo.png") 0 10px no-repeat; + background-size: 100%; + text-indent: -9999px; + height: 65px; + width: 200px; +} + +.navbar-collapse { + max-height: none; +} + +.navbar-header { + i { + color: white; + font-size: 2em; + } + + button { + border: 0; + margin-top: 0.75em; + } +} +/* ------ Home +------------------------------ */ +.home { + .navbar-inverse { + background-color: rgba(0,0,0,0.5); + } + + #wrap { + margin-top: -60px; + padding-bottom: 0; + } + + .jumbotron { + background: @brand-primary; + color: white; + margin-bottom: 0; + padding: 7.5em 0 3.75em; + text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); + + a { + color: @brand-warning; + } + + p { + margin-bottom: 0; + } + + .btn-default { + background: rgba(0,0,0,0.2); + border: 2px solid white; + color: white; + font-weight: 600; + margin-top: 1em; + min-width: 320px; + + &:hover { + background: rgba(0,0,0,0.4); + } + } + } + + .big-search { + background: @gray-dark; + color: white; + + h1, + p { + text-align: center; + } + padding-bottom: 3em; + padding-top: 1em; + + a { + color: @brand-primary; + } + + .search { + left: 0; + position: relative; + color: #444; + top: 20px; + padding-bottom: 2em; + margin: auto; + width: 50%; + } + + .search input { + width: 100%; + height: 56px; + border: 1px solid @gray-dark; + border-radius: 5px; + outline-width: 0; + font-size: 1.5em; + } + + .search input { + text-indent: 64px; + } + + .search .fa-search { + position: absolute; + top: 10px; + left: 15px; + } + + .btn-default { + background: transparent; + border: none; + color: @brand-warning; + + &:hover { + text-decoration: underline; + } + } + } + + #datasets { + /*background: @brand-primary; + color: white;*/ + padding: 1em 0; + + p { + font-size: 14px; + } + + h4 { + text-transform: uppercase; + font-size: 14px; + } + + a { + color: @gray-dark; + + &:hover { + text-decoration: none; + } + + .category { + /*background: @brand-primary; + border-radius: 4px;*/ + margin: 0 -15px; + padding: 2em 0; + + &:hover { + color: @brand-primary; + } + } + + span { + font-size: 4em; + } + } + } + + #showcase { + background: @gray-lighter; + padding: 2em 0; + text-align: center; + + .col-md-3 { + padding: 2em 1em; + + img { + height: 180px; + width: 100%; + } + } + + p { + font-size: 18px; + } + } +} +/* autocomplete +------------------------*/ +.yourlabs-autocomplete { + top: 100%; + max-height: 360px; + overflow: auto; +} + +.yourlabs-autocomplete .choice, +.yourlabs-autocomplete [data-value], +.yourlabs-autocomplete em { + max-width: 800px; +} + +.input-group .yourlabs-autocomplete { + top: 30px !important; + margin-top: 40px; +} +/* Home +----------------------- */ +.jumbotron { + background: @brand-primary; + color: white; + padding: 40px 0 60px; + text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); + margin-top: -10px; + + a { + color: @brand-warning; + } + + p { + margin-bottom: 0; + } +} + +.home-facets { + text-align: center; + padding: 2em 0; + + a { + color: black; + + &:hover { + color: @link-color; + text-decoration: none; + } + } +} +/* Items +----------------------- */ +.actions, +.filter { + .fa { + margin-right: 8px; + } +} + +.items-list { + .btn { + margin-right: 5px; + margin-top: 10px; + } + + .item-info { + border-top: 1px solid @gray-lighter; + } + padding: 10px 0; + + h4 { + font-weight: 400; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + a { + color: @text-color; + + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } + + .owner { + color: @text-color; + font-size: 14px; + + a { + color: @text-color; + + &:hover { + color: @brand-danger; + text-decoration: none; + } + } + } + + .thumb { + img { + border: 1px solid @gray-lighter; + width: 100%; + } + } + + .abstract { + color: @gray-light; + font-weight: 300; + min-height: 80px; + } + + .actions { + color: @gray-light; + font-weight: 300; + + i { + margin-right: 0.75em; + } + + a { + color: @gray-light; + margin-right: 0.5em; + + &:hover { + color: @gray; + text-decoration: none; + }; + } + } +} +/* Layers +----------------------- */ +.item-container { + padding: 1em; +} + +.profile-avatar { + background: white; + border: 1px solid @gray-light; + padding: 0; + + h5 a { + color: @text-color; + display: block; + margin-bottom: -0.5em; + margin-top: 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + color: @brand-danger; + text-decoration: none; + } + + i { + margin-left: 0.75em; + + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } + + .list-inline { + margin: 0.5em 0; + } +} + +.item-thumb { + padding-left: 0; + padding-right: 0; + + img { + width: 100%; + } +} + +.item-details { + background: white; + color: @text-color; + + .item-meta { + margin-top: 1em; + + .item-category { + font-size: 12px; + text-transform: uppercase; + } + } + + .btn-sm { + margin-right: -17px; + margin-top: -1px; + padding: 0.5em 1em; + } + + .item-items { + border-top: 1px solid @gray-lighter; + + ul { + margin: 0 0 0 -15px; + padding: 0.5em; + + i { + margin-right: 0.5em; + } + } + } +} + +.detail-page-actions { + margin-top: 20px; + + i { + padding-right: 3px; + } +} + +.layer-actions { + .detail-page-actions; +} + +.edit-modal { + text-align: center; +} + +.arcgis-legend > li { + text-align: right; +} + +.arcgis-legend > li > img { + padding-right: 25px; +} + +.grid-spacer { + margin-top: 30px; +} +/* Control items +----------------------- */ +.controls { + width: 320px; +} + +.controls > div, +.controls > input, +.controls > select, +.controls > textarea { + width: 320px; +} +/* Maps +----------------------- */ +.map-actions { + .detail-page-actions; +} +/* Documents +----------------------- */ +.documents-actions { + .detail-page-actions; +} +/* Documents +----------------------- */ +/* People +----------------------- */ +.profile-container { + padding: 1em; +} + +.profile-avatar { + background: white; + border: 1px solid @gray-lighter; + padding: 0; + + h5 a { + color: @text-color; + display: block; + margin-bottom: -0.5em; + margin-top: 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + color: @brand-danger; + text-decoration: none; + } + + i { + margin-left: 0.75em; + + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } + + .profile-items { + border-top: 1px solid @gray-lighter; + color: @gray; + + i { + margin-left: 0; + margin-right: 0.125em; + + a { + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } + + .list-inline { + margin: 0.5em 0; + } + } + + li a { + color: @gray; + margin-right: 0.5em; + + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + + img { + margin: 0; + width: 100%; + } +} + +.profile-image { + padding-left: 0; + padding-right: 0; + + img { + width: 100%; + } +} + +.profile-details { + background: white; + color: @text-color; + + .group-logo { + margin: 0.5em; + padding: 0; + + img { + width: 60px; + } + } +} + +nav.filter { + h4 { + background: @gray; + font-size: 14px; + font-weight: 300; + padding: 10px 0; + text-transform: uppercase; + border-radius: 3px; + + a { + color: white; + } + + a.toggle { + text-decoration: none; + } + + i { + margin-left: 8px; + } + } + + .active { + color: @brand-primary; + + .badge { + background: @brand-primary; + } + } + + .closed { + display: none; + } + + li a { + border-bottom: 1px solid @gray-lighter; + cursor: pointer; + padding: 5px 10px; + } +} + +.selections { + h5 { + font-weight: 400; + } + + .thumb { + float: left; + } +} + +#sort { + cursor: pointer; + + a { + color: @gray-light; + } + + .selected { + color: @brand-primary; + } +} +/* Groups +----------------------- */ +.group-container { + padding: 1em; +} + +.group-avatar { + border: 1px solid @gray-lighter; + padding: 0; + + h5 a { + color: @text-color; + display: block; + margin-bottom: -0.5em; + margin-top: 1em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover { + color: @brand-danger; + text-decoration: none; + } + + i { + margin-left: 0.75em; + + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } +} + +.group-items { + border-top: 1px solid @gray-lighter; + color: @gray; + + i { + margin-left: 0; + margin-right: 0.125em; + + a { + &:hover { + color: @brand-danger; + text-decoration: none; + }; + } + } + + .list-inline { + margin: 0.5em 0; + } +} + +.group-image { + height: 120px; + overflow: hidden; +} + +.group-container { + .group-logo { + padding: 1em 0; + width: 100%; + } +} + +.group-details { + .group-logo img { + width: 100%; + } +} +/* Upload Layers +----------------------- */ +#drop-zone { + background: @gray-lighter; + margin-bottom: 10px; + padding: 5px; + border: 2px dashed @gray-light; + + h3 { + color: @gray-light; + margin: 20px 0; + text-align: center; + + i { + font-size: 3em; + } + } +} + +#clear-button, +#upload-button { + margin-top: 20px; +} +/* Upload Documents +----------------------- */ +#upload_form { + input[type="text"] { + display: block; + margin: 0; + width: 480px; + appearance: none; + box-shadow: none; + border-radius: none; + transition: box-shadow 0.3s, border 0.3s; + } + + input[type="text"]:focus { + border: solid 1px #707070; + box-shadow: 0 0 5px 1px #969696; + outline: none; + } + + #id_title {} + + #id_doc_file { + padding: 0.5em; + width: 480px; + } + + #id_doc_url { + display: block; + width: 480px; + } + + #s2id_resource { + display: block; + width: 480px; + } + + .helptext {} +} +@media (max-width: 991px) { + #upload_form { + input[type="text"] { + width: 360px; + } + + #id_doc_file, + #id_doc_url, + #s2id_resource { + width: 360px; + } + } +} +/* Upload Time +----------------------- */ +/*#timeForm label { + display: inline; + } +.formSection { + margin-bottom: 1em; + } + .right input, .right select { + } + .left input { + line-height: 2em; + } + form input, form select { + font-size: small; + } + form label { + line-height: 2em; + } + .clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } + .clearfix { + display: inline-block; + } + * html .clearfix { + height: 1%; + } /* Hides from IE-mac \*/ +/*.clearfix { + display: block; + } + #format_input input { + width:8em; + } + #timehelp p { + color: black !important; + } + #timehelp code { + background: @gray-light; + }*/ +/* Footer +----------------------- */ +footer { + color: white; + padding: 1.5em; + + a { + color: @brand-warning; + + &:hover { + color: darken(@brand-warning, 13.5%); + } + } + + form { + color: @text-color; + } +} +/* Etc +----------------------- */ +.rotate-45 { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + /*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/ +} + +.select2-container-multi .select2-choices .select2-search-field input { + height: auto; +} + +.datepicker { + border-radius: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; +} + +.filter input.datepicker { + width: 100%; +} + +#composerCart { + .list-group i { + margin-right: 0; + } +} + +.selections { + margin-top: 1em; +} + +.comment { + padding: 1em 0 0.5em; + + .avatar img { + border-radius: 50%; + } + + small { + font-weight: bold; + color: #777; + margin-left: 10px; + } + + button, + p { + margin-left: 58px; + margin-top: -0.5em; + } +} + +.list-group-item { + .avatar { + img { + border-radius: 50%; + padding-right: 0.5em; + } + } +} +/* Activity + ----------------------------- */ +.no-style-list { + list-style-type: none; + margin-top: 20px; +} + +.activity-item { + border-bottom: 1px solid @gray-light; + border-left: 1px solid @gray-light; + color: @gray-light; + margin-top: -10px; + padding: 20px 18px; + + .comment { + content: "\f086"; + } + + .comment:before { + content: "\f086"; + } + + .delete { + content: "\f014"; + } + + .delete:before { + content: "\f014"; + } + + .edit { + content: "\f14b"; + } + + .edit:before { + content: "\f14b"; + } + + .layer { + content: "\f096"; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + /*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/ + } + + .layer:before { + content: "\f096"; + } + + .map { + content: "\f041"; + } + + .map:before { + content: "\f041"; + } + + .upload { + content: "\f093"; + } + + .upload:before { + content: "\f093"; + } +} + +.icon-activity { + background: @gray-light; + -moz-border-radius: 20px; + -webkit-border-radius: 20px; + border-radius: 20px; + border: 2px solid white; + color: white; + float: left; + font-family: FontAwesome; + font-weight: normal; + font-size: 1.30em; + font-style: normal; + height: 35px; + line-height: 1.25em; + margin: 0 10px 10px -35px; + padding: 4px; + text-align: center; + text-decoration: inherit; + width: 35px; +} + +.thumb-activity { + clear: both; + height: 60px; + + img { + border: 1px solid @gray; + float: left; + margin-right: 5px; + width: 60px; + } +} + +.activity { + content: "\f045"; +} + +.activity:before { + content: "\f045"; +} + +.activity-timestamp { + margin-top: -10px; +} + +#permission_form .select2-container { + width: 250px; +} +/* Sign In Modal +----------------------- */ +.form-signin { + max-width: 330px; + padding: 15px; + margin: 0 auto; +} + +.form-signin .checkbox, +.form-signin .form-signin-heading { + margin-bottom: 10px; +} + +.form-signin .checkbox { + font-weight: normal; +} + +.form-signin .form-control { + position: relative; + height: auto; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + font-size: 1em; +} + +.form-signin .form-control:focus { + z-index: 2; +} + +.form-signin input[type="username"] { + margin-bottom: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-signin input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.modal-body .list-unstyled a { + color: @text-color; + font-size: 1.14285714em; + line-height: 2em; + + i { + margin-right: 8px; + } + + &:hover { + color: @brand-primary; + text-decoration: none; + }; +} + +.modal-divider { + padding-top: 1px; + margin: 5px 1px 6px; + border-bottom: 1px solid #e1e8ed; +} + +.list-group { + i { + margin-right: 8px; + } +} +/* Media Queries + ----------------------------- */ +@media (max-width: 991px) { + .navbar-header { + float: none; + } + + .navbar-toggle { + display: block; + } + + .navbar-collapse { + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); + } + + .navbar-collapse.collapse { + display: none!important; + } + + .navbar-nav { + float: none!important; + margin: 7.5px -15px; + } + + .navbar-nav > li { + float: none; + } + + .navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + } + /* since 3.1.0 */ + .navbar-collapse.collapse.in { + display: block!important; + } + + .collapsing { + overflow: hidden!important; + } + + .home .navbar-inverse { + background-color: @gray-dark; + } + + .navbar-inverse { + .navbar-nav > li > a { + padding-bottom: 0.75em; + padding-top: 0.75em; + } + + .navbar-nav .search { + padding-bottom: 0.75em; + top: 0; + + input { + width: 100%; + } + } + } +} + +#member_form_container .select2-container { + padding: 0; +} + +.table-user-profile-attribute { + font-weight: bold; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap.less b/django_project/core/geonode_static/geonode/less/bootstrap.less new file mode 100755 index 0000000..8773ee9 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap.less @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "variables.less"; +@import "bootstrap/mixins.less"; + +// Reset and dependencies +@import "bootstrap/normalize.less"; +@import "bootstrap/print.less"; +@import "bootstrap/glyphicons.less"; + +// Core CSS +@import "bootstrap/scaffolding.less"; +@import "bootstrap/type.less"; +@import "bootstrap/code.less"; +@import "bootstrap/grid.less"; +@import "bootstrap/tables.less"; +@import "bootstrap/forms.less"; +@import "bootstrap/buttons.less"; + +// Components +@import "bootstrap/component-animations.less"; +@import "bootstrap/dropdowns.less"; +@import "bootstrap/button-groups.less"; +@import "bootstrap/input-groups.less"; +@import "bootstrap/navs.less"; +@import "bootstrap/navbar.less"; +@import "bootstrap/breadcrumbs.less"; +@import "bootstrap/pagination.less"; +@import "bootstrap/pager.less"; +@import "bootstrap/labels.less"; +@import "bootstrap/badges.less"; +@import "bootstrap/jumbotron.less"; +@import "bootstrap/thumbnails.less"; +@import "bootstrap/alerts.less"; +@import "bootstrap/progress-bars.less"; +@import "bootstrap/media.less"; +@import "bootstrap/list-group.less"; +@import "bootstrap/panels.less"; +@import "bootstrap/responsive-embed.less"; +@import "bootstrap/wells.less"; +@import "bootstrap/close.less"; + +// Components w/ JavaScript +@import "bootstrap/modals.less"; +@import "bootstrap/tooltip.less"; +@import "bootstrap/popovers.less"; +@import "bootstrap/carousel.less"; + +// Utility classes +@import "bootstrap/utilities.less"; +@import "bootstrap/responsive-utilities.less"; diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/alerts.less b/django_project/core/geonode_static/geonode/less/bootstrap/alerts.less new file mode 100755 index 0000000..c4199db --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/alerts.less @@ -0,0 +1,73 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: @alert-padding; + margin-bottom: @line-height-computed; + border: 1px solid transparent; + border-radius: @alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing @headings-color + color: inherit; + } + + // Provide class for links that match alerts + .alert-link { + font-weight: @alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: (@alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); +} + +.alert-info { + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); +} + +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} + +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/badges.less b/django_project/core/geonode_static/geonode/less/bootstrap/badges.less new file mode 100755 index 0000000..6ee16dc --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/badges.less @@ -0,0 +1,66 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: @badge-font-weight; + color: @badge-color; + line-height: @badge-line-height; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: @badge-bg; + border-radius: @badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + + .btn-xs &, + .btn-group-xs > .btn & { + top: 0; + padding: 1px 5px; + } + + // Hover state, but only for links + a& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + .list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + + .list-group-item > & { + float: right; + } + + .list-group-item > & + & { + margin-right: 5px; + } + + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/bootstrap.less b/django_project/core/geonode_static/geonode/less/bootstrap/bootstrap.less new file mode 100755 index 0000000..f0aa08f --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/bootstrap.less @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/breadcrumbs.less b/django_project/core/geonode_static/geonode/less/bootstrap/breadcrumbs.less new file mode 100755 index 0000000..cb01d50 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/breadcrumbs.less @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; + margin-bottom: @line-height-computed; + list-style: none; + background-color: @breadcrumb-bg; + border-radius: @border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: @breadcrumb-color; + } + } + + > .active { + color: @breadcrumb-active-color; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/button-groups.less b/django_project/core/geonode_static/geonode/less/bootstrap/button-groups.less new file mode 100755 index 0000000..16db0c6 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/button-groups.less @@ -0,0 +1,244 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + &:extend(.clearfix all); + + .btn, + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + .border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + .border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-right-radius(0); + } +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + .box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: @caret-width-large @caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 @caret-width-large @caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + &:extend(.clearfix all); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + .border-top-radius(@btn-border-radius-base); + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + .border-top-radius(0); + .border-bottom-radius(@btn-border-radius-base); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-top-radius(0); +} + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. + +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none; + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/buttons.less b/django_project/core/geonode_static/geonode/less/bootstrap/buttons.less new file mode 100755 index 0000000..9cbb8f4 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/buttons.less @@ -0,0 +1,166 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: @btn-font-weight; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base); + .user-select(none); + + &, + &:active, + &.active { + &:focus, + &.focus { + .tab-focus(); + } + } + + &:hover, + &:focus, + &.focus { + color: @btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: @cursor-disabled; + .opacity(.65); + .box-shadow(none); + } + + a& { + &.disabled, + fieldset[disabled] & { + pointer-events: none; // Future-proof disabling of clicks on `
    ` elements + } + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); +} +.btn-primary { + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); +} +// Success appears as green +.btn-success { + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); +} +// Info appears as blue-green +.btn-info { + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: @link-color; + font-weight: normal; + border-radius: 0; + + &, + &:active, + &.active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + .box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: @link-hover-decoration; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} +.btn-xs { + .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/carousel.less b/django_project/core/geonode_static/geonode/less/bootstrap/carousel.less new file mode 100755 index 0000000..252011e --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/carousel.less @@ -0,0 +1,270 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + .transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + &:extend(.img-responsive); + line-height: 1; + } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + .transition-transform(~'0.6s ease-in-out'); + .backface-visibility(~'hidden'); + .perspective(1000px); + + &.next, + &.active.right { + .translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + .translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + .translate3d(0, 0, 0); + left: 0; + } + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: @carousel-control-width; + .opacity(@carousel-control-opacity); + font-size: @carousel-control-font-size; + color: @carousel-control-color; + text-align: center; + text-shadow: @carousel-text-shadow; + background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: @carousel-control-color; + text-decoration: none; + .opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid @carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: @carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: @carousel-caption-color; + text-align: center; + text-shadow: @carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: @screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: (@carousel-control-font-size * 1.5); + height: (@carousel-control-font-size * 1.5); + margin-top: (@carousel-control-font-size / -2); + font-size: (@carousel-control-font-size * 1.5); + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: (@carousel-control-font-size / -2); + } + .glyphicon-chevron-right, + .icon-next { + margin-right: (@carousel-control-font-size / -2); + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/close.less b/django_project/core/geonode_static/geonode/less/bootstrap/close.less new file mode 100755 index 0000000..6d5bfe0 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/close.less @@ -0,0 +1,34 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: (@font-size-base * 1.5); + font-weight: @close-font-weight; + line-height: 1; + color: @close-color; + text-shadow: @close-text-shadow; + .opacity(.2); + + &:hover, + &:focus { + color: @close-color; + text-decoration: none; + cursor: pointer; + .opacity(.5); + } + + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/code.less b/django_project/core/geonode_static/geonode/less/bootstrap/code.less new file mode 100755 index 0000000..a08b4d4 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/code.less @@ -0,0 +1,69 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: @font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: @code-color; + background-color: @code-bg; + border-radius: @border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: @kbd-color; + background-color: @kbd-bg; + border-radius: @border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + + kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: ((@line-height-computed - 1) / 2); + margin: 0 0 (@line-height-computed / 2); + font-size: (@font-size-base - 1); // 14px to 13px + line-height: @line-height-base; + word-break: break-all; + word-wrap: break-word; + color: @pre-color; + background-color: @pre-bg; + border: 1px solid @pre-border-color; + border-radius: @border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: @pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/component-animations.less b/django_project/core/geonode_static/geonode/less/bootstrap/component-animations.less new file mode 100755 index 0000000..0bcee91 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/component-animations.less @@ -0,0 +1,33 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + .transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + .transition-property(~"height, visibility"); + .transition-duration(.35s); + .transition-timing-function(ease); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/dropdowns.less b/django_project/core/geonode_static/geonode/less/bootstrap/dropdowns.less new file mode 100755 index 0000000..f6876c1 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/dropdowns.less @@ -0,0 +1,216 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: @caret-width-base dashed; + border-top: @caret-width-base solid ~"\9"; // IE8 + border-right: @caret-width-base solid transparent; + border-left: @caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropup, +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: @zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: @font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: @dropdown-bg; + border: 1px solid @dropdown-fallback-border; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + .nav-divider(@dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: @line-height-base; + color: @dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: @dropdown-link-hover-color; + background-color: @dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: @dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: @dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: @dropdown-link-disabled-color; + } + + // Nuke hover/focus effects + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + cursor: @cursor-disabled; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: @font-size-small; + line-height: @line-height-base; + color: @dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: (@zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: @caret-width-base dashed; + border-bottom: @caret-width-base solid ~"\9"; // IE8 + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: @grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/forms.less b/django_project/core/geonode_static/geonode/less/bootstrap/forms.less new file mode 100755 index 0000000..9377d38 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/forms.less @@ -0,0 +1,613 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @legend-color; + border: 0; + border-bottom: 1px solid @legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + .tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: (@padding-base-vertical + 1); + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; + background-color: @input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid @input-border; + border-radius: @input-border-radius; // Note: This has no effect on s in CSS. + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .placeholder(); + + // Unstyle the caret on `` +// element gets special love because it's special, and that's a fact! +.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + height: @input-height; + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + border-radius: @border-radius; + + select& { + height: @input-height; + line-height: @input-height; + } + + textarea&, + select[multiple]& { + height: auto; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/gradients.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/gradients.less new file mode 100755 index 0000000..0b88a89 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/gradients.less @@ -0,0 +1,59 @@ +// Gradients + +#gradient { + + // Horizontal gradient, from left to right + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12 + background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + // Vertical gradient, from top to bottom + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { + background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12 + background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down + } + + .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { + background-repeat: repeat-x; + background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ + background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12 + background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + } + .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { + background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-repeat: no-repeat; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback + } + .radial(@inner-color: #555; @outer-color: #333) { + background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); + background-image: radial-gradient(circle, @inner-color, @outer-color); + background-repeat: no-repeat; + } + .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { + background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid-framework.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid-framework.less new file mode 100755 index 0000000..8c23eed --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid-framework.less @@ -0,0 +1,91 @@ +// Framework grid generation +// +// Used only by Bootstrap to generate the correct number of grid classes given +// any value of `@grid-columns`. + +.make-grid-columns() { + // Common styles for all sizes of grid columns, widths 1-12 + .col(@index) { // initial + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo + @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: ceil((@grid-gutter-width / 2)); + padding-right: floor((@grid-gutter-width / 2)); + } + } + .col(1); // kickstart it +} + +.float-grid-columns(@class) { + .col(@index) { // initial + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), @item); + } + .col(@index, @list) when (@index =< @grid-columns) { // general + @item: ~".col-@{class}-@{index}"; + .col((@index + 1), ~"@{list}, @{item}"); + } + .col(@index, @list) when (@index > @grid-columns) { // terminal + @{list} { + float: left; + } + } + .col(1); // kickstart it +} + +.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) { + .col-@{class}-@{index} { + width: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) { + .col-@{class}-push-@{index} { + left: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) { + .col-@{class}-push-0 { + left: auto; + } +} +.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) { + .col-@{class}-pull-@{index} { + right: percentage((@index / @grid-columns)); + } +} +.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) { + .col-@{class}-pull-0 { + right: auto; + } +} +.calc-grid-column(@index, @class, @type) when (@type = offset) { + .col-@{class}-offset-@{index} { + margin-left: percentage((@index / @grid-columns)); + } +} + +// Basic looping in LESS +.loop-grid-columns(@index, @class, @type) when (@index >= 0) { + .calc-grid-column(@index, @class, @type); + // next iteration + .loop-grid-columns((@index - 1), @class, @type); +} + +// Create grid for specific class +.make-grid(@class) { + .float-grid-columns(@class); + .loop-grid-columns(@grid-columns, @class, width); + .loop-grid-columns(@grid-columns, @class, pull); + .loop-grid-columns(@grid-columns, @class, push); + .loop-grid-columns(@grid-columns, @class, offset); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid.less new file mode 100755 index 0000000..df496d0 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/grid.less @@ -0,0 +1,122 @@ +// Grid system +// +// Generate semantic grid columns with these mixins. + +// Centered container element +.container-fixed(@gutter: @grid-gutter-width) { + margin-right: auto; + margin-left: auto; + padding-left: floor((@gutter / 2)); + padding-right: ceil((@gutter / 2)); + &:extend(.clearfix all); +} + +// Creates a wrapper for a series of columns +.make-row(@gutter: @grid-gutter-width) { + margin-left: ceil((@gutter / -2)); + margin-right: floor((@gutter / -2)); + &:extend(.clearfix all); +} + +// Generate the extra small columns +.make-xs-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + float: left; + width: percentage((@columns / @grid-columns)); + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); +} +.make-xs-column-offset(@columns) { + margin-left: percentage((@columns / @grid-columns)); +} +.make-xs-column-push(@columns) { + left: percentage((@columns / @grid-columns)); +} +.make-xs-column-pull(@columns) { + right: percentage((@columns / @grid-columns)); +} + +// Generate the small columns +.make-sm-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-sm-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-offset(@columns) { + @media (min-width: @screen-sm-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-push(@columns) { + @media (min-width: @screen-sm-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-sm-column-pull(@columns) { + @media (min-width: @screen-sm-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the medium columns +.make-md-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-md-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-md-column-offset(@columns) { + @media (min-width: @screen-md-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-push(@columns) { + @media (min-width: @screen-md-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-md-column-pull(@columns) { + @media (min-width: @screen-md-min) { + right: percentage((@columns / @grid-columns)); + } +} + +// Generate the large columns +.make-lg-column(@columns; @gutter: @grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: (@gutter / 2); + padding-right: (@gutter / 2); + + @media (min-width: @screen-lg-min) { + float: left; + width: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-offset(@columns) { + @media (min-width: @screen-lg-min) { + margin-left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-push(@columns) { + @media (min-width: @screen-lg-min) { + left: percentage((@columns / @grid-columns)); + } +} +.make-lg-column-pull(@columns) { + @media (min-width: @screen-lg-min) { + right: percentage((@columns / @grid-columns)); + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/hide-text.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/hide-text.less new file mode 100755 index 0000000..2bb84a3 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/hide-text.less @@ -0,0 +1,21 @@ +// CSS image replacement +// +// Heads up! v3 launched with only `.hide-text()`, but per our pattern for +// mixins being reused as classes with the same name, this doesn't hold up. As +// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. +// +// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 + +// Deprecated as of v3.0.1 (has been removed in v4) +.hide-text() { + font: ~"0/0" a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +// New mixin to use as of v3.0.1 +.text-hide() { + .hide-text(); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/image.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/image.less new file mode 100755 index 0000000..f233cb3 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/image.less @@ -0,0 +1,33 @@ +// Image Mixins +// - Responsive image +// - Retina image + + +// Responsive image +// +// Keep images from scaling beyond the width of their parents. +.img-responsive(@display: block) { + display: @display; + max-width: 100%; // Part 1: Set a maximum relative to the parent + height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching +} + + +// Retina image +// +// Short retina mixin for setting background-image and -size. Note that the +// spelling of `min--moz-device-pixel-ratio` is intentional. +.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { + background-image: url("@{file-1x}"); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url("@{file-2x}"); + background-size: @width-1x @height-1x; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/labels.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/labels.less new file mode 100755 index 0000000..9f7a67e --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/labels.less @@ -0,0 +1,12 @@ +// Labels + +.label-variant(@color) { + background-color: @color; + + &[href] { + &:hover, + &:focus { + background-color: darken(@color, 10%); + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/list-group.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/list-group.less new file mode 100755 index 0000000..03aa190 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/list-group.less @@ -0,0 +1,30 @@ +// List Groups + +.list-group-item-variant(@state; @background; @color) { + .list-group-item-@{state} { + color: @color; + background-color: @background; + + a&, + button& { + color: @color; + + .list-group-item-heading { + color: inherit; + } + + &:hover, + &:focus { + color: @color; + background-color: darken(@background, 5%); + } + &.active, + &.active:hover, + &.active:focus { + color: #fff; + background-color: @color; + border-color: @color; + } + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-divider.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-divider.less new file mode 100755 index 0000000..feb1e9e --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-divider.less @@ -0,0 +1,10 @@ +// Horizontal dividers +// +// Dividers (basically an hr) within dropdowns and nav lists + +.nav-divider(@color: #e5e5e5) { + height: 1px; + margin: ((@line-height-computed / 2) - 1) 0; + overflow: hidden; + background-color: @color; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-vertical-align.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-vertical-align.less new file mode 100755 index 0000000..d458c78 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/nav-vertical-align.less @@ -0,0 +1,9 @@ +// Navbar vertical align +// +// Vertically center elements in the navbar. +// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. + +.navbar-vertical-align(@element-height) { + margin-top: ((@navbar-height - @element-height) / 2); + margin-bottom: ((@navbar-height - @element-height) / 2); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/opacity.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/opacity.less new file mode 100755 index 0000000..33ed25c --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/opacity.less @@ -0,0 +1,8 @@ +// Opacity + +.opacity(@opacity) { + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/pagination.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/pagination.less new file mode 100755 index 0000000..618804f --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/pagination.less @@ -0,0 +1,24 @@ +// Pagination + +.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + > li { + > a, + > span { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + } + &:first-child { + > a, + > span { + .border-left-radius(@border-radius); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius); + } + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/panels.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/panels.less new file mode 100755 index 0000000..49ee10d --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/panels.less @@ -0,0 +1,24 @@ +// Panels + +.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { + border-color: @border; + + & > .panel-heading { + color: @heading-text-color; + background-color: @heading-bg-color; + border-color: @heading-border; + + + .panel-collapse > .panel-body { + border-top-color: @border; + } + .badge { + color: @heading-bg-color; + background-color: @heading-text-color; + } + } + & > .panel-footer { + + .panel-collapse > .panel-body { + border-bottom-color: @border; + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/progress-bar.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/progress-bar.less new file mode 100755 index 0000000..f07996a --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/progress-bar.less @@ -0,0 +1,10 @@ +// Progress bars + +.progress-bar-variant(@color) { + background-color: @color; + + // Deprecated parent class requirement as of v3.2.0 + .progress-striped & { + #gradient > .striped(); + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-filter.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-filter.less new file mode 100755 index 0000000..68cdb5e --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-filter.less @@ -0,0 +1,8 @@ +// Reset filters for IE +// +// When you need to remove a gradient background, do not forget to use this to reset +// the IE filter for IE9 and below. + +.reset-filter() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-text.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-text.less new file mode 100755 index 0000000..58dd4d1 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/reset-text.less @@ -0,0 +1,18 @@ +.reset-text() { + font-family: @font-family-base; + // We deliberately do NOT reset font-size. + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: @line-height-base; + text-align: left; // Fallback for where `start` is not supported + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/resize.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/resize.less new file mode 100755 index 0000000..3acd3af --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/resize.less @@ -0,0 +1,6 @@ +// Resize anything + +.resizable(@direction) { + resize: @direction; // Options: horizontal, vertical, both + overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/responsive-visibility.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/responsive-visibility.less new file mode 100755 index 0000000..ecf1e97 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/responsive-visibility.less @@ -0,0 +1,15 @@ +// Responsive utilities + +// +// More easily include all the states for responsive-utilities.less. +.responsive-visibility() { + display: block !important; + table& { display: table !important; } + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} + +.responsive-invisibility() { + display: none !important; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/size.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/size.less new file mode 100755 index 0000000..a8be650 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/size.less @@ -0,0 +1,10 @@ +// Sizing shortcuts + +.size(@width; @height) { + width: @width; + height: @height; +} + +.square(@size) { + .size(@size; @size); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/tab-focus.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/tab-focus.less new file mode 100755 index 0000000..d12d236 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/tab-focus.less @@ -0,0 +1,9 @@ +// WebKit-style focus + +.tab-focus() { + // WebKit-specific. Other browsers will keep their default outline style. + // (Initially tried to also force default via `outline: initial`, + // but that seems to erroneously remove the outline in Firefox altogether.) + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/table-row.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/table-row.less new file mode 100755 index 0000000..0f287f1 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/table-row.less @@ -0,0 +1,28 @@ +// Tables + +.table-row-variant(@state; @background) { + // Exact selectors below required to override `.table-striped` and prevent + // inheritance to nested tables. + .table > thead > tr, + .table > tbody > tr, + .table > tfoot > tr { + > td.@{state}, + > th.@{state}, + &.@{state} > td, + &.@{state} > th { + background-color: @background; + } + } + + // Hover states for `.table-hover` + // Note: this is not available for cells or rows within `thead` or `tfoot`. + .table-hover > tbody > tr { + > td.@{state}:hover, + > th.@{state}:hover, + &.@{state}:hover > td, + &:hover > .@{state}, + &.@{state}:hover > th { + background-color: darken(@background, 5%); + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-emphasis.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-emphasis.less new file mode 100755 index 0000000..9e8a77a --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-emphasis.less @@ -0,0 +1,9 @@ +// Typography + +.text-emphasis-variant(@color) { + color: @color; + a&:hover, + a&:focus { + color: darken(@color, 10%); + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-overflow.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-overflow.less new file mode 100755 index 0000000..c11ad2f --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/text-overflow.less @@ -0,0 +1,8 @@ +// Text overflow +// Requires inline-block or block for proper styling + +.text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/mixins/vendor-prefixes.less b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/vendor-prefixes.less new file mode 100755 index 0000000..2b5e74b --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/mixins/vendor-prefixes.less @@ -0,0 +1,227 @@ +// Vendor Prefixes +// +// All vendor mixins are deprecated as of v3.2.0 due to the introduction of +// Autoprefixer in our Gruntfile. They have been removed in v4. + +// - Animations +// - Backface visibility +// - Box shadow +// - Box sizing +// - Content columns +// - Hyphens +// - Placeholder text +// - Transformations +// - Transitions +// - User Select + + +// Animations +.animation(@animation) { + -webkit-animation: @animation; + -o-animation: @animation; + animation: @animation; +} +.animation-name(@name) { + -webkit-animation-name: @name; + animation-name: @name; +} +.animation-duration(@duration) { + -webkit-animation-duration: @duration; + animation-duration: @duration; +} +.animation-timing-function(@timing-function) { + -webkit-animation-timing-function: @timing-function; + animation-timing-function: @timing-function; +} +.animation-delay(@delay) { + -webkit-animation-delay: @delay; + animation-delay: @delay; +} +.animation-iteration-count(@iteration-count) { + -webkit-animation-iteration-count: @iteration-count; + animation-iteration-count: @iteration-count; +} +.animation-direction(@direction) { + -webkit-animation-direction: @direction; + animation-direction: @direction; +} +.animation-fill-mode(@fill-mode) { + -webkit-animation-fill-mode: @fill-mode; + animation-fill-mode: @fill-mode; +} + +// Backface visibility +// Prevent browsers from flickering when using CSS 3D transforms. +// Default value is `visible`, but can be changed to `hidden` + +.backface-visibility(@visibility) { + -webkit-backface-visibility: @visibility; + -moz-backface-visibility: @visibility; + backface-visibility: @visibility; +} + +// Drop shadows +// +// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's +// supported browsers that have box shadow capabilities now support it. + +.box-shadow(@shadow) { + -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 + box-shadow: @shadow; +} + +// Box sizing +.box-sizing(@boxmodel) { + -webkit-box-sizing: @boxmodel; + -moz-box-sizing: @boxmodel; + box-sizing: @boxmodel; +} + +// CSS3 Content Columns +.content-columns(@column-count; @column-gap: @grid-gutter-width) { + -webkit-column-count: @column-count; + -moz-column-count: @column-count; + column-count: @column-count; + -webkit-column-gap: @column-gap; + -moz-column-gap: @column-gap; + column-gap: @column-gap; +} + +// Optional hyphenation +.hyphens(@mode: auto) { + word-wrap: break-word; + -webkit-hyphens: @mode; + -moz-hyphens: @mode; + -ms-hyphens: @mode; // IE10+ + -o-hyphens: @mode; + hyphens: @mode; +} + +// Placeholder text +.placeholder(@color: @input-color-placeholder) { + // Firefox + &::-moz-placeholder { + color: @color; + opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526 + } + &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: @color; } // Safari and Chrome +} + +// Transformations +.scale(@ratio) { + -webkit-transform: scale(@ratio); + -ms-transform: scale(@ratio); // IE9 only + -o-transform: scale(@ratio); + transform: scale(@ratio); +} +.scale(@ratioX; @ratioY) { + -webkit-transform: scale(@ratioX, @ratioY); + -ms-transform: scale(@ratioX, @ratioY); // IE9 only + -o-transform: scale(@ratioX, @ratioY); + transform: scale(@ratioX, @ratioY); +} +.scaleX(@ratio) { + -webkit-transform: scaleX(@ratio); + -ms-transform: scaleX(@ratio); // IE9 only + -o-transform: scaleX(@ratio); + transform: scaleX(@ratio); +} +.scaleY(@ratio) { + -webkit-transform: scaleY(@ratio); + -ms-transform: scaleY(@ratio); // IE9 only + -o-transform: scaleY(@ratio); + transform: scaleY(@ratio); +} +.skew(@x; @y) { + -webkit-transform: skewX(@x) skewY(@y); + -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ + -o-transform: skewX(@x) skewY(@y); + transform: skewX(@x) skewY(@y); +} +.translate(@x; @y) { + -webkit-transform: translate(@x, @y); + -ms-transform: translate(@x, @y); // IE9 only + -o-transform: translate(@x, @y); + transform: translate(@x, @y); +} +.translate3d(@x; @y; @z) { + -webkit-transform: translate3d(@x, @y, @z); + transform: translate3d(@x, @y, @z); +} +.rotate(@degrees) { + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); // IE9 only + -o-transform: rotate(@degrees); + transform: rotate(@degrees); +} +.rotateX(@degrees) { + -webkit-transform: rotateX(@degrees); + -ms-transform: rotateX(@degrees); // IE9 only + -o-transform: rotateX(@degrees); + transform: rotateX(@degrees); +} +.rotateY(@degrees) { + -webkit-transform: rotateY(@degrees); + -ms-transform: rotateY(@degrees); // IE9 only + -o-transform: rotateY(@degrees); + transform: rotateY(@degrees); +} +.perspective(@perspective) { + -webkit-perspective: @perspective; + -moz-perspective: @perspective; + perspective: @perspective; +} +.perspective-origin(@perspective) { + -webkit-perspective-origin: @perspective; + -moz-perspective-origin: @perspective; + perspective-origin: @perspective; +} +.transform-origin(@origin) { + -webkit-transform-origin: @origin; + -moz-transform-origin: @origin; + -ms-transform-origin: @origin; // IE9 only + transform-origin: @origin; +} + + +// Transitions + +.transition(@transition) { + -webkit-transition: @transition; + -o-transition: @transition; + transition: @transition; +} +.transition-property(@transition-property) { + -webkit-transition-property: @transition-property; + transition-property: @transition-property; +} +.transition-delay(@transition-delay) { + -webkit-transition-delay: @transition-delay; + transition-delay: @transition-delay; +} +.transition-duration(@transition-duration) { + -webkit-transition-duration: @transition-duration; + transition-duration: @transition-duration; +} +.transition-timing-function(@timing-function) { + -webkit-transition-timing-function: @timing-function; + transition-timing-function: @timing-function; +} +.transition-transform(@transition) { + -webkit-transition: -webkit-transform @transition; + -moz-transition: -moz-transform @transition; + -o-transition: -o-transform @transition; + transition: transform @transition; +} + + +// User select +// For selecting text on the page + +.user-select(@select) { + -webkit-user-select: @select; + -moz-user-select: @select; + -ms-user-select: @select; // IE10+ + user-select: @select; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/modals.less b/django_project/core/geonode_static/geonode/less/bootstrap/modals.less new file mode 100755 index 0000000..767ce36 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/modals.less @@ -0,0 +1,150 @@ +// +// Modals +// -------------------------------------------------- + +// .modal-open - body class for killing the scroll +// .modal - container to scroll within +// .modal-dialog - positioning shell for the actual modal +// .modal-content - actual modal w/ bg and corners and shit + +// Kill the scroll on the body +.modal-open { + overflow: hidden; +} + +// Container that the modal scrolls within +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: @zindex-modal; + -webkit-overflow-scrolling: touch; + + // Prevent Chrome on Windows from adding a focus outline. For details, see + // https://github.com/twbs/bootstrap/pull/10951. + outline: 0; + + // When fading in the modal, animate it to slide down + &.fade .modal-dialog { + .translate(0, -25%); + .transition-transform(~"0.3s ease-out"); + } + &.in .modal-dialog { .translate(0, 0) } +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +// Shell div to position the modal with bottom padding +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +// Actual modal +.modal-content { + position: relative; + background-color: @modal-content-bg; + border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) + border: 1px solid @modal-content-border-color; + border-radius: @border-radius-large; + .box-shadow(0 3px 9px rgba(0,0,0,.5)); + background-clip: padding-box; + // Remove focus outline from opened modal + outline: 0; +} + +// Modal background +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: @zindex-modal-background; + background-color: @modal-backdrop-bg; + // Fade for backdrop + &.fade { .opacity(0); } + &.in { .opacity(@modal-backdrop-opacity); } +} + +// Modal header +// Top section of the modal w/ title and dismiss +.modal-header { + padding: @modal-title-padding; + border-bottom: 1px solid @modal-header-border-color; + &:extend(.clearfix all); +} +// Close icon +.modal-header .close { + margin-top: -2px; +} + +// Title text within header +.modal-title { + margin: 0; + line-height: @modal-title-line-height; +} + +// Modal body +// Where all modal content resides (sibling of .modal-header and .modal-footer) +.modal-body { + position: relative; + padding: @modal-inner-padding; +} + +// Footer (for actions) +.modal-footer { + padding: @modal-inner-padding; + text-align: right; // right align buttons + border-top: 1px solid @modal-footer-border-color; + &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons + + // Properly space out buttons + .btn + .btn { + margin-left: 5px; + margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs + } + // but override that for button groups + .btn-group .btn + .btn { + margin-left: -1px; + } + // and override it for block buttons as well + .btn-block + .btn-block { + margin-left: 0; + } +} + +// Measure scrollbar width for padding body during modal show/hide +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +// Scale up the modal +@media (min-width: @screen-sm-min) { + // Automatically set modal's width for larger viewports + .modal-dialog { + width: @modal-md; + margin: 30px auto; + } + .modal-content { + .box-shadow(0 5px 15px rgba(0,0,0,.5)); + } + + // Modal sizes + .modal-sm { width: @modal-sm; } +} + +@media (min-width: @screen-md-min) { + .modal-lg { width: @modal-lg; } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/navbar.less b/django_project/core/geonode_static/geonode/less/bootstrap/navbar.less new file mode 100755 index 0000000..6d751bb --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/navbar.less @@ -0,0 +1,660 @@ +// +// Navbars +// -------------------------------------------------- + + +// Wrapper and base class +// +// Provide a static navbar from which we expand to create full-width, fixed, and +// other navbar variations. + +.navbar { + position: relative; + min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) + margin-bottom: @navbar-margin-bottom; + border: 1px solid transparent; + + // Prevent floats from breaking the navbar + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + border-radius: @navbar-border-radius; + } +} + + +// Navbar heading +// +// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy +// styling of responsive aspects. + +.navbar-header { + &:extend(.clearfix all); + + @media (min-width: @grid-float-breakpoint) { + float: left; + } +} + + +// Navbar collapse (body) +// +// Group your navbar content into this for easy collapsing and expanding across +// various device sizes. By default, this content is collapsed when <768px, but +// will expand past that for a horizontal display. +// +// To start (on mobile devices) the navbar links, forms, and buttons are stacked +// vertically and include a `max-height` to overflow in case you have too much +// content for the user's viewport. + +.navbar-collapse { + overflow-x: visible; + padding-right: @navbar-padding-horizontal; + padding-left: @navbar-padding-horizontal; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255,255,255,.1); + &:extend(.clearfix all); + -webkit-overflow-scrolling: touch; + + &.in { + overflow-y: auto; + } + + @media (min-width: @grid-float-breakpoint) { + width: auto; + border-top: 0; + box-shadow: none; + + &.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; // Override default setting + overflow: visible !important; + } + + &.in { + overflow-y: visible; + } + + // Undo the collapse side padding for navbars with containers to ensure + // alignment of right-aligned contents. + .navbar-fixed-top &, + .navbar-static-top &, + .navbar-fixed-bottom & { + padding-left: 0; + padding-right: 0; + } + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + .navbar-collapse { + max-height: @navbar-collapse-max-height; + + @media (max-device-width: @screen-xs-min) and (orientation: landscape) { + max-height: 200px; + } + } +} + + +// Both navbar header and collapse +// +// When a container is present, change the behavior of the header and collapse. + +.container, +.container-fluid { + > .navbar-header, + > .navbar-collapse { + margin-right: -@navbar-padding-horizontal; + margin-left: -@navbar-padding-horizontal; + + @media (min-width: @grid-float-breakpoint) { + margin-right: 0; + margin-left: 0; + } + } +} + + +// +// Navbar alignment options +// +// Display the navbar across the entirety of the page or fixed it to the top or +// bottom of the page. + +// Static top (unfixed, but 100% wide) navbar +.navbar-static-top { + z-index: @zindex-navbar; + border-width: 0 0 1px; + + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} + +// Fix the top/bottom navbars when screen real estate supports it +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: @zindex-navbar-fixed; + + // Undo the rounded corners + @media (min-width: @grid-float-breakpoint) { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; // override .navbar defaults + border-width: 1px 0 0; +} + + +// Brand/project name + +.navbar-brand { + float: left; + padding: @navbar-padding-vertical @navbar-padding-horizontal; + font-size: @font-size-large; + line-height: @line-height-computed; + height: @navbar-height; + + &:hover, + &:focus { + text-decoration: none; + } + + > img { + display: block; + } + + @media (min-width: @grid-float-breakpoint) { + .navbar > .container &, + .navbar > .container-fluid & { + margin-left: -@navbar-padding-horizontal; + } + } +} + + +// Navbar toggle +// +// Custom button for toggling the `.navbar-collapse`, powered by the collapse +// JavaScript plugin. + +.navbar-toggle { + position: relative; + float: right; + margin-right: @navbar-padding-horizontal; + padding: 9px 10px; + .navbar-vertical-align(34px); + background-color: transparent; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + border-radius: @border-radius-base; + + // We remove the `outline` here, but later compensate by attaching `:hover` + // styles to `:focus`. + &:focus { + outline: 0; + } + + // Bars + .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; + } + .icon-bar + .icon-bar { + margin-top: 4px; + } + + @media (min-width: @grid-float-breakpoint) { + display: none; + } +} + + +// Navbar nav links +// +// Builds on top of the `.nav` components with its own modifier class to make +// the nav the full height of the horizontal nav (above 768px). + +.navbar-nav { + margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal; + + > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: @line-height-computed; + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + > li > a, + .dropdown-header { + padding: 5px 15px 5px 25px; + } + > li > a { + line-height: @line-height-computed; + &:hover, + &:focus { + background-image: none; + } + } + } + } + + // Uncollapse the nav + @media (min-width: @grid-float-breakpoint) { + float: left; + margin: 0; + + > li { + float: left; + > a { + padding-top: @navbar-padding-vertical; + padding-bottom: @navbar-padding-vertical; + } + } + } +} + + +// Navbar form +// +// Extension of the `.form-inline` with some extra flavor for optimum display in +// our navbars. + +.navbar-form { + margin-left: -@navbar-padding-horizontal; + margin-right: -@navbar-padding-horizontal; + padding: 10px @navbar-padding-horizontal; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); + + // Mixin behavior for optimum display + .form-inline(); + + .form-group { + @media (max-width: @grid-float-breakpoint-max) { + margin-bottom: 5px; + + &:last-child { + margin-bottom: 0; + } + } + } + + // Vertically center in expanded, horizontal navbar + .navbar-vertical-align(@input-height-base); + + // Undo 100% width for pull classes + @media (min-width: @grid-float-breakpoint) { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + .box-shadow(none); + } +} + + +// Dropdown menus + +// Menu position and menu carets +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + .border-top-radius(0); +} +// Menu position and menu caret support for dropups via extra dropup class +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + .border-top-radius(@navbar-border-radius); + .border-bottom-radius(0); +} + + +// Buttons in navbars +// +// Vertically center a button within a navbar (when *not* in a form). + +.navbar-btn { + .navbar-vertical-align(@input-height-base); + + &.btn-sm { + .navbar-vertical-align(@input-height-small); + } + &.btn-xs { + .navbar-vertical-align(22); + } +} + + +// Text in navbars +// +// Add a class to make any element properly align itself vertically within the navbars. + +.navbar-text { + .navbar-vertical-align(@line-height-computed); + + @media (min-width: @grid-float-breakpoint) { + float: left; + margin-left: @navbar-padding-horizontal; + margin-right: @navbar-padding-horizontal; + } +} + + +// Component alignment +// +// Repurpose the pull utilities as their own navbar utilities to avoid specificity +// issues with parents and chaining. Only do this when the navbar is uncollapsed +// though so that navbar contents properly stack and align in mobile. +// +// Declared after the navbar components to ensure more specificity on the margins. + +@media (min-width: @grid-float-breakpoint) { + .navbar-left { .pull-left(); } + .navbar-right { + .pull-right(); + margin-right: -@navbar-padding-horizontal; + + ~ .navbar-right { + margin-right: 0; + } + } +} + + +// Alternate navbars +// -------------------------------------------------- + +// Default navbar +.navbar-default { + background-color: @navbar-default-bg; + border-color: @navbar-default-border; + + .navbar-brand { + color: @navbar-default-brand-color; + &:hover, + &:focus { + color: @navbar-default-brand-hover-color; + background-color: @navbar-default-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-default-color; + } + + .navbar-nav { + > li > a { + color: @navbar-default-link-color; + + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + + .navbar-toggle { + border-color: @navbar-default-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-default-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-default-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: @navbar-default-border; + } + + // Dropdown menu items + .navbar-nav { + // Remove background color from open dropdown + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-default-link-active-bg; + color: @navbar-default-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display when collapsed + .open .dropdown-menu { + > li > a { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + background-color: @navbar-default-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-active-color; + background-color: @navbar-default-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + background-color: @navbar-default-link-disabled-bg; + } + } + } + } + } + + + // Links in navbars + // + // Add a class to ensure links outside the navbar nav are colored correctly. + + .navbar-link { + color: @navbar-default-link-color; + &:hover { + color: @navbar-default-link-hover-color; + } + } + + .btn-link { + color: @navbar-default-link-color; + &:hover, + &:focus { + color: @navbar-default-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-default-link-disabled-color; + } + } + } +} + +// Inverse navbar + +.navbar-inverse { + background-color: @navbar-inverse-bg; + border-color: @navbar-inverse-border; + + .navbar-brand { + color: @navbar-inverse-brand-color; + &:hover, + &:focus { + color: @navbar-inverse-brand-hover-color; + background-color: @navbar-inverse-brand-hover-bg; + } + } + + .navbar-text { + color: @navbar-inverse-color; + } + + .navbar-nav { + > li > a { + color: @navbar-inverse-link-color; + + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + + // Darken the responsive nav toggle + .navbar-toggle { + border-color: @navbar-inverse-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-inverse-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-inverse-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: darken(@navbar-inverse-bg, 7%); + } + + // Dropdowns + .navbar-nav { + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-inverse-link-active-bg; + color: @navbar-inverse-link-active-color; + } + } + + @media (max-width: @grid-float-breakpoint-max) { + // Dropdowns get custom display + .open .dropdown-menu { + > .dropdown-header { + border-color: @navbar-inverse-border; + } + .divider { + background-color: @navbar-inverse-border; + } + > li > a { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } + } + } + } + } + + .navbar-link { + color: @navbar-inverse-link-color; + &:hover { + color: @navbar-inverse-link-hover-color; + } + } + + .btn-link { + color: @navbar-inverse-link-color; + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + } + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/navs.less b/django_project/core/geonode_static/geonode/less/bootstrap/navs.less new file mode 100755 index 0000000..a3d11b1 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/navs.less @@ -0,0 +1,242 @@ +// +// Navs +// -------------------------------------------------- + + +// Base class +// -------------------------------------------------- + +.nav { + margin-bottom: 0; + padding-left: 0; // Override default ul/ol + list-style: none; + &:extend(.clearfix all); + + > li { + position: relative; + display: block; + + > a { + position: relative; + display: block; + padding: @nav-link-padding; + &:hover, + &:focus { + text-decoration: none; + background-color: @nav-link-hover-bg; + } + } + + // Disabled state sets text to gray and nukes hover/tab effects + &.disabled > a { + color: @nav-disabled-link-color; + + &:hover, + &:focus { + color: @nav-disabled-link-hover-color; + text-decoration: none; + background-color: transparent; + cursor: @cursor-disabled; + } + } + } + + // Open dropdowns + .open > a { + &, + &:hover, + &:focus { + background-color: @nav-link-hover-bg; + border-color: @link-color; + } + } + + // Nav dividers (deprecated with v3.0.1) + // + // This should have been removed in v3 with the dropping of `.nav-list`, but + // we missed it. We don't currently support this anywhere, but in the interest + // of maintaining backward compatibility in case you use it, it's deprecated. + .nav-divider { + .nav-divider(); + } + + // Prevent IE8 from misplacing imgs + // + // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 + > li > a > img { + max-width: none; + } +} + + +// Tabs +// ------------------------- + +// Give the tabs something to sit on +.nav-tabs { + border-bottom: 1px solid @nav-tabs-border-color; + > li { + float: left; + // Make the list-items overlay the bottom border + margin-bottom: -1px; + + // Actual tabs (as links) + > a { + margin-right: 2px; + line-height: @line-height-base; + border: 1px solid transparent; + border-radius: @border-radius-base @border-radius-base 0 0; + &:hover { + border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color; + } + } + + // Active state, and its :hover to override normal :hover + &.active > a { + &, + &:hover, + &:focus { + color: @nav-tabs-active-link-hover-color; + background-color: @nav-tabs-active-link-hover-bg; + border: 1px solid @nav-tabs-active-link-hover-border-color; + border-bottom-color: transparent; + cursor: default; + } + } + } + // pulling this in mainly for less shorthand + &.nav-justified { + .nav-justified(); + .nav-tabs-justified(); + } +} + + +// Pills +// ------------------------- +.nav-pills { + > li { + float: left; + + // Links rendered as pills + > a { + border-radius: @nav-pills-border-radius; + } + + li { + margin-left: 2px; + } + + // Active state + &.active > a { + &, + &:hover, + &:focus { + color: @nav-pills-active-link-hover-color; + background-color: @nav-pills-active-link-hover-bg; + } + } + } +} + + +// Stacked pills +.nav-stacked { + > li { + float: none; + + li { + margin-top: 2px; + margin-left: 0; // no need for this gap between nav items + } + } +} + + +// Nav variations +// -------------------------------------------------- + +// Justified nav links +// ------------------------- + +.nav-justified { + width: 100%; + + > li { + float: none; + > a { + text-align: center; + margin-bottom: 5px; + } + } + + > .dropdown .dropdown-menu { + top: auto; + left: auto; + } + + @media (min-width: @screen-sm-min) { + > li { + display: table-cell; + width: 1%; + > a { + margin-bottom: 0; + } + } + } +} + +// Move borders to anchors instead of bottom of list +// +// Mixin for adding on top the shared `.nav-justified` styles for our tabs +.nav-tabs-justified { + border-bottom: 0; + + > li > a { + // Override margin from .nav-tabs + margin-right: 0; + border-radius: @border-radius-base; + } + + > .active > a, + > .active > a:hover, + > .active > a:focus { + border: 1px solid @nav-tabs-justified-link-border-color; + } + + @media (min-width: @screen-sm-min) { + > li > a { + border-bottom: 1px solid @nav-tabs-justified-link-border-color; + border-radius: @border-radius-base @border-radius-base 0 0; + } + > .active > a, + > .active > a:hover, + > .active > a:focus { + border-bottom-color: @nav-tabs-justified-active-link-border-color; + } + } +} + + +// Tabbable tabs +// ------------------------- + +// Hide tabbable panes to start, show them when `.active` +.tab-content { + > .tab-pane { + display: none; + } + > .active { + display: block; + } +} + + +// Dropdowns +// ------------------------- + +// Specific dropdowns +.nav-tabs .dropdown-menu { + // make dropdown border overlap tab border + margin-top: -1px; + // Remove the top rounded corners here since there is a hard edge above the menu + .border-top-radius(0); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/normalize.less b/django_project/core/geonode_static/geonode/less/bootstrap/normalize.less new file mode 100755 index 0000000..9dddf73 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/normalize.less @@ -0,0 +1,424 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +// +// 1. Set default font family to sans-serif. +// 2. Prevent iOS and IE text size adjust after device orientation change, +// without disabling user zoom. +// + +html { + font-family: sans-serif; // 1 + -ms-text-size-adjust: 100%; // 2 + -webkit-text-size-adjust: 100%; // 2 +} + +// +// Remove default margin. +// + +body { + margin: 0; +} + +// HTML5 display definitions +// ========================================================================== + +// +// Correct `block` display not defined for any HTML5 element in IE 8/9. +// Correct `block` display not defined for `details` or `summary` in IE 10/11 +// and Firefox. +// Correct `block` display not defined for `main` in IE 11. +// + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +// +// 1. Correct `inline-block` display not defined in IE 8/9. +// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. +// + +audio, +canvas, +progress, +video { + display: inline-block; // 1 + vertical-align: baseline; // 2 +} + +// +// Prevent modern browsers from displaying `audio` without controls. +// Remove excess height in iOS 5 devices. +// + +audio:not([controls]) { + display: none; + height: 0; +} + +// +// Address `[hidden]` styling not present in IE 8/9/10. +// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. +// + +[hidden], +template { + display: none; +} + +// Links +// ========================================================================== + +// +// Remove the gray background color from active links in IE 10. +// + +a { + background-color: transparent; +} + +// +// Improve readability of focused elements when they are also in an +// active/hover state. +// + +a:active, +a:hover { + outline: 0; +} + +// Text-level semantics +// ========================================================================== + +// +// Address styling not present in IE 8/9/10/11, Safari, and Chrome. +// + +abbr[title] { + border-bottom: 1px dotted; +} + +// +// Address style set to `bolder` in Firefox 4+, Safari, and Chrome. +// + +b, +strong { + font-weight: bold; +} + +// +// Address styling not present in Safari and Chrome. +// + +dfn { + font-style: italic; +} + +// +// Address variable `h1` font-size and margin within `section` and `article` +// contexts in Firefox 4+, Safari, and Chrome. +// + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +// +// Address styling not present in IE 8/9. +// + +mark { + background: #ff0; + color: #000; +} + +// +// Address inconsistent and variable font size in all browsers. +// + +small { + font-size: 80%; +} + +// +// Prevent `sub` and `sup` affecting `line-height` in all browsers. +// + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +// Embedded content +// ========================================================================== + +// +// Remove border when inside `a` element in IE 8/9/10. +// + +img { + border: 0; +} + +// +// Correct overflow not hidden in IE 9/10/11. +// + +svg:not(:root) { + overflow: hidden; +} + +// Grouping content +// ========================================================================== + +// +// Address margin not present in IE 8/9 and Safari. +// + +figure { + margin: 1em 40px; +} + +// +// Address differences between Firefox and other browsers. +// + +hr { + box-sizing: content-box; + height: 0; +} + +// +// Contain overflow in all browsers. +// + +pre { + overflow: auto; +} + +// +// Address odd `em`-unit font size rendering in all browsers. +// + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +// Forms +// ========================================================================== + +// +// Known limitation: by default, Chrome and Safari on OS X allow very limited +// styling of `select`, unless a `border` property is set. +// + +// +// 1. Correct color not being inherited. +// Known issue: affects color of disabled elements. +// 2. Correct font properties not being inherited. +// 3. Address margins set differently in Firefox 4+, Safari, and Chrome. +// + +button, +input, +optgroup, +select, +textarea { + color: inherit; // 1 + font: inherit; // 2 + margin: 0; // 3 +} + +// +// Address `overflow` set to `hidden` in IE 8/9/10/11. +// + +button { + overflow: visible; +} + +// +// Address inconsistent `text-transform` inheritance for `button` and `select`. +// All other form control elements do not inherit `text-transform` values. +// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. +// Correct `select` style inheritance in Firefox. +// + +button, +select { + text-transform: none; +} + +// +// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` +// and `video` controls. +// 2. Correct inability to style clickable `input` types in iOS. +// 3. Improve usability and consistency of cursor style between image-type +// `input` and others. +// + +button, +html input[type="button"], // 1 +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; // 2 + cursor: pointer; // 3 +} + +// +// Re-set default cursor for disabled elements. +// + +button[disabled], +html input[disabled] { + cursor: default; +} + +// +// Remove inner padding and border in Firefox 4+. +// + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +// +// Address Firefox 4+ setting `line-height` on `input` using `!important` in +// the UA stylesheet. +// + +input { + line-height: normal; +} + +// +// It's recommended that you don't attempt to style these elements. +// Firefox's implementation doesn't respect box-sizing, padding, or width. +// +// 1. Address box sizing set to `content-box` in IE 8/9/10. +// 2. Remove excess padding in IE 8/9/10. +// + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; // 1 + padding: 0; // 2 +} + +// +// Fix the cursor style for Chrome's increment/decrement buttons. For certain +// `font-size` values of the `input`, it causes the cursor style of the +// decrement button to change from `default` to `text`. +// + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +// +// 1. Address `appearance` set to `searchfield` in Safari and Chrome. +// 2. Address `box-sizing` set to `border-box` in Safari and Chrome. +// + +input[type="search"] { + -webkit-appearance: textfield; // 1 + box-sizing: content-box; //2 +} + +// +// Remove inner padding and search cancel button in Safari and Chrome on OS X. +// Safari (but not Chrome) clips the cancel button when the search input has +// padding (and `textfield` appearance). +// + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +// +// Define consistent border, margin, and padding. +// + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +// +// 1. Correct `color` not being inherited in IE 8/9/10/11. +// 2. Remove padding so people aren't caught out if they zero out fieldsets. +// + +legend { + border: 0; // 1 + padding: 0; // 2 +} + +// +// Remove default vertical scrollbar in IE 8/9/10/11. +// + +textarea { + overflow: auto; +} + +// +// Don't inherit the `font-weight` (applied by a rule above). +// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. +// + +optgroup { + font-weight: bold; +} + +// Tables +// ========================================================================== + +// +// Remove most spacing between table cells. +// + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/pager.less b/django_project/core/geonode_static/geonode/less/bootstrap/pager.less new file mode 100755 index 0000000..41abaaa --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/pager.less @@ -0,0 +1,54 @@ +// +// Pager pagination +// -------------------------------------------------- + + +.pager { + padding-left: 0; + margin: @line-height-computed 0; + list-style: none; + text-align: center; + &:extend(.clearfix all); + li { + display: inline; + > a, + > span { + display: inline-block; + padding: 5px 14px; + background-color: @pager-bg; + border: 1px solid @pager-border; + border-radius: @pager-border-radius; + } + + > a:hover, + > a:focus { + text-decoration: none; + background-color: @pager-hover-bg; + } + } + + .next { + > a, + > span { + float: right; + } + } + + .previous { + > a, + > span { + float: left; + } + } + + .disabled { + > a, + > a:hover, + > a:focus, + > span { + color: @pager-disabled-color; + background-color: @pager-bg; + cursor: @cursor-disabled; + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/pagination.less b/django_project/core/geonode_static/geonode/less/bootstrap/pagination.less new file mode 100755 index 0000000..31f77aa --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/pagination.less @@ -0,0 +1,89 @@ +// +// Pagination (multiple pages) +// -------------------------------------------------- +.pagination { + display: inline-block; + padding-left: 0; + margin: @line-height-computed 0; + border-radius: @border-radius-base; + + > li { + display: inline; // Remove list-style and block-level defaults + > a, + > span { + position: relative; + float: left; // Collapse white-space + padding: @padding-base-vertical @padding-base-horizontal; + line-height: @line-height-base; + text-decoration: none; + color: @pagination-color; + background-color: @pagination-bg; + border: 1px solid @pagination-border; + margin-left: -1px; + } + &:first-child { + > a, + > span { + margin-left: 0; + .border-left-radius(@border-radius-base); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-base); + } + } + } + + > li > a, + > li > span { + &:hover, + &:focus { + z-index: 2; + color: @pagination-hover-color; + background-color: @pagination-hover-bg; + border-color: @pagination-hover-border; + } + } + + > .active > a, + > .active > span { + &, + &:hover, + &:focus { + z-index: 3; + color: @pagination-active-color; + background-color: @pagination-active-bg; + border-color: @pagination-active-border; + cursor: default; + } + } + + > .disabled { + > span, + > span:hover, + > span:focus, + > a, + > a:hover, + > a:focus { + color: @pagination-disabled-color; + background-color: @pagination-disabled-bg; + border-color: @pagination-disabled-border; + cursor: @cursor-disabled; + } + } +} + +// Sizing +// -------------------------------------------------- + +// Large +.pagination-lg { + .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); +} + +// Small +.pagination-sm { + .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/panels.less b/django_project/core/geonode_static/geonode/less/bootstrap/panels.less new file mode 100755 index 0000000..65aa3a8 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/panels.less @@ -0,0 +1,271 @@ +// +// Panels +// -------------------------------------------------- + + +// Base class +.panel { + margin-bottom: @line-height-computed; + background-color: @panel-bg; + border: 1px solid transparent; + border-radius: @panel-border-radius; + .box-shadow(0 1px 1px rgba(0,0,0,.05)); +} + +// Panel contents +.panel-body { + padding: @panel-body-padding; + &:extend(.clearfix all); +} + +// Optional heading +.panel-heading { + padding: @panel-heading-padding; + border-bottom: 1px solid transparent; + .border-top-radius((@panel-border-radius - 1)); + + > .dropdown .dropdown-toggle { + color: inherit; + } +} + +// Within heading, strip any `h*` tag of its default margins for spacing. +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: ceil((@font-size-base * 1.125)); + color: inherit; + + > a, + > small, + > .small, + > small > a, + > .small > a { + color: inherit; + } +} + +// Optional footer (stays gray in every modifier class) +.panel-footer { + padding: @panel-footer-padding; + background-color: @panel-footer-bg; + border-top: 1px solid @panel-inner-border; + .border-bottom-radius((@panel-border-radius - 1)); +} + + +// List groups in panels +// +// By default, space out list group content from panel headings to account for +// any kind of custom content between the two. + +.panel { + > .list-group, + > .panel-collapse > .list-group { + margin-bottom: 0; + + .list-group-item { + border-width: 1px 0; + border-radius: 0; + } + + // Add border top radius for first one + &:first-child { + .list-group-item:first-child { + border-top: 0; + .border-top-radius((@panel-border-radius - 1)); + } + } + + // Add border bottom radius for last one + &:last-child { + .list-group-item:last-child { + border-bottom: 0; + .border-bottom-radius((@panel-border-radius - 1)); + } + } + } + > .panel-heading + .panel-collapse > .list-group { + .list-group-item:first-child { + .border-top-radius(0); + } + } +} +// Collapse space between when there's no additional content. +.panel-heading + .list-group { + .list-group-item:first-child { + border-top-width: 0; + } +} +.list-group + .panel-footer { + border-top-width: 0; +} + +// Tables in panels +// +// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and +// watch it go full width. + +.panel { + > .table, + > .table-responsive > .table, + > .panel-collapse > .table { + margin-bottom: 0; + + caption { + padding-left: @panel-body-padding; + padding-right: @panel-body-padding; + } + } + // Add border top radius for first one + > .table:first-child, + > .table-responsive:first-child > .table:first-child { + .border-top-radius((@panel-border-radius - 1)); + + > thead:first-child, + > tbody:first-child { + > tr:first-child { + border-top-left-radius: (@panel-border-radius - 1); + border-top-right-radius: (@panel-border-radius - 1); + + td:first-child, + th:first-child { + border-top-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-top-right-radius: (@panel-border-radius - 1); + } + } + } + } + // Add border bottom radius for last one + > .table:last-child, + > .table-responsive:last-child > .table:last-child { + .border-bottom-radius((@panel-border-radius - 1)); + + > tbody:last-child, + > tfoot:last-child { + > tr:last-child { + border-bottom-left-radius: (@panel-border-radius - 1); + border-bottom-right-radius: (@panel-border-radius - 1); + + td:first-child, + th:first-child { + border-bottom-left-radius: (@panel-border-radius - 1); + } + td:last-child, + th:last-child { + border-bottom-right-radius: (@panel-border-radius - 1); + } + } + } + } + > .panel-body + .table, + > .panel-body + .table-responsive, + > .table + .panel-body, + > .table-responsive + .panel-body { + border-top: 1px solid @table-border-color; + } + > .table > tbody:first-child > tr:first-child th, + > .table > tbody:first-child > tr:first-child td { + border-top: 0; + } + > .table-bordered, + > .table-responsive > .table-bordered { + border: 0; + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + > thead, + > tbody { + > tr:first-child { + > td, + > th { + border-bottom: 0; + } + } + } + > tbody, + > tfoot { + > tr:last-child { + > td, + > th { + border-bottom: 0; + } + } + } + } + > .table-responsive { + border: 0; + margin-bottom: 0; + } +} + + +// Collapsible panels (aka, accordion) +// +// Wrap a series of panels in `.panel-group` to turn them into an accordion with +// the help of our collapse JavaScript plugin. + +.panel-group { + margin-bottom: @line-height-computed; + + // Tighten up margin so it's only between panels + .panel { + margin-bottom: 0; + border-radius: @panel-border-radius; + + + .panel { + margin-top: 5px; + } + } + + .panel-heading { + border-bottom: 0; + + + .panel-collapse > .panel-body, + + .panel-collapse > .list-group { + border-top: 1px solid @panel-inner-border; + } + } + + .panel-footer { + border-top: 0; + + .panel-collapse .panel-body { + border-bottom: 1px solid @panel-inner-border; + } + } +} + + +// Contextual variations +.panel-default { + .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border); +} +.panel-primary { + .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border); +} +.panel-success { + .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border); +} +.panel-info { + .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border); +} +.panel-warning { + .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border); +} +.panel-danger { + .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/popovers.less b/django_project/core/geonode_static/geonode/less/bootstrap/popovers.less new file mode 100755 index 0000000..3a62a64 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/popovers.less @@ -0,0 +1,131 @@ +// +// Popovers +// -------------------------------------------------- + + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: @zindex-popover; + display: none; + max-width: @popover-max-width; + padding: 1px; + // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element. + // So reset our font and text properties to avoid inheriting weird values. + .reset-text(); + font-size: @font-size-base; + + background-color: @popover-bg; + background-clip: padding-box; + border: 1px solid @popover-fallback-border-color; + border: 1px solid @popover-border-color; + border-radius: @border-radius-large; + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + + // Offset the popover to account for the popover arrow + &.top { margin-top: -@popover-arrow-width; } + &.right { margin-left: @popover-arrow-width; } + &.bottom { margin-top: @popover-arrow-width; } + &.left { margin-left: -@popover-arrow-width; } +} + +.popover-title { + margin: 0; // reset heading margin + padding: 8px 14px; + font-size: @font-size-base; + background-color: @popover-title-bg; + border-bottom: 1px solid darken(@popover-title-bg, 5%); + border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +// Arrows +// +// .arrow is outer, .arrow:after is inner + +.popover > .arrow { + &, + &:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } +} +.popover > .arrow { + border-width: @popover-arrow-outer-width; +} +.popover > .arrow:after { + border-width: @popover-arrow-width; + content: ""; +} + +.popover { + &.top > .arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-bottom-width: 0; + border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-top-color: @popover-arrow-outer-color; + bottom: -@popover-arrow-outer-width; + &:after { + content: " "; + bottom: 1px; + margin-left: -@popover-arrow-width; + border-bottom-width: 0; + border-top-color: @popover-arrow-color; + } + } + &.right > .arrow { + top: 50%; + left: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; + border-left-width: 0; + border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-right-color: @popover-arrow-outer-color; + &:after { + content: " "; + left: 1px; + bottom: -@popover-arrow-width; + border-left-width: 0; + border-right-color: @popover-arrow-color; + } + } + &.bottom > .arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-top-width: 0; + border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-bottom-color: @popover-arrow-outer-color; + top: -@popover-arrow-outer-width; + &:after { + content: " "; + top: 1px; + margin-left: -@popover-arrow-width; + border-top-width: 0; + border-bottom-color: @popover-arrow-color; + } + } + + &.left > .arrow { + top: 50%; + right: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; + border-right-width: 0; + border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback + border-left-color: @popover-arrow-outer-color; + &:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: @popover-arrow-color; + bottom: -@popover-arrow-width; + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/print.less b/django_project/core/geonode_static/geonode/less/bootstrap/print.less new file mode 100755 index 0000000..66e54ab --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/print.less @@ -0,0 +1,101 @@ +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ + +// ========================================================================== +// Print styles. +// Inlined to avoid the additional HTTP request: h5bp.com/r +// ========================================================================== + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; // Black prints faster: h5bp.com/s + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + // Don't show links that are fragment identifiers, + // or use the `javascript:` pseudo protocol + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; // h5bp.com/t + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + // Bootstrap specific changes start + + // Bootstrap components + .navbar { + display: none; + } + .btn, + .dropup > .btn { + > .caret { + border-top-color: #000 !important; + } + } + .label { + border: 1px solid #000; + } + + .table { + border-collapse: collapse !important; + + td, + th { + background-color: #fff !important; + } + } + .table-bordered { + th, + td { + border: 1px solid #ddd !important; + } + } + + // Bootstrap specific changes end +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/progress-bars.less b/django_project/core/geonode_static/geonode/less/bootstrap/progress-bars.less new file mode 100755 index 0000000..8868a1f --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/progress-bars.less @@ -0,0 +1,87 @@ +// +// Progress bars +// -------------------------------------------------- + + +// Bar animations +// ------------------------- + +// WebKit +@-webkit-keyframes progress-bar-stripes { + from { background-position: 40px 0; } + to { background-position: 0 0; } +} + +// Spec and IE10+ +@keyframes progress-bar-stripes { + from { background-position: 40px 0; } + to { background-position: 0 0; } +} + + +// Bar itself +// ------------------------- + +// Outer container +.progress { + overflow: hidden; + height: @line-height-computed; + margin-bottom: @line-height-computed; + background-color: @progress-bg; + border-radius: @progress-border-radius; + .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); +} + +// Bar of progress +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: @font-size-small; + line-height: @line-height-computed; + color: @progress-bar-color; + text-align: center; + background-color: @progress-bar-bg; + .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); + .transition(width .6s ease); +} + +// Striped bars +// +// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the +// `.progress-bar-striped` class, which you just add to an existing +// `.progress-bar`. +.progress-striped .progress-bar, +.progress-bar-striped { + #gradient > .striped(); + background-size: 40px 40px; +} + +// Call animation for the active one +// +// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the +// `.progress-bar.active` approach. +.progress.active .progress-bar, +.progress-bar.active { + .animation(progress-bar-stripes 2s linear infinite); +} + + +// Variations +// ------------------------- + +.progress-bar-success { + .progress-bar-variant(@progress-bar-success-bg); +} + +.progress-bar-info { + .progress-bar-variant(@progress-bar-info-bg); +} + +.progress-bar-warning { + .progress-bar-variant(@progress-bar-warning-bg); +} + +.progress-bar-danger { + .progress-bar-variant(@progress-bar-danger-bg); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/responsive-embed.less b/django_project/core/geonode_static/geonode/less/bootstrap/responsive-embed.less new file mode 100755 index 0000000..080a511 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/responsive-embed.less @@ -0,0 +1,35 @@ +// Embeds responsive +// +// Credit: Nicolas Gallagher and SUIT CSS. + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; + + .embed-responsive-item, + iframe, + embed, + object, + video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; + } +} + +// Modifier class for 16:9 aspect ratio +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +// Modifier class for 4:3 aspect ratio +.embed-responsive-4by3 { + padding-bottom: 75%; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/responsive-utilities.less b/django_project/core/geonode_static/geonode/less/bootstrap/responsive-utilities.less new file mode 100755 index 0000000..b1db31d --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/responsive-utilities.less @@ -0,0 +1,194 @@ +// +// Responsive: Utility classes +// -------------------------------------------------- + + +// IE10 in Windows (Phone) 8 +// +// Support for responsive views via media queries is kind of borked in IE10, for +// Surface/desktop in split view and for Windows Phone 8. This particular fix +// must be accompanied by a snippet of JavaScript to sniff the user agent and +// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at +// our Getting Started page for more information on this bug. +// +// For more information, see the following: +// +// Issue: https://github.com/twbs/bootstrap/issues/10497 +// Docs: http://getbootstrap.com/getting-started/#support-ie10-width +// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ +// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ + +@-ms-viewport { + width: device-width; +} + + +// Visibility utilities +// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0 +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + .responsive-invisibility(); +} + +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +.visible-xs { + @media (max-width: @screen-xs-max) { + .responsive-visibility(); + } +} +.visible-xs-block { + @media (max-width: @screen-xs-max) { + display: block !important; + } +} +.visible-xs-inline { + @media (max-width: @screen-xs-max) { + display: inline !important; + } +} +.visible-xs-inline-block { + @media (max-width: @screen-xs-max) { + display: inline-block !important; + } +} + +.visible-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-visibility(); + } +} +.visible-sm-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: block !important; + } +} +.visible-sm-inline { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline !important; + } +} +.visible-sm-inline-block { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + display: inline-block !important; + } +} + +.visible-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-visibility(); + } +} +.visible-md-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: block !important; + } +} +.visible-md-inline { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline !important; + } +} +.visible-md-inline-block { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + display: inline-block !important; + } +} + +.visible-lg { + @media (min-width: @screen-lg-min) { + .responsive-visibility(); + } +} +.visible-lg-block { + @media (min-width: @screen-lg-min) { + display: block !important; + } +} +.visible-lg-inline { + @media (min-width: @screen-lg-min) { + display: inline !important; + } +} +.visible-lg-inline-block { + @media (min-width: @screen-lg-min) { + display: inline-block !important; + } +} + +.hidden-xs { + @media (max-width: @screen-xs-max) { + .responsive-invisibility(); + } +} +.hidden-sm { + @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { + .responsive-invisibility(); + } +} +.hidden-md { + @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { + .responsive-invisibility(); + } +} +.hidden-lg { + @media (min-width: @screen-lg-min) { + .responsive-invisibility(); + } +} + + +// Print utilities +// +// Media queries are placed on the inside to be mixin-friendly. + +// Note: Deprecated .visible-print as of v3.2.0 +.visible-print { + .responsive-invisibility(); + + @media print { + .responsive-visibility(); + } +} +.visible-print-block { + display: none !important; + + @media print { + display: block !important; + } +} +.visible-print-inline { + display: none !important; + + @media print { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; + + @media print { + display: inline-block !important; + } +} + +.hidden-print { + @media print { + .responsive-invisibility(); + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/scaffolding.less b/django_project/core/geonode_static/geonode/less/bootstrap/scaffolding.less new file mode 100755 index 0000000..64a29c6 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/scaffolding.less @@ -0,0 +1,161 @@ +// +// Scaffolding +// -------------------------------------------------- + + +// Reset the box-sizing +// +// Heads up! This reset may cause conflicts with some third-party widgets. +// For recommendations on resolving such conflicts, see +// http://getbootstrap.com/getting-started/#third-box-sizing +* { + .box-sizing(border-box); +} +*:before, +*:after { + .box-sizing(border-box); +} + + +// Body reset + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +body { + font-family: @font-family-base; + font-size: @font-size-base; + line-height: @line-height-base; + color: @text-color; + background-color: @body-bg; +} + +// Reset fonts for relevant elements +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + + +// Links + +a { + color: @link-color; + text-decoration: none; + + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: @link-hover-decoration; + } + + &:focus { + .tab-focus(); + } +} + + +// Figures +// +// We reset this here because previously Normalize had no `figure` margins. This +// ensures we don't break anyone's use of the element. + +figure { + margin: 0; +} + + +// Images + +img { + vertical-align: middle; +} + +// Responsive images (ensure images don't scale beyond their parents) +.img-responsive { + .img-responsive(); +} + +// Rounded corners +.img-rounded { + border-radius: @border-radius-large; +} + +// Image thumbnails +// +// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. +.img-thumbnail { + padding: @thumbnail-padding; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(all .2s ease-in-out); + + // Keep them at most 100% wide + .img-responsive(inline-block); +} + +// Perfect circle +.img-circle { + border-radius: 50%; // set radius in percents +} + + +// Horizontal rules + +hr { + margin-top: @line-height-computed; + margin-bottom: @line-height-computed; + border: 0; + border-top: 1px solid @hr-border; +} + + +// Only display content to screen readers +// +// See: http://a11yproject.com/posts/how-to-hide-content + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// Credit: HTML5 Boilerplate + +.sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} + + +// iOS "clickable elements" fix for role="button" +// +// Fixes "clickability" issue (and more generally, the firing of events such as focus as well) +// for traditionally non-focusable elements with role="button" +// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + +[role="button"] { + cursor: pointer; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/tables.less b/django_project/core/geonode_static/geonode/less/bootstrap/tables.less new file mode 100755 index 0000000..2242c03 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/tables.less @@ -0,0 +1,234 @@ +// +// Tables +// -------------------------------------------------- + + +table { + background-color: @table-bg; +} +caption { + padding-top: @table-cell-padding; + padding-bottom: @table-cell-padding; + color: @text-muted; + text-align: left; +} +th { + text-align: left; +} + + +// Baseline styles + +.table { + width: 100%; + max-width: 100%; + margin-bottom: @line-height-computed; + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-cell-padding; + line-height: @line-height-base; + vertical-align: top; + border-top: 1px solid @table-border-color; + } + } + } + // Bottom align for column headings + > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid @table-border-color; + } + // Remove top border from thead by default + > caption + thead, + > colgroup + thead, + > thead:first-child { + > tr:first-child { + > th, + > td { + border-top: 0; + } + } + } + // Account for multiple tbody instances + > tbody + tbody { + border-top: 2px solid @table-border-color; + } + + // Nesting + .table { + background-color: @body-bg; + } +} + + +// Condensed table w/ half padding + +.table-condensed { + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + padding: @table-condensed-cell-padding; + } + } + } +} + + +// Bordered version +// +// Add borders all around the table and between all the columns. + +.table-bordered { + border: 1px solid @table-border-color; + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border: 1px solid @table-border-color; + } + } + } + > thead > tr { + > th, + > td { + border-bottom-width: 2px; + } + } +} + + +// Zebra-striping +// +// Default zebra-stripe styles (alternating gray and transparent backgrounds) + +.table-striped { + > tbody > tr:nth-of-type(odd) { + background-color: @table-bg-accent; + } +} + + +// Hover effect +// +// Placed here since it has to come after the potential zebra striping + +.table-hover { + > tbody > tr:hover { + background-color: @table-bg-hover; + } +} + + +// Table cell sizing +// +// Reset default table behavior + +table col[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-column; +} +table { + td, + th { + &[class*="col-"] { + position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623) + float: none; + display: table-cell; + } + } +} + + +// Table backgrounds +// +// Exact selectors below required to override `.table-striped` and prevent +// inheritance to nested tables. + +// Generate the contextual variants +.table-row-variant(active; @table-bg-active); +.table-row-variant(success; @state-success-bg); +.table-row-variant(info; @state-info-bg); +.table-row-variant(warning; @state-warning-bg); +.table-row-variant(danger; @state-danger-bg); + + +// Responsive tables +// +// Wrap your tables in `.table-responsive` and we'll make them mobile friendly +// by enabling horizontal scrolling. Only applies <768px. Everything above that +// will display normally. + +.table-responsive { + overflow-x: auto; + min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837) + + @media screen and (max-width: @screen-xs-max) { + width: 100%; + margin-bottom: (@line-height-computed * 0.75); + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid @table-border-color; + + // Tighten up spacing + > .table { + margin-bottom: 0; + + // Ensure the content doesn't wrap + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + white-space: nowrap; + } + } + } + } + + // Special overrides for the bordered tables + > .table-bordered { + border: 0; + + // Nuke the appropriate borders so that the parent can handle them + > thead, + > tbody, + > tfoot { + > tr { + > th:first-child, + > td:first-child { + border-left: 0; + } + > th:last-child, + > td:last-child { + border-right: 0; + } + } + } + + // Only nuke the last row's bottom-border in `tbody` and `tfoot` since + // chances are there will be only one `tr` in a `thead` and that would + // remove the border altogether. + > tbody, + > tfoot { + > tr:last-child { + > th, + > td { + border-bottom: 0; + } + } + } + + } + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/theme.less b/django_project/core/geonode_static/geonode/less/bootstrap/theme.less new file mode 100755 index 0000000..fb61744 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/theme.less @@ -0,0 +1,291 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// +// Load core variables and mixins +// -------------------------------------------------- + +@import "variables.less"; +@import "mixins.less"; + + +// +// Buttons +// -------------------------------------------------- + +// Common styles +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0,0,0,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); + .box-shadow(@shadow); + + // Reset the shadow + &:active, + &.active { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + .box-shadow(none); + } + + .badge { + text-shadow: none; + } +} + +// Mixin for generating new styles +.btn-styles(@btn-color: #555) { + #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%)); + .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620 + background-repeat: repeat-x; + border-color: darken(@btn-color, 14%); + + &:hover, + &:focus { + background-color: darken(@btn-color, 12%); + background-position: 0 -15px; + } + + &:active, + &.active { + background-color: darken(@btn-color, 12%); + border-color: darken(@btn-color, 14%); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + background-color: darken(@btn-color, 12%); + background-image: none; + } + } +} + +// Common styles +.btn { + // Remove the gradient for the pressed/active state + &:active, + &.active { + background-image: none; + } +} + +// Apply the mixin to the buttons +.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } +.btn-primary { .btn-styles(@btn-primary-bg); } +.btn-success { .btn-styles(@btn-success-bg); } +.btn-info { .btn-styles(@btn-info-bg); } +.btn-warning { .btn-styles(@btn-warning-bg); } +.btn-danger { .btn-styles(@btn-danger-bg); } + + +// +// Images +// -------------------------------------------------- + +.thumbnail, +.img-thumbnail { + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} + + +// +// Dropdowns +// -------------------------------------------------- + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); + background-color: darken(@dropdown-link-hover-bg, 5%); +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + background-color: darken(@dropdown-link-active-bg, 5%); +} + + +// +// Navbar +// -------------------------------------------------- + +// Default navbar +.navbar-default { + #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered + border-radius: @navbar-border-radius; + @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); + .box-shadow(@shadow); + + .navbar-nav > .open > a, + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); + } +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255,255,255,.25); +} + +// Inverted navbar +.navbar-inverse { + #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg); + .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257 + border-radius: @navbar-border-radius; + .navbar-nav > .open > a, + .navbar-nav > .active > a { + #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%)); + .box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); + } + + .navbar-brand, + .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } +} + +// Undo rounded corners in static and fixed navbars +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} + +// Fix active state of dropdown items in collapsed mode +@media (max-width: @grid-float-breakpoint-max) { + .navbar .navbar-nav .open .dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: #fff; + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + } + } +} + + +// +// Alerts +// -------------------------------------------------- + +// Common styles +.alert { + text-shadow: 0 1px 0 rgba(255,255,255,.2); + @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); + .box-shadow(@shadow); +} + +// Mixin for generating new styles +.alert-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%)); + border-color: darken(@color, 15%); +} + +// Apply the mixin to the alerts +.alert-success { .alert-styles(@alert-success-bg); } +.alert-info { .alert-styles(@alert-info-bg); } +.alert-warning { .alert-styles(@alert-warning-bg); } +.alert-danger { .alert-styles(@alert-danger-bg); } + + +// +// Progress bars +// -------------------------------------------------- + +// Give the progress background some depth +.progress { + #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg) +} + +// Mixin for generating new styles +.progress-bar-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%)); +} + +// Apply the mixin to the progress bars +.progress-bar { .progress-bar-styles(@progress-bar-bg); } +.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); } +.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); } +.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); } +.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); } + +// Reset the striped class because our mixins don't do multiple gradients and +// the above custom styles override the new `.progress-bar-striped` in v3.2.0. +.progress-bar-striped { + #gradient > .striped(); +} + + +// +// List groups +// -------------------------------------------------- + +.list-group { + border-radius: @border-radius-base; + .box-shadow(0 1px 2px rgba(0,0,0,.075)); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%); + #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%)); + border-color: darken(@list-group-active-border, 7.5%); + + .badge { + text-shadow: none; + } +} + + +// +// Panels +// -------------------------------------------------- + +// Common styles +.panel { + .box-shadow(0 1px 2px rgba(0,0,0,.05)); +} + +// Mixin for generating new styles +.panel-heading-styles(@color) { + #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%)); +} + +// Apply the mixin to the panel headings only +.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); } +.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); } +.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); } +.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); } +.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); } +.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); } + + +// +// Wells +// -------------------------------------------------- + +.well { + #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg); + border-color: darken(@well-bg, 10%); + @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); + .box-shadow(@shadow); +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/thumbnails.less b/django_project/core/geonode_static/geonode/less/bootstrap/thumbnails.less new file mode 100755 index 0000000..0713e67 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/thumbnails.less @@ -0,0 +1,36 @@ +// +// Thumbnails +// -------------------------------------------------- + + +// Mixin and adjust the regular image class +.thumbnail { + display: block; + padding: @thumbnail-padding; + margin-bottom: @line-height-computed; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(border .2s ease-in-out); + + > img, + a > img { + &:extend(.img-responsive); + margin-left: auto; + margin-right: auto; + } + + // Add a hover state for linked versions only + a&:hover, + a&:focus, + a&.active { + border-color: @link-color; + } + + // Image captions + .caption { + padding: @thumbnail-caption-padding; + color: @thumbnail-caption-color; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/tooltip.less b/django_project/core/geonode_static/geonode/less/bootstrap/tooltip.less new file mode 100755 index 0000000..b48d63e --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/tooltip.less @@ -0,0 +1,101 @@ +// +// Tooltips +// -------------------------------------------------- + + +// Base class +.tooltip { + position: absolute; + z-index: @zindex-tooltip; + display: block; + // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. + // So reset our font and text properties to avoid inheriting weird values. + .reset-text(); + font-size: @font-size-small; + + .opacity(0); + + &.in { .opacity(@tooltip-opacity); } + &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } + &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } + &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } + &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } +} + +// Wrapper for the tooltip content +.tooltip-inner { + max-width: @tooltip-max-width; + padding: 3px 8px; + color: @tooltip-color; + text-align: center; + background-color: @tooltip-bg; + border-radius: @border-radius-base; +} + +// Arrows +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1 +.tooltip { + &.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.top-left .tooltip-arrow { + bottom: 0; + right: @tooltip-arrow-width; + margin-bottom: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.top-right .tooltip-arrow { + bottom: 0; + left: @tooltip-arrow-width; + margin-bottom: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } + &.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; + border-right-color: @tooltip-arrow-color; + } + &.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; + border-left-color: @tooltip-arrow-color; + } + &.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } + &.bottom-left .tooltip-arrow { + top: 0; + right: @tooltip-arrow-width; + margin-top: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } + &.bottom-right .tooltip-arrow { + top: 0; + left: @tooltip-arrow-width; + margin-top: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; + } +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/type.less b/django_project/core/geonode_static/geonode/less/bootstrap/type.less new file mode 100755 index 0000000..0d4fee4 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/type.less @@ -0,0 +1,302 @@ +// +// Typography +// -------------------------------------------------- + + +// Headings +// ------------------------- + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: @headings-font-family; + font-weight: @headings-font-weight; + line-height: @headings-line-height; + color: @headings-color; + + small, + .small { + font-weight: normal; + line-height: 1; + color: @headings-small-color; + } +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: @line-height-computed; + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 65%; + } +} +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: (@line-height-computed / 2); + margin-bottom: (@line-height-computed / 2); + + small, + .small { + font-size: 75%; + } +} + +h1, .h1 { font-size: @font-size-h1; } +h2, .h2 { font-size: @font-size-h2; } +h3, .h3 { font-size: @font-size-h3; } +h4, .h4 { font-size: @font-size-h4; } +h5, .h5 { font-size: @font-size-h5; } +h6, .h6 { font-size: @font-size-h6; } + + +// Body text +// ------------------------- + +p { + margin: 0 0 (@line-height-computed / 2); +} + +.lead { + margin-bottom: @line-height-computed; + font-size: floor((@font-size-base * 1.15)); + font-weight: 300; + line-height: 1.4; + + @media (min-width: @screen-sm-min) { + font-size: (@font-size-base * 1.5); + } +} + + +// Emphasis & misc +// ------------------------- + +// Ex: (12px small font / 14px base font) * 100% = about 85% +small, +.small { + font-size: floor((100% * @font-size-small / @font-size-base)); +} + +mark, +.mark { + background-color: @state-warning-bg; + padding: .2em; +} + +// Alignment +.text-left { text-align: left; } +.text-right { text-align: right; } +.text-center { text-align: center; } +.text-justify { text-align: justify; } +.text-nowrap { white-space: nowrap; } + +// Transformation +.text-lowercase { text-transform: lowercase; } +.text-uppercase { text-transform: uppercase; } +.text-capitalize { text-transform: capitalize; } + +// Contextual colors +.text-muted { + color: @text-muted; +} +.text-primary { + .text-emphasis-variant(@brand-primary); +} +.text-success { + .text-emphasis-variant(@state-success-text); +} +.text-info { + .text-emphasis-variant(@state-info-text); +} +.text-warning { + .text-emphasis-variant(@state-warning-text); +} +.text-danger { + .text-emphasis-variant(@state-danger-text); +} + +// Contextual backgrounds +// For now we'll leave these alongside the text classes until v4 when we can +// safely shift things around (per SemVer rules). +.bg-primary { + // Given the contrast here, this is the only class to have its color inverted + // automatically. + color: #fff; + .bg-variant(@brand-primary); +} +.bg-success { + .bg-variant(@state-success-bg); +} +.bg-info { + .bg-variant(@state-info-bg); +} +.bg-warning { + .bg-variant(@state-warning-bg); +} +.bg-danger { + .bg-variant(@state-danger-bg); +} + + +// Page header +// ------------------------- + +.page-header { + padding-bottom: ((@line-height-computed / 2) - 1); + margin: (@line-height-computed * 2) 0 @line-height-computed; + border-bottom: 1px solid @page-header-border-color; +} + + +// Lists +// ------------------------- + +// Unordered and Ordered lists +ul, +ol { + margin-top: 0; + margin-bottom: (@line-height-computed / 2); + ul, + ol { + margin-bottom: 0; + } +} + +// List options + +// Unstyled keeps list items block level, just removes default browser padding and list-style +.list-unstyled { + padding-left: 0; + list-style: none; +} + +// Inline turns list items into inline-block +.list-inline { + .list-unstyled(); + margin-left: -5px; + + > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; + } +} + +// Description Lists +dl { + margin-top: 0; // Remove browser default + margin-bottom: @line-height-computed; +} +dt, +dd { + line-height: @line-height-base; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; // Undo browser default +} + +// Horizontal description lists +// +// Defaults to being stacked without any of the below styles applied, until the +// grid breakpoint is reached (default of ~768px). + +.dl-horizontal { + dd { + &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present + } + + @media (min-width: @dl-horizontal-breakpoint) { + dt { + float: left; + width: (@dl-horizontal-offset - 20); + clear: left; + text-align: right; + .text-overflow(); + } + dd { + margin-left: @dl-horizontal-offset; + } + } +} + + +// Misc +// ------------------------- + +// Abbreviations and acronyms +abbr[title], +// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted @abbr-border-color; +} +.initialism { + font-size: 90%; + .text-uppercase(); +} + +// Blockquotes +blockquote { + padding: (@line-height-computed / 2) @line-height-computed; + margin: 0 0 @line-height-computed; + font-size: @blockquote-font-size; + border-left: 5px solid @blockquote-border-color; + + p, + ul, + ol { + &:last-child { + margin-bottom: 0; + } + } + + // Note: Deprecated small and .small as of v3.1.0 + // Context: https://github.com/twbs/bootstrap/issues/11660 + footer, + small, + .small { + display: block; + font-size: 80%; // back to default font-size + line-height: @line-height-base; + color: @blockquote-small-color; + + &:before { + content: '\2014 \00A0'; // em dash, nbsp + } + } +} + +// Opposite alignment of blockquote +// +// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid @blockquote-border-color; + border-left: 0; + text-align: right; + + // Account for citation + footer, + small, + .small { + &:before { content: ''; } + &:after { + content: '\00A0 \2014'; // nbsp, em dash + } + } +} + +// Addresses +address { + margin-bottom: @line-height-computed; + font-style: normal; + line-height: @line-height-base; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/utilities.less b/django_project/core/geonode_static/geonode/less/bootstrap/utilities.less new file mode 100755 index 0000000..7a8ca27 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/utilities.less @@ -0,0 +1,55 @@ +// +// Utility classes +// -------------------------------------------------- + + +// Floats +// ------------------------- + +.clearfix { + .clearfix(); +} +.center-block { + .center-block(); +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} + + +// Toggling content +// ------------------------- + +// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + .text-hide(); +} + + +// Hide from screenreaders and browsers +// +// Credit: HTML5 Boilerplate + +.hidden { + display: none !important; +} + + +// For Affix plugin +// ------------------------- + +.affix { + position: fixed; +} diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/variables.less b/django_project/core/geonode_static/geonode/less/bootstrap/variables.less new file mode 100755 index 0000000..03b5498 --- /dev/null +++ b/django_project/core/geonode_static/geonode/less/bootstrap/variables.less @@ -0,0 +1,869 @@ +// +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +@gray-base: #000; +@gray-darker: lighten(@gray-base, 13.5%); // #222 +@gray-dark: lighten(@gray-base, 20%); // #333 +@gray: lighten(@gray-base, 33.5%); // #555 +@gray-light: lighten(@gray-base, 46.7%); // #777 +@gray-lighter: lighten(@gray-base, 93.5%); // #eee + +@brand-primary: darken(#428bca, 6.5%); // #337ab7 +@brand-success: #5cb85c; +@brand-info: #5bc0de; +@brand-warning: #f0ad4e; +@brand-danger: #d9534f; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +@body-bg: #fff; +//** Global text color on ``. +@text-color: @gray-dark; + +//** Global textual link color. +@link-color: @brand-primary; +//** Link hover color set via `darken()` function. +@link-hover-color: darken(@link-color, 15%); +//** Link hover decoration. +@link-hover-decoration: underline; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-serif: Georgia, "Times New Roman", Times, serif; +//** Default monospace fonts for ``, ``, and `
    `.
    +@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
    +@font-family-base:        @font-family-sans-serif;
    +
    +@font-size-base:          14px;
    +@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
    +
    +@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
    +@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
    +@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
    +@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-h5:            @font-size-base;
    +@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
    +
    +//** Unit-less `line-height` for use in components like buttons.
    +@line-height-base:        1.428571429; // 20/14
    +//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    +@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
    +
    +//** By default, this inherits from the ``.
    +@headings-font-family:    inherit;
    +@headings-font-weight:    500;
    +@headings-line-height:    1.1;
    +@headings-color:          inherit;
    +
    +
    +//== Iconography
    +//
    +//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    +
    +//** Load fonts from this directory.
    +@icon-font-path:          "../fonts/";
    +//** File name for all font files.
    +@icon-font-name:          "glyphicons-halflings-regular";
    +//** Element ID within SVG icon file.
    +@icon-font-svg-id:        "glyphicons_halflingsregular";
    +
    +
    +//== Components
    +//
    +//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    +
    +@padding-base-vertical:     6px;
    +@padding-base-horizontal:   12px;
    +
    +@padding-large-vertical:    10px;
    +@padding-large-horizontal:  16px;
    +
    +@padding-small-vertical:    5px;
    +@padding-small-horizontal:  10px;
    +
    +@padding-xs-vertical:       1px;
    +@padding-xs-horizontal:     5px;
    +
    +@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
    +@line-height-small:         1.5;
    +
    +@border-radius-base:        4px;
    +@border-radius-large:       6px;
    +@border-radius-small:       3px;
    +
    +//** Global color for active items (e.g., navs or dropdowns).
    +@component-active-color:    #fff;
    +//** Global background color for active items (e.g., navs or dropdowns).
    +@component-active-bg:       @brand-primary;
    +
    +//** Width of the `border` for generating carets that indicate dropdowns.
    +@caret-width-base:          4px;
    +//** Carets increase slightly in size for larger components.
    +@caret-width-large:         5px;
    +
    +
    +//== Tables
    +//
    +//## Customizes the `.table` component with basic values, each used across all table variations.
    +
    +//** Padding for ``s and ``s.
    +@table-cell-padding:            8px;
    +//** Padding for cells in `.table-condensed`.
    +@table-condensed-cell-padding:  5px;
    +
    +//** Default background color used for all tables.
    +@table-bg:                      transparent;
    +//** Background color used for `.table-striped`.
    +@table-bg-accent:               #f9f9f9;
    +//** Background color used for `.table-hover`.
    +@table-bg-hover:                #f5f5f5;
    +@table-bg-active:               @table-bg-hover;
    +
    +//** Border color for table and cell borders.
    +@table-border-color:            #ddd;
    +
    +
    +//== Buttons
    +//
    +//## For each of Bootstrap's buttons, define text, background and border color.
    +
    +@btn-font-weight:                normal;
    +
    +@btn-default-color:              #333;
    +@btn-default-bg:                 #fff;
    +@btn-default-border:             #ccc;
    +
    +@btn-primary-color:              #fff;
    +@btn-primary-bg:                 @brand-primary;
    +@btn-primary-border:             darken(@btn-primary-bg, 5%);
    +
    +@btn-success-color:              #fff;
    +@btn-success-bg:                 @brand-success;
    +@btn-success-border:             darken(@btn-success-bg, 5%);
    +
    +@btn-info-color:                 #fff;
    +@btn-info-bg:                    @brand-info;
    +@btn-info-border:                darken(@btn-info-bg, 5%);
    +
    +@btn-warning-color:              #fff;
    +@btn-warning-bg:                 @brand-warning;
    +@btn-warning-border:             darken(@btn-warning-bg, 5%);
    +
    +@btn-danger-color:               #fff;
    +@btn-danger-bg:                  @brand-danger;
    +@btn-danger-border:              darken(@btn-danger-bg, 5%);
    +
    +@btn-link-disabled-color:        @gray-light;
    +
    +// Allows for customizing button radius independently from global border radius
    +@btn-border-radius-base:         @border-radius-base;
    +@btn-border-radius-large:        @border-radius-large;
    +@btn-border-radius-small:        @border-radius-small;
    +
    +
    +//== Forms
    +//
    +//##
    +
    +//** `` background color
    +@input-bg:                       #fff;
    +//** `` background color
    +@input-bg-disabled:              @gray-lighter;
    +
    +//** Text color for ``s
    +@input-color:                    @gray;
    +//** `` border color
    +@input-border:                   #ccc;
    +
    +// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
    +//** Default `.form-control` border radius
    +// This has no effect on ``s in CSS.
    +@input-border-radius:            @border-radius-base;
    +//** Large `.form-control` border radius
    +@input-border-radius-large:      @border-radius-large;
    +//** Small `.form-control` border radius
    +@input-border-radius-small:      @border-radius-small;
    +
    +//** Border color for inputs on focus
    +@input-border-focus:             #66afe9;
    +
    +//** Placeholder text color
    +@input-color-placeholder:        #999;
    +
    +//** Default `.form-control` height
    +@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
    +//** Large `.form-control` height
    +@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
    +//** Small `.form-control` height
    +@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
    +
    +//** `.form-group` margin
    +@form-group-margin-bottom:       15px;
    +
    +@legend-color:                   @gray-dark;
    +@legend-border-color:            #e5e5e5;
    +
    +//** Background color for textual input addons
    +@input-group-addon-bg:           @gray-lighter;
    +//** Border color for textual input addons
    +@input-group-addon-border-color: @input-border;
    +
    +//** Disabled cursor for form controls and buttons.
    +@cursor-disabled:                not-allowed;
    +
    +
    +//== Dropdowns
    +//
    +//## Dropdown menu container and contents.
    +
    +//** Background for the dropdown menu.
    +@dropdown-bg:                    #fff;
    +//** Dropdown menu `border-color`.
    +@dropdown-border:                rgba(0,0,0,.15);
    +//** Dropdown menu `border-color` **for IE8**.
    +@dropdown-fallback-border:       #ccc;
    +//** Divider color for between dropdown items.
    +@dropdown-divider-bg:            #e5e5e5;
    +
    +//** Dropdown link text color.
    +@dropdown-link-color:            @gray-dark;
    +//** Hover color for dropdown links.
    +@dropdown-link-hover-color:      darken(@gray-dark, 5%);
    +//** Hover background for dropdown links.
    +@dropdown-link-hover-bg:         #f5f5f5;
    +
    +//** Active dropdown menu item text color.
    +@dropdown-link-active-color:     @component-active-color;
    +//** Active dropdown menu item background color.
    +@dropdown-link-active-bg:        @component-active-bg;
    +
    +//** Disabled dropdown menu item background color.
    +@dropdown-link-disabled-color:   @gray-light;
    +
    +//** Text color for headers within dropdown menus.
    +@dropdown-header-color:          @gray-light;
    +
    +//** Deprecated `@dropdown-caret-color` as of v3.1.0
    +@dropdown-caret-color:           #000;
    +
    +
    +//-- Z-index master list
    +//
    +// Warning: Avoid customizing these values. They're used for a bird's eye view
    +// of components dependent on the z-axis and are designed to all work together.
    +//
    +// Note: These variables are not generated into the Customizer.
    +
    +@zindex-navbar:            1000;
    +@zindex-dropdown:          1000;
    +@zindex-popover:           1060;
    +@zindex-tooltip:           1070;
    +@zindex-navbar-fixed:      1030;
    +@zindex-modal-background:  1040;
    +@zindex-modal:             1050;
    +
    +
    +//== Media queries breakpoints
    +//
    +//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    +
    +// Extra small screen / phone
    +//** Deprecated `@screen-xs` as of v3.0.1
    +@screen-xs:                  480px;
    +//** Deprecated `@screen-xs-min` as of v3.2.0
    +@screen-xs-min:              @screen-xs;
    +//** Deprecated `@screen-phone` as of v3.0.1
    +@screen-phone:               @screen-xs-min;
    +
    +// Small screen / tablet
    +//** Deprecated `@screen-sm` as of v3.0.1
    +@screen-sm:                  768px;
    +@screen-sm-min:              @screen-sm;
    +//** Deprecated `@screen-tablet` as of v3.0.1
    +@screen-tablet:              @screen-sm-min;
    +
    +// Medium screen / desktop
    +//** Deprecated `@screen-md` as of v3.0.1
    +@screen-md:                  992px;
    +@screen-md-min:              @screen-md;
    +//** Deprecated `@screen-desktop` as of v3.0.1
    +@screen-desktop:             @screen-md-min;
    +
    +// Large screen / wide desktop
    +//** Deprecated `@screen-lg` as of v3.0.1
    +@screen-lg:                  1200px;
    +@screen-lg-min:              @screen-lg;
    +//** Deprecated `@screen-lg-desktop` as of v3.0.1
    +@screen-lg-desktop:          @screen-lg-min;
    +
    +// So media queries don't overlap when required, provide a maximum
    +@screen-xs-max:              (@screen-sm-min - 1);
    +@screen-sm-max:              (@screen-md-min - 1);
    +@screen-md-max:              (@screen-lg-min - 1);
    +
    +
    +//== Grid system
    +//
    +//## Define your custom responsive grid.
    +
    +//** Number of columns in the grid.
    +@grid-columns:              12;
    +//** Padding between columns. Gets divided in half for the left and right.
    +@grid-gutter-width:         30px;
    +// Navbar collapse
    +//** Point at which the navbar becomes uncollapsed.
    +@grid-float-breakpoint:     @screen-sm-min;
    +//** Point at which the navbar begins collapsing.
    +@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
    +
    +
    +//== Container sizes
    +//
    +//## Define the maximum width of `.container` for different screen sizes.
    +
    +// Small screen / tablet
    +@container-tablet:             (720px + @grid-gutter-width);
    +//** For `@screen-sm-min` and up.
    +@container-sm:                 @container-tablet;
    +
    +// Medium screen / desktop
    +@container-desktop:            (940px + @grid-gutter-width);
    +//** For `@screen-md-min` and up.
    +@container-md:                 @container-desktop;
    +
    +// Large screen / wide desktop
    +@container-large-desktop:      (1140px + @grid-gutter-width);
    +//** For `@screen-lg-min` and up.
    +@container-lg:                 @container-large-desktop;
    +
    +
    +//== Navbar
    +//
    +//##
    +
    +// Basics of a navbar
    +@navbar-height:                    50px;
    +@navbar-margin-bottom:             @line-height-computed;
    +@navbar-border-radius:             @border-radius-base;
    +@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
    +@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
    +@navbar-collapse-max-height:       340px;
    +
    +@navbar-default-color:             #777;
    +@navbar-default-bg:                #f8f8f8;
    +@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
    +
    +// Navbar links
    +@navbar-default-link-color:                #777;
    +@navbar-default-link-hover-color:          #333;
    +@navbar-default-link-hover-bg:             transparent;
    +@navbar-default-link-active-color:         #555;
    +@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
    +@navbar-default-link-disabled-color:       #ccc;
    +@navbar-default-link-disabled-bg:          transparent;
    +
    +// Navbar brand label
    +@navbar-default-brand-color:               @navbar-default-link-color;
    +@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
    +@navbar-default-brand-hover-bg:            transparent;
    +
    +// Navbar toggle
    +@navbar-default-toggle-hover-bg:           #ddd;
    +@navbar-default-toggle-icon-bar-bg:        #888;
    +@navbar-default-toggle-border-color:       #ddd;
    +
    +
    +//=== Inverted navbar
    +// Reset inverted navbar basics
    +@navbar-inverse-color:                      lighten(@gray-light, 15%);
    +@navbar-inverse-bg:                         #222;
    +@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
    +
    +// Inverted navbar links
    +@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
    +@navbar-inverse-link-hover-color:           #fff;
    +@navbar-inverse-link-hover-bg:              transparent;
    +@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
    +@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
    +@navbar-inverse-link-disabled-color:        #444;
    +@navbar-inverse-link-disabled-bg:           transparent;
    +
    +// Inverted navbar brand label
    +@navbar-inverse-brand-color:                @navbar-inverse-link-color;
    +@navbar-inverse-brand-hover-color:          #fff;
    +@navbar-inverse-brand-hover-bg:             transparent;
    +
    +// Inverted navbar toggle
    +@navbar-inverse-toggle-hover-bg:            #333;
    +@navbar-inverse-toggle-icon-bar-bg:         #fff;
    +@navbar-inverse-toggle-border-color:        #333;
    +
    +
    +//== Navs
    +//
    +//##
    +
    +//=== Shared nav styles
    +@nav-link-padding:                          10px 15px;
    +@nav-link-hover-bg:                         @gray-lighter;
    +
    +@nav-disabled-link-color:                   @gray-light;
    +@nav-disabled-link-hover-color:             @gray-light;
    +
    +//== Tabs
    +@nav-tabs-border-color:                     #ddd;
    +
    +@nav-tabs-link-hover-border-color:          @gray-lighter;
    +
    +@nav-tabs-active-link-hover-bg:             @body-bg;
    +@nav-tabs-active-link-hover-color:          @gray;
    +@nav-tabs-active-link-hover-border-color:   #ddd;
    +
    +@nav-tabs-justified-link-border-color:            #ddd;
    +@nav-tabs-justified-active-link-border-color:     @body-bg;
    +
    +//== Pills
    +@nav-pills-border-radius:                   @border-radius-base;
    +@nav-pills-active-link-hover-bg:            @component-active-bg;
    +@nav-pills-active-link-hover-color:         @component-active-color;
    +
    +
    +//== Pagination
    +//
    +//##
    +
    +@pagination-color:                     @link-color;
    +@pagination-bg:                        #fff;
    +@pagination-border:                    #ddd;
    +
    +@pagination-hover-color:               @link-hover-color;
    +@pagination-hover-bg:                  @gray-lighter;
    +@pagination-hover-border:              #ddd;
    +
    +@pagination-active-color:              #fff;
    +@pagination-active-bg:                 @brand-primary;
    +@pagination-active-border:             @brand-primary;
    +
    +@pagination-disabled-color:            @gray-light;
    +@pagination-disabled-bg:               #fff;
    +@pagination-disabled-border:           #ddd;
    +
    +
    +//== Pager
    +//
    +//##
    +
    +@pager-bg:                             @pagination-bg;
    +@pager-border:                         @pagination-border;
    +@pager-border-radius:                  15px;
    +
    +@pager-hover-bg:                       @pagination-hover-bg;
    +
    +@pager-active-bg:                      @pagination-active-bg;
    +@pager-active-color:                   @pagination-active-color;
    +
    +@pager-disabled-color:                 @pagination-disabled-color;
    +
    +
    +//== Jumbotron
    +//
    +//##
    +
    +@jumbotron-padding:              30px;
    +@jumbotron-color:                inherit;
    +@jumbotron-bg:                   @gray-lighter;
    +@jumbotron-heading-color:        inherit;
    +@jumbotron-font-size:            ceil((@font-size-base * 1.5));
    +@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
    +
    +
    +//== Form states and alerts
    +//
    +//## Define colors for form feedback states and, by default, alerts.
    +
    +@state-success-text:             #3c763d;
    +@state-success-bg:               #dff0d8;
    +@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
    +
    +@state-info-text:                #31708f;
    +@state-info-bg:                  #d9edf7;
    +@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
    +
    +@state-warning-text:             #8a6d3b;
    +@state-warning-bg:               #fcf8e3;
    +@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
    +
    +@state-danger-text:              #a94442;
    +@state-danger-bg:                #f2dede;
    +@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
    +
    +
    +//== Tooltips
    +//
    +//##
    +
    +//** Tooltip max width
    +@tooltip-max-width:           200px;
    +//** Tooltip text color
    +@tooltip-color:               #fff;
    +//** Tooltip background color
    +@tooltip-bg:                  #000;
    +@tooltip-opacity:             .9;
    +
    +//** Tooltip arrow width
    +@tooltip-arrow-width:         5px;
    +//** Tooltip arrow color
    +@tooltip-arrow-color:         @tooltip-bg;
    +
    +
    +//== Popovers
    +//
    +//##
    +
    +//** Popover body background color
    +@popover-bg:                          #fff;
    +//** Popover maximum width
    +@popover-max-width:                   276px;
    +//** Popover border color
    +@popover-border-color:                rgba(0,0,0,.2);
    +//** Popover fallback border color
    +@popover-fallback-border-color:       #ccc;
    +
    +//** Popover title background color
    +@popover-title-bg:                    darken(@popover-bg, 3%);
    +
    +//** Popover arrow width
    +@popover-arrow-width:                 10px;
    +//** Popover arrow color
    +@popover-arrow-color:                 @popover-bg;
    +
    +//** Popover outer arrow width
    +@popover-arrow-outer-width:           (@popover-arrow-width + 1);
    +//** Popover outer arrow color
    +@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
    +//** Popover outer arrow fallback color
    +@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
    +
    +
    +//== Labels
    +//
    +//##
    +
    +//** Default label background color
    +@label-default-bg:            @gray-light;
    +//** Primary label background color
    +@label-primary-bg:            @brand-primary;
    +//** Success label background color
    +@label-success-bg:            @brand-success;
    +//** Info label background color
    +@label-info-bg:               @brand-info;
    +//** Warning label background color
    +@label-warning-bg:            @brand-warning;
    +//** Danger label background color
    +@label-danger-bg:             @brand-danger;
    +
    +//** Default label text color
    +@label-color:                 #fff;
    +//** Default text color of a linked label
    +@label-link-hover-color:      #fff;
    +
    +
    +//== Modals
    +//
    +//##
    +
    +//** Padding applied to the modal body
    +@modal-inner-padding:         15px;
    +
    +//** Padding applied to the modal title
    +@modal-title-padding:         15px;
    +//** Modal title line-height
    +@modal-title-line-height:     @line-height-base;
    +
    +//** Background color of modal content area
    +@modal-content-bg:                             #fff;
    +//** Modal content border color
    +@modal-content-border-color:                   rgba(0,0,0,.2);
    +//** Modal content border color **for IE8**
    +@modal-content-fallback-border-color:          #999;
    +
    +//** Modal backdrop background color
    +@modal-backdrop-bg:           #000;
    +//** Modal backdrop opacity
    +@modal-backdrop-opacity:      .5;
    +//** Modal header border color
    +@modal-header-border-color:   #e5e5e5;
    +//** Modal footer border color
    +@modal-footer-border-color:   @modal-header-border-color;
    +
    +@modal-lg:                    900px;
    +@modal-md:                    600px;
    +@modal-sm:                    300px;
    +
    +
    +//== Alerts
    +//
    +//## Define alert colors, border radius, and padding.
    +
    +@alert-padding:               15px;
    +@alert-border-radius:         @border-radius-base;
    +@alert-link-font-weight:      bold;
    +
    +@alert-success-bg:            @state-success-bg;
    +@alert-success-text:          @state-success-text;
    +@alert-success-border:        @state-success-border;
    +
    +@alert-info-bg:               @state-info-bg;
    +@alert-info-text:             @state-info-text;
    +@alert-info-border:           @state-info-border;
    +
    +@alert-warning-bg:            @state-warning-bg;
    +@alert-warning-text:          @state-warning-text;
    +@alert-warning-border:        @state-warning-border;
    +
    +@alert-danger-bg:             @state-danger-bg;
    +@alert-danger-text:           @state-danger-text;
    +@alert-danger-border:         @state-danger-border;
    +
    +
    +//== Progress bars
    +//
    +//##
    +
    +//** Background color of the whole progress component
    +@progress-bg:                 #f5f5f5;
    +//** Progress bar text color
    +@progress-bar-color:          #fff;
    +//** Variable for setting rounded corners on progress bar.
    +@progress-border-radius:      @border-radius-base;
    +
    +//** Default progress bar color
    +@progress-bar-bg:             @brand-primary;
    +//** Success progress bar color
    +@progress-bar-success-bg:     @brand-success;
    +//** Warning progress bar color
    +@progress-bar-warning-bg:     @brand-warning;
    +//** Danger progress bar color
    +@progress-bar-danger-bg:      @brand-danger;
    +//** Info progress bar color
    +@progress-bar-info-bg:        @brand-info;
    +
    +
    +//== List group
    +//
    +//##
    +
    +//** Background color on `.list-group-item`
    +@list-group-bg:                 #fff;
    +//** `.list-group-item` border color
    +@list-group-border:             #ddd;
    +//** List group border radius
    +@list-group-border-radius:      @border-radius-base;
    +
    +//** Background color of single list items on hover
    +@list-group-hover-bg:           #f5f5f5;
    +//** Text color of active list items
    +@list-group-active-color:       @component-active-color;
    +//** Background color of active list items
    +@list-group-active-bg:          @component-active-bg;
    +//** Border color of active list elements
    +@list-group-active-border:      @list-group-active-bg;
    +//** Text color for content within active list items
    +@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
    +
    +//** Text color of disabled list items
    +@list-group-disabled-color:      @gray-light;
    +//** Background color of disabled list items
    +@list-group-disabled-bg:         @gray-lighter;
    +//** Text color for content within disabled list items
    +@list-group-disabled-text-color: @list-group-disabled-color;
    +
    +@list-group-link-color:         #555;
    +@list-group-link-hover-color:   @list-group-link-color;
    +@list-group-link-heading-color: #333;
    +
    +
    +//== Panels
    +//
    +//##
    +
    +@panel-bg:                    #fff;
    +@panel-body-padding:          15px;
    +@panel-heading-padding:       10px 15px;
    +@panel-footer-padding:        @panel-heading-padding;
    +@panel-border-radius:         @border-radius-base;
    +
    +//** Border color for elements within panels
    +@panel-inner-border:          #ddd;
    +@panel-footer-bg:             #f5f5f5;
    +
    +@panel-default-text:          @gray-dark;
    +@panel-default-border:        #ddd;
    +@panel-default-heading-bg:    #f5f5f5;
    +
    +@panel-primary-text:          #fff;
    +@panel-primary-border:        @brand-primary;
    +@panel-primary-heading-bg:    @brand-primary;
    +
    +@panel-success-text:          @state-success-text;
    +@panel-success-border:        @state-success-border;
    +@panel-success-heading-bg:    @state-success-bg;
    +
    +@panel-info-text:             @state-info-text;
    +@panel-info-border:           @state-info-border;
    +@panel-info-heading-bg:       @state-info-bg;
    +
    +@panel-warning-text:          @state-warning-text;
    +@panel-warning-border:        @state-warning-border;
    +@panel-warning-heading-bg:    @state-warning-bg;
    +
    +@panel-danger-text:           @state-danger-text;
    +@panel-danger-border:         @state-danger-border;
    +@panel-danger-heading-bg:     @state-danger-bg;
    +
    +
    +//== Thumbnails
    +//
    +//##
    +
    +//** Padding around the thumbnail image
    +@thumbnail-padding:           4px;
    +//** Thumbnail background color
    +@thumbnail-bg:                @body-bg;
    +//** Thumbnail border color
    +@thumbnail-border:            #ddd;
    +//** Thumbnail border radius
    +@thumbnail-border-radius:     @border-radius-base;
    +
    +//** Custom text color for thumbnail captions
    +@thumbnail-caption-color:     @text-color;
    +//** Padding around the thumbnail caption
    +@thumbnail-caption-padding:   9px;
    +
    +
    +//== Wells
    +//
    +//##
    +
    +@well-bg:                     #f5f5f5;
    +@well-border:                 darken(@well-bg, 7%);
    +
    +
    +//== Badges
    +//
    +//##
    +
    +@badge-color:                 #fff;
    +//** Linked badge text color on hover
    +@badge-link-hover-color:      #fff;
    +@badge-bg:                    @gray-light;
    +
    +//** Badge text color in active nav link
    +@badge-active-color:          @link-color;
    +//** Badge background color in active nav link
    +@badge-active-bg:             #fff;
    +
    +@badge-font-weight:           bold;
    +@badge-line-height:           1;
    +@badge-border-radius:         10px;
    +
    +
    +//== Breadcrumbs
    +//
    +//##
    +
    +@breadcrumb-padding-vertical:   8px;
    +@breadcrumb-padding-horizontal: 15px;
    +//** Breadcrumb background color
    +@breadcrumb-bg:                 #f5f5f5;
    +//** Breadcrumb text color
    +@breadcrumb-color:              #ccc;
    +//** Text color of current page in the breadcrumb
    +@breadcrumb-active-color:       @gray-light;
    +//** Textual separator for between breadcrumb elements
    +@breadcrumb-separator:          "/";
    +
    +
    +//== Carousel
    +//
    +//##
    +
    +@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
    +
    +@carousel-control-color:                      #fff;
    +@carousel-control-width:                      15%;
    +@carousel-control-opacity:                    .5;
    +@carousel-control-font-size:                  20px;
    +
    +@carousel-indicator-active-bg:                #fff;
    +@carousel-indicator-border-color:             #fff;
    +
    +@carousel-caption-color:                      #fff;
    +
    +
    +//== Close
    +//
    +//##
    +
    +@close-font-weight:           bold;
    +@close-color:                 #000;
    +@close-text-shadow:           0 1px 0 #fff;
    +
    +
    +//== Code
    +//
    +//##
    +
    +@code-color:                  #c7254e;
    +@code-bg:                     #f9f2f4;
    +
    +@kbd-color:                   #fff;
    +@kbd-bg:                      #333;
    +
    +@pre-bg:                      #f5f5f5;
    +@pre-color:                   @gray-dark;
    +@pre-border-color:            #ccc;
    +@pre-scrollable-max-height:   340px;
    +
    +
    +//== Type
    +//
    +//##
    +
    +//** Horizontal offset for forms and lists.
    +@component-offset-horizontal: 180px;
    +//** Text muted color
    +@text-muted:                  @gray-light;
    +//** Abbreviations and acronyms border color
    +@abbr-border-color:           @gray-light;
    +//** Headings small color
    +@headings-small-color:        @gray-light;
    +//** Blockquote small color
    +@blockquote-small-color:      @gray-light;
    +//** Blockquote font size
    +@blockquote-font-size:        (@font-size-base * 1.25);
    +//** Blockquote border color
    +@blockquote-border-color:     @gray-lighter;
    +//** Page header border color
    +@page-header-border-color:    @gray-lighter;
    +//** Width of horizontal description list titles
    +@dl-horizontal-offset:        @component-offset-horizontal;
    +//** Point at which .dl-horizontal becomes horizontal
    +@dl-horizontal-breakpoint:    @grid-float-breakpoint;
    +//** Horizontal line color.
    +@hr-border:                   @gray-lighter;
    diff --git a/django_project/core/geonode_static/geonode/less/bootstrap/wells.less b/django_project/core/geonode_static/geonode/less/bootstrap/wells.less
    new file mode 100755
    index 0000000..15d072b
    --- /dev/null
    +++ b/django_project/core/geonode_static/geonode/less/bootstrap/wells.less
    @@ -0,0 +1,29 @@
    +//
    +// Wells
    +// --------------------------------------------------
    +
    +
    +// Base class
    +.well {
    +  min-height: 20px;
    +  padding: 19px;
    +  margin-bottom: 20px;
    +  background-color: @well-bg;
    +  border: 1px solid @well-border;
    +  border-radius: @border-radius-base;
    +  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
    +  blockquote {
    +    border-color: #ddd;
    +    border-color: rgba(0,0,0,.15);
    +  }
    +}
    +
    +// Sizes
    +.well-lg {
    +  padding: 24px;
    +  border-radius: @border-radius-large;
    +}
    +.well-sm {
    +  padding: 9px;
    +  border-radius: @border-radius-small;
    +}
    diff --git a/django_project/core/geonode_static/geonode/less/fonts.less b/django_project/core/geonode_static/geonode/less/fonts.less
    new file mode 100644
    index 0000000..a847149
    --- /dev/null
    +++ b/django_project/core/geonode_static/geonode/less/fonts.less
    @@ -0,0 +1,18 @@
    +@font-face {
    +  font-family: 'Lato';
    +  font-style: normal;
    +  font-weight: 700;
    +  src: local('Lato Bold'), local('Lato-Bold'), url(../fonts/lato_bold.ttf) format('truetype');
    +}
    +@font-face {
    +  font-family: 'Lato';
    +  font-style: normal;
    +  font-weight: 300;
    +  src: local('Lato Light'), local('Lato-Light'), url(../fonts/lato_light.ttf) format('truetype');
    +}
    +@font-face {
    +  font-family: 'Lato';
    +  font-style: normal;
    +  font-weight: 400;
    +  src: local('Lato Regular'), local('Lato-Regular'), url(../fonts/lato_regular.ttf) format('truetype');
    +}
    \ No newline at end of file
    diff --git a/django_project/core/geonode_static/geonode/less/variables.less b/django_project/core/geonode_static/geonode/less/variables.less
    new file mode 100755
    index 0000000..966be15
    --- /dev/null
    +++ b/django_project/core/geonode_static/geonode/less/variables.less
    @@ -0,0 +1,868 @@
    +//
    +// Variables
    +// --------------------------------------------------
    +
    +
    +//== Colors
    +//
    +//## Gray and brand colors for use across Bootstrap.
    +
    +@gray-base:              #000;
    +@gray-darker:            lighten(@gray-base, 13.5%); // #222
    +@gray-dark:              lighten(@gray-base, 20%);   // #333
    +@gray:                   lighten(@gray-base, 33.5%); // #555
    +@gray-light:             lighten(@gray-base, 46.7%); // #777
    +@gray-lighter:           lighten(@gray-base, 93.5%); // #eee
    +
    +@brand-primary:         darken(#428bca, 13.5%);
    +@brand-success:         #27ca3b;
    +@brand-info:            #1fa0a0;
    +@brand-warning:         #ff8f31;
    +@brand-danger:          #af0900;
    +
    +//== Scaffolding
    +//
    +//## Settings for some of the most global styles.
    +
    +//** Background color for ``.
    +@body-bg:               #fff;
    +//** Global text color on ``.
    +@text-color:            @gray-dark;
    +
    +//** Global textual link color.
    +@link-color:            @brand-primary;
    +//** Link hover color set via `darken()` function.
    +@link-hover-color:      darken(@link-color, 15%);
    +//** Link hover decoration.
    +@link-hover-decoration: underline;
    +
    +
    +//== Typography
    +//
    +//## Font, line-height, and color for body text, headings, and more.
    +
    +@font-family-sans-serif:  'Lato', sans-serif;
    +@font-family-serif:       Georgia, "Times New Roman", Times, serif;
    +//** Default monospace fonts for ``, ``, and `
    `.
    +@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
    +@font-family-base:        @font-family-sans-serif;
    +
    +@font-size-base:          16px;
    +@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
    +
    +@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
    +@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
    +@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
    +@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
    +@font-size-h5:            @font-size-base;
    +@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
    +
    +//** Unit-less `line-height` for use in components like buttons.
    +@line-height-base:        1.428571429; // 20/14
    +//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    +@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
    +
    +//** By default, this inherits from the ``.
    +@headings-font-family:    inherit;
    +@headings-font-weight:    700;
    +@headings-line-height:    1.1;
    +@headings-color:          inherit;
    +
    +
    +//== Iconography
    +//
    +//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    +
    +//** Load fonts from this directory.
    +@icon-font-path:          "../fonts/";
    +//** File name for all font files.
    +@icon-font-name:          "glyphicons-halflings-regular";
    +//** Element ID within SVG icon file.
    +@icon-font-svg-id:        "glyphicons_halflingsregular";
    +
    +
    +//== Components
    +//
    +//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    +
    +@padding-base-vertical:     6px;
    +@padding-base-horizontal:   12px;
    +
    +@padding-large-vertical:    10px;
    +@padding-large-horizontal:  16px;
    +
    +@padding-small-vertical:    5px;
    +@padding-small-horizontal:  10px;
    +
    +@padding-xs-vertical:       1px;
    +@padding-xs-horizontal:     5px;
    +
    +@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
    +@line-height-small:         1.5;
    +
    +@border-radius-base:        4px;
    +@border-radius-large:       6px;
    +@border-radius-small:       3px;
    +
    +//** Global color for active items (e.g., navs or dropdowns).
    +@component-active-color:    #fff;
    +//** Global background color for active items (e.g., navs or dropdowns).
    +@component-active-bg:       @brand-primary;
    +
    +//** Width of the `border` for generating carets that indicator dropdowns.
    +@caret-width-base:          4px;
    +//** Carets increase slightly in size for larger components.
    +@caret-width-large:         5px;
    +
    +
    +//== Tables
    +//
    +//## Customizes the `.table` component with basic values, each used across all table variations.
    +
    +//** Padding for ``s and ``s.
    +@table-cell-padding:            8px;
    +//** Padding for cells in `.table-condensed`.
    +@table-condensed-cell-padding:  5px;
    +
    +//** Default background color used for all tables.
    +@table-bg:                      transparent;
    +//** Background color used for `.table-striped`.
    +@table-bg-accent:               #f9f9f9;
    +//** Background color used for `.table-hover`.
    +@table-bg-hover:                #f5f5f5;
    +@table-bg-active:               @table-bg-hover;
    +
    +//** Border color for table and cell borders.
    +@table-border-color:            #ddd;
    +
    +
    +//== Buttons
    +//
    +//## For each of Bootstrap's buttons, define text, background and border color.
    +
    +@btn-font-weight:                normal;
    +
    +@btn-default-color:              #333;
    +@btn-default-bg:                 #fff;
    +@btn-default-border:             #ccc;
    +
    +@btn-primary-color:              #fff;
    +@btn-primary-bg:                 @brand-primary;
    +@btn-primary-border:             darken(@btn-primary-bg, 5%);
    +
    +@btn-success-color:              #fff;
    +@btn-success-bg:                 @brand-success;
    +@btn-success-border:             darken(@btn-success-bg, 5%);
    +
    +@btn-info-color:                 #fff;
    +@btn-info-bg:                    @brand-info;
    +@btn-info-border:                darken(@btn-info-bg, 5%);
    +
    +@btn-warning-color:              #fff;
    +@btn-warning-bg:                 @brand-warning;
    +@btn-warning-border:             darken(@btn-warning-bg, 5%);
    +
    +@btn-danger-color:               #fff;
    +@btn-danger-bg:                  @brand-danger;
    +@btn-danger-border:              darken(@btn-danger-bg, 5%);
    +
    +@btn-link-disabled-color:        @gray-light;
    +
    +// Allows for customizing button radius independently from global border radius
    +@btn-border-radius-base:         @border-radius-base;
    +@btn-border-radius-large:        @border-radius-large;
    +@btn-border-radius-small:        @border-radius-small;
    +
    +
    +//== Forms
    +//
    +//##
    +
    +//** `` background color
    +@input-bg:                       #fff;
    +//** `` background color
    +@input-bg-disabled:              @gray-lighter;
    +
    +//** Text color for ``s
    +@input-color:                    @gray;
    +//** `` border color
    +@input-border:                   #ccc;
    +
    +// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
    +//** Default `.form-control` border radius
    +// This has no effect on ``s in CSS.
    +@input-border-radius:            @border-radius-base;
    +//** Large `.form-control` border radius
    +@input-border-radius-large:      @border-radius-large;
    +//** Small `.form-control` border radius
    +@input-border-radius-small:      @border-radius-small;
    +
    +//** Border color for inputs on focus
    +@input-border-focus:             #66afe9;
    +
    +//** Placeholder text color
    +@input-color-placeholder:        #999;
    +
    +//** Default `.form-control` height
    +@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
    +//** Large `.form-control` height
    +@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
    +//** Small `.form-control` height
    +@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
    +
    +//** `.form-group` margin
    +@form-group-margin-bottom:       15px;
    +
    +@legend-color:                   @gray-dark;
    +@legend-border-color:            #e5e5e5;
    +
    +//** Background color for textual input addons
    +@input-group-addon-bg:           @gray-lighter;
    +//** Border color for textual input addons
    +@input-group-addon-border-color: @input-border;
    +
    +//** Disabled cursor for form controls and buttons.
    +@cursor-disabled:                not-allowed;
    +
    +
    +//== Dropdowns
    +//
    +//## Dropdown menu container and contents.
    +
    +//** Background for the dropdown menu.
    +@dropdown-bg:                    #fff;
    +//** Dropdown menu `border-color`.
    +@dropdown-border:                rgba(0,0,0,.15);
    +//** Dropdown menu `border-color` **for IE8**.
    +@dropdown-fallback-border:       #ccc;
    +//** Divider color for between dropdown items.
    +@dropdown-divider-bg:            #e5e5e5;
    +
    +//** Dropdown link text color.
    +@dropdown-link-color:            @gray-dark;
    +//** Hover color for dropdown links.
    +@dropdown-link-hover-color:      darken(@gray-dark, 5%);
    +//** Hover background for dropdown links.
    +@dropdown-link-hover-bg:         #f5f5f5;
    +
    +//** Active dropdown menu item text color.
    +@dropdown-link-active-color:     @component-active-color;
    +//** Active dropdown menu item background color.
    +@dropdown-link-active-bg:        @component-active-bg;
    +
    +//** Disabled dropdown menu item background color.
    +@dropdown-link-disabled-color:   @gray-light;
    +
    +//** Text color for headers within dropdown menus.
    +@dropdown-header-color:          @gray-light;
    +
    +//** Deprecated `@dropdown-caret-color` as of v3.1.0
    +@dropdown-caret-color:           #000;
    +
    +
    +//-- Z-index master list
    +//
    +// Warning: Avoid customizing these values. They're used for a bird's eye view
    +// of components dependent on the z-axis and are designed to all work together.
    +//
    +// Note: These variables are not generated into the Customizer.
    +
    +@zindex-navbar:            1000;
    +@zindex-dropdown:          1000;
    +@zindex-popover:           1060;
    +@zindex-tooltip:           1070;
    +@zindex-navbar-fixed:      1030;
    +@zindex-modal-background:  1040;
    +@zindex-modal:             1050;
    +
    +
    +//== Media queries breakpoints
    +//
    +//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    +
    +// Extra small screen / phone
    +//** Deprecated `@screen-xs` as of v3.0.1
    +@screen-xs:                  480px;
    +//** Deprecated `@screen-xs-min` as of v3.2.0
    +@screen-xs-min:              @screen-xs;
    +//** Deprecated `@screen-phone` as of v3.0.1
    +@screen-phone:               @screen-xs-min;
    +
    +// Small screen / tablet
    +//** Deprecated `@screen-sm` as of v3.0.1
    +@screen-sm:                  768px;
    +@screen-sm-min:              @screen-sm;
    +//** Deprecated `@screen-tablet` as of v3.0.1
    +@screen-tablet:              @screen-sm-min;
    +
    +// Medium screen / desktop
    +//** Deprecated `@screen-md` as of v3.0.1
    +@screen-md:                  992px;
    +@screen-md-min:              @screen-md;
    +//** Deprecated `@screen-desktop` as of v3.0.1
    +@screen-desktop:             @screen-md-min;
    +
    +// Large screen / wide desktop
    +//** Deprecated `@screen-lg` as of v3.0.1
    +@screen-lg:                  1200px;
    +@screen-lg-min:              @screen-lg;
    +//** Deprecated `@screen-lg-desktop` as of v3.0.1
    +@screen-lg-desktop:          @screen-lg-min;
    +
    +// So media queries don't overlap when required, provide a maximum
    +@screen-xs-max:              (@screen-sm-min - 1);
    +@screen-sm-max:              (@screen-md-min - 1);
    +@screen-md-max:              (@screen-lg-min - 1);
    +
    +
    +//== Grid system
    +//
    +//## Define your custom responsive grid.
    +
    +//** Number of columns in the grid.
    +@grid-columns:              12;
    +//** Padding between columns. Gets divided in half for the left and right.
    +@grid-gutter-width:         30px;
    +// Navbar collapse
    +//** Point at which the navbar becomes uncollapsed.
    +@grid-float-breakpoint:     @screen-sm-min;
    +//** Point at which the navbar begins collapsing.
    +@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
    +
    +
    +//== Container sizes
    +//
    +//## Define the maximum width of `.container` for different screen sizes.
    +
    +// Small screen / tablet
    +@container-tablet:             (720px + @grid-gutter-width);
    +//** For `@screen-sm-min` and up.
    +@container-sm:                 @container-tablet;
    +
    +// Medium screen / desktop
    +@container-desktop:            (940px + @grid-gutter-width);
    +//** For `@screen-md-min` and up.
    +@container-md:                 @container-desktop;
    +
    +// Large screen / wide desktop
    +@container-large-desktop:      (1140px + @grid-gutter-width);
    +//** For `@screen-lg-min` and up.
    +@container-lg:                 @container-large-desktop;
    +
    +
    +//== Navbar
    +//
    +//##
    +
    +// Basics of a navbar
    +@navbar-height:                    50px;
    +@navbar-margin-bottom:             @line-height-computed;
    +@navbar-border-radius:             @border-radius-base;
    +@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
    +@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
    +@navbar-collapse-max-height:       340px;
    +
    +@navbar-default-color:             #777;
    +@navbar-default-bg:                #f8f8f8;
    +@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
    +
    +// Navbar links
    +@navbar-default-link-color:                #777;
    +@navbar-default-link-hover-color:          #333;
    +@navbar-default-link-hover-bg:             transparent;
    +@navbar-default-link-active-color:         #555;
    +@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
    +@navbar-default-link-disabled-color:       #ccc;
    +@navbar-default-link-disabled-bg:          transparent;
    +
    +// Navbar brand label
    +@navbar-default-brand-color:               @navbar-default-link-color;
    +@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
    +@navbar-default-brand-hover-bg:            transparent;
    +
    +// Navbar toggle
    +@navbar-default-toggle-hover-bg:           #ddd;
    +@navbar-default-toggle-icon-bar-bg:        #888;
    +@navbar-default-toggle-border-color:       #ddd;
    +
    +
    +//=== Inverted navbar
    +// Reset inverted navbar basics
    +@navbar-inverse-color:                      lighten(@gray-light, 15%);
    +@navbar-inverse-bg:                         #222;
    +@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
    +
    +// Inverted navbar links
    +@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
    +@navbar-inverse-link-hover-color:           #fff;
    +@navbar-inverse-link-hover-bg:              transparent;
    +@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
    +@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
    +@navbar-inverse-link-disabled-color:        #444;
    +@navbar-inverse-link-disabled-bg:           transparent;
    +
    +// Inverted navbar brand label
    +@navbar-inverse-brand-color:                @navbar-inverse-link-color;
    +@navbar-inverse-brand-hover-color:          #fff;
    +@navbar-inverse-brand-hover-bg:             transparent;
    +
    +// Inverted navbar toggle
    +@navbar-inverse-toggle-hover-bg:            #333;
    +@navbar-inverse-toggle-icon-bar-bg:         #fff;
    +@navbar-inverse-toggle-border-color:        #333;
    +
    +
    +//== Navs
    +//
    +//##
    +
    +//=== Shared nav styles
    +@nav-link-padding:                          10px 15px;
    +@nav-link-hover-bg:                         @gray-lighter;
    +
    +@nav-disabled-link-color:                   @gray-light;
    +@nav-disabled-link-hover-color:             @gray-light;
    +
    +//== Tabs
    +@nav-tabs-border-color:                     #ddd;
    +
    +@nav-tabs-link-hover-border-color:          @gray-lighter;
    +
    +@nav-tabs-active-link-hover-bg:             @body-bg;
    +@nav-tabs-active-link-hover-color:          @gray;
    +@nav-tabs-active-link-hover-border-color:   #ddd;
    +
    +@nav-tabs-justified-link-border-color:            #ddd;
    +@nav-tabs-justified-active-link-border-color:     @body-bg;
    +
    +//== Pills
    +@nav-pills-border-radius:                   @border-radius-base;
    +@nav-pills-active-link-hover-bg:            @component-active-bg;
    +@nav-pills-active-link-hover-color:         @component-active-color;
    +
    +
    +//== Pagination
    +//
    +//##
    +
    +@pagination-color:                     @link-color;
    +@pagination-bg:                        #fff;
    +@pagination-border:                    #ddd;
    +
    +@pagination-hover-color:               @link-hover-color;
    +@pagination-hover-bg:                  @gray-lighter;
    +@pagination-hover-border:              #ddd;
    +
    +@pagination-active-color:              #fff;
    +@pagination-active-bg:                 @brand-primary;
    +@pagination-active-border:             @brand-primary;
    +
    +@pagination-disabled-color:            @gray-light;
    +@pagination-disabled-bg:               #fff;
    +@pagination-disabled-border:           #ddd;
    +
    +
    +//== Pager
    +//
    +//##
    +
    +@pager-bg:                             @pagination-bg;
    +@pager-border:                         @pagination-border;
    +@pager-border-radius:                  15px;
    +
    +@pager-hover-bg:                       @pagination-hover-bg;
    +
    +@pager-active-bg:                      @pagination-active-bg;
    +@pager-active-color:                   @pagination-active-color;
    +
    +@pager-disabled-color:                 @pagination-disabled-color;
    +
    +
    +//== Jumbotron
    +//
    +//##
    +
    +@jumbotron-padding:              2em;
    +@jumbotron-color:                inherit;
    +@jumbotron-bg:                   @brand-primary;
    +@jumbotron-heading-color:        inherit;
    +@jumbotron-font-size:            ceil((@font-size-base * 1.5));
    +@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
    +
    +
    +//== Form states and alerts
    +//
    +//## Define colors for form feedback states and, by default, alerts.
    +
    +@state-success-text:             #3c763d;
    +@state-success-bg:               #dff0d8;
    +@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
    +
    +@state-info-text:                #31708f;
    +@state-info-bg:                  #d9edf7;
    +@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
    +
    +@state-warning-text:             #8a6d3b;
    +@state-warning-bg:               #fcf8e3;
    +@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
    +
    +@state-danger-text:              #a94442;
    +@state-danger-bg:                #f2dede;
    +@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
    +
    +
    +//== Tooltips
    +//
    +//##
    +
    +//** Tooltip max width
    +@tooltip-max-width:           200px;
    +//** Tooltip text color
    +@tooltip-color:               #fff;
    +//** Tooltip background color
    +@tooltip-bg:                  #000;
    +@tooltip-opacity:             .9;
    +
    +//** Tooltip arrow width
    +@tooltip-arrow-width:         5px;
    +//** Tooltip arrow color
    +@tooltip-arrow-color:         @tooltip-bg;
    +
    +
    +//== Popovers
    +//
    +//##
    +
    +//** Popover body background color
    +@popover-bg:                          #fff;
    +//** Popover maximum width
    +@popover-max-width:                   276px;
    +//** Popover border color
    +@popover-border-color:                rgba(0,0,0,.2);
    +//** Popover fallback border color
    +@popover-fallback-border-color:       #ccc;
    +
    +//** Popover title background color
    +@popover-title-bg:                    darken(@popover-bg, 3%);
    +
    +//** Popover arrow width
    +@popover-arrow-width:                 10px;
    +//** Popover arrow color
    +@popover-arrow-color:                 @popover-bg;
    +
    +//** Popover outer arrow width
    +@popover-arrow-outer-width:           (@popover-arrow-width + 1);
    +//** Popover outer arrow color
    +@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
    +//** Popover outer arrow fallback color
    +@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
    +
    +
    +//== Labels
    +//
    +//##
    +
    +//** Default label background color
    +@label-default-bg:            @gray-light;
    +//** Primary label background color
    +@label-primary-bg:            @brand-primary;
    +//** Success label background color
    +@label-success-bg:            @brand-success;
    +//** Info label background color
    +@label-info-bg:               @brand-info;
    +//** Warning label background color
    +@label-warning-bg:            @brand-warning;
    +//** Danger label background color
    +@label-danger-bg:             @brand-danger;
    +
    +//** Default label text color
    +@label-color:                 #fff;
    +//** Default text color of a linked label
    +@label-link-hover-color:      #fff;
    +
    +
    +//== Modals
    +//
    +//##
    +
    +//** Padding applied to the modal body
    +@modal-inner-padding:         15px;
    +
    +//** Padding applied to the modal title
    +@modal-title-padding:         15px;
    +//** Modal title line-height
    +@modal-title-line-height:     @line-height-base;
    +
    +//** Background color of modal content area
    +@modal-content-bg:                             #fff;
    +//** Modal content border color
    +@modal-content-border-color:                   rgba(0,0,0,.2);
    +//** Modal content border color **for IE8**
    +@modal-content-fallback-border-color:          #999;
    +
    +//** Modal backdrop background color
    +@modal-backdrop-bg:           #000;
    +//** Modal backdrop opacity
    +@modal-backdrop-opacity:      .5;
    +//** Modal header border color
    +@modal-header-border-color:   #e5e5e5;
    +//** Modal footer border color
    +@modal-footer-border-color:   @modal-header-border-color;
    +
    +@modal-lg:                    900px;
    +@modal-md:                    600px;
    +@modal-sm:                    300px;
    +
    +
    +//== Alerts
    +//
    +//## Define alert colors, border radius, and padding.
    +
    +@alert-padding:               15px;
    +@alert-border-radius:         @border-radius-base;
    +@alert-link-font-weight:      bold;
    +
    +@alert-success-bg:            @state-success-bg;
    +@alert-success-text:          @state-success-text;
    +@alert-success-border:        @state-success-border;
    +
    +@alert-info-bg:               @state-info-bg;
    +@alert-info-text:             @state-info-text;
    +@alert-info-border:           @state-info-border;
    +
    +@alert-warning-bg:            @state-warning-bg;
    +@alert-warning-text:          @state-warning-text;
    +@alert-warning-border:        @state-warning-border;
    +
    +@alert-danger-bg:             @state-danger-bg;
    +@alert-danger-text:           @state-danger-text;
    +@alert-danger-border:         @state-danger-border;
    +
    +
    +//== Progress bars
    +//
    +//##
    +
    +//** Background color of the whole progress component
    +@progress-bg:                 #f5f5f5;
    +//** Progress bar text color
    +@progress-bar-color:          #fff;
    +//** Variable for setting rounded corners on progress bar.
    +@progress-border-radius:      @border-radius-base;
    +
    +//** Default progress bar color
    +@progress-bar-bg:             @brand-primary;
    +//** Success progress bar color
    +@progress-bar-success-bg:     @brand-success;
    +//** Warning progress bar color
    +@progress-bar-warning-bg:     @brand-warning;
    +//** Danger progress bar color
    +@progress-bar-danger-bg:      @brand-danger;
    +//** Info progress bar color
    +@progress-bar-info-bg:        @brand-info;
    +
    +
    +//== List group
    +//
    +//##
    +
    +//** Background color on `.list-group-item`
    +@list-group-bg:                 #fff;
    +//** `.list-group-item` border color
    +@list-group-border:             #ddd;
    +//** List group border radius
    +@list-group-border-radius:      @border-radius-base;
    +
    +//** Background color of single list items on hover
    +@list-group-hover-bg:           #f5f5f5;
    +//** Text color of active list items
    +@list-group-active-color:       @component-active-color;
    +//** Background color of active list items
    +@list-group-active-bg:          @component-active-bg;
    +//** Border color of active list elements
    +@list-group-active-border:      @list-group-active-bg;
    +//** Text color for content within active list items
    +@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
    +
    +//** Text color of disabled list items
    +@list-group-disabled-color:      @gray-light;
    +//** Background color of disabled list items
    +@list-group-disabled-bg:         @gray-lighter;
    +//** Text color for content within disabled list items
    +@list-group-disabled-text-color: @list-group-disabled-color;
    +
    +@list-group-link-color:         #555;
    +@list-group-link-hover-color:   @list-group-link-color;
    +@list-group-link-heading-color: #333;
    +
    +
    +//== Panels
    +//
    +//##
    +
    +@panel-bg:                    #fff;
    +@panel-body-padding:          15px;
    +@panel-heading-padding:       10px 15px;
    +@panel-footer-padding:        @panel-heading-padding;
    +@panel-border-radius:         @border-radius-base;
    +
    +//** Border color for elements within panels
    +@panel-inner-border:          #ddd;
    +@panel-footer-bg:             #f5f5f5;
    +
    +@panel-default-text:          @gray-dark;
    +@panel-default-border:        #ddd;
    +@panel-default-heading-bg:    #f5f5f5;
    +
    +@panel-primary-text:          #fff;
    +@panel-primary-border:        @brand-primary;
    +@panel-primary-heading-bg:    @brand-primary;
    +
    +@panel-success-text:          @state-success-text;
    +@panel-success-border:        @state-success-border;
    +@panel-success-heading-bg:    @state-success-bg;
    +
    +@panel-info-text:             @state-info-text;
    +@panel-info-border:           @state-info-border;
    +@panel-info-heading-bg:       @state-info-bg;
    +
    +@panel-warning-text:          @state-warning-text;
    +@panel-warning-border:        @state-warning-border;
    +@panel-warning-heading-bg:    @state-warning-bg;
    +
    +@panel-danger-text:           @state-danger-text;
    +@panel-danger-border:         @state-danger-border;
    +@panel-danger-heading-bg:     @state-danger-bg;
    +
    +
    +//== Thumbnails
    +//
    +//##
    +
    +//** Padding around the thumbnail image
    +@thumbnail-padding:           4px;
    +//** Thumbnail background color
    +@thumbnail-bg:                @body-bg;
    +//** Thumbnail border color
    +@thumbnail-border:            #ddd;
    +//** Thumbnail border radius
    +@thumbnail-border-radius:     @border-radius-base;
    +
    +//** Custom text color for thumbnail captions
    +@thumbnail-caption-color:     @text-color;
    +//** Padding around the thumbnail caption
    +@thumbnail-caption-padding:   9px;
    +
    +
    +//== Wells
    +//
    +//##
    +
    +@well-bg:                     #f5f5f5;
    +@well-border:                 darken(@well-bg, 7%);
    +
    +
    +//== Badges
    +//
    +//##
    +
    +@badge-color:                 #fff;
    +//** Linked badge text color on hover
    +@badge-link-hover-color:      #fff;
    +@badge-bg:                    @gray-light;
    +
    +//** Badge text color in active nav link
    +@badge-active-color:          @link-color;
    +//** Badge background color in active nav link
    +@badge-active-bg:             #fff;
    +
    +@badge-font-weight:           bold;
    +@badge-line-height:           1;
    +@badge-border-radius:         10px;
    +
    +
    +//== Breadcrumbs
    +//
    +//##
    +
    +@breadcrumb-padding-vertical:   8px;
    +@breadcrumb-padding-horizontal: 15px;
    +//** Breadcrumb background color
    +@breadcrumb-bg:                 #f5f5f5;
    +//** Breadcrumb text color
    +@breadcrumb-color:              #ccc;
    +//** Text color of current page in the breadcrumb
    +@breadcrumb-active-color:       @gray-light;
    +//** Textual separator for between breadcrumb elements
    +@breadcrumb-separator:          "/";
    +
    +
    +//== Carousel
    +//
    +//##
    +
    +@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
    +
    +@carousel-control-color:                      #fff;
    +@carousel-control-width:                      15%;
    +@carousel-control-opacity:                    .5;
    +@carousel-control-font-size:                  20px;
    +
    +@carousel-indicator-active-bg:                #fff;
    +@carousel-indicator-border-color:             #fff;
    +
    +@carousel-caption-color:                      #fff;
    +
    +
    +//== Close
    +//
    +//##
    +
    +@close-font-weight:           bold;
    +@close-color:                 #000;
    +@close-text-shadow:           0 1px 0 #fff;
    +
    +
    +//== Code
    +//
    +//##
    +
    +@code-color:                  #c7254e;
    +@code-bg:                     #f9f2f4;
    +
    +@kbd-color:                   #fff;
    +@kbd-bg:                      #333;
    +
    +@pre-bg:                      #f5f5f5;
    +@pre-color:                   @gray-dark;
    +@pre-border-color:            #ccc;
    +@pre-scrollable-max-height:   340px;
    +
    +
    +//== Type
    +//
    +//##
    +
    +//** Horizontal offset for forms and lists.
    +@component-offset-horizontal: 180px;
    +//** Text muted color
    +@text-muted:                  @gray-light;
    +//** Abbreviations and acronyms border color
    +@abbr-border-color:           @gray-light;
    +//** Headings small color
    +@headings-small-color:        @gray-light;
    +//** Blockquote small color
    +@blockquote-small-color:      @gray-light;
    +//** Blockquote font size
    +@blockquote-font-size:        (@font-size-base * 1.25);
    +//** Blockquote border color
    +@blockquote-border-color:     @gray-lighter;
    +//** Page header border color
    +@page-header-border-color:    @gray-lighter;
    +//** Width of horizontal description list titles
    +@dl-horizontal-offset:        @component-offset-horizontal;
    +//** Point at which .dl-horizontal becomes horizontal
    +@dl-horizontal-breakpoint:    @grid-float-breakpoint;
    +//** Horizontal line color.
    +@hr-border:                   @gray-lighter;
    diff --git a/django_project/core/geonode_static/package.json b/django_project/core/geonode_static/package.json
    new file mode 100644
    index 0000000..7560019
    --- /dev/null
    +++ b/django_project/core/geonode_static/package.json
    @@ -0,0 +1,19 @@
    +{
    +  "name": "geonode-assets",
    +  "version": "2.0.0",
    +  "description": "Builds static (JS, CSS, IMG) assets for GeoNode 2.0",
    +  "main": "gruntfile.js",
    +  "dependencies": {
    +    "bower": "~1.3.3",
    +    "grunt": "~0.4.1",
    +    "grunt-cli": "~0.1.13",
    +    "grunt-contrib-concat": "~0.3.0",
    +    "grunt-contrib-copy": "~0.4.1",
    +    "grunt-contrib-cssmin": "~0.6.1",
    +    "grunt-contrib-jshint": "~0.6.0",
    +    "grunt-contrib-less": "~0.6.4",
    +    "grunt-contrib-uglify": "~0.2.2",
    +    "grunt-text-replace": "~0.3.6",
    +    "grunt-contrib-watch": "~0.5.3"
    +  }
    +}
    diff --git a/django_project/core/settings/__init__.py b/django_project/core/settings/__init__.py
    new file mode 100644
    index 0000000..e69de29
    diff --git a/django_project/core/settings/base.py b/django_project/core/settings/base.py
    new file mode 100644
    index 0000000..cd4144e
    --- /dev/null
    +++ b/django_project/core/settings/base.py
    @@ -0,0 +1,293 @@
    +# -*- coding: utf-8 -*-
    +#########################################################################
    +#
    +# Copyright (C) 2012 OpenPlans
    +#
    +# This program is free software: you can redistribute it and/or modify
    +# it under the terms of the GNU General Public License as published by
    +# the Free Software Foundation, either version 3 of the License, or
    +# (at your option) any later version.
    +#
    +# This program is distributed in the hope that it will be useful,
    +# but WITHOUT ANY WARRANTY; without even the implied warranty of
    +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    +# GNU General Public License for more details.
    +#
    +# You should have received a copy of the GNU General Public License
    +# along with this program. If not, see .
    +#
    +#########################################################################
    +
    +# Django settings for the GeoNode project.
    +from __future__ import absolute_import, unicode_literals
    +import os
    +from .utils import absolute_path
    +
    +# This throws error
    +# from geonode.settings import *
    +#
    +# General Django development settings
    +#
    +
    +# Local time zone for this installation. Choices can be found here:
    +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
    +# although not all choices may be available on all operating systems.
    +# In a Windows environment this must be set to your system time zone.
    +# In a Windows environment this must be set to your system time zone.
    +TIME_ZONE = 'Africa/Johannesburg'
    +
    +# Language code for this installation. All choices can be found here:
    +# http://www.i18nguy.com/unicode/language-identifiers.html
    +LANGUAGE_CODE = 'en-us'
    +
    +SITE_ID = 1
    +
    +# If you set this to False, Django will make some optimizations so as not
    +# to load the internationalization machinery.
    +USE_I18N = True
    +
    +# If you set this to False, Django will not format dates, numbers and
    +# calendars according to the current locale.
    +USE_L10N = True
    +
    +# If you set this to False, Django will not use timezone-aware datetimes.
    +USE_TZ = True
    +
    +# The numeric mode to set newly-uploaded files to. The value should be
    +# a mode you'd pass directly to os.chmod.
    +FILE_UPLOAD_PERMISSIONS = 0o644
    +
    +# Absolute filesystem path to the directory that will hold user-uploaded files.
    +# Example: "/var/www/example.com/media/"
    +MEDIA_ROOT = '/home/web/media'
    +
    +# URL that handles the media served from MEDIA_ROOT. Make sure to use a
    +# trailing slash.
    +# Examples: "http://example.com/media/", "http://media.example.com/"
    +# MEDIA_URL = '/media/'
    +# setting full MEDIA_URL to be able to use it for the feeds
    +MEDIA_URL = '/media/'
    +
    +# Absolute path to the directory static files should be collected to.
    +# Don't put anything in this directory yourself; store your static files
    +# in apps' "static/" subdirectories and in STATICFILES_DIRS.
    +# Example: "/var/www/example.com/static/"
    +STATIC_ROOT = '/home/web/static'
    +
    +# URL prefix for static files.
    +# Example: "http://example.com/static/", "http://static.example.com/"
    +STATIC_URL = '/static/'
    +
    +SYMPOSION_STATIC_URL = "/site_media/"
    +
    +# Additional locations of static files
    +STATICFILES_DIRS = (
    +    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    +    # Always use forward slashes, even on Windows.
    +    # Don't forget to use absolute paths, not relative paths.
    +    absolute_path('core', 'base_static'),
    +    absolute_path('core', 'geonode_static'),
    +)
    +
    +# Additional locations of static files
    +
    +# List of finder classes that know how to find static files in
    +# various locations.
    +STATICFILES_FINDERS = (
    +    'django.contrib.staticfiles.finders.FileSystemFinder',
    +    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    +    'django.contrib.staticfiles.finders.DefaultStorageFinder',
    +)
    +
    +# import SECRET_KEY into current namespace
    +# noinspection PyUnresolvedReferences
    +from .secret import SECRET_KEY  # noqa
    +
    +# List of callables that know how to import templates from various sources.
    +TEMPLATE_LOADERS = (
    +    "django.template.loaders.filesystem.Loader",
    +    "django.template.loaders.app_directories.Loader",
    +)
    +
    +TEMPLATES = [
    +    {
    +        'BACKEND': 'django.template.backends.django.DjangoTemplates',
    +        'DIRS': [
    +            # project level templates
    +            absolute_path('core', 'templates'),
    +        ],
    +        'APP_DIRS': False,
    +        'OPTIONS': {
    +            #  List of callables that know how to import
    +            #  templates from various sources.
    +            'loaders': [
    +                'django.template.loaders.filesystem.Loader',
    +                'django.template.loaders.app_directories.Loader',
    +            ],
    +            'context_processors': [
    +                "django.contrib.auth.context_processors.auth",
    +                "django.contrib.messages.context_processors.messages",
    +                "django.core.context_processors.debug",
    +                "django.core.context_processors.i18n",
    +                "django.core.context_processors.static",
    +                "django.core.context_processors.media",
    +                "django.core.context_processors.request",
    +                "django.core.context_processors.tz",
    +                "geonode.context_processors.resource_urls",
    +                "geonode.geoserver.context_processors.geoserver_urls",
    +            ],
    +        },
    +    },
    +]
    +
    +MIDDLEWARE_CLASSES = (
    +    "django.contrib.sessions.middleware.SessionMiddleware",
    +    "django.middleware.locale.LocaleMiddleware",
    +    "django.contrib.auth.middleware.AuthenticationMiddleware",
    +    "django.middleware.common.CommonMiddleware",
    +    "django.middleware.csrf.CsrfViewMiddleware",
    +    "django.contrib.messages.middleware.MessageMiddleware",
    +    'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
    +    "pagination.middleware.PaginationMiddleware",
    +)
    +
    +ROOT_URLCONF = 'core.urls'
    +
    +# Python dotted path to the WSGI application used by Django's runserver.
    +WSGI_APPLICATION = 'core.wsgi.application'
    +
    +INSTALLED_APPS = (
    +    "modeltranslation",
    +    "django.contrib.admin",
    +    "django.contrib.auth",
    +    "django.contrib.contenttypes",
    +    "django.contrib.redirects",
    +    "django.contrib.sessions",
    +    "django.contrib.sites",
    +    "django.contrib.sitemaps",
    +    "django.contrib.staticfiles",
    +)
    +
    +# A sample logging configuration. The only tangible logging
    +# performed by this configuration is to send an email to
    +# the site admins on every HTTP 500 error when DEBUG=False.
    +# See http://docs.djangoproject.com/en/dev/topics/logging for
    +# more details on how to customize your logging configuration.
    +LOGGING = {
    +    'version': 1,
    +    'disable_existing_loggers': False,
    +    'filters': {
    +        'require_debug_false': {
    +            '()': 'django.utils.log.RequireDebugFalse'
    +        }
    +    },
    +    'handlers': {
    +        'mail_admins': {
    +            'level': 'ERROR',
    +            'filters': ['require_debug_false'],
    +            'class': 'django.utils.log.AdminEmailHandler'
    +        }
    +    },
    +    'loggers': {
    +        'django.request': {
    +            'handlers': ['mail_admins'],
    +            'level': 'ERROR',
    +            'propagate': True,
    +        },
    +    }
    +}
    +
    +SITENAME = 'haitidata'
    +
    +# Defines the directory that contains the settings file as the LOCAL_ROOT
    +# It is used for relative settings elsewhere.
    +LOCAL_ROOT = os.path.abspath(os.path.dirname(__file__))
    +LOCAL_MEDIA_URL = LOCAL_ROOT
    +AVATAR_PATH_HANDLER = LOCAL_ROOT
    +
    +
    +# Load more settings from a file called local_settings.py if it exists
    +try:
    +    from local_settings import *
    +except ImportError:
    +    pass
    +
    +
    +
    +# INSTALLED_APPS = INSTALLED_APPS + ('osgeo_importer', 'geonode-client', 'wfs_harvest')
    +
    +LAYER_PREVIEW_LIBRARY = 'react'
    +
    +IMPORT_HANDLERS = [
    +          # If GeoServer handlers are enabled, you must have an instance of geoserver running.
    +          # Warning: the order of the handlers here matters.
    +          'osgeo_importer.handlers.FieldConverterHandler',
    +          'osgeo_importer.handlers.geoserver.GeoserverPublishHandler',
    +          'osgeo_importer.handlers.geoserver.GeoserverPublishCoverageHandler',
    +          'osgeo_importer.handlers.geoserver.GeoServerTimeHandler',
    +          'osgeo_importer.handlers.geoserver.GeoWebCacheHandler',
    +          'osgeo_importer.handlers.geoserver.GeoServerBoundsHandler',
    +          'osgeo_importer.handlers.geoserver.GenericSLDHandler',
    +          'osgeo_importer.handlers.geonode.GeoNodePublishHandler',
    +          'osgeo_importer.handlers.mapproxy.publish_handler.MapProxyGPKGTilePublishHandler',
    +          'osgeo_importer.handlers.geoserver.GeoServerStyleHandler',
    +          'osgeo_importer.handlers.geonode.GeoNodeMetadataHandler'
    +      ]
    +
    +OSGEO_DATASTORE = 'datastore'
    +OSGEO_IMPORTER_GEONODE_ENABLED = True
    +OSGEO_IMPORTER_VALID_EXTENSIONS = [
    +    'shp', 'shx', 'prj', 'dbf', 'kml', 'geojson', 'json', 'tif', 'tiff',
    +    'gpkg', 'csv', 'zip', 'xml', 'sld'
    +    ]
    +
    +
    +#DATABASE_ROUTERS = ['{{app_name}}.dbrouters.DefaultOnlyMigrations']
    +
    +# # === MapProxy settings
    +# # This is the location to place additional configuration files for mapproxy to work from.
    +# # Currently it is only to allow tiles from gpkg files to be served.
    +MAPPROXY_CONFIG_DIR = '/opt/geonode-mapproxy-config'
    +# Name of the mapproxy config file to create for tile gpkg files.
    +MAPPROXY_CONFIG_FILENAME = 'geonode.yaml'
    +# This is the base URL for MapProxy WMS services
    +# URLs will look like this: /geonode/tms/1.0.0///0/0/0.png and a  will be
    +# set as '_' (by conf_from_geopackage()).
    +MAPPROXY_SERVER_LOCATION = 'http://localhost:8088/geonode/tms/1.0.0/{layer_name}/{grid_name}/'
    +
    +#import pyproj
    +#PROJECTION_DIRECTORY = os.path.join(os.path.dirname(pyproj.__file__), 'data/')
    +PROJECTION_DIRECTORY = '/tmp/'
    +
    +try:
    +    CELERY_IMPORTS = CELERY_IMPORTS + ('osgeo_importer.tasks',)
    +except:
    +    CELERY_IMPORTS = ('osgeo_importer.tasks',)
    +
    +LOCKDOWN_GEONODE = False
    +
    +BROKER_URL = "amqp://guest@localhost:5672"
    +CELERY_ALWAYS_EAGER = True
    +IMPORT_TASK_SOFT_TIME_LIMIT = 90
    +
    +MAX_CSV_RECORDS = 20000
    +# SECURITY WARNING: don't run with debug turned on in production!
    +DEBUG = True
    +
    +SOCIAL_ORIGINS = [{
    +    "label":"paper-plane-o",
    +    "url":"mailto:?subject={name}&body={url}",
    +    "css_class":"email"
    +}, {
    +    "label":"facebook",
    +    "url":"http://www.facebook.com/sharer.php?u={url}",
    +    "css_class":"fb"
    +}, {
    +    "label":"twitter",
    +    "url":"https://twitter.com/share?url={url}&hashtags={hashtags}",
    +    "css_class":"tw"
    +}, {
    +    "label":"google-plus",
    +    "url":"https://plus.google.com/share?url={url}",
    +    "css_class":"gp"
    +}]
    diff --git a/django_project/core/settings/contrib.py b/django_project/core/settings/contrib.py
    new file mode 100644
    index 0000000..1ee861b
    --- /dev/null
    +++ b/django_project/core/settings/contrib.py
    @@ -0,0 +1,318 @@
    +# coding=utf-8
    +"""
    +core.settings.contrib
    +"""
    +from .base import *  # noqa
    +from distutils.util import strtobool
    +import os
    +
    +# Store these package names here as they may change in the future since
    +# at the moment we are using custom forks of them.
    +PACKAGE_NAME_FILEBROWSER = "filebrowser_safe"
    +PACKAGE_NAME_GRAPPELLI = "grappelli_safe"
    +GRAPPELLI_INSTALLED = True
    +
    +# Extra installed apps - grapelli needs to be added before others
    +INSTALLED_APPS += (
    +    "django_comments",
    +    "compressor",
    +    "avatar",
    +    "osgeo_importer",
    +    'pagination',
    +    'taggit',
    +    'treebeard',
    +    'friendlytagloader',
    +    'geoexplorer',
    +    'leaflet',
    +    'django_extensions',
    +    'autocomplete_light',
    +    'mptt',
    +    'djcelery',
    +    'storages',
    +    'geonode-client',
    +
    +    # Theme
    +    "pinax_theme_bootstrap_account",
    +    "pinax_theme_bootstrap",
    +    'django_forms_bootstrap',
    +
    +    # Social
    +    'account',
    +    'dialogos',
    +    'agon_ratings',
    +    # 'notification',
    +    'announcements',
    +    'actstream',
    +    'user_messages',
    +    'tastypie',
    +    'polymorphic',
    +    'guardian',
    +    'oauth2_provider',
    +
    +# GeoNode internal apps
    +    'geonode',
    +    'geonode.base',
    +    'geonode.maps',
    +    'geonode.people',
    +    'geonode.layers',
    +    'geonode.proxy',
    +    'geonode.security',
    +    'geonode.social',
    +    'geonode.catalogue',
    +    'geonode.documents',
    +    'geonode.api',
    +    'geonode.groups',
    +    'geonode.services',
    +
    +    # QGIS Server Apps
    +    # 'geonode_qgis_server',
    +
    +    # GeoServer Apps
    +    # Geoserver needs to come last because
    +    # it's signals may rely on other apps' signals.
    +    'geonode.geoserver',
    +    'geonode.upload',
    +    'geonode.tasks',
    +
    +)
    +
    +MARKDOWNIFY_WHITELIST_TAGS = [
    +    'a',
    +    'abbr',
    +    'acronym',
    +    'b',
    +    'blockquote',
    +    'em',
    +    'i',
    +    'li',
    +    'ol',
    +    'p',
    +    'strong',
    +    'ul'
    +]
    +
    +REGISTRATION_OPEN = True
    +ACCOUNT_OPEN_SIGNUP = True
    +ACCOUNT_EMAIL_UNIQUE = True
    +ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
    +ACCOUNT_SIGNUP_REDIRECT_URL = "/"
    +ACCOUNT_LOGIN_REDIRECT_URL = "/"
    +ACCOUNT_LOGOUT_REDIRECT_URL = "home"
    +ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
    +ACCOUNT_USE_AUTH_AUTHENTICATE = True
    +HOOKSET = "pinaxcon_theme.hooks.Foss4GAccountHookset"
    +MODIFY_TOPICCATEGORY = False
    +EXTRA_LANG_INFO = []
    +
    +LOCKDOWN_GEONODE = strtobool(os.getenv('LOCKDOWN_GEONODE', 'False'))
    +
    +
    +DEFAULT_WORKSPACE = os.getenv('DEFAULT_WORKSPACE', 'geonode')
    +CASCADE_WORKSPACE = os.getenv('CASCADE_WORKSPACE', 'geonode')
    +OGP_URL = os.getenv('OGP_URL', "http://geodata.tufts.edu/solr/select")
    +
    +
    +MISSING_THUMBNAIL = os.getenv(
    +    'MISSING_THUMBNAIL', 'geonode/img/missing_thumb.png'
    +)
    +
    +# Search Snippet Cache Time in Seconds
    +CACHE_TIME = int(os.getenv('CACHE_TIME', '0'))
    +
    +AUTH_USER_MODEL = os.getenv('AUTH_USER_MODEL', 'people.Profile')
    +
    +GEOSERVER_LOCATION = 'http://geoserver:8080/geoserver/'
    +GEOSERVER_PUBLIC_LOCATION = os.environ.get('GEOSERVER_PUBLIC_LOCATION','http://0.0.0.0:33300/api/geoserver/')
    +
    +OGC_SERVER = {
    +    'default': {
    +        'BACKEND': 'geonode.geoserver',
    +        'LOCATION': GEOSERVER_LOCATION,
    +        'LOGIN_ENDPOINT': 'j_spring_oauth2_geonode_login',
    +        'LOGOUT_ENDPOINT': 'j_spring_oauth2_geonode_logout',
    +        # PUBLIC_LOCATION needs to be kept like this because in dev mode
    +        # the proxy won't work and the integration tests will fail
    +        # the entire block has to be overridden in the local_settings
    +        'PUBLIC_LOCATION': GEOSERVER_PUBLIC_LOCATION,
    +        'USER': 'admin',
    +        'PASSWORD': 'geoserver',
    +        'MAPFISH_PRINT_ENABLED': True,
    +        'PRINT_NG_ENABLED': True,
    +        'GEONODE_SECURITY_ENABLED': True,
    +        'GEOGIG_ENABLED': False,
    +        'WMST_ENABLED': False,
    +        'BACKEND_WRITE_ENABLED': True,
    +        'WPS_ENABLED': False,
    +        # Set to name of database in DATABASES dictionary to enable
    +        'DATASTORE': '',  # 'datastore',
    +        'PG_GEOGIG': False,
    +        'TIMEOUT': 10  # number of seconds to allow for HTTP requests
    +    }
    +}
    +
    +ALLOWED_DOCUMENT_TYPES = ["pdf"]
    +MISSING_THUMBNAIL = os.getenv(
    +    'MISSING_THUMBNAIL', 'geonode/img/missing_thumb.png'
    +)
    +# Whether the uplaoded resources should be public and downloadable by default
    +# or not
    +DEFAULT_ANONYMOUS_VIEW_PERMISSION = strtobool(
    +    os.getenv('DEFAULT_ANONYMOUS_VIEW_PERMISSION', 'True')
    +)
    +DEFAULT_ANONYMOUS_DOWNLOAD_PERMISSION = strtobool(
    +    os.getenv('DEFAULT_ANONYMOUS_VIEW_PERMISSION', 'True')
    +)
    +
    +# Available download formats
    +DOWNLOAD_FORMATS_METADATA = [
    +    'Atom', 'DIF', 'Dublin Core', 'ebRIM', 'FGDC', 'ISO',
    +]
    +DOWNLOAD_FORMATS_VECTOR = [
    +    'JPEG', 'PDF', 'PNG', 'Zipped Shapefile', 'GML 2.0', 'GML 3.1.1', 'CSV',
    +    'Excel', 'GeoJSON', 'KML', 'View in Google Earth', 'Tiles',
    +]
    +DOWNLOAD_FORMATS_RASTER = [
    +    'JPEG',
    +    'PDF',
    +    'PNG',
    +    'ArcGrid',
    +    'GeoTIFF',
    +    'Gtopo30',
    +    'ImageMosaic',
    +    'KML',
    +    'View in Google Earth',
    +    'Tiles',
    +    'GML',
    +    'GZIP'
    +]
    +
    +API_INCLUDE_REGIONS_COUNT = False
    +HAYSTACK_SEARCH = False
    +RESOURCE_PUBLISHING = True
    +SITEURL = os.getenv('SITEURL', "http://localhost:33300/")
    +
    +# Uploader Settings
    +UPLOADER = {
    +    'BACKEND': 'geonode.rest',
    +    'OPTIONS': {
    +        'TIME_ENABLED': False,
    +        'MOSAIC_ENABLED': False,
    +        'GEOGIG_ENABLED': False,
    +    }
    +}
    +
    +# CSW settings
    +CATALOGUE = {
    +    'default': {
    +        # The underlying CSW implementation
    +        # default is pycsw in local mode (tied directly to GeoNode Django DB)
    +        'ENGINE': 'geonode.catalogue.backends.pycsw_local',
    +        # pycsw in non-local mode
    +        # 'ENGINE': 'geonode.catalogue.backends.pycsw_http',
    +        # GeoNetwork opensource
    +        # 'ENGINE': 'geonode.catalogue.backends.geonetwork',
    +        # deegree and others
    +        # 'ENGINE': 'geonode.catalogue.backends.generic',
    +
    +        # The FULLY QUALIFIED base url to the CSW instance for this GeoNode
    +        'URL': '%scatalogue/csw' % SITEURL,
    +        # 'URL': 'http://localhost:8080/geonetwork/srv/en/csw',
    +        # 'URL': 'http://localhost:8080/deegree-csw-demo-3.0.4/services',
    +
    +        # login credentials (for GeoNetwork)
    +        # 'USER': 'admin',
    +        # 'PASSWORD': 'admin',
    +    }
    +}
    +
    +# pycsw settings
    +PYCSW = {
    +    # pycsw configuration
    +    'CONFIGURATION': {
    +        # uncomment / adjust to override server config system defaults
    +        # 'server': {
    +        #    'maxrecords': '10',
    +        #    'pretty_print': 'true',
    +        #    'federatedcatalogues': 'http://catalog.data.gov/csw'
    +        # },
    +        'metadata:main': {
    +            'identification_title': 'GeoNode Catalogue',
    +            'identification_abstract': 'GeoNode is an open source platform' \
    +                                       ' that facilitates the creation, sharing, and collaborative use' \
    +                                       ' of geospatial data',
    +            'identification_keywords': 'sdi, catalogue, discovery, metadata,' \
    +                                       ' GeoNode',
    +            'identification_keywords_type': 'theme',
    +            'identification_fees': 'None',
    +            'identification_accessconstraints': 'None',
    +            'provider_name': 'Organization Name',
    +            'provider_url': SITEURL,
    +            'contact_name': 'Lastname, Firstname',
    +            'contact_position': 'Position Title',
    +            'contact_address': 'Mailing Address',
    +            'contact_city': 'City',
    +            'contact_stateorprovince': 'Administrative Area',
    +            'contact_postalcode': 'Zip or Postal Code',
    +            'contact_country': 'Country',
    +            'contact_phone': '+xx-xxx-xxx-xxxx',
    +            'contact_fax': '+xx-xxx-xxx-xxxx',
    +            'contact_email': 'Email Address',
    +            'contact_url': 'Contact URL',
    +            'contact_hours': 'Hours of Service',
    +            'contact_instructions': 'During hours of service. Off on ' \
    +                                    'weekends.',
    +            'contact_role': 'pointOfContact',
    +        },
    +        'metadata:inspire': {
    +            'enabled': 'true',
    +            'languages_supported': 'eng,gre',
    +            'default_language': 'eng',
    +            'date': 'YYYY-MM-DD',
    +            'gemet_keywords': 'Utility and governmental services',
    +            'conformity_service': 'notEvaluated',
    +            'contact_name': 'Organization Name',
    +            'contact_email': 'Email Address',
    +            'temp_extent': 'YYYY-MM-DD/YYYY-MM-DD',
    +        }
    +    }
    +}
    +
    +# GeoNode javascript client configuration
    +
    +# default map projection
    +# Note: If set to EPSG:4326, then only EPSG:4326 basemaps will work.
    +DEFAULT_MAP_CRS = "EPSG:900913"
    +
    +# Where should newly created maps be focused?
    +DEFAULT_MAP_CENTER = (0, 0)
    +
    +# How tightly zoomed should newly created maps be?
    +# 0 = entire world;
    +# maximum zoom is between 12 and 15 (for Google Maps, coverage varies by area)
    +DEFAULT_MAP_ZOOM = 0
    +
    +ALT_OSM_BASEMAPS = os.environ.get('ALT_OSM_BASEMAPS', False)
    +CARTODB_BASEMAPS = os.environ.get('CARTODB_BASEMAPS', False)
    +STAMEN_BASEMAPS = os.environ.get('STAMEN_BASEMAPS', False)
    +THUNDERFOREST_BASEMAPS = os.environ.get('THUNDERFOREST_BASEMAPS', False)
    +MAPBOX_ACCESS_TOKEN = os.environ.get('MAPBOX_ACCESS_TOKEN', None)
    +BING_API_KEY = os.environ.get('BING_API_KEY', None)
    +CLIENT_RESULTS_LIMIT = 10
    +THEME_ACCOUNT_CONTACT_EMAIL = "anis@kartoza.com"
    +
    +MAP_BASELAYERS = [{
    +    "source": {"ptype": "gxp_olsource", "url": GEOSERVER_PUBLIC_LOCATION + "wms"},
    +    "type": "OpenLayers.Layer",
    +    "args": ["No background"],
    +    "name": "background",
    +    "visibility": False,
    +    "fixed": True,
    +    "group": "background"
    +}, {
    +    "source": {"ptype": "gxp_osmsource"},
    +    "type": "OpenLayers.Layer.OSM",
    +    "name": "mapnik",
    +    "visibility": True,
    +    "fixed": True,
    +    "group": "background"
    +}]
    \ No newline at end of file
    diff --git a/django_project/core/settings/dev.py b/django_project/core/settings/dev.py
    new file mode 100644
    index 0000000..ddfd284
    --- /dev/null
    +++ b/django_project/core/settings/dev.py
    @@ -0,0 +1,96 @@
    +from .project import *  # noqa
    +
    +# Set debug to True for development
    +DEBUG = True
    +TESTING = DEBUG
    +TEMPLATE_DEBUG = DEBUG
    +LOGGING_OUTPUT_ENABLED = DEBUG
    +LOGGING_LOG_SQL = DEBUG
    +
    +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    +
    +# Disable caching while in development
    +CACHES = {
    +    'default': {
    +        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    +    }
    +}
    +
    +ALLOWED_HOSTS = ['*']
    +
    +# Make sure static files storage is set to default
    +STATIC_FILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
    +
    +LOGGING = {
    +    'version': 1,
    +    'disable_existing_loggers': False,
    +    'formatters': {
    +        # define output formats
    +        'verbose': {
    +            'format': (
    +                '%(levelname)s %(name)s %(asctime)s %(module)s %(process)d '
    +                '%(thread)d %(message)s')
    +        },
    +        'simple': {
    +            'format': (
    +                '%(name)s %(levelname)s %(filename)s L%(lineno)s: '
    +                '%(message)s')
    +        },
    +    },
    +    'handlers': {
    +        # console output
    +        'console': {
    +            'class': 'logging.StreamHandler',
    +            'formatter': 'simple',
    +            'level': 'DEBUG',
    +        }
    +    },
    +    'loggers': {
    +        'django.db.backends': {
    +            'handlers': ['console'],
    +            'level': 'INFO',  # switch to DEBUG to show actual SQL
    +        },
    +        'osgeo_importer': {
    +            'handlers': ['console'],
    +            'level': 'DEBUG',
    +        }
    +    },
    +    # root logger
    +    # non handled logs will propagate to the root logger
    +    'root': {
    +        'handlers': ['console'],
    +        'level': 'WARNING'
    +    }
    +}
    +
    +# set up devserver if installed
    +try:
    +    # noinspection PyUnresolvedReferences
    +    import devserver  # noqa
    +    INSTALLED_APPS += (
    +        'devserver',
    +    )
    +    # more details at https://github.com/dcramer/django-devserver#configuration
    +    DEVSERVER_DEFAULT_ADDR = '0.0.0.0'
    +    DEVSERVER_DEFAULT_PORT = '8000'
    +    DEVSERVER_AUTO_PROFILE = False  # use decorated functions
    +    DEVSERVER_TRUNCATE_SQL = True  # squash verbose output, show from/where
    +    DEVSERVER_MODULES = (
    +        # uncomment if you want to show every SQL executed
    +        # 'devserver.modules.sql.SQLRealTimeModule',
    +        # show sql query summary
    +        # 'devserver.modules.sql.SQLSummaryModule',
    +        # Total time to render a request
    +        'devserver.modules.profile.ProfileSummaryModule',
    +
    +        # Modules not enabled by default
    +        # 'devserver.modules.ajax.AjaxDumpModule',
    +        # 'devserver.modules.profile.MemoryUseModule',
    +        # 'devserver.modules.cache.CacheSummaryModule',
    +        # see documentation for line profile decorator examples
    +        # 'devserver.modules.profile.LineProfilerModule',
    +        # show django session information
    +        # 'devserver.modules.request.SessionInfoModule',
    +    )
    +except ImportError:
    +    pass
    diff --git a/django_project/core/settings/dev_docker.py b/django_project/core/settings/dev_docker.py
    new file mode 100644
    index 0000000..be36e6d
    --- /dev/null
    +++ b/django_project/core/settings/dev_docker.py
    @@ -0,0 +1,20 @@
    +# -*- coding: utf-8 -*-
    +"""Settings for when running under docker in development mode."""
    +from .utils import ensure_secret_key_file
    +ensure_secret_key_file()
    +
    +from .dev import *  # noqa
    +import os
    +print os.environ
    +
    +DATABASES = {
    +    'default': {
    +        'ENGINE': 'django.contrib.gis.db.backends.postgis',
    +        'NAME': 'gis',
    +        'USER': 'docker',
    +        'PASSWORD': 'docker',
    +        'HOST': 'db',
    +        'PORT': 5432,
    +        'TEST_NAME': 'unittests',
    +    }
    +}
    diff --git a/django_project/core/settings/prod.py b/django_project/core/settings/prod.py
    new file mode 100644
    index 0000000..a873e83
    --- /dev/null
    +++ b/django_project/core/settings/prod.py
    @@ -0,0 +1,99 @@
    +# coding=utf-8
    +
    +"""Project level settings."""
    +from .project import *  # noqa
    +from .secret import SENTRY_DSN
    +
    +# Hosts/domain names that are valid for this site; required if DEBUG is False
    +# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
    +# Localhost:9000 for vagrant
    +# Changes for live site
    +# ['*'] for testing but not for production
    +
    +ALLOWED_HOSTS = [
    +    'localhost:63300',]
    +
    +# Comment if you are not running behind proxy
    +USE_X_FORWARDED_HOST = True
    +
    +# Set debug to false for production
    +DEBUG = TEMPLATE_DEBUG = False
    +TESTING = DEBUG
    +
    +SERVER_EMAIL = 'tim@kartoza.com'
    +EMAIL_HOST = 'kartoza.com'
    +DEFAULT_FROM_EMAIL = 'secretary@sagta.org.za'
    +
    +
    +STATICFILES_FINDERS += (
    +    'compressor.finders.CompressorFinder',
    +)
    +
    +# Logging
    +if 'raven.contrib.django.raven_compat' in INSTALLED_APPS:
    +    # noinspection PyUnresolvedReferences
    +    import raven  # noqa
    +
    +    RAVEN_CONFIG = {
    +        # sentry url
    +        'dsn': SENTRY_DSN,
    +        # If you are using git, you can also automatically configure the
    +        # release based on the git info.
    +        # Note from Tim: This won't work since we don't mount the root
    +        # of the git project into the docker container...
    +        # 'release': raven.fetch_git_sha(os.path.dirname(__file__)),
    +    }
    +
    +    MIDDLEWARE_CLASSES = (
    +        # We recommend putting this as high in the chain as possible
    +        # see http://raven.readthedocs.org/en/latest/integrations/  ...
    +        # ... django.html#message-references
    +        # This will add a client unique id in messages
    +        'raven.contrib.django.raven_compat.middleware.'
    +        'SentryResponseErrorIdMiddleware',
    +    ) + MIDDLEWARE_CLASSES
    +
    +    # Sentry settings - logs exceptions to a database
    +    LOGGING = {
    +        'version': 1,
    +        'disable_existing_loggers': True,
    +        'root': {
    +            'level': 'WARNING',
    +            'handlers': ['sentry'],
    +        },
    +        'formatters': {
    +            'verbose': {
    +                'format': '%(levelname)s %(asctime)s %(module)s '
    +                          '%(process)d %(thread)d %(message)s'
    +            },
    +        },
    +        'handlers': {
    +            'sentry': {
    +                'level': 'ERROR',
    +                'class':
    +                    'raven.contrib.django.raven_compat.handlers.SentryHandler',
    +            },
    +            'console': {
    +                'level': 'DEBUG',
    +                'class': 'logging.StreamHandler',
    +                'formatter': 'verbose'
    +            }
    +        },
    +        'loggers': {
    +            'django.db.backends': {
    +                'level': 'ERROR',
    +                'handlers': ['console'],
    +                'propagate': False,
    +            },
    +            'raven': {
    +                'level': 'DEBUG',
    +                'handlers': ['console'],
    +                'propagate': False,
    +            },
    +            'sentry.errors': {
    +                'level': 'DEBUG',
    +                'handlers': ['console'],
    +                'propagate': False,
    +            },
    +        },
    +    }
    diff --git a/django_project/core/settings/prod_docker.py b/django_project/core/settings/prod_docker.py
    new file mode 100644
    index 0000000..ed2c9a8
    --- /dev/null
    +++ b/django_project/core/settings/prod_docker.py
    @@ -0,0 +1,40 @@
    +
    +"""Configuration for production server"""
    +# noinspection PyUnresolvedReferences
    +from .prod import *  # noqa
    +import os
    +print os.environ
    +
    +DEBUG = False
    +
    +ALLOWED_HOSTS = ['*']
    +
    +ADMINS = (
    +    ('Muhammad Anis', 'anis@kartoza.com'),)
    +
    +DATABASES = {
    +    'default': {
    +        'ENGINE': 'django.contrib.gis.db.backends.postgis',
    +        'NAME': os.environ['DATABASE_NAME'],
    +        'USER': os.environ['DATABASE_USERNAME'],
    +        'PASSWORD': os.environ['DATABASE_PASSWORD'],
    +        'HOST': os.environ['DATABASE_HOST'],
    +        'PORT': 5432,
    +        'TEST_NAME': 'unittests',
    +    }
    +}
    +
    +
    +# See fig.yml file for postfix container definition
    +#
    +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    +# Host for sending e-mail.
    +EMAIL_HOST = 'smtp'
    +# Port for sending e-mail.
    +EMAIL_PORT = 25
    +# SMTP authentication information for EMAIL_HOST.
    +# See fig.yml for where these are defined
    +EMAIL_HOST_USER = 'noreply@kartoza.com'
    +EMAIL_HOST_PASSWORD = 'docker'
    +EMAIL_USE_TLS = False
    +EMAIL_SUBJECT_PREFIX = '[QGIS-UG]'
    diff --git a/django_project/core/settings/project.py b/django_project/core/settings/project.py
    new file mode 100644
    index 0000000..538e708
    --- /dev/null
    +++ b/django_project/core/settings/project.py
    @@ -0,0 +1,58 @@
    +# coding=utf-8
    +
    +"""Project level settings.
    +
    +Adjust these values as needed but don't commit passwords etc. to any public
    +repository!
    +"""
    +
    +import os  # noqa
    +from django.utils.translation import ugettext_lazy as _
    +from .contrib import *  # noqa
    +
    +# Project apps
    +INSTALLED_APPS += (
    +    # Add any additional project apps here
    +    "charts_app",
    +    "wfs_harvest",
    +
    +)
    +
    +THESAURI = []
    +
    +# Due to profile page does not available,
    +# this will redirect to home page after login
    +LOGIN_REDIRECT_URL = '/'
    +
    +# How many versions to list in each project box
    +PROJECT_VERSION_LIST_SIZE = 10
    +
    +# Set debug to false for production
    +DEBUG = TEMPLATE_DEBUG = True
    +
    +SOUTH_TESTS_MIGRATE = False
    +
    +# Set languages which want to be translated
    +LANGUAGES = (
    +    ('en', _('English')),
    +    ('af', _('Afrikaans')),
    +    ('id', _('Indonesian')),
    +    ('ko', _('Korean')),
    +)
    +
    +# Set storage path for the translation files
    +LOCALE_PATHS = (absolute_path('locale'),)
    +
    +MIDDLEWARE_CLASSES = (
    +                         # Add any additional middleware classes here
    +                     ) + MIDDLEWARE_CLASSES
    +
    +DATABASES = {}
    +
    +# default login url
    +LOGIN_URL = '/account/login/'
    +
    +# maximum clip size in bytes
    +MAXIMUM_CLIP_SIZE = '40000000'
    +
    +
    diff --git a/django_project/core/settings/secret.py b/django_project/core/settings/secret.py
    new file mode 100644
    index 0000000..451ad06
    --- /dev/null
    +++ b/django_project/core/settings/secret.py
    @@ -0,0 +1,8 @@
    +SECRET_KEY = u'k*qrny^q$=60p%$5vx&qrty_*o*wn)s)5g9wom%-r+rjy+-4c&'
    +DISQUS_WEBSITE_SHORTNAME = u'p_k!6=)c6y)nak5^&0m*nywqm7(sd8-c-6t^6i&#af)64b5b8y'
    +COMMENTS_DISQUS_API_SECRET_KEY = ''
    +COMMENTS_DISQUS_API_PUBLIC_KEY = ''
    +COMMENTS_DISQUS_SHORTNAME = ''
    +SENTRY_DSN = ''
    +SOCIAL_AUTH_GITHUB_KEY = '8f650ca006d7d1674820'
    +SOCIAL_AUTH_GITHUB_SECRET = '8a4ad8ab6c3a9adecb7f10cf2d9229a4c44fc57e'
    diff --git a/django_project/core/settings/test.py b/django_project/core/settings/test.py
    new file mode 100644
    index 0000000..ada4a1b
    --- /dev/null
    +++ b/django_project/core/settings/test.py
    @@ -0,0 +1,42 @@
    +
    +from .project import *  # noqa
    +
    +# http://hustoknow.blogspot.com/2011/02/setting-up-django-nose-on-hudson.html
    +INSTALLED_APPS += (
    +    'django_nose',  # don't remove this comma
    +)
    +
    +TEST_RUNNER = 'django.test.runner.DiscoverRunner'
    +
    +NOSE_ARGS = (
    +    '--with-coverage',
    +    '--cover-erase',
    +    '--cover-html',
    +    '--cover-html-dir=xmlrunner/html',
    +    '--cover-inclusive',
    +    # '--cover-package=django_app',
    +    '--nocapture',
    +    '--nologcapture'
    +)
    +
    +
    +EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
    +# change this to a proper location
    +EMAIL_FILE_PATH = '/tmp/'
    +
    +
    +LOGGING = {
    +    # internal dictConfig version - DON'T CHANGE
    +    'version': 1,
    +    'disable_existing_loggers': True,
    +    'handlers': {
    +        'nullhandler': {
    +            'class': 'logging.NullHandler',
    +        },
    +    },
    +    # default root logger
    +    'root': {
    +        'level': 'DEBUG',
    +        'handlers': ['nullhandler'],
    +    }
    +}
    diff --git a/django_project/core/settings/test_docker.py b/django_project/core/settings/test_docker.py
    new file mode 100644
    index 0000000..0142f8b
    --- /dev/null
    +++ b/django_project/core/settings/test_docker.py
    @@ -0,0 +1,20 @@
    +
    +__author__ = 'rischan'
    +
    +# -*- coding: utf-8 -*-
    +from .test import *  # noqa
    +
    +DATABASES = {
    +    'default': {
    +        'ENGINE': 'django.contrib.gis.db.backends.postgis',
    +        'NAME': 'test_db',
    +        'USER': 'docker',
    +        'PASSWORD': 'docker',
    +        'HOST': 'db',
    +        # Set to empty string for default.
    +        'PORT': '',
    +    }
    +}
    +
    +MEDIA_ROOT = '/tmp/media'
    +STATIC_ROOT = '/tmp/static'
    diff --git a/django_project/core/settings/test_travis.py b/django_project/core/settings/test_travis.py
    new file mode 100644
    index 0000000..188e061
    --- /dev/null
    +++ b/django_project/core/settings/test_travis.py
    @@ -0,0 +1,22 @@
    +
    +__author__ = 'rischan'
    +
    +# -*- coding: utf-8 -*-
    +from .test import *  # noqa
    +
    +STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
    +
    +DATABASES = {
    +    'default': {
    +        'ENGINE': 'django.contrib.gis.db.backends.postgis',
    +        'NAME': 'test_db',
    +        'USER': 'postgres',
    +        'PASSWORD': '',
    +        'HOST': 'localhost',
    +        # Set to empty string for default.
    +        'PORT': '',
    +    }
    +}
    +
    +MEDIA_ROOT = '/tmp/media'
    +STATIC_ROOT = '/tmp/static'
    diff --git a/django_project/core/settings/utils.py b/django_project/core/settings/utils.py
    new file mode 100644
    index 0000000..7c44755
    --- /dev/null
    +++ b/django_project/core/settings/utils.py
    @@ -0,0 +1,49 @@
    +# coding=utf-8
    +
    +"""Helpers for settings."""
    +import os
    +
    +# Absolute filesystem path to the Django project directory:
    +DJANGO_ROOT = os.path.dirname(
    +    os.path.dirname(
    +        os.path.dirname(os.path.abspath(__file__))
    +    ))
    +
    +
    +def absolute_path(*args):
    +    """Get an absolute path for a file that is relative to the django root.
    +
    +    :param args: List of path elements.
    +    :type args: list
    +
    +    :returns: An absolute path.
    +    :rtype: str
    +    """
    +    return os.path.join(DJANGO_ROOT, *args)
    +
    +
    +def ensure_secret_key_file():
    +    """Checks that secret.py exists in settings dir.
    +
    +    If not, creates one with a random generated SECRET_KEY setting."""
    +    secret_path = absolute_path('core', 'settings', 'secret.py')
    +    if not os.path.exists(secret_path):
    +        from django.utils.crypto import get_random_string
    +        secret_key = get_random_string(
    +            50, 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)')
    +        disqus_shortname = get_random_string(
    +            50, 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)')
    +        with open(secret_path, 'w') as f:
    +            f.write("SECRET_KEY = " + repr(secret_key) + "\n")
    +            f.write("DISQUS_WEBSITE_SHORTNAME = "
    +                    + repr(disqus_shortname) + "\n")
    +            f.write("COMMENTS_DISQUS_API_SECRET_KEY = ''" + "\n")
    +            f.write("COMMENTS_DISQUS_API_PUBLIC_KEY = ''" + "\n")
    +            f.write("COMMENTS_DISQUS_SHORTNAME = ''" + "\n")
    +            f.write("SENTRY_DSN = ''" + "\n")
    +            f.write("SOCIAL_AUTH_GITHUB_KEY = ''" + "\n")
    +            f.write("SOCIAL_AUTH_GITHUB_SECRET = ''" + "\n")
    +
    +
    +# Import the secret key
    +ensure_secret_key_file()
    diff --git a/haitidata/templates/401.html b/django_project/core/templates/401.html
    similarity index 100%
    rename from haitidata/templates/401.html
    rename to django_project/core/templates/401.html
    diff --git a/haitidata/templates/404.html b/django_project/core/templates/404.html
    similarity index 100%
    rename from haitidata/templates/404.html
    rename to django_project/core/templates/404.html
    diff --git a/haitidata/templates/500.html b/django_project/core/templates/500.html
    similarity index 100%
    rename from haitidata/templates/500.html
    rename to django_project/core/templates/500.html
    diff --git a/haitidata/templates/_actions.html b/django_project/core/templates/_actions.html
    similarity index 100%
    rename from haitidata/templates/_actions.html
    rename to django_project/core/templates/_actions.html
    diff --git a/haitidata/templates/_announcements.html b/django_project/core/templates/_announcements.html
    similarity index 100%
    rename from haitidata/templates/_announcements.html
    rename to django_project/core/templates/_announcements.html
    diff --git a/haitidata/templates/_bulk_permissions_form.html b/django_project/core/templates/_bulk_permissions_form.html
    similarity index 100%
    rename from haitidata/templates/_bulk_permissions_form.html
    rename to django_project/core/templates/_bulk_permissions_form.html
    diff --git a/haitidata/templates/_comments.html b/django_project/core/templates/_comments.html
    similarity index 100%
    rename from haitidata/templates/_comments.html
    rename to django_project/core/templates/_comments.html
    diff --git a/haitidata/templates/_messages.html b/django_project/core/templates/_messages.html
    similarity index 100%
    rename from haitidata/templates/_messages.html
    rename to django_project/core/templates/_messages.html
    diff --git a/haitidata/templates/_permissions.html b/django_project/core/templates/_permissions.html
    similarity index 100%
    rename from haitidata/templates/_permissions.html
    rename to django_project/core/templates/_permissions.html
    diff --git a/haitidata/templates/_permissions_form.html b/django_project/core/templates/_permissions_form.html
    similarity index 100%
    rename from haitidata/templates/_permissions_form.html
    rename to django_project/core/templates/_permissions_form.html
    diff --git a/haitidata/templates/_permissions_form_js.html b/django_project/core/templates/_permissions_form_js.html
    similarity index 100%
    rename from haitidata/templates/_permissions_form_js.html
    rename to django_project/core/templates/_permissions_form_js.html
    diff --git a/haitidata/templates/_status_message.html b/django_project/core/templates/_status_message.html
    similarity index 100%
    rename from haitidata/templates/_status_message.html
    rename to django_project/core/templates/_status_message.html
    diff --git a/haitidata/templates/about.html b/django_project/core/templates/about.html
    similarity index 100%
    rename from haitidata/templates/about.html
    rename to django_project/core/templates/about.html
    diff --git a/haitidata/templates/account/admin_approval_sent.html b/django_project/core/templates/account/admin_approval_sent.html
    similarity index 100%
    rename from haitidata/templates/account/admin_approval_sent.html
    rename to django_project/core/templates/account/admin_approval_sent.html
    diff --git a/haitidata/templates/account/email_confirmation_sent.html b/django_project/core/templates/account/email_confirmation_sent.html
    similarity index 100%
    rename from haitidata/templates/account/email_confirmation_sent.html
    rename to django_project/core/templates/account/email_confirmation_sent.html
    diff --git a/haitidata/templates/account/invite_user.html b/django_project/core/templates/account/invite_user.html
    similarity index 100%
    rename from haitidata/templates/account/invite_user.html
    rename to django_project/core/templates/account/invite_user.html
    diff --git a/haitidata/templates/account/login.html b/django_project/core/templates/account/login.html
    similarity index 100%
    rename from haitidata/templates/account/login.html
    rename to django_project/core/templates/account/login.html
    diff --git a/haitidata/templates/account/logout.html b/django_project/core/templates/account/logout.html
    similarity index 100%
    rename from haitidata/templates/account/logout.html
    rename to django_project/core/templates/account/logout.html
    diff --git a/haitidata/templates/account/password_change.html b/django_project/core/templates/account/password_change.html
    similarity index 100%
    rename from haitidata/templates/account/password_change.html
    rename to django_project/core/templates/account/password_change.html
    diff --git a/haitidata/templates/account/password_reset.html b/django_project/core/templates/account/password_reset.html
    similarity index 100%
    rename from haitidata/templates/account/password_reset.html
    rename to django_project/core/templates/account/password_reset.html
    diff --git a/haitidata/templates/account/signup.html b/django_project/core/templates/account/signup.html
    similarity index 100%
    rename from haitidata/templates/account/signup.html
    rename to django_project/core/templates/account/signup.html
    diff --git a/haitidata/templates/actstream/actor.html b/django_project/core/templates/actstream/actor.html
    similarity index 100%
    rename from haitidata/templates/actstream/actor.html
    rename to django_project/core/templates/actstream/actor.html
    diff --git a/haitidata/templates/admin/backups/confirm_cancel.html b/django_project/core/templates/admin/backups/confirm_cancel.html
    similarity index 100%
    rename from haitidata/templates/admin/backups/confirm_cancel.html
    rename to django_project/core/templates/admin/backups/confirm_cancel.html
    diff --git a/haitidata/templates/admin/base_site.html b/django_project/core/templates/admin/base_site.html
    similarity index 87%
    rename from haitidata/templates/admin/base_site.html
    rename to django_project/core/templates/admin/base_site.html
    index 7d4a462..2d4f154 100644
    --- a/haitidata/templates/admin/base_site.html
    +++ b/django_project/core/templates/admin/base_site.html
    @@ -8,5 +8,5 @@
     
     {% block extrahead %}
         
    -    {% include 'autocomplete_light/static.html' %}
    +{#    {% include 'autocomplete_light/static.html' %}#}
     {% endblock %}
    diff --git a/haitidata/templates/announcements/announcement_confirm_delete.html b/django_project/core/templates/announcements/announcement_confirm_delete.html
    similarity index 100%
    rename from haitidata/templates/announcements/announcement_confirm_delete.html
    rename to django_project/core/templates/announcements/announcement_confirm_delete.html
    diff --git a/haitidata/templates/announcements/announcement_form.html b/django_project/core/templates/announcements/announcement_form.html
    similarity index 100%
    rename from haitidata/templates/announcements/announcement_form.html
    rename to django_project/core/templates/announcements/announcement_form.html
    diff --git a/haitidata/templates/announcements/announcement_list.html b/django_project/core/templates/announcements/announcement_list.html
    similarity index 100%
    rename from haitidata/templates/announcements/announcement_list.html
    rename to django_project/core/templates/announcements/announcement_list.html
    diff --git a/haitidata/templates/announcements/detail.html b/django_project/core/templates/announcements/detail.html
    similarity index 100%
    rename from haitidata/templates/announcements/detail.html
    rename to django_project/core/templates/announcements/detail.html
    diff --git a/haitidata/templates/autocomplete_response.html b/django_project/core/templates/autocomplete_response.html
    similarity index 100%
    rename from haitidata/templates/autocomplete_response.html
    rename to django_project/core/templates/autocomplete_response.html
    diff --git a/haitidata/templates/avatar/add.html b/django_project/core/templates/avatar/add.html
    similarity index 100%
    rename from haitidata/templates/avatar/add.html
    rename to django_project/core/templates/avatar/add.html
    diff --git a/haitidata/templates/avatar/change.html b/django_project/core/templates/avatar/change.html
    similarity index 100%
    rename from haitidata/templates/avatar/change.html
    rename to django_project/core/templates/avatar/change.html
    diff --git a/haitidata/templates/avatar/confirm_delete.html b/django_project/core/templates/avatar/confirm_delete.html
    similarity index 100%
    rename from haitidata/templates/avatar/confirm_delete.html
    rename to django_project/core/templates/avatar/confirm_delete.html
    diff --git a/django_project/core/templates/base.html b/django_project/core/templates/base.html
    new file mode 100644
    index 0000000..e81482b
    --- /dev/null
    +++ b/django_project/core/templates/base.html
    @@ -0,0 +1,324 @@
    +{% load i18n avatar_tags %}
    +
    +
    +  
    +    
    +    
    +    
    +    {% block title %}{{ SITE_NAME }}{% endblock %}
    +    {% block head %}
    +      {% if DEBUG_STATIC %}
    +      
    +      
    +      
    +      
    +      
    +      
    +      {% else %}
    +      
    +      {% endif %}
    +      
    +      
    +      
    +      {% block extra_head %}
    +      {% endblock %}
    +    {% endblock %}
    +    
    +    
    +  
    +
    +  
    +    
    +    {% block header %}
    +	
    +      {% endblock header %}
    +      
    +
    +    
    +
    +  
    + {% block middle %} +
    + {% include "_status_message.html" %} + {% include "_announcements.html" %} + {% include "_messages.html" %} + {% block body_outer %} +
    +
    + {% block body %}{% endblock %} +
    +
    + {% block sidebar %}{% endblock %} +
    +
    + {% endblock %} +
    + {% endblock middle %} +
    + + {% block footer %} + + {% endblock footer %} + + + + {% if not user.is_authenticated %} + + {% endif %} + + + {% if DEBUG_STATIC %} + + + + + + + + + + + + + + {% else %} + + {% endif %} + + + {% include 'autocomplete_light/static.html' %} + + {% block extra_script %}{% endblock extra_script %} + + + + + + diff --git a/haitidata/templates/base/_resourcebase_contact_snippet.html b/django_project/core/templates/base/_resourcebase_contact_snippet.html similarity index 100% rename from haitidata/templates/base/_resourcebase_contact_snippet.html rename to django_project/core/templates/base/_resourcebase_contact_snippet.html diff --git a/haitidata/templates/base/_resourcebase_info_panel.html b/django_project/core/templates/base/_resourcebase_info_panel.html similarity index 100% rename from haitidata/templates/base/_resourcebase_info_panel.html rename to django_project/core/templates/base/_resourcebase_info_panel.html diff --git a/haitidata/templates/base/_resourcebase_opengraph.html b/django_project/core/templates/base/_resourcebase_opengraph.html similarity index 100% rename from haitidata/templates/base/_resourcebase_opengraph.html rename to django_project/core/templates/base/_resourcebase_opengraph.html diff --git a/haitidata/templates/base/_resourcebase_snippet.html b/django_project/core/templates/base/_resourcebase_snippet.html similarity index 100% rename from haitidata/templates/base/_resourcebase_snippet.html rename to django_project/core/templates/base/_resourcebase_snippet.html diff --git a/haitidata/templates/base/_resourcebase_twittercard.html b/django_project/core/templates/base/_resourcebase_twittercard.html similarity index 100% rename from haitidata/templates/base/_resourcebase_twittercard.html rename to django_project/core/templates/base/_resourcebase_twittercard.html diff --git a/haitidata/templates/base/resourcebase_info_panel.html b/django_project/core/templates/base/resourcebase_info_panel.html similarity index 100% rename from haitidata/templates/base/resourcebase_info_panel.html rename to django_project/core/templates/base/resourcebase_info_panel.html diff --git a/haitidata/templates/catalogue/geonode_metadata_full.html b/django_project/core/templates/catalogue/geonode_metadata_full.html similarity index 100% rename from haitidata/templates/catalogue/geonode_metadata_full.html rename to django_project/core/templates/catalogue/geonode_metadata_full.html diff --git a/django_project/core/templates/charts_app/chart_base.html b/django_project/core/templates/charts_app/chart_base.html new file mode 100644 index 0000000..63868a1 --- /dev/null +++ b/django_project/core/templates/charts_app/chart_base.html @@ -0,0 +1,12 @@ +{% extends "site_base.html" %} +{% load i18n %} +{% load url from future %} + +{% block title %} {{ block.super }} {% endblock %} + +{% block body_class %}Charts{% endblock %} + +{% block body_outer %} +{% block body %}{% endblock body %} +{% block sidebar %}{% endblock sidebar %} +{% endblock body_outer %} diff --git a/django_project/core/templates/charts_app/chart_confirm_delete.html b/django_project/core/templates/charts_app/chart_confirm_delete.html new file mode 100644 index 0000000..7baa790 --- /dev/null +++ b/django_project/core/templates/charts_app/chart_confirm_delete.html @@ -0,0 +1,26 @@ +{% extends "charts_app/chart_base.html" %} +{% load i18n %} + +{% block title %}{% trans "Deleting" %} {{ object.title }} — {{ block.super }}{% endblock %} + +{% block body %} + +
    +
    +

    + {% blocktrans with object.title as object_title %} + Are you sure you want to remove {{ object_title }} chart? + {% endblocktrans %} +

    +
    + {% csrf_token %} + +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/django_project/core/templates/charts_app/chart_detail.html b/django_project/core/templates/charts_app/chart_detail.html new file mode 100644 index 0000000..bf72025 --- /dev/null +++ b/django_project/core/templates/charts_app/chart_detail.html @@ -0,0 +1,368 @@ +{% extends "charts_app/chart_base.html" %} +{% load i18n %} +{% load dialogos_tags %} +{% load agon_ratings_tags %} +{% load bootstrap_tags %} +{% load url from future %} +{% load base_tags %} +{% load guardian_tags %} + +{% block page-title %} + {% trans "Explore Charts" %} + +{% endblock %} + +{% block subheader %} +
    +
    +
    +
    +

    {{ object.title }}

    +

    + +

    + {% block social_links %} + {% if SOCIAL_BUTTONS %} + {% include "social_links.html" %} + {% endif %} + {% endblock %} +
    +
    +
    +
    +{% endblock %} + + + +{% block body_outer %} + + + + + + + + + +
    +
    +
    +

    Abstract

    +

    {{ object.abstract }}

    +
    + {% include "_actions.html" %} +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +

    {% trans "Rate this document" %}

    + +
    + +

    {% trans 'Average Rating' %}

    + +
    ({{num_votes}}) + +
    +
    +
    + +
    +
  • + + + +
  • +
  • +

    {% trans "Modify this Chart" %}

    +

    {% trans "Change type of the chart or type of aggregation." %}

    + + + +
    +
    + {% csrf_token %} +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +

    Suggested title:

    +

    Testo di prova

    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
  • +
  • + + + +
  • +
  • + +
  • +
    +
    + + + + + + + + + + + +{% endblock %} diff --git a/django_project/core/templates/charts_app/chart_list.html b/django_project/core/templates/charts_app/chart_list.html new file mode 100644 index 0000000..4003d26 --- /dev/null +++ b/django_project/core/templates/charts_app/chart_list.html @@ -0,0 +1,65 @@ +{% extends "charts_app/chart_base.html" %} +{% load i18n %} +{% load staticfiles %} +{% load url from future %} + +{% block title %}{{ block.super }} {% trans "Charts" %}{% endblock %} +{% block page-title %} + {% trans "Explore Charts" %} + {% if user.is_authenticated %} + + {% endif %} +{% endblock %} + +{% block body_class %}charts + +{% endblock %} + +{% block body %} + + {% with include_type_filter='true' %} + {% with facet_type='charts' %} + {% with header='Chart Type' %} + {% with filter='doc_type__in' %} + {% include "search/_search_content.html" %} + + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} +
    +

    CHARTS

    +
      + {% for chart in object_list %} +
    • {{ chart.title }}
    • +
    • {{ chart.layer }} - {{ chart.category }} - {{ chart.quantity }}
    • +
    • {{ chart.type }} - {{ chart.agg_type }}
    • +
    • {{ chart.abstract }}
    • +
      + {% empty %} +
    • No Charts yet!
    • + {% endfor %} +
    +
    + {% include "_bulk_permissions_form.html" %} + + + +{% endblock %} + +{% block extra_script %} + {% if GEONODE_SECURITY_ENABLED %} + {% include "_permissions_form_js.html" %} + {% endif %} + + {% with include_spatial='true' %} + {% endwith %} +{% endblock extra_script %} diff --git a/django_project/core/templates/charts_app/chart_update_form.html b/django_project/core/templates/charts_app/chart_update_form.html new file mode 100644 index 0000000..9075087 --- /dev/null +++ b/django_project/core/templates/charts_app/chart_update_form.html @@ -0,0 +1,356 @@ +{% extends "charts_app/chart_base.html" %} +{% load i18n %} +{% load dialogos_tags %} +{% load agon_ratings_tags %} +{% load bootstrap_tags %} +{% load url from future %} +{% load base_tags %} +{% load guardian_tags %} + +{% block page-title %} + {% trans "Explore Charts" %} + +{% endblock %} + +{% block subheader %} +
    +
    +
    +
    +

    {{ object.title }}

    +

    + +

    + {% block social_links %} + {% if SOCIAL_BUTTONS %} + {% include "social_links.html" %} + {% endif %} + {% endblock %} +
    +
    +
    +
    +{% endblock %} + + + +{% block body_outer %} + + + + + + + + + +
    +
    +
    +

    Abstract

    +

    {{ object.abstract }}

    +
    + {% include "_actions.html" %} +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +

    {% trans "Rate this document" %}

    + +
    + +

    {% trans 'Average Rating' %}

    + +
    ({{num_votes}}) + +
    +
    +
    + +
    +
  • + + + +
  • +
  • +

    {% trans "Modify this Chart" %}

    +

    {% trans "Change type of the chart or type of aggregation." %}

    + + + +
    +
    + {% csrf_token %} + {{ form.non_field_errors }} +
    + {{ form.layer.as_hidden }} +
    +
    + {{ form.category.as_hidden }} +
    +
    + {{ form.quantity.as_hidden }} +
    +
    + {{ form.title.errors }} + + {{ form.title }} +
    +
    + {{ form.type.errors }} + + {{ form.type }} +
    +
    + {{ form.aggr_type.errors }} + + {{ form.aggr_type }} +
    +
    + {{ form.abstract.errors }} + + {{ form.abstract }} +
    + + +
    +
    +
  • +
  • +{# #} +{# #} +{# #} +
  • +
    +
    + + + + + +
    + +
    + + + + + +{% endblock %} diff --git a/haitidata/templates/developer.html b/django_project/core/templates/developer.html similarity index 100% rename from haitidata/templates/developer.html rename to django_project/core/templates/developer.html diff --git a/haitidata/templates/dialogos/_comment.html b/django_project/core/templates/dialogos/_comment.html similarity index 100% rename from haitidata/templates/dialogos/_comment.html rename to django_project/core/templates/dialogos/_comment.html diff --git a/haitidata/templates/documents/document_base.html b/django_project/core/templates/documents/document_base.html similarity index 100% rename from haitidata/templates/documents/document_base.html rename to django_project/core/templates/documents/document_base.html diff --git a/haitidata/templates/documents/document_detail.html b/django_project/core/templates/documents/document_detail.html similarity index 100% rename from haitidata/templates/documents/document_detail.html rename to django_project/core/templates/documents/document_detail.html diff --git a/haitidata/templates/documents/document_list.html b/django_project/core/templates/documents/document_list.html similarity index 100% rename from haitidata/templates/documents/document_list.html rename to django_project/core/templates/documents/document_list.html diff --git a/haitidata/templates/documents/document_metadata.html b/django_project/core/templates/documents/document_metadata.html similarity index 100% rename from haitidata/templates/documents/document_metadata.html rename to django_project/core/templates/documents/document_metadata.html diff --git a/haitidata/templates/documents/document_metadata_detail.html b/django_project/core/templates/documents/document_metadata_detail.html similarity index 100% rename from haitidata/templates/documents/document_metadata_detail.html rename to django_project/core/templates/documents/document_metadata_detail.html diff --git a/haitidata/templates/documents/document_remove.html b/django_project/core/templates/documents/document_remove.html similarity index 100% rename from haitidata/templates/documents/document_remove.html rename to django_project/core/templates/documents/document_remove.html diff --git a/haitidata/templates/documents/document_replace.html b/django_project/core/templates/documents/document_replace.html similarity index 100% rename from haitidata/templates/documents/document_replace.html rename to django_project/core/templates/documents/document_replace.html diff --git a/haitidata/templates/documents/document_upload.html b/django_project/core/templates/documents/document_upload.html similarity index 100% rename from haitidata/templates/documents/document_upload.html rename to django_project/core/templates/documents/document_upload.html diff --git a/haitidata/templates/documents/document_upload_base.html b/django_project/core/templates/documents/document_upload_base.html similarity index 100% rename from haitidata/templates/documents/document_upload_base.html rename to django_project/core/templates/documents/document_upload_base.html diff --git a/django_project/core/templates/dummy_index.html b/django_project/core/templates/dummy_index.html new file mode 100644 index 0000000..0745f2a --- /dev/null +++ b/django_project/core/templates/dummy_index.html @@ -0,0 +1,10 @@ + + + + + Dummy + + +This is a dummy + + \ No newline at end of file diff --git a/haitidata/templates/facebook_sdk.html b/django_project/core/templates/facebook_sdk.html similarity index 100% rename from haitidata/templates/facebook_sdk.html rename to django_project/core/templates/facebook_sdk.html diff --git a/haitidata/templates/geonode-client/_client_composer_js.html b/django_project/core/templates/geonode-client/_client_composer_js.html similarity index 100% rename from haitidata/templates/geonode-client/_client_composer_js.html rename to django_project/core/templates/geonode-client/_client_composer_js.html diff --git a/haitidata/templates/geonode-client/_client_viewer_js.html b/django_project/core/templates/geonode-client/_client_viewer_js.html similarity index 100% rename from haitidata/templates/geonode-client/_client_viewer_js.html rename to django_project/core/templates/geonode-client/_client_viewer_js.html diff --git a/haitidata/templates/geonode-client/edit_map.html b/django_project/core/templates/geonode-client/edit_map.html similarity index 100% rename from haitidata/templates/geonode-client/edit_map.html rename to django_project/core/templates/geonode-client/edit_map.html diff --git a/haitidata/templates/geonode-client/layer_map.html b/django_project/core/templates/geonode-client/layer_map.html similarity index 99% rename from haitidata/templates/geonode-client/layer_map.html rename to django_project/core/templates/geonode-client/layer_map.html index 2ba679b..6af8bc2 100644 --- a/haitidata/templates/geonode-client/layer_map.html +++ b/django_project/core/templates/geonode-client/layer_map.html @@ -20,8 +20,8 @@ {% else %} printService: "", {% endif %} - /* The URL to a REST map configuration service. This service - * provides listing and, with an authenticated user, saving of + /* The URL to a REST map configuration service. This service + * provides listing and, with an authenticated user, saving of * maps on the server for sharing and editing. */ rest: "{% url "maps_browse" %}", diff --git a/haitidata/templates/geonode-client/map_detail.html b/django_project/core/templates/geonode-client/map_detail.html similarity index 100% rename from haitidata/templates/geonode-client/map_detail.html rename to django_project/core/templates/geonode-client/map_detail.html diff --git a/haitidata/templates/geonode-client/map_new.html b/django_project/core/templates/geonode-client/map_new.html similarity index 100% rename from haitidata/templates/geonode-client/map_new.html rename to django_project/core/templates/geonode-client/map_new.html diff --git a/haitidata/templates/geonode-client/map_view.html b/django_project/core/templates/geonode-client/map_view.html similarity index 100% rename from haitidata/templates/geonode-client/map_view.html rename to django_project/core/templates/geonode-client/map_view.html diff --git a/django_project/core/templates/geonode_base.html b/django_project/core/templates/geonode_base.html new file mode 100644 index 0000000..80d77ad --- /dev/null +++ b/django_project/core/templates/geonode_base.html @@ -0,0 +1,4 @@ +{% extends "site_base.html" %} + +{% load i18n %} +{% load staticfiles %} diff --git a/haitidata/templates/groups/_group_list_item.html b/django_project/core/templates/groups/_group_list_item.html similarity index 100% rename from haitidata/templates/groups/_group_list_item.html rename to django_project/core/templates/groups/_group_list_item.html diff --git a/haitidata/templates/groups/_group_opengraph.html b/django_project/core/templates/groups/_group_opengraph.html similarity index 100% rename from haitidata/templates/groups/_group_opengraph.html rename to django_project/core/templates/groups/_group_opengraph.html diff --git a/haitidata/templates/groups/_group_twittercard.html b/django_project/core/templates/groups/_group_twittercard.html similarity index 100% rename from haitidata/templates/groups/_group_twittercard.html rename to django_project/core/templates/groups/_group_twittercard.html diff --git a/haitidata/templates/groups/activity.html b/django_project/core/templates/groups/activity.html similarity index 100% rename from haitidata/templates/groups/activity.html rename to django_project/core/templates/groups/activity.html diff --git a/haitidata/templates/groups/base.html b/django_project/core/templates/groups/base.html similarity index 100% rename from haitidata/templates/groups/base.html rename to django_project/core/templates/groups/base.html diff --git a/haitidata/templates/groups/email/invite_user.txt b/django_project/core/templates/groups/email/invite_user.txt similarity index 100% rename from haitidata/templates/groups/email/invite_user.txt rename to django_project/core/templates/groups/email/invite_user.txt diff --git a/haitidata/templates/groups/email/invite_user_subject.txt b/django_project/core/templates/groups/email/invite_user_subject.txt similarity index 100% rename from haitidata/templates/groups/email/invite_user_subject.txt rename to django_project/core/templates/groups/email/invite_user_subject.txt diff --git a/haitidata/templates/groups/group_base.html b/django_project/core/templates/groups/group_base.html similarity index 100% rename from haitidata/templates/groups/group_base.html rename to django_project/core/templates/groups/group_base.html diff --git a/haitidata/templates/groups/group_create.html b/django_project/core/templates/groups/group_create.html similarity index 100% rename from haitidata/templates/groups/group_create.html rename to django_project/core/templates/groups/group_create.html diff --git a/haitidata/templates/groups/group_detail.html b/django_project/core/templates/groups/group_detail.html similarity index 100% rename from haitidata/templates/groups/group_detail.html rename to django_project/core/templates/groups/group_detail.html diff --git a/haitidata/templates/groups/group_invite_response.html b/django_project/core/templates/groups/group_invite_response.html similarity index 100% rename from haitidata/templates/groups/group_invite_response.html rename to django_project/core/templates/groups/group_invite_response.html diff --git a/haitidata/templates/groups/group_list.html b/django_project/core/templates/groups/group_list.html similarity index 100% rename from haitidata/templates/groups/group_list.html rename to django_project/core/templates/groups/group_list.html diff --git a/haitidata/templates/groups/group_members.html b/django_project/core/templates/groups/group_members.html similarity index 100% rename from haitidata/templates/groups/group_members.html rename to django_project/core/templates/groups/group_members.html diff --git a/haitidata/templates/groups/group_remove.html b/django_project/core/templates/groups/group_remove.html similarity index 100% rename from haitidata/templates/groups/group_remove.html rename to django_project/core/templates/groups/group_remove.html diff --git a/haitidata/templates/groups/group_remove_maps_data.html b/django_project/core/templates/groups/group_remove_maps_data.html similarity index 100% rename from haitidata/templates/groups/group_remove_maps_data.html rename to django_project/core/templates/groups/group_remove_maps_data.html diff --git a/haitidata/templates/groups/group_update.html b/django_project/core/templates/groups/group_update.html similarity index 100% rename from haitidata/templates/groups/group_update.html rename to django_project/core/templates/groups/group_update.html diff --git a/haitidata/templates/help.html b/django_project/core/templates/help.html similarity index 100% rename from haitidata/templates/help.html rename to django_project/core/templates/help.html diff --git a/haitidata/templates/index.html b/django_project/core/templates/index.html similarity index 100% rename from haitidata/templates/index.html rename to django_project/core/templates/index.html diff --git a/haitidata/templates/lang.js b/django_project/core/templates/lang.js similarity index 100% rename from haitidata/templates/lang.js rename to django_project/core/templates/lang.js diff --git a/django_project/core/templates/layers-paolo/layer_detail.html b/django_project/core/templates/layers-paolo/layer_detail.html new file mode 100644 index 0000000..17d24a8 --- /dev/null +++ b/django_project/core/templates/layers-paolo/layer_detail.html @@ -0,0 +1,708 @@ +{% extends "layers/layer_base.html" %} +{% load i18n %} +{% load dialogos_tags %} +{% load agon_ratings_tags %} +{% load bootstrap_tags %} +{% load pagination_tags %} +{% load url from future %} +{% load base_tags %} +{% load guardian_tags %} + +{% block title %}{{ block.super }} {% trans "Layers" %} | {{ resource.title|default:resource.typename }}{% endblock %} +{% block page-title %} + {% trans "Explore Layers" %} + +{% endblock %} + +{% block head %} + + {% if TWITTER_CARD %} + {% include "base/_resourcebase_twittercard.html" %} + {% endif %} + + {% if OPENGRAPH_ENABLED %} + {% include "base/_resourcebase_opengraph.html" %} + {% endif %} + + {% if preview == 'geoext' %} + {% include "layers/layer_geoext_map.html" %} + {% elif preview == 'OL3' %} + {% include "layers/layer_ol3_map.html" %} + {% elif preview == 'react' %} + {% include 'geonode-client/layer_map.html' %} + {% else %} + {% include "layers/layer_leaflet_map.html" %} + {% endif %} +{{ block.super }} +{% endblock %} + + +{% block body_class %}layers{% endblock %} + +{% block subheader %} +
    +
    +
    +
    +

    {{ resource.title|default:resource.typename }}

    +

    + {{ resource.service_type }} + {% if resource.category %} + {% trans "in" %} {{ resource.category }} | + {% endif %} + {% if resource.date %} + {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} + {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} + {% else %} {% trans "Updated on" %} {{ resource.date }} + {% endif %} + {% endif %} +

    + {% block social_links %} + {% if SOCIAL_BUTTONS %} + {% include "social_links.html" %} + {% endif %} + {% endblock %} +
    +
    +
    +
    +{% endblock %} + +{% block body_outer %} +
    + + + +
    +
    +
    +
    + + + + + + + + +
    + {% include "_actions.html" %} +
    + +
    + +
    + {% include "base/resourcebase_info_panel.html" %} +
    + + {% if resource.is_mosaic %} +
    +
    + +
    + {% csrf_token %} +   +
    + {% if filter %} + {% trans "Active Filter:" %} {{ filter }} + {% endif %} +
    + + + + + + + + + + + + {% autopaginate all_granules.features 10 %} + {% for feature in granules.features %} + + + + + + + + {% endfor %} + +
    {% trans "Bounding Box" %} (minX,minY,maxX,maxY){% trans "Time" %}{% trans "Actions" %}
    {% if feature.properties.time %}{{ feature.properties.time }}{% endif %} + Granule Preview + Granule Remove + +
    +
    + {% paginate %} +
    + {% endif %} + +
    + {% if resource.is_mosaic %} + + + + + + + + + + + + + + + + +
    {% trans "Dimension" %}{% trans "Enabled" %}{% trans "Regex" %}
    {% trans "TIME" %}{% if resource.has_time %}{% trans "True" %}{% else %}{% trans "False" %}{% endif %}{% if resource.time_regex %}{{ resource.time_regex }}{% else %} {% endif %}
    + {% endif %} + {% if resource.attribute_set.all %} + + + + + + + {% if wps_enabled %} + + + + + {% endif %} + + + + {% for attribute in resource.attributes %} + + + + + {% if wps_enabled %} + {% if attribute.unique_values == "NA" %} + + {% else %} + + {% endif %} + + + + {% endif %} + + {% endfor %} + +
    {% trans "Attribute Name" %}{% trans "Label" %}{% trans "Description" %}{% trans "Range" %}{% trans "Average" %}{% trans "Median" %}{% trans "Standard Deviation" %}
    {{ attribute }}{{ attribute.attribute_label|default:"" }}{{ attribute.description|default:"" }}{{ attribute.unique_values }} + + {{ attribute.average|floatformat:"2" }}{{ attribute.median|floatformat:"2" }}{{ attribute.stddev|floatformat:"2" }}
    + {% endif %} +
    + +
    + {% with resource as obj %} + {% include "_comments.html" %} + {% endwith %} +
    + + {% if GEOGIG_ENABLED and resource.link_set.geogig %} + {% with "_geogig_layer_detail.html" as geogig_template %} +
    + {% with resource as obj %} + {% include geogig_template %} + {% endwith %} +
    + {% endwith %} + {% endif %} + +
    + + {% if request.user.is_authenticated %} +

    {% trans "Rate this layer" %}

    + {% user_rating request.user resource "layer" as user_layer_rating %} +
    + {% endif %} +

    {% trans 'Average Rating' %}

    + {% overall_rating resource "layer" as layer_rating %} + {% num_ratings resource as num_votes %} +
    ({{num_votes}}) +
    + +
    + +
    + +
    + +
    +
    + +
    +
    + + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. +
    +
    +
    +
    + +
    +
    + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    +
    +
    +
    + +
      + {% if resource.storeType != "remoteStore" %} +
    • + {% if links or links_download %} + + {% else %} + {% if request.user.is_authenticated %} + + {% endif %} + {% endif %} +
    • + {% endif %} + + + {% if GEOSERVER_BASE_URL %} + {% get_obj_perms request.user for resource.layer as "layer_perms" %} + {% endif %} + +
    • + + + +
    • + + {% if "change_resourcebase_metadata" in perms_list or "change_resourcebase" in perms_list or "delete_resourcebase" in perms_list or "change_layer_style" in layer_perms %} +
    • + +
    • + + {% endif %} + +
    • + +
    • + + + + {% if resource.get_legend %} +
    • +

      {%trans "Legend" %}

      +

      {{ style.sld_title }}

      + {% if resource.get_legend.link_type == 'image' %} + {% if request.user.is_authenticated and 'access_token' in request.session %} +

      + {% else %} +

      + {% endif %} + {% else %} +
      + {% endif %} +
    • + {% endif %} +
    • +

      {% trans "Maps using this layer" %}

      + {% if resource.maps %} +

      {% trans "List of maps using this layer:" %}

      + {% endif %} +
        + {% for maplayer in resource.maps %} +
      • {{ maplayer.map.title }}
      • + {% empty %} +
      • {% trans "This layer is not currently used in any maps." %}
      • + {% endfor %} +
      +
    • +
    • +

      {% trans "Create a map using this layer" %}

      +

      {% trans "Click the button below to generate a new map based on this layer." %}

      + {% trans "Create a Map" %} +
    • + + {% if documents.count > 0 %} +
    • +

      {% trans "Documents related to this layer" %}

      +

      {% trans "List of documents related to this layer:" %}

      + +
    • + {% endif %} + + {% if user.is_authenticated %} +
    • +

      {% trans "Styles" %}

      +

      {% trans "The following styles are associated with this layer. Choose a style to view it in the preview map." %}

      +
        + {% for style in resource.styles.all %} +
      • + {% if resource.default_style == style %} + + (default style) + {% else %} + + {% endif %} + {{ style.sld_title }} +
      • + {% empty %} +
      • {% trans "No styles associated with this layer" %}
      • + {% endfor %} +
      +
    • + {% endif %} + + {% if GEONODE_SECURITY_ENABLED %} + {% if "change_resourcebase_permissions" in perms_list %} +
    • +

      {% trans "Permissions" %}

      +

      {% trans "Click the button below to change the permissions of this layer." %}

      +

      {% trans "Change Layer Permissions" %}

      +
    • + {% endif %} + {% endif %} + + {% if resource.storeType == "remoteStore" %} +
    • +

      {% trans "External service layer" %}

      +
      {% trans "Source" %}: {{ resource.service.title }}
      +
      {% trans "Type" %}: {{ resource.service.type }}
      +
    • + {% endif %} + + {% include "base/_resourcebase_contact_snippet.html" %} +
    + + + {% if GEONODE_SECURITY_ENABLED %} + {% include "_permissions_form.html" %} + {% endif %} + +
    +
    +{% endblock %} + +{% block extra_script %} + + {% if GEOGIG_ENABLED and resource.link_set.geogig %} + {% with "_geogig_scripts.html" as geogig_scripts_template %} + {% include geogig_scripts_template %} + {% endwith %} + {% endif %} + + {% if request.user.is_authenticated %} + {% user_rating_js request.user resource "layer" %} + {% else %} + {% overall_rating resource 'layer' as the_layer_rating %} + {% endif %} + {% include 'rating.html' %} + {% include 'request_download.html' %} + + + {% if GEONODE_SECURITY_ENABLED %} + {% include "_permissions_form_js.html" %} + {% endif %} +{% endblock extra_script %} diff --git a/haitidata/templates/layers/layer_detail.html b/django_project/core/templates/layers-paolo/layer_detail.save.html similarity index 97% rename from haitidata/templates/layers/layer_detail.html rename to django_project/core/templates/layers-paolo/layer_detail.save.html index 2dff65a..9662e80 100644 --- a/haitidata/templates/layers/layer_detail.html +++ b/django_project/core/templates/layers-paolo/layer_detail.save.html @@ -38,16 +38,16 @@ {% block subheader %}
    -
    -
    -
    -

    {{ resource.title|default:resource.typename }}

    -

    +

    +
    +
    +

    {{ resource.title|default:resource.typename }}

    +

    {{ resource.service_type }} {% if resource.category %} - {% trans "in" %} {{ resource.category }} | + {% trans "in" %} {{ resource.category }} | {% endif %} - {% if resource.date %} + {% if resource.date %} {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} {% else %} {% trans "Updated on" %} {{ resource.date }} @@ -59,9 +59,9 @@ {% include "social_links.html" %} {% endif %} {% endblock %} -

    -
    +
    +
    {% endblock %} @@ -227,11 +227,6 @@ {% endif %} - -
    {% with resource as obj %} {% include "_comments.html" %} diff --git a/django_project/core/templates/layers/download_clip.html b/django_project/core/templates/layers/download_clip.html new file mode 100644 index 0000000..06c3914 --- /dev/null +++ b/django_project/core/templates/layers/download_clip.html @@ -0,0 +1,179 @@ +{% load leaflet_tags %} +{% load staticfiles %} + +{% leaflet_js %} +{% leaflet_css %} + + + + + + + + + \ No newline at end of file diff --git a/haitidata/templates/layers/layer_base.html b/django_project/core/templates/layers/layer_base.html similarity index 100% rename from haitidata/templates/layers/layer_base.html rename to django_project/core/templates/layers/layer_base.html diff --git a/haitidata/templates/layers/layer_change_poc.html b/django_project/core/templates/layers/layer_change_poc.html similarity index 100% rename from haitidata/templates/layers/layer_change_poc.html rename to django_project/core/templates/layers/layer_change_poc.html diff --git a/django_project/core/templates/layers/layer_detail.html b/django_project/core/templates/layers/layer_detail.html new file mode 100644 index 0000000..2303f0e --- /dev/null +++ b/django_project/core/templates/layers/layer_detail.html @@ -0,0 +1,801 @@ +{% extends "layers/layer_base.html" %} +{% load i18n %} +{% load dialogos_tags %} +{% load agon_ratings_tags %} +{% load bootstrap_tags %} +{% load pagination_tags %} +{% load url from future %} +{% load base_tags %} +{% load guardian_tags %} + +{% block title %}{{ block.super }} {% trans "Layers" %} | {{ resource.title|default:resource.typename }}{% endblock %} +{% block page-title %} + {% trans "Explore Layers" %} + +{% endblock %} + +{% block head %} + + {% if TWITTER_CARD %} + {% include "base/_resourcebase_twittercard.html" %} + {% endif %} + + {% if OPENGRAPH_ENABLED %} + {% include "base/_resourcebase_opengraph.html" %} + {% endif %} + + {% if preview == 'geoext' %} + {% include "layers/layer_geoext_map.html" %} + {% elif preview == 'OL3' %} + {% include "layers/layer_ol3_map.html" %} + {% elif preview == 'react' %} + {% include 'geonode-client/layer_map.html' %} + {% else %} + {% include "layers/layer_leaflet_map.html" %} + {% endif %} +{{ block.super }} +{% endblock %} + + +{% block body_class %}layers{% endblock %} + +{% block subheader %} +
    +
    +
    +
    +

    {{ resource.title|default:resource.typename }}

    +

    + {{ resource.service_type }} + {% if resource.category %} + {% trans "in" %} {{ resource.category }} | + {% endif %} + {% if resource.date %} + {% if resource.date_type == 'creation' %} {% trans "Created on" %} {{ resource.date }} + {% elif resource.date_type == 'publication' %} {% trans "Published on" %} {{ resource.date }} + {% else %} {% trans "Updated on" %} {{ resource.date }} + {% endif %} + {% endif %} +

    + {% block social_links %} + {% if SOCIAL_BUTTONS %} + {% include "social_links.html" %} + {% endif %} + {% endblock %} +
    +
    +
    +
    +{% endblock %} + +{% block body_outer %} + +
    +
    + +
    +
    +
    + +
    + {% include "_actions.html" %} +
    + +
    + +
    + {% include "base/resourcebase_info_panel.html" %} +
    + + {% if resource.is_mosaic %} +
    +
    + +
    + {% csrf_token %} +   +
    + {% if filter %} + {% trans "Active Filter:" %} {{ filter }} + {% endif %} +
    + + + + + + + + + + + + {% autopaginate all_granules.features 10 %} + {% for feature in granules.features %} + + + + + + + + {% endfor %} + +
    {% trans "Bounding Box" %} (minX,minY,maxX,maxY){% trans "Time" %}{% trans "Actions" %}
    {% if feature.properties.time %}{{ feature.properties.time }}{% endif %} + Granule Preview + Granule Remove + +
    +
    + {% paginate %} +
    + {% endif %} + +
    + {% if resource.is_mosaic %} + + + + + + + + + + + + + + + + +
    {% trans "Dimension" %}{% trans "Enabled" %}{% trans "Regex" %}
    {% trans "TIME" %}{% if resource.has_time %}{% trans "True" %}{% else %}{% trans "False" %}{% endif %}{% if resource.time_regex %}{{ resource.time_regex }}{% else %} {% endif %}
    + {% endif %} + {% if resource.attribute_set.all %} + + + + + + + {% if wps_enabled %} + + + + + {% endif %} + + + + {% for attribute in resource.attributes %} + + + + + {% if wps_enabled %} + {% if attribute.unique_values == "NA" %} + + {% else %} + + {% endif %} + + + + {% endif %} + + {% endfor %} + +
    {% trans "Attribute Name" %}{% trans "Label" %}{% trans "Description" %}{% trans "Range" %}{% trans "Average" %}{% trans "Median" %}{% trans "Standard Deviation" %}
    {{ attribute }}{{ attribute.attribute_label|default:"" }}{{ attribute.description|default:"" }}{{ attribute.unique_values }} + + {{ attribute.average|floatformat:"2" }}{{ attribute.median|floatformat:"2" }}{{ attribute.stddev|floatformat:"2" }}
    + {% endif %} +
    + +
    + {% with resource as obj %} + {% include "_comments.html" %} + {% endwith %} +
    + + {% if GEOGIG_ENABLED and resource.link_set.geogig %} + {% with "_geogig_layer_detail.html" as geogig_template %} +
    + {% with resource as obj %} + {% include geogig_template %} + {% endwith %} +
    + {% endwith %} + {% endif %} + +
    + + {% if request.user.is_authenticated %} +

    {% trans "Rate this layer" %}

    + {% user_rating request.user resource "layer" as user_layer_rating %} +
    + {% endif %} +

    {% trans 'Average Rating' %}

    + {% overall_rating resource "layer" as layer_rating %} + {% num_ratings resource as num_votes %} +
    ({{num_votes}}) +
    + +
    + +
    + +
    + +
      +
    • + +
    • + {% if resource.storeType != "remoteStore" %} +
    • + {% if links or links_download %} + + {% else %} + {% if request.user.is_authenticated %} + + {% endif %} + {% endif %} +
    • + {% endif %} + + + {% if GEOSERVER_BASE_URL %} + {% get_obj_perms request.user for resource.layer as "layer_perms" %} + {% endif %} + +
    • + + + +
    • + + {% if "change_resourcebase_metadata" in perms_list or "change_resourcebase" in perms_list or "delete_resourcebase" in perms_list or "change_layer_style" in layer_perms %} +
    • + +
    • + + {% endif %} + +
    • + +
    • + + + + {% if resource.get_legend %} +
    • +

      {%trans "Legend" %}

      +

      {{ style.sld_title }}

      + {% if resource.get_legend.link_type == 'image' %} + {% if request.user.is_authenticated and 'access_token' in request.session %} +

      + {% else %} +

      + {% endif %} + {% else %} +
      + {% endif %} +
    • + {% endif %} +
    • +

      {% trans "Maps using this layer" %}

      + {% if resource.maps %} +

      {% trans "List of maps using this layer:" %}

      + {% endif %} +
        + {% for maplayer in resource.maps %} +
      • {{ maplayer.map.title }}
      • + {% empty %} +
      • {% trans "This layer is not currently used in any maps." %}
      • + {% endfor %} +
      +
    • +
    • +

      {% trans "Create a map using this layer" %}

      +

      {% trans "Click the button below to generate a new map based on this layer." %}

      + {% trans "Create a Map" %} +
    • + + +
    • +

      {% trans "Charts using this layer" %}

      + {% if resource.maps %} +

      {% trans "List of charts with this layer:" %}

      + {% endif %} +
        + {% for chart in resource.chart_set.all %} +
      • {{ chart.get_type_display }}, Category field = {{chart.category}}, Quantity field = {{chart.quantity}}
      • + {% empty %} +
      • No charts available at this time

      • + {% endfor %} +
      +
    • + {% if "download_resourcebase" in perms_list %} +
    • +

      {% trans "Create a chart using this layer" %}

      +

      {% trans "Click the button below to generate a new chart based on this layer, choosing a quantity and a category field." %}

      + +
      +
      + {% csrf_token %} +
      + +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + +
      +
      +
      + +
      + +

      Suggested title:

      +

      Testo di prova

      +
      +
      +
      + +
      + + +
      +
      + + +
      +
      +
    • + {% endif %} + + + + + + {% if documents.count > 0 %} +
    • +

      {% trans "Documents related to this layer" %}

      +

      {% trans "List of documents related to this layer:" %}

      + +
    • + {% endif %} + + {% if user.is_authenticated %} +
    • +

      {% trans "Styles" %}

      +

      {% trans "The following styles are associated with this layer. Choose a style to view it in the preview map." %}

      +
        + {% for style in resource.styles.all %} +
      • + {% if resource.default_style == style %} + + (default style) + {% else %} + + {% endif %} + {{ style.sld_title }} +
      • + {% empty %} +
      • {% trans "No styles associated with this layer" %}
      • + {% endfor %} +
      +
    • + {% endif %} + + {% if GEONODE_SECURITY_ENABLED %} + {% if "change_resourcebase_permissions" in perms_list %} +
    • +

      {% trans "Permissions" %}

      +

      {% trans "Click the button below to change the permissions of this layer." %}

      +

      {% trans "Change Layer Permissions" %}

      +
    • + {% endif %} + {% endif %} + + {% if resource.storeType == "remoteStore" %} +
    • +

      {% trans "External service layer" %}

      +
      {% trans "Source" %}: {{ resource.service.title }}
      +
      {% trans "Type" %}: {{ resource.service.type }}
      +
    • + {% endif %} + + {% include "base/_resourcebase_contact_snippet.html" %} +
    + + + {% if GEONODE_SECURITY_ENABLED %} + {% include "_permissions_form.html" %} + {% endif %} + +
    +
    +{% endblock %} + +{% block extra_script %} +{{ block.super }} + + {% if GEOGIG_ENABLED and resource.link_set.geogig %} + {% with "_geogig_scripts.html" as geogig_scripts_template %} + {% include geogig_scripts_template %} + {% endwith %} + {% endif %} + + {% if request.user.is_authenticated %} + {% user_rating_js request.user resource "layer" %} + {% else %} + {% overall_rating resource 'layer' as the_layer_rating %} + {% endif %} + {% include 'rating.html' %} + {% include 'request_download.html' %} + {% include 'layers/download_clip.html' %} + + + {% if GEONODE_SECURITY_ENABLED %} + {% include "_permissions_form_js.html" %} + {% endif %} +{% endblock extra_script %} diff --git a/haitidata/templates/layers/layer_geoext_map.html b/django_project/core/templates/layers/layer_geoext_map.html similarity index 100% rename from haitidata/templates/layers/layer_geoext_map.html rename to django_project/core/templates/layers/layer_geoext_map.html diff --git a/haitidata/templates/layers/layer_granule_remove.html b/django_project/core/templates/layers/layer_granule_remove.html similarity index 100% rename from haitidata/templates/layers/layer_granule_remove.html rename to django_project/core/templates/layers/layer_granule_remove.html diff --git a/haitidata/templates/layers/layer_leaflet_map.html b/django_project/core/templates/layers/layer_leaflet_map.html similarity index 58% rename from haitidata/templates/layers/layer_leaflet_map.html rename to django_project/core/templates/layers/layer_leaflet_map.html index 7f2ddf3..b2c7c04 100644 --- a/haitidata/templates/layers/layer_leaflet_map.html +++ b/django_project/core/templates/layers/layer_leaflet_map.html @@ -1,14 +1,21 @@ {% load leaflet_tags %} +{% load staticfiles %} {% leaflet_js %} {% leaflet_css %} + + + \ No newline at end of file diff --git a/django_project/wfs_harvest/tests.py b/django_project/wfs_harvest/tests.py new file mode 100644 index 0000000..fb01967 --- /dev/null +++ b/django_project/wfs_harvest/tests.py @@ -0,0 +1,20 @@ +import urllib + +from django.test import SimpleTestCase +from django.core.urlresolvers import reverse + +from . import views + +# Create your tests here. +class GetFieldsView(SimpleTestCase): + def test_non_existing_lyr(self): + # url = reverse(views.get_fields) + enc_lyrname = urllib.urlencode({'lyrname': 'idontexist'}) + # complete_url = url + '?' + enc_lyrname + # self.client.get('/table') + # self.client.get(complete_url) + self.assertTrue(False) + + def test_non_existing_field(self): + # self.client.get(reverse('wfs_harvest:get_fields')) + self.assertTrue(False) \ No newline at end of file diff --git a/django_project/wfs_harvest/urls.py b/django_project/wfs_harvest/urls.py new file mode 100644 index 0000000..c29d41e --- /dev/null +++ b/django_project/wfs_harvest/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^$', views.get_wfs_csv), + url(r'^fields$', views.get_fields) + ] diff --git a/django_project/wfs_harvest/utils.py b/django_project/wfs_harvest/utils.py new file mode 100644 index 0000000..08788ee --- /dev/null +++ b/django_project/wfs_harvest/utils.py @@ -0,0 +1,58 @@ +import urllib +import xml.etree.ElementTree as ET + +from geonode.layers.models import Layer + +from django.conf import settings + + +def get_fields(layer_id): + layer = Layer.objects.get(pk=layer_id) + lyrname = layer.typename + params = urllib.urlencode({ + 'service':'WFS', + 'version':'1.1.0', + 'request':'DescribeFeatureType', + 'typename':lyrname + }) + + wfs_request = urllib.urlopen('%sows?%s' + % (settings.GEOSERVER_LOCATION, params)) + content = wfs_request.read() + + root = ET.fromstring(content) + namespace = root.tag.split('}')[0] + '}' + xpath = ('./{0}complexType/{0}complexContent/' + '{0}extension/{0}sequence/{0}element').format(namespace) + numeric_types = ['byte', 'decimal', 'int', 'integer', 'long', 'short', + 'boolean', 'double', 'float'] + fields = {} + for element in root.findall(xpath): + type = element.attrib['type'] + if not type.startswith('gml:'): + fields[element.attrib['name']] = type[4:] + + fieldnames = fields.keys() + num_fieldnames = [k for k, v in fields.iteritems() if v in numeric_types] + + return fieldnames, num_fieldnames + + +def get_featno(layer_id): + lyr = Layer.objects.get(pk=layer_id) + wfs_baseurl = lyr.link_set.get(link_type='OGC:WFS').url + + params = urllib.urlencode({ + 'service': 'WFS', + 'version': '1.1.0', + 'request': 'GetFeature', + 'typename': lyr.typename, + 'resultType': 'hits' + }) + + wfs_count_request = urllib.urlopen(wfs_baseurl + '?%s' % params) + content = wfs_count_request.read() + + root = ET.fromstring(content) + + return int(root.attrib['numberOfFeatures']) diff --git a/django_project/wfs_harvest/views.py b/django_project/wfs_harvest/views.py new file mode 100644 index 0000000..6c4330e --- /dev/null +++ b/django_project/wfs_harvest/views.py @@ -0,0 +1,80 @@ +import urllib +import xml.etree.ElementTree as ET + +from django.http import HttpResponse +from django.shortcuts import render +from django.conf import settings + +from geonode.layers.models import Layer + +from utils import get_featno + + +def get_fields(request): + lyrname = request.GET['lyrname'] + params = urllib.urlencode({ + 'service':'WFS', + 'version':'1.1.0', + 'request':'DescribeFeatureType', + 'typename':lyrname + }) + + wfs_request = urllib.urlopen('http://localhost/geoserver/ows?%s' + % params) + content = wfs_request.read() + + root = ET.fromstring(content) + namespace = root.tag.split('}')[0] + '}' + xpath = ('./{0}complexType/{0}complexContent/' + '{0}extension/{0}sequence/{0}element').format(namespace) + numeric_types = ['byte', 'decimal', 'int', 'integer', 'long', 'short', + 'boolean', 'double', 'float'] + fields = {} + for element in root.findall(xpath): + type = element.attrib['type'] + if not type.startswith('gml:'): + fields[element.attrib['name']] = type[4:] + + fieldnames = fields.keys() + num_fieldnames = [k for k, v in fields.iteritems() if v in numeric_types] + + context = { + 'lyrname': lyrname, + 'fieldnames': fieldnames, + 'num_fieldnames': num_fieldnames + } + return render(request, 'wfs_harvest/field_choice.html', context) + + +def get_wfs_csv(request): + qdict = request.GET + typename = qdict['lyrname'] + category_field = qdict['category'] + quantity_field = qdict['quantity'] + + lyr = Layer.objects.get(typename=typename) + featno = get_featno(lyr.id) + if featno > settings.MAX_CSV_RECORDS: + response = HttpResponse('{0} has too many records; csv download' + ' is not available for very large ' + 'datasets'.format(lyr.title)) + response.status_code = 413 + response.reason_phrase = 'REQUEST ENTITY TOO LARGE' + return response + + params = urllib.urlencode({ + 'service':'WFS', + 'version':'1.1.0', + 'request':'GetFeature', + 'typename':typename, + 'propertyName':category_field + ',' + quantity_field, + 'outputFormat':'csv', + 'maxFeatures': str(settings.MAX_CSV_RECORDS) + }) + + wfs_baseurl = lyr.link_set.get(link_type='OGC:WFS').url + wfs_request = urllib.urlopen(wfs_baseurl + '?%s' % params) + content = wfs_request.read() + response = HttpResponse(content, content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename="myfile.csv"' + return response diff --git a/haitidata.egg-info/PKG-INFO b/haitidata.egg-info/PKG-INFO deleted file mode 100644 index 32f8408..0000000 --- a/haitidata.egg-info/PKG-INFO +++ /dev/null @@ -1,96 +0,0 @@ -Metadata-Version: 1.1 -Name: haitidata -Version: 0.2 -Summary: haitidata, based on GeoNode -Home-page: https://github.com/haitidata/haitidata -Author: UNKNOWN -Author-email: UNKNOWN -License: BSD -Description: Haitidata - ======================== - - You should write some docs, it's good for the soul. - - Installation - ------------ - - Install geonode with:: - - $ sudo add-apt-repository ppa:geonode/stable - - $ sudo apt-get update - - $ sudo apt-get install geonode - - Create a new template based on the geonode example project.:: - - $ django-admin startproject my_geonode --template=https://github.com/GeoNode/geonode-project/archive/2.6.zip -epy,rst - $ sudo pip install -e my_geonode - - .. note:: You should NOT use the name geonode for your project as it will conflict with the default geonode package name. - - Usage - ----- - - Rename the local_settings.py.sample to local_settings.py and edit it's content by setting the SITEURL and SITENAME. - - Edit the file /etc/apache2/sites-available/geonode and change the following directive from: - - WSGIScriptAlias / /var/www/geonode/wsgi/geonode.wsgi - - to: - - WSGIScriptAlias / /path/to/my_geonode/my_geonode/wsgi.py - - To avoid having to grant apache permissions (i.e. www-data user and group) to your home dir where you likely setup the geonode-project; you may want to instead copy the wsgi.py file next to geonode.wsgi and replace the file name instead of the entire path. - - $ cp /path/to/my_geonode/my_geonode/wsgi.py /var/www/geonode/wsgi/wsgi.py - - Add the "Directory" directive for your folder like the following example: - - - - Order allow,deny - - Options Indexes FollowSymLinks - - Allow from all - - Require all granted - - IndexOptions FancyIndexing - - - - Restart apache:: - - $ sudo service apache2 restart - - Edit the templates in my_geonode/templates, the css and images to match your needs. - - In the my_geonode folder run:: - - $ python manage.py collectstatic - - Github Considerations - ------------------------ - - While it is helpful to recommit your django project wrapper back to a distributed version control repository. - * It is also important to remember that production instances will store security information in the local_settings.py - * Admin/Devs should always remember to exclude this file in the .gitignore file in the same folder as the .git:: - - $ nano .gitignore - - /{project}/local_settings.py - - save, make sure the file is also removed from git cache:: - - $ git rm -f --cache //local_settings.py - - $ git status - - confirm the file is no longer staged for the next commit or that if it is as "removed" - -Keywords: haitidata geonode django -Platform: UNKNOWN -Classifier: Development Status :: 1 - Planning diff --git a/haitidata.egg-info/SOURCES.txt b/haitidata.egg-info/SOURCES.txt deleted file mode 100644 index 436dd95..0000000 --- a/haitidata.egg-info/SOURCES.txt +++ /dev/null @@ -1,11 +0,0 @@ -README.rst -haitidata/__init__.py -haitidata/settings.py -haitidata/urls.py -haitidata/wsgi.py -haitidata.egg-info/PKG-INFO -haitidata.egg-info/SOURCES.txt -haitidata.egg-info/dependency_links.txt -haitidata.egg-info/not-zip-safe -haitidata.egg-info/requires.txt -haitidata.egg-info/top_level.txt \ No newline at end of file diff --git a/haitidata.egg-info/not-zip-safe b/haitidata.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/haitidata.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/haitidata.egg-info/requires.txt b/haitidata.egg-info/requires.txt deleted file mode 100644 index d3f9f9e..0000000 --- a/haitidata.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -django-tastypie==0.13.0 diff --git a/haitidata/settings.py b/haitidata/settings.py deleted file mode 100644 index f747c50..0000000 --- a/haitidata/settings.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -######################################################################### -# -# Copyright (C) 2012 OpenPlans -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -######################################################################### - -# Django settings for the GeoNode project. -import os -from geonode.settings import * -# -# General Django development settings -# - -SITENAME = 'haitidata' - -# Defines the directory that contains the settings file as the LOCAL_ROOT -# It is used for relative settings elsewhere. -LOCAL_ROOT = os.path.abspath(os.path.dirname(__file__)) - -WSGI_APPLICATION = "haitidata.wsgi.application" - - -# Load more settings from a file called local_settings.py if it exists -try: - from local_settings import * -except ImportError: - pass - -# Additional directories which hold static files -STATICFILES_DIRS.append( - os.path.join(LOCAL_ROOT, "static"), -) - -# Location of url mappings -ROOT_URLCONF = 'haitidata.urls' - -# Location of locale files -LOCALE_PATHS = ( - os.path.join(LOCAL_ROOT, 'locale'), - ) + LOCALE_PATHS - -INSTALLED_APPS = INSTALLED_APPS + ('haitidata', 'osgeo_importer', 'geonode-client') - -LAYER_PREVIEW_LIBRARY = 'react' - -TEMPLATES[0]['DIRS'].insert(0, os.path.join(LOCAL_ROOT, "templates")) - -IMPORT_HANDLERS = [ - # If GeoServer handlers are enabled, you must have an instance of geoserver running. - # Warning: the order of the handlers here matters. - 'osgeo_importer.handlers.FieldConverterHandler', - 'osgeo_importer.handlers.geoserver.GeoserverPublishHandler', - 'osgeo_importer.handlers.geoserver.GeoserverPublishCoverageHandler', - 'osgeo_importer.handlers.geoserver.GeoServerTimeHandler', - 'osgeo_importer.handlers.geoserver.GeoWebCacheHandler', - 'osgeo_importer.handlers.geoserver.GeoServerBoundsHandler', - 'osgeo_importer.handlers.geoserver.GenericSLDHandler', - 'osgeo_importer.handlers.geonode.GeoNodePublishHandler', - 'osgeo_importer.handlers.mapproxy.publish_handler.MapProxyGPKGTilePublishHandler', - 'osgeo_importer.handlers.geoserver.GeoServerStyleHandler', - 'osgeo_importer.handlers.geonode.GeoNodeMetadataHandler' - ] - -OSGEO_DATASTORE = 'datastore' -OSGEO_IMPORTER_GEONODE_ENABLED = True -OSGEO_IMPORTER_VALID_EXTENSIONS = [ - 'shp', 'shx', 'prj', 'dbf', 'kml', 'geojson', 'json', 'tif', 'tiff', - 'gpkg', 'csv', 'zip', 'xml', 'sld' - ] - -LOGGING['loggers']['osgeo_importer'] = {"handlers": ["console"], "level": "DEBUG"} -#DATABASE_ROUTERS = ['{{app_name}}.dbrouters.DefaultOnlyMigrations'] - -# # === MapProxy settings -# # This is the location to place additional configuration files for mapproxy to work from. -# # Currently it is only to allow tiles from gpkg files to be served. -MAPPROXY_CONFIG_DIR = '/opt/geonode-mapproxy-config' -# Name of the mapproxy config file to create for tile gpkg files. -MAPPROXY_CONFIG_FILENAME = 'geonode.yaml' -# This is the base URL for MapProxy WMS services -# URLs will look like this: /geonode/tms/1.0.0///0/0/0.png and a will be -# set as '_' (by conf_from_geopackage()). -MAPPROXY_SERVER_LOCATION = 'http://localhost:8088/geonode/tms/1.0.0/{layer_name}/{grid_name}/' - -#import pyproj -#PROJECTION_DIRECTORY = os.path.join(os.path.dirname(pyproj.__file__), 'data/') -PROJECTION_DIRECTORY = '/tmp/' - -try: - CELERY_IMPORTS = CELERY_IMPORTS + ('osgeo_importer.tasks',) -except: - CELERY_IMPORTS = ('osgeo_importer.tasks',) - -LOCKDOWN_GEONODE = True - -BROKER_URL = "amqp://guest@localhost:5672" -CELERY_ALWAYS_EAGER = True -IMPORT_TASK_SOFT_TIME_LIMIT = 90 - - -SOCIAL_ORIGINS = [{ - "label":"paper-plane-o", - "url":"mailto:?subject={name}&body={url}", - "css_class":"email" -}, { - "label":"facebook", - "url":"http://www.facebook.com/sharer.php?u={url}", - "css_class":"fb" -}, { - "label":"twitter", - "url":"https://twitter.com/share?url={url}&hashtags={hashtags}", - "css_class":"tw" -}, { - "label":"google-plus", - "url":"https://plus.google.com/share?url={url}", - "css_class":"gp" -}] diff --git a/haitidata/static/css/haitidata.css b/haitidata/static/css/haitidata.css deleted file mode 100644 index f8b16d4..0000000 --- a/haitidata/static/css/haitidata.css +++ /dev/null @@ -1,8328 +0,0 @@ -@import "../css/font-awesome.min.css"; -@import "../css/thinkhazard.css"; -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: 'Fira Sans', sans-serif; - font-size: 16px; - line-height: 1.42857143; - color: #37474f; - background-color: #eceff1; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #ff5722; - text-decoration: none; -} -a:hover, -a:focus { - color: #d43300; - text-decoration: underline; -} -a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #eceff1; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 22px; - margin-bottom: 22px; - border: 0; - border-top: 1px solid #eceff1; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 700; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #b0bec5; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 22px; - margin-bottom: 11px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 11px; - margin-bottom: 11px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 41px; -} -h2, -.h2 { - font-size: 34px; -} -h3, -.h3 { - font-size: 28px; -} -h4, -.h4 { - font-size: 20px; -} -h5, -.h5 { - font-size: 16px; -} -h6, -.h6 { - font-size: 14px; -} -p { - margin: 0 0 11px; -} -.lead { - margin-bottom: 22px; - font-size: 18px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 24px; - } -} -small, -.small { - font-size: 87%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #b0bec5; -} -.text-primary { - color: #ff5722; -} -a.text-primary:hover, -a.text-primary:focus { - color: #ee3900; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #ff5722; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #ee3900; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 10px; - margin: 44px 0 22px; - border-bottom: 1px solid #eceff1; -} -ul, -ol { - margin-top: 0; - margin-bottom: 11px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 22px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #b0bec5; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 11px 22px; - margin: 0 0 22px; - font-size: 20px; - border-left: 5px solid #eceff1; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #b0bec5; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eceff1; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 22px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; -} -pre { - display: block; - padding: 10.5px; - margin: 0 0 11px; - font-size: 15px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #546e7a; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #b0bec5; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 22px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #eceff1; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 16.5px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 22px; - font-size: 24px; - line-height: inherit; - color: #546e7a; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 16px; - line-height: 1.42857143; - color: #78909c; -} -.form-control { - display: block; - width: 100%; - height: 36px; - padding: 6px 12px; - font-size: 16px; - line-height: 1.42857143; - color: #78909c; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999999; -} -.form-control::-webkit-input-placeholder { - color: #999999; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eceff1; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 36px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 33px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 49px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 22px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 38px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 33px; - line-height: 33px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 33px; - line-height: 33px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 33px; - min-height: 36px; - padding: 6px 10px; - font-size: 14px; - line-height: 1.5; -} -.input-lg { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 49px; - line-height: 49px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 49px; - line-height: 49px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 49px; - min-height: 42px; - padding: 11px 16px; - font-size: 20px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 45px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 36px; - height: 36px; - line-height: 36px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 49px; - height: 49px; - line-height: 49px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 33px; - height: 33px; - line-height: 33px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 27px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #6c8a99; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 29px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 20px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 14px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 16px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #ff5722; - border-color: #ff4408; -} -.btn-primary:focus, -.btn-primary.focus { - color: #ffffff; - background-color: #ee3900; - border-color: #882100; -} -.btn-primary:hover { - color: #ffffff; - background-color: #ee3900; - border-color: #ca3100; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #ee3900; - border-color: #ca3100; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #ffffff; - background-color: #ca3100; - border-color: #882100; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #ff5722; - border-color: #ff4408; -} -.btn-primary .badge { - color: #ff5722; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #27ca3b; - border-color: #23b535; -} -.btn-success:focus, -.btn-success.focus { - color: #ffffff; - background-color: #1f9f2f; - border-color: #0e4a16; -} -.btn-success:hover { - color: #ffffff; - background-color: #1f9f2f; - border-color: #198126; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #1f9f2f; - border-color: #198126; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #ffffff; - background-color: #198126; - border-color: #0e4a16; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #27ca3b; - border-color: #23b535; -} -.btn-success .badge { - color: #27ca3b; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #1fa0a0; - border-color: #1b8b8b; -} -.btn-info:focus, -.btn-info.focus { - color: #ffffff; - background-color: #177575; - border-color: #062020; -} -.btn-info:hover { - color: #ffffff; - background-color: #177575; - border-color: #115757; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #177575; - border-color: #115757; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #ffffff; - background-color: #115757; - border-color: #062020; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #1fa0a0; - border-color: #1b8b8b; -} -.btn-info .badge { - color: #1fa0a0; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #ff8f31; - border-color: #ff8118; -} -.btn-warning:focus, -.btn-warning.focus { - color: #ffffff; - background-color: #fd7300; - border-color: #974500; -} -.btn-warning:hover { - color: #ffffff; - background-color: #fd7300; - border-color: #d96300; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #fd7300; - border-color: #d96300; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #ffffff; - background-color: #d96300; - border-color: #974500; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #ff8f31; - border-color: #ff8118; -} -.btn-warning .badge { - color: #ff8f31; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #af0900; - border-color: #960800; -} -.btn-danger:focus, -.btn-danger.focus { - color: #ffffff; - background-color: #7c0600; - border-color: #160100; -} -.btn-danger:hover { - color: #ffffff; - background-color: #7c0600; - border-color: #580500; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #7c0600; - border-color: #580500; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #ffffff; - background-color: #580500; - border-color: #160100; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #af0900; - border-color: #960800; -} -.btn-danger .badge { - color: #af0900; - background-color: #ffffff; -} -.btn-link { - color: #ff5722; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #d43300; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #b0bec5; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 16px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 10px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #546e7a; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #4a606b; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #ff5722; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #b0bec5; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 14px; - line-height: 1.42857143; - color: #b0bec5; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 49px; - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 49px; - line-height: 49px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 33px; - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 33px; - line-height: 33px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 16px; - font-weight: normal; - line-height: 1; - color: #78909c; - text-align: center; - background-color: #eceff1; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 14px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 20px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eceff1; -} -.nav > li.disabled > a { - color: #b0bec5; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #b0bec5; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eceff1; - border-color: #ff5722; -} -.nav .nav-divider { - height: 1px; - margin: 10px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eceff1 #eceff1 #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #78909c; - background-color: #eceff1; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #eceff1; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #ff5722; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #eceff1; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 22px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 14px 15px; - font-size: 20px; - line-height: 22px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 22px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 22px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 14px; - padding-bottom: 14px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 7px; - margin-bottom: 7px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 7px; - margin-bottom: 7px; -} -.navbar-btn.btn-sm { - margin-top: 8.5px; - margin-bottom: 8.5px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 14px; - margin-bottom: 14px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #dce2e5; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #dce2e5; -} -.navbar-inverse .navbar-nav > li > a { - color: #dce2e5; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #dce2e5; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #dce2e5; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #dce2e5; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 22px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #b0bec5; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 22px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #ff5722; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #d43300; - background-color: #eceff1; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #b0bec5; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 20px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 14px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 22px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eceff1; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #b0bec5; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #b0bec5; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #93a6af; -} -.label-primary { - background-color: #ff5722; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #ee3900; -} -.label-success { - background-color: #27ca3b; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #1f9f2f; -} -.label-info { - background-color: #1fa0a0; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #177575; -} -.label-warning { - background-color: #ff8f31; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #fd7300; -} -.label-danger { - background-color: #af0900; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #7c0600; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 14px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #b0bec5; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #ff5722; - background-color: #ffffff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 2em; - padding-bottom: 2em; - margin-bottom: 2em; - color: inherit; - background-color: #ff5722; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 1em; - font-size: 24px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #ee3900; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; - padding-left: 15px; - padding-right: 15px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 3.2em; - padding-bottom: 3.2em; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 4em; - padding-right: 4em; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 72px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 22px; - line-height: 1.42857143; - background-color: #eceff1; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #ff5722; -} -.thumbnail .caption { - padding: 9px; - color: #37474f; -} -.alert { - padding: 15px; - margin-bottom: 22px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 22px; - margin-bottom: 22px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 14px; - line-height: 22px; - color: #ffffff; - text-align: center; - background-color: #ff5722; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #27ca3b; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #1fa0a0; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #ff8f31; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #af0900; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eceff1; - color: #b0bec5; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #b0bec5; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #fff2ee; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 22px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 18px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 22px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #546e7a; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #546e7a; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #ff5722; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #ff5722; - border-color: #ff5722; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ff5722; -} -.panel-primary > .panel-heading .badge { - color: #ff5722; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ff5722; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 24px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: 'Fira Sans', sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: 'Fira Sans', sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 16px; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 16px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -moz-transition: -moz-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - -moz-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on June 1, 2017 */ -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-light-webfont.woff2') format('woff2'), url('../fonts/firasans-light-webfont.woff') format('woff'), url('../fonts/firasans-light.otf') format("opentype"); - font-weight: 200; - font-style: normal; -} -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-book-webfont.woff2') format('woff2'), url('../fonts/firasans-book-webfont.woff') format('woff'), url('../fonts/firasans-book.otf') format("opentype"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: 'Fira Sans'; - src: url('../fonts/firasans-bold-webfont.woff2') format('woff2'), url('../fonts/firasans-bold-webfont.woff') format('woff'), url('../fonts/firasans-bold.otf') format("opentype"); - font-weight: 700; - font-style: normal; -} -/* Basics ------------------------ */ -html { - -webkit-font-smoothing: antialiased !important; -} -body { - background: #37474f; - font-family: 'Fira Sans', sans-serif; - font-size: 16px; - padding-top: 60px; -} -a { - color: #ff5722; -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: 700; -} -select { - background: white; - border: 1px solid #b0bec5; - height: 30px; - line-height: 30px; -} -code { - background-color: #eceff1; - color: #1fa0a0; - white-space: pre-wrap; - /* css-3 */ - white-space: -moz-pre-wrap; - /* Mozilla, since 1999 */ - white-space: -pre-wrap; - /* Opera 4-6 */ - white-space: -o-pre-wrap; - /* Opera 7 */ - word-wrap: break-word; - /* Internet Explorer 5.5+ */ -} -form label { - margin-right: 2.5em; -} -form input { - /*border: 1px solid @gray;*/ - padding: 5px; -} -/* ------ Nav ------------------------------- */ -.navbar { - margin-bottom: 0; -} -.navbar .toolbar { - margin-left: 1em; -} -.navbar-default { - background: white; - border: 0; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); -} -.navbar-default .navbar-nav > li > a { - color: #546e7a; - font-weight: 400; - padding-top: 25px; - padding-bottom: 25px; -} -.navbar-default .navbar-nav > li > a:hover { - color: #ff5722; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:focus, -.navbar-default .navbar-nav > .open > a:hover { - background-color: #ff5722; - color: white; -} -.navbar-nav .dropdown-menu { - background-color: #ff5722; - border-top: 1px solid #ff5722; -} -.navbar-nav .dropdown-menu a { - color: white; -} -.navbar-nav .dropdown-menu li a:hover { - background-color: #ee3900; - color: white; -} -.navbar-nav .dropdown-menu .divider { - background-color: #ee3900; -} -.navbar-nav .search { - left: 15px; - position: relative; - color: #444; - top: 20px; - margin-right: 25px; -} -.navbar-nav .search .fa-search { - position: absolute; - top: 8px; - left: 10px; -} -.navbar-nav .search input { - background: #eceff1; - width: 120px; - height: 32px; - border: 1px solid #eceff1; - border-radius: 5px; - outline-width: 0; - text-indent: 32px; - -webkit-transition: width 0.2s; - transition: width 0.2s; -} -.navbar-nav .search input:focus { - width: 240px; -} -.navbar-nav .avatar img { - border-radius: 50%; - margin-bottom: -15px; - margin-right: 10px; - margin-top: -15px; - height: 42px; - width: 42px; -} -.navbar-nav .fa-angle-down { - margin-left: 10px; -} -.navbar-brand { - background: url("../img/logo.png") 0 12px no-repeat; - background-size: 100%; - margin-right: 2em; - text-indent: -9999px; - height: 65px; - width: 200px; -} -.navbar-collapse { - max-height: none; -} -.navbar-header i { - color: white; - font-size: 2em; -} -.navbar-header button { - border: 0; - margin-top: 0.75em; -} -/* ------ Layout ------------------------------- */ -header { - background: #ff5722; - color: white; - margin-bottom: 2em; - padding-top: 1em; - padding-bottom: 1em; -} -header .btn-primary { - background: #ee3900; - border: 1px solid #ee3900; -} -header .btn-primary:hover { - background: #d43300; -} -header .btn-icon { - background: #d43300; - border: 1px solid #d43300; -} -header .btn-icon:hover { - background: #bb2d00; -} -#wrap { - background: #fbfbfc; - padding-bottom: 2.5em; - width: 100%; -} -/* ------ Article ------------------------------- */ -article.tab-pane { - padding: 20px 0; -} -.no-style-list { - list-style-type: none; - margin-top: 20px; -} -.dl-horizontal dt { - text-overflow: clip; - white-space: normal; - overflow: hidden; -} -.page-title { - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -section#subheader { - background: white; - /*box-shadow: 1px 1px 2px rgba(0,0,0,0.1);*/ - border-bottom: 1px solid #eceff1; - margin-bottom: 1em; - margin-top: -2em; - padding-bottom: 0.4em; - padding-top: 0; -} -section#subheader p { - color: #b0bec5; - display: inline-block; -} -section#subheader .btn-group { - margin-top: -1em; -} -/* ------ Footer ------------------------------- */ -section#contact { - background: #0e4b4b; - color: white; - padding-bottom: 3em; - padding-top: 1em; -} -section#contact h3 { - font-weight: 400; -} -footer { - background: #37474f; - color: white; - padding-bottom: 3em; - padding-top: 2em; -} -footer a { - color: #ff5722; -} -footer img { - margin-right: -10px; - width: 50%; -} -footer select { - color: #37474f; -} -/* ------ Home ------------------------------- */ -.home #wrap { - margin-top: 0; - padding-bottom: 0; -} -.home .jumbotron { - background: #ff5722; - /*background: linear-gradient( rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2) ), url('../img/jumbotron.jpg') no-repeat;*/ - /*background: @brand-primary url('../img/haiti.png') no-repeat; - background-position: right center; - background-size: 50%; */ - color: white; - margin-bottom: 0; - padding: 5em 0; - text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); -} -.home .jumbotron a { - color: #37474f; -} -.home .jumbotron p { - font-weight: 400; - margin-bottom: 0; -} -.home .jumbotron .btn-default { - background: rgba(0, 0, 0, 0.4); - border: 2px solid white; - color: white; - font-weight: 600; - margin-top: 1em; - min-width: 320px; -} -.home .jumbotron .btn-default:hover { - background: rgba(128, 0, 0, 0.4); -} -.home .big-search { - background: #546e7a; - color: white; - padding-bottom: 3em; - padding-top: 1em; -} -.home .big-search h1, -.home .big-search p { - text-align: center; -} -.home .big-search a { - color: #ff5722; -} -.home .big-search .search { - left: 0; - position: relative; - color: #444; - top: 20px; - padding-bottom: 2em; - margin: auto; - width: 50%; -} -.home .big-search .search input { - width: 100%; - height: 56px; - border: 1px solid #546e7a; - border-radius: 5px; - outline-width: 0; - font-size: 1.5em; -} -.home .big-search .search input { - text-indent: 64px; -} -.home .big-search .search .fa-search { - position: absolute; - top: 10px; - left: 15px; -} -.home .big-search .btn-default { - background: transparent; - border: none; -} -.home .big-search .btn-default:hover { - text-decoration: underline; -} -.home #datasets { - background: #ff5722; - color: white; - padding: 1em 0; -} -.home #datasets p { - font-size: 14px; -} -.home #datasets h4 { - text-transform: uppercase; - font-size: 14px; -} -.home #datasets a { - color: white; -} -.home #datasets a:hover { - text-decoration: none; -} -.home #datasets a .category { - background: #ff5722; - border-radius: 4px; - margin: 0 -15px; - padding: 2em 0; -} -.home #datasets a .category:hover { - background: #d43300; -} -.home #datasets a span { - font-size: 4em; -} -.home #hazards { - background: #37474f; - color: white; - padding: 2em 0 3em; - text-align: center; -} -.home #hazards h2 { - margin-bottom: 1em; -} -.home #hazards a { - color: white; -} -.home #hazards a:hover { - background: #ee3900; - text-decoration: none; -} -.home #hazards span { - font-size: 4em; -} -.home #imagery { - background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2)), url('../img/jumbotron.jpg') no-repeat; - background-position: center; - background-size: cover; - color: white; - margin-bottom: 0; - padding: 5em 0; - text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4); -} -.home #imagery h3 { - padding-top: 2em; -} -.home #imagery a { - color: #37474f; -} -.home #imagery p { - font-weight: 400; - margin-bottom: 0; -} -.home #showcase { - background: #eceff1; - padding-bottom: 2em; - padding-top: 1em; - text-align: center; -} -.home #showcase .col-md-3 { - padding: 2em 1em; -} -.home #showcase .col-md-3 img { - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.125); - height: 180px; - width: 100%; -} -.home #showcase p { - font-size: 18px; -} -.home #osm { - background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 50%, #ff5722 50%, #ff5722 100%), url("../img/osm-02.jpg") no-repeat; - /*background-size: cover;*/ - min-height: 320px; - padding: 0; -} -.home #osm .col-md-8 { - background: #ff5722; - color: white; - min-height: 320px; - padding: 1em 2em; -} -.home #osm .col-md-8 .btn-primary { - border-color: white; - width: 160px; -} -.home #osm p { - font-size: 18px; -} -/* autocomplete -------------------------*/ -.yourlabs-autocomplete { - top: 100%; -} -.input-group .yourlabs-autocomplete { - top: 30px !important; -} -/* Items ------------------------ */ -.actions .fa, -.filter .fa { - margin-right: 8px; -} -.items-list { - padding: 10px 0; -} -.items-list .btn { - margin-right: 5px; - margin-top: 10px; -} -.items-list .item-info { - border-top: 1px solid #eceff1; -} -.items-list h4 { - font-weight: 400; - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.items-list h4 a { - color: #37474f; -} -.items-list h4 a:hover { - color: #af0900; - text-decoration: none; -} -.items-list .owner { - color: #37474f; - font-size: 14px; -} -.items-list .owner a { - color: #37474f; -} -.items-list .owner a:hover { - color: #af0900; - text-decoration: none; -} -.items-list .thumb img { - border: 1px solid #eceff1; - width: 100%; -} -.items-list .abstract { - color: #b0bec5; - font-weight: 300; - min-height: 80px; -} -.items-list .actions { - color: #b0bec5; - font-weight: 300; -} -.items-list .actions i { - margin-right: 0.75em; -} -.items-list .actions a { - color: #b0bec5; - margin-right: 0.5em; -} -.items-list .actions a:hover { - color: #78909c; - text-decoration: none; -} -/* Layers ------------------------ */ -.item-container { - padding: 1em; -} -.profile-avatar { - background: white; - border: 1px solid #b0bec5; - padding: 0; -} -.profile-avatar h5 a { - color: #37474f; - display: block; - margin-bottom: -0.5em; - margin-top: 1em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.profile-avatar h5 a:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar h5 a i { - margin-left: 0.75em; -} -.profile-avatar h5 a i:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar .list-inline { - margin: 0.5em 0; -} -.item-thumb { - padding-left: 0; - padding-right: 0; -} -.item-thumb img { - width: 100%; -} -.item-details { - background: white; - color: #37474f; -} -.item-details .item-meta { - margin-top: 1em; -} -.item-details .item-meta .item-category { - font-size: 12px; - text-transform: uppercase; -} -.item-details .btn-sm { - margin-right: -17px; - margin-top: -1px; - padding: 0.5em 1em; -} -.item-details .item-items { - border-top: 1px solid #eceff1; -} -.item-details .item-items ul { - margin: 0 0 0 -15px; - padding: 0.5em; -} -.item-details .item-items ul i { - margin-right: 0.5em; -} -.detail-page-actions { - margin-top: 20px; -} -.detail-page-actions i { - padding-right: 3px; -} -.layer-actions { - margin-top: 20px; -} -.layer-actions i { - padding-right: 3px; -} -.edit-modal { - text-align: center; -} -.arcgis-legend > li { - text-align: right; -} -.arcgis-legend > li > img { - padding-right: 25px; -} -.grid-spacer { - margin-top: 30px; -} -/* ------ OSGeo Importer ------------------------------- */ -body.importer h4 { - margin-bottom: 1.5em; -} -body.importer .well { - background: white; - border: 1px solid #b0bec5; - padding: 1.25em 1.5em 0.5em 1em; -} -body.importer .well p { - line-height: 0.5em; -} -body.importer .well hr { - margin: 0.5em 0; -} -body.importer .well .layer-in-upload { - background-color: white; - padding: 0.5em; -} -body.importer .well .table-condensed { - font-size: 0.75em; -} -/* Control items ------------------------ */ -.controls { - width: 320px; -} -.controls > div, -.controls > input, -.controls > select, -.controls > textarea { - width: 320px; -} -/* Maps ------------------------ */ -.map-actions { - margin-top: 20px; -} -.map-actions i { - padding-right: 3px; -} -/* Documents ------------------------ */ -.documents-actions { - margin-top: 20px; -} -.documents-actions i { - padding-right: 3px; -} -/* People ------------------------ */ -.profile-container { - padding: 1em; -} -.profile-avatar { - background: white; - border: 1px solid #eceff1; - padding: 0; -} -.profile-avatar h5 a { - color: #37474f; - display: block; - margin-bottom: -0.5em; - margin-top: 1em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.profile-avatar h5 a:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar h5 a i { - margin-left: 0.75em; -} -.profile-avatar h5 a i:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar .profile-items { - border-top: 1px solid #eceff1; - color: #78909c; -} -.profile-avatar .profile-items i { - margin-left: 0; - margin-right: 0.125em; -} -.profile-avatar .profile-items i a:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar .profile-items .list-inline { - margin: 0.5em 0; -} -.profile-avatar li a { - color: #78909c; - margin-right: 0.5em; -} -.profile-avatar li a:hover { - color: #af0900; - text-decoration: none; -} -.profile-avatar img { - margin: 0; - width: 100%; -} -.profile-image { - padding-left: 0; - padding-right: 0; -} -.profile-image img { - width: 100%; -} -.profile-details { - background: white; - color: #37474f; -} -.profile-details .group-logo { - margin: 0.5em; - padding: 0; -} -.profile-details .group-logo img { - width: 60px; -} -/* ------ Search ------------------------------- */ -nav.filter h4 { - background: #546e7a; - font-size: 14px; - font-weight: 600; - padding: 10px 0; - text-transform: uppercase; - border-radius: 3px; -} -nav.filter h4 a { - color: white; -} -nav.filter h4 a.toggle { - text-decoration: none; -} -nav.filter h4 i { - margin-left: 8px; -} -nav.filter .active { - color: #1fa0a0; -} -nav.filter .active .badge { - background: #1fa0a0; -} -nav.filter .closed { - display: none; -} -nav.filter li a { - border-bottom: 1px solid #eceff1; - cursor: pointer; - padding: 5px 10px; -} -.selections h5 { - font-weight: 400; -} -.selections .thumb { - float: left; -} -#sort { - cursor: pointer; -} -#sort a { - color: #b0bec5; -} -#sort .selected { - font-weight: 700; -} -/* Groups ------------------------ */ -.group-container { - padding: 1em; -} -.group-avatar { - border: 1px solid #eceff1; - padding: 0; -} -.group-avatar h5 a { - color: #37474f; - display: block; - margin-bottom: -0.5em; - margin-top: 1em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.group-avatar h5 a:hover { - color: #af0900; - text-decoration: none; -} -.group-avatar h5 a i { - margin-left: 0.75em; -} -.group-avatar h5 a i:hover { - color: #af0900; - text-decoration: none; -} -.group-items { - border-top: 1px solid #eceff1; - color: #78909c; -} -.group-items i { - margin-left: 0; - margin-right: 0.125em; -} -.group-items i a:hover { - color: #af0900; - text-decoration: none; -} -.group-items .list-inline { - margin: 0.5em 0; -} -.group-image { - height: 120px; - overflow: hidden; -} -.group-container .group-logo { - padding: 1em 0; - width: 100%; -} -.group-details .group-logo img { - width: 100%; -} -/* Upload Layers ------------------------ */ -#drop-zone { - background: #eceff1; - margin-bottom: 10px; - padding: 5px; - border: 2px dashed #b0bec5; -} -#drop-zone h3 { - color: #b0bec5; - margin: 20px 0; - text-align: center; -} -#drop-zone h3 i { - font-size: 3em; -} -#clear-button, -#upload-button { - margin-top: 20px; -} -/* Upload Documents ------------------------ */ -#upload_form input[type="text"] { - display: block; - margin: 0; - width: 480px; - appearance: none; - box-shadow: none; - border-radius: none; - transition: box-shadow 0.3s, border 0.3s; -} -#upload_form input[type="text"]:focus { - border: solid 1px #707070; - box-shadow: 0 0 5px 1px #969696; - outline: none; -} -#upload_form #id_doc_file { - padding: 0.5em; - width: 480px; -} -#upload_form #id_doc_url { - display: block; - width: 480px; -} -#upload_form #s2id_resource { - display: block; - width: 480px; -} -@media (max-width: 991px) { - #upload_form input[type="text"] { - width: 360px; - } - #upload_form #id_doc_file, - #upload_form #id_doc_url, - #upload_form #s2id_resource { - width: 360px; - } -} -/* Upload Time ------------------------ */ -/*#timeForm label { - display: inline; - } -.formSection { - margin-bottom: 1em; - } - .right input, .right select { - } - .left input { - line-height: 2em; - } - form input, form select { - font-size: small; - } - form label { - line-height: 2em; - } - .clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - } - .clearfix { - display: inline-block; - } - * html .clearfix { - height: 1%; - } /* Hides from IE-mac \*/ -/*.clearfix { - display: block; - } - #format_input input { - width:8em; - } - #timehelp p { - color: black !important; - } - #timehelp code { - background: @gray-light; - }*/ -/* Etc ------------------------ */ -.rotate-45 { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - /*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/ -} -.select2-container-multi .select2-choices .select2-search-field input { - font-family: 'Fira Sans', sans-serif; - height: auto; -} -.datepicker { - border-radius: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; -} -.filter input.datepicker { - width: 100%; -} -#composerCart .list-group i { - margin-right: 0; -} -.selections { - margin-top: 1em; -} -.form-horizontal .form-group { - margin-left: 0; - margin-right: 0; -} -.comment { - padding: 1em 0 0.5em; -} -.comment .avatar img { - border-radius: 50%; -} -.comment small { - font-weight: bold; - color: #777; - margin-left: 10px; -} -.comment button, -.comment p { - margin-left: 58px; - margin-top: -0.5em; -} -.list-group-item .avatar img { - border-radius: 50%; - margin-right: 0.5em; -} -/* Activity - ----------------------------- */ -.no-style-list { - list-style-type: none; - margin-top: 20px; -} -.activity-item { - border-bottom: 1px solid #b0bec5; - border-left: 1px solid #b0bec5; - color: #b0bec5; - margin-top: -10px; - padding: 20px 18px; -} -.activity-item .comment { - content: "\f086"; -} -.activity-item .comment:before { - content: "\f086"; -} -.activity-item .delete { - content: "\f014"; -} -.activity-item .delete:before { - content: "\f014"; -} -.activity-item .edit { - content: "\f14b"; -} -.activity-item .edit:before { - content: "\f14b"; -} -.activity-item .layer { - content: "\f096"; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - /*filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);*/ -} -.activity-item .layer:before { - content: "\f096"; -} -.activity-item .map { - content: "\f041"; -} -.activity-item .map:before { - content: "\f041"; -} -.activity-item .upload { - content: "\f093"; -} -.activity-item .upload:before { - content: "\f093"; -} -.icon-activity { - background: #b0bec5; - -moz-border-radius: 20px; - -webkit-border-radius: 20px; - border-radius: 20px; - border: 2px solid white; - color: white; - float: left; - font-family: FontAwesome; - font-weight: normal; - font-size: 1.30em; - font-style: normal; - height: 35px; - line-height: 1.25em; - margin: 0 10px 10px -35px; - padding: 4px; - text-align: center; - text-decoration: inherit; - width: 35px; -} -.thumb-activity { - clear: both; - height: 60px; -} -.thumb-activity img { - border: 1px solid #78909c; - float: left; - margin-right: 5px; - width: 60px; -} -.activity { - content: "\f045"; -} -.activity:before { - content: "\f045"; -} -.activity-timestamp { - margin-top: -10px; -} -#permission_form .select2-container { - width: 250px; -} -/* Sign In Modal ------------------------ */ -.form-signin { - max-width: 330px; - padding: 15px; - margin: 0 auto; -} -.form-signin .checkbox, -.form-signin .form-signin-heading { - margin-bottom: 10px; -} -.form-signin .checkbox { - font-weight: normal; -} -.form-signin .form-control { - position: relative; - height: auto; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 10px; - font-size: 1em; -} -.form-signin .form-control:focus { - z-index: 2; -} -.form-signin input[type="username"] { - margin-bottom: -1px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.form-signin input[type="password"] { - margin-bottom: 10px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.modal-body .list-unstyled a { - color: #37474f; - font-size: 1.14285714em; - line-height: 2em; -} -.modal-body .list-unstyled a i { - margin-right: 8px; -} -.modal-body .list-unstyled a:hover { - color: #1fa0a0; - text-decoration: none; -} -.modal-divider { - padding-top: 1px; - margin: 5px 1px 6px; - border-bottom: 1px solid #e1e8ed; -} -.list-group i { - margin-right: 8px; -} -/* Media Queries - ----------------------------- */ -@media (max-width: 991px) { - .navbar-header { - float: none; - } - .navbar-toggle { - display: block; - } - .navbar-collapse { - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-collapse.collapse { - display: none!important; - } - .navbar-nav { - float: none!important; - margin: 7.5px -15px; - } - .navbar-nav > li { - float: none; - } - .navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - } - /* since 3.1.0 */ - .navbar-collapse.collapse.in { - display: block!important; - } - .collapsing { - overflow: hidden!important; - } - .home .navbar-inverse { - background-color: #546e7a; - } - .navbar-inverse .navbar-nav > li > a { - padding-bottom: 0.75em; - padding-top: 0.75em; - } - .navbar-inverse .navbar-nav .search { - padding-bottom: 0.75em; - top: 0; - } - .navbar-inverse .navbar-nav .search input { - width: 100%; - } -} -#member_form_container .select2-container { - padding: 0; -} -.table-user-profile-attribute { - font-weight: bold; -} -/* Blog - ----------------------------- */ -body.blog h1 { - margin-top: -0.5em; -} -.page-content p { - font-size: 1.125em; - line-height: 1.5em; -} -ul.links { - margin: 0 0 1.5em; - padding: 5px 0; -} -ul.links .category { - text-transform: uppercase; -} -ul.links li { - color: #b0bec5; - font-size: 1em; - margin-right: 0.875em; - display: inline-block; -} -ul.links li ul { - display: inline; - padding: 0; -} -ul.sidebar { - border-bottom: 1px solid #eceff1; - border-left: 1px solid #eceff1; - padding: 1.5em; - margin-bottom: 0; - list-style: none; -} -ul.sidebar h4 { - font-size: 1em; - color: #37474f; - margin-bottom: 1.25em; - margin-top: 0; -} -ul.sidebar li { - margin: 0 4px 10px 0; - list-style: none; -} -ul.sidebar li.tag { - display: inline-block; - background-color: #ff5722; - padding: 3px 10px; -} -ul.sidebar li.tag a { - color: white; - font-size: 0.875em; -} -ul.sidebar li a { - font-size: 0.875em; - color: #546e7a; -} -ul.sidebar ul li i { - color: #546e7a; -} -ul.sidebar li > ul { - padding-left: 0; -} -ul.sidebar ul li > ul li { - padding-left: 1.25em; -} -a { - transition: 0.5s all; - -webkit-transition: 0.5s all; - -moz-transition: 0.5s all; - -o-transition: 0.5s all; - -ms-transition: 0.5s all; -} -a:hover { - color: #ff5722; -} -.blog_btn { - border-radius: 0; -} -.blog_btn.continue { - display: block; - margin-bottom: 50px; - text-align: right; - background-color: transparent; - color: #ff5722; - padding: 10px 0; -} -.blog_btn.continue:focus, -.blog_btn.continue:hover { - text-decoration: none; -} -.blog_btn.continue:active { - outline: inherit; -} -span img { - width: 100%; - margin-bottom: 2em; -} -.responsive-object { - padding-bottom: 10px !important; -} -/* -.about { - background: @brand-primary none repeat scroll 0 0; - margin-bottom: 4em; -} - -.about .title-section { - padding: 30px 0 20px; -} - -.about .title-section h1 { - font-weight: 400; -} - -.about .title-section h2 { - color: #ededed; -} - -.about .title-header a { - color: #FFF; -} - -.about .title-header a:focus, -.about .title-header a:hover { - color: #FFF; - text-decoration: none; -} -*/ -.blog_sidebar { - padding: 0 1.5em 0 0; -} -.blog_sidebar ul > ul { - padding: 0; -} -.blog_sidebar form.search_form { - margin-bottom: 0; -} -.blog_sidebar form.search_form input[type="search"] { - width: 100%; - border: 1px solid #eceff1; - padding: 6px 10px; -} -.blog_sidebar .input-group-btn { - background: #ff5722; - -webkit-border-radius: 0 5px 5px 0; - -moz-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.blog_sidebar .input-group-btn .btn.btn-default { - border-color: transparent; - background-color: transparent; -} -.blog_sidebar .input-group-btn .btn.btn-default i { - color: white; -} -.blog_sidebar .rss-sitemap { - margin-bottom: 1em; - text-align: right; -} -.blog_sidebar .rss-sitemap a { - color: #b0bec5; - font-size: 0.875em; - text-decoration: none; -} -.blog_sidebar .rss-sitemap i { - color: #ff5722; -} -.blog_sidebar .rss-sitemap span { - font-size: 0.875em; - color: #b0bec5; -} -.post-summary { - margin-bottom: 1.25em; -} -.post-summary ul { - margin-top: -0.5em; - padding: 0; -} -.post-summary ul li { - margin-bottom: 0; -} -.relatedPosts { - margin: 50px 0 100px; -} -.relatedPosts img { - width: 100%; - height: auto; - margin-bottom: 15px; -} -/*RIGHT SIDE*/ -.lateralPosts h4 { - margin: 0; -} -.lateralPosts .boxCircle { - width: 80px; - height: 80px; - -webkit-border-radius: 50%; - -moz-border-radius: 50%; - border-radius: 50%; -} -.lateralPosts li { - font-size: 0.875em; - display: inline-block; - color: #78909c; -} -.searchTerm { - margin: 10px 0 30px; - padding: 20px; - background-color: #ededed; - color: #666; -} -.blog_grid { - position: relative; - border-bottom: 0; -} -.blog_grid p { - color: #546e7a; - font-size: 1em; - line-height: 1.5em; - margin-top: 1em; -} -.rich-text { - margin-bottom: 5%; - margin-top: 10px; -} -.rich-text h3 { - margin-bottom: 10px; -} -.itemPosts { - margin-top: 10px; - padding-top: 1em; - border-top: 1px solid #eceff1; -} -.itemPosts h3 { - font-size: 16px; - margin-bottom: 5px; -} -.itemPosts p { - font-size: 15px; -} -.itemPosts .box.feature a { - color: #ff5722; -} -.pagination { - width: 100%; - margin: 30px 0; - text-align: center; -} -.pagination .endless_separator { - background: transparent; - color: #358c8b; - font-size: 18px; -} -.pagination .endless_page_link, -.pagination span.endless_page_current { - padding: 7px 11px; - color: #ff5722; -} -.pagination .endless_page_current:active, -.pagination .endless_page_link:active { - /*background: @brand-primary;*/ -} -.pagination span { - /*background: @brand-primary;*/ -} -.pagination span strong { - /*color: #FFF;*/ -} -/* Menu */ -.menu li { - margin: 0 0 3px; -} -.menu ul { - padding-left: 0; -} -.menu li a { - background-color: #f2f2f2; - background-color: rgba(0, 0, 0, 0.05); - color: #1e1e1e; - display: block; - padding: 9px 9px 9px 60px; - position: relative; - text-decoration: none; - -webkit-transition: all 0.2s linear; - transition: all 0.2s linear; -} -.menu li a:before { - background: #e1e1e1; - background: rgba(255, 255, 255, 0.4); - bottom: 0; - content: ""; - display: block; - left: 45px; - position: absolute; - top: 0; - width: 1px; -} -.menu li a:hover { - background-color: #e9e9e9; - background-color: rgba(0, 0, 0, 0.1); - -webkit-transition: all 0.2s linear; - transition: all 0.2s linear; -} -.menu li.active > a { - background-color: #ff5722; - color: #fff; - -webkit-transition: all 0.2s linear; - transition: all 0.2s linear; -} -.menu li.active > a:before { - background: #444; - background: rgba(255, 255, 255, 0.2); -} -.menu li.parent > a .open-sub { - bottom: 0; - display: block; - left: 0; - position: absolute; - top: 0; - width: 45px; -} -.menu li.parent > a .open-sub:after, -.menu li.parent > a .open-sub:before { - background: #ff5722; - content: ""; - display: block; - height: 2px; - left: 0; - margin: 19px 0 0 15px; - position: absolute; - top: 0; - width: 16px; -} -.menu li.parent > a .open-sub:after { - height: 16px; - margin: 12px 0 0 22px; - width: 2px; -} -.menu li.parent.active > a .open-sub:after, -.menu li.parent.active > a .open-sub:before { - background: #fff; -} -.menu li.parent.active > a .open-sub:after { - display: none; -} -.menu .sub { - background-color: #f2f2f2; - background-color: rgba(0, 0, 0, 0.05); - padding: 7px 0 4px 5px; -} -.menu .sub li { - margin: 0; -} -.menu .sub a { - background: none; - color: #7f7f7f; - margin: 0; - padding: 4px 9px 4px 60px; -} -.menu .sub a:before { - display: none; -} -.menu .sub a:hover { - background-color: #e9e9e9; - background-color: rgba(0, 0, 0, 0.05); -} -.menu .sub .active > a { - background: none; - color: #000; -} -.menu .sub .sub { - background: none; -} -.menu .sub li.parent > a .open-sub { - left: 10px; -} -.menu .sub li.parent > a .open-sub:after, -.menu .sub li.parent > a .open-sub:before { - background: #7f7f7f; - margin: 14px 0 0 22px; - width: 12px; -} -.menu .sub li.parent > a .open-sub:after { - height: 12px; - margin: 9px 0 0 27px; - width: 2px; -} -.menu .sub li { - padding: 0; -} -.menu li > a .item-icon { - left: 15px; - position: absolute; - top: 13px; -} -.menu li:not(.active) > a .item-icon { - opacity: 0.5; - filter: alpha(opacity=50); -} -@media (max-width: 991px) { - .blog_sidebar { - padding: 5px 5px 0 20px; - } -} -@media (max-width: 768px) { - .blog_sidebar { - padding: 5px 10px 0; - } -} diff --git a/haitidata/templates/site_base.html b/haitidata/templates/site_base.html deleted file mode 100644 index ace650b..0000000 --- a/haitidata/templates/site_base.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} -{% load i18n avatar_tags %} - -{% block head %} - {% if DEBUG_STATIC %} - - - - - - {% else %} - - {% endif %} - - - - {% block extra_head %} - {% endblock %} -{% endblock %} - - -{% block header %} - - {% endblock header %} - - - - {% block middle %} -
    -
    -

    {% block page-title %}{% endblock %}

    -
    -
    - {% block subheader %}{% endblock %} -
    - {% include "_status_message.html" %} - {% include "_announcements.html" %} - {% include "_messages.html" %} - {% block body_outer %} -
    -
    - {% block body %}{% endblock %} -
    -
    - {% block sidebar %}{% endblock %} -
    -
    - {% endblock %} -
    - {% endblock middle %} diff --git a/haitidata/urls.py b/haitidata/urls.py deleted file mode 100644 index 2d53e1e..0000000 --- a/haitidata/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.conf.urls import patterns, url -from django.views.generic import TemplateView -from osgeo_importer.urls import urlpatterns as importer_urlpatterns - -from geonode.urls import * - -urlpatterns = patterns('', - url(r'^/?$', - TemplateView.as_view(template_name='site_index.html'), - name='home'), - ) + urlpatterns - -urlpatterns += importer_urlpatterns