From 58c287b450507f1447b85d338bd2a1bec601b677 Mon Sep 17 00:00:00 2001 From: roll Date: Tue, 26 Jun 2018 11:48:40 +0300 Subject: [PATCH 1/3] Rebased on dockerfile (#406) * Added stub dockerfile * Added .env to gitignore * Added .env.example * Added actual contents to dockerfile * Removed newrelic service * Added gunicorn logging * Added static/vendor * Rebased from memcachier to redis, dropped Heroku staff * Fixed dockerfile * Removed libmemcached * Removed static/vendor from git * Fixed dockerfile * Fixed dockerfile * Fixed email settings * Fixed email sending * Updated .env.example * Fixed linting * Increased gunicorm timeout * Added email tls for .env.example * Back to default gunicorm timeout * Updated search settings * Added manage commands to docker CMD * fixed linting * Updated readme --- .dockerignore | 1 + .env.example | 35 +++++++++++ .gitignore | 4 +- .heroku/collectstatic_disabled | 0 Dockerfile | 37 ++++++++++++ Procfile | 1 - Procfile.dev | 1 - README.md | 71 +++++++++++------------ bin/copyapp | 100 -------------------------------- bin/post_compile | 35 ----------- foundation/settings.py | 102 ++++++++++++++------------------- requirements.in | 8 +-- requirements.txt | 9 +-- runtime.txt | 1 - sendemail/views.py | 4 ++ tox.ini | 1 + 16 files changed, 166 insertions(+), 244 deletions(-) create mode 100644 .dockerignore create mode 100644 .env.example delete mode 100644 .heroku/collectstatic_disabled create mode 100644 Dockerfile delete mode 100644 Procfile delete mode 100644 Procfile.dev delete mode 100755 bin/copyapp delete mode 100644 bin/post_compile delete mode 100644 runtime.txt diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c727a83a --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +static/vendor diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..1d89c805 --- /dev/null +++ b/.env.example @@ -0,0 +1,35 @@ +# Public +AWS_STORAGE_BUCKET_NAME="" +CONTACT_EMAIL_SENDER="" +DJANGO_ADMINS="name1 , name2 " +DJANGO_ALLOWED_HOSTS="okfn.org,www.okfn.org" +DJANGO_AWS_S3_CUSTOM_DOMAIN="" +DJANGO_COMPRESS_OFFLINE="true" +DJANGO_CUSTOM_ASSETS_DOMAIN="" +DJANGO_DEBUG="false" +DJANGO_EMAIL_DEBUG="false" +DJANGO_EMAIL_HOST="" +DJANGO_EMAIL_PORT="" +DJANGO_EMAIL_USE_TLS="true" +DJANGO_GOOGLE_ANALYTICS_DOMAIN="" +DJANGO_GOOGLE_ANALYTICS_TRACKING_ID="" +DJANGO_MANAGERS="name1 , name2 " +DJANGO_SECURE="true" +DJANGO_USE_AWS_STORAGE="true" +GENERAL_EMAIL_RECEPIENTS="name1 , name2 " +PRESS_EMAIL_RECEPIENTS="name1 , name2 " +SERVICE_EMAIL_RECEPIENTS="name1 , name2 " + +# Private +AWS_ACCESS_KEY_ID="" +AWS_SECRET_ACCESS_KEY="" +CACHE_URL="redis://localhost:6379/0" +DATABASE_URL="postgres://user:pass@localhost:5432/okfn" +DJANGO_CSP_REPORT_URI="" +DJANGO_EMAIL_HOST_USER="" +DJANGO_EMAIL_HOST_PASSWORD="" +DJANGO_MAILCHIMP_TOKEN="" +DJANGO_MAILCHIMP_URL="" +DJANGO_SECRET_KEY="" +HUBOT_API_KEY="" +SEARCH_URL="http://localhost:9200" diff --git a/.gitignore b/.gitignore index 8c87faaf..56c30a9b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,8 @@ staticfiles # Packages installed by bower static/vendor/ +# Extra logfile - .projectile +.env +whoosh_index diff --git a/.heroku/collectstatic_disabled b/.heroku/collectstatic_disabled deleted file mode 100644 index e69de29b..00000000 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..d96a938b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM python:2.7 +MAINTAINER Open Knowledge International + +WORKDIR /app +RUN apt-get update +RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash + +COPY article_list_item ./article_list_item +COPY contrib ./contrib +COPY docs ./docs +COPY foundation ./foundation +COPY lib ./lib +COPY sendemail ./sendemail +COPY static ./static +COPY templates ./templates +COPY tools ./tools +COPY .bowerrc . +COPY bower.json . +COPY manage.py . +COPY package-lock.json . +COPY package.json . +COPY requirements.txt . + +RUN pip install -r requirements.txt +RUN . /root/.nvm/nvm.sh && nvm install 10 +RUN . /root/.nvm/nvm.sh && nvm use 10 +RUN . /root/.nvm/nvm.sh && npm install -g bower +RUN . /root/.nvm/nvm.sh && bower install --allow-root + +ENV PORT 80 +EXPOSE $PORT + +CMD python manage.py migrate && \ + python manage.py update_index && \ + gunicorn foundation.wsgi:application \ + --access-logfile '-' \ + --error-logfile '-' diff --git a/Procfile b/Procfile deleted file mode 100644 index acf671a1..00000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: newrelic-admin run-program gunicorn foundation.wsgi:application diff --git a/Procfile.dev b/Procfile.dev deleted file mode 100644 index 2d757837..00000000 --- a/Procfile.dev +++ /dev/null @@ -1 +0,0 @@ -web: PYTHONUNBUFFERED=1 python manage.py runserver "127.0.0.1:$PORT" diff --git a/README.md b/README.md index b50d7782..9dc17fce 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,15 @@ -# foundation - -This is the [Django][dj]/[Django CMS][djcms] project that runs . - -[dj]: https://www.djangoproject.com/ -[djcms]: https://www.django-cms.org/ +# okfn.org [![Build Status](https://travis-ci.org/okfn/website.svg?branch=master)](https://travis-ci.org/okfn/website) [![Coverage Status](https://coveralls.io/repos/github/okfn/website/badge.svg?branch=master)](https://coveralls.io/github/okfn/website?branch=master) +This is the [Django](https://www.djangoproject.com/)/[Django CMS](https://www.django-cms.org/) project that runs . + ## Prerequisites and assumptions You must have the following installed: - Python 2.7 -- libmemcached (`brew install libmemcached` on Mac OS X using [Homebrew](http://brew.sh/)) - node Also, the python packages being used require the following libraries to be installed: @@ -26,34 +22,33 @@ You may also wish to follow any install instructions inside a Python virtual env ## Running in development - pip install -r requirements.dev.txt - pip install honcho - npm ci - python manage.py migrate - honcho -f Procfile.dev start - -## Running on Heroku - -Please note that the following are by no means full instructions. There are a -number of config variables that will also need setting before the application -will work. These will be documented in due course. - - heroku create - heroku labs:enable user-env-compile - heroku addons:add heroku-postgresql - heroku addons:add mandrill - heroku config DJANGO_DEBUG=false \ - DJANGO_COMPRESS_OFFLINE=true \ - ... - git push heroku master - heroku run python manage.py migrate - -## Notes - -### Using a local PostgreSQL database - -1. Get a dump of the database -2. Create a local database `createdb okfn` -3. Populate it `psql okfn --file=/path/to/dump.sq` or `pg_restore -d okfn path/to/dump.dump` - -Then to run the app use `export DATABASE_URL=postgres://{USER}@localhost/okfn && honcho -f Procfile.dev start` +Prepare the database. This step can be skipped if you'd like to use dummy SQLite database: +- Get a dump of the database +- Create a local database `createdb okfn` +- Populate it `psql okfn --file=/path/to/dump.sq` or `pg_restore -d okfn path/to/dump.dump` + +Cherry-pick environment variables from `.env.example` you'd like to set and add it to the `.env` file. Popular options: +- CACHE_URL +- DATABASE_URL +- DJANGO_DEBUG +- DJANGO_SECRET_KEY + +Prepare the app: +```bash +pip install -r requirements.dev.txt +npm install +python manage.py migrate +python manage.py update_index +``` + +Start the server: +``` +python manage.py runserver # dev +gunicorn foundation.wsgi:application --access-logfile '-' --error-logfile '-' # prod +``` + +Another option is to use Docker. For this one you should configure your database to work with remote connections using a proper IP address in the connection string or you should use default SQLite database (omit `DATABASE_URL`): +``` +docker build -t okfn . +docker run -d -p 8888:80 -e DATABASE_URL= -e <...> okfn +``` diff --git a/bin/copyapp b/bin/copyapp deleted file mode 100755 index 5113fd79..00000000 --- a/bin/copyapp +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/sh -# -# copyapp -# -# This script is used to copy the database and assets from one Heroku -# application to another. It is run nightly to sync the staging instance with -# the production database and media. -# -# In addition to the command line arguments, which should be the names of Heroku -# applications, the command also modifies its behaviour in response to the -# setting of two environment variables: -# -# DRYRUN - If DRYRUN is set to a nonblank value, then the command won't -# perform any actions, but instead will print details of what it -# would do. -# -# QUIET - If QUIET is set to a nonblank value, the command will not print -# any output except in the event that an error is encountered. This is -# suitable for use when running the script as a cronjob. -# - -: ${DRYRUN:=} -: ${QUIET:=} - -set -e - -usage () { - echo "Usage: $0 " >&2 -} - -status () { - if [ -z "$QUIET" ]; then - echo "---> ${@}" >&2 - fi -} - -maybe () { - if [ -n "$DRYRUN" ]; then - echo "$@" - else - "$@" - fi -} - -quietly () { - local out - if [ -n "$QUIET" ]; then - if ! out=$("$@" 2>&1); then - echo "ERROR while running '$@':" >&2 - echo "$out" - exit 1 - fi - else - "$@" - fi -} - -syncassets () { - local srcapp=$1 - local dstapp=$2 - local srcbucket=$(heroku config:get -a "$srcapp" AWS_STORAGE_BUCKET_NAME) - local dstbucket=$(heroku config:get -a "$dstapp" AWS_STORAGE_BUCKET_NAME) - local args="--acl public-read" - if [ -n "$DRYRUN" ]; then - args="$args --dryrun" - fi - if [ -n "$QUIET" ]; then - args="$args --quiet" - fi - aws s3 sync $args "s3://$srcbucket" "s3://$dstbucket" -} - -SRC_APP=$1 -DST_APP=$2 - -set -u - -if [ "$#" -ne 2 ]; then - usage - exit 1 -fi - -status "making backup of source database" -maybe quietly heroku pgbackups:capture -e -a "${SRC_APP}" - -status "making backup of destination database" -maybe quietly heroku pgbackups:capture -e -a "$DST_APP" - -status "enabling maintenance mode on destination app" -maybe quietly heroku maintenance:on -a "$DST_APP" - -status "transferring data from source to destination" -maybe quietly heroku pgbackups:transfer -a "$SRC_APP" --confirm "$SRC_APP" \ - DATABASE_URL "$DST_APP"::DATABASE_URL - -status "syncing asset buckets" -syncassets "$SRC_APP" "$DST_APP" - -status "disabling maintenance mode on destination app" -maybe quietly heroku maintenance:off -a "$DST_APP" diff --git a/bin/post_compile b/bin/post_compile deleted file mode 100644 index 0205c925..00000000 --- a/bin/post_compile +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -eo pipefail - -# The post_compile hook is run by heroku-buildpack-python - -indent() { - RE="s/^/ /" - [ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE" -} - -echo "-----> In post-compile hook" - -# Work around Heroku bug whereby pylibmc isn't available during -# compile phase. See: https://github.com/heroku/heroku-buildpack-python/issues/57 -export MEMCACHE_SERVERS='' MEMCACHIER_SERVERS='' - -MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' | head -1) -MANAGE_FILE=${MANAGE_FILE:2} - -echo "-----> Collecting static files" -python "$MANAGE_FILE" collectstatic --noinput 2>&1 | -sed '/^Copying/d;/^$/d;/^ /d' | -indent - -if [ "$DJANGO_COMPRESS_OFFLINE" = "true" ]; then - echo "-----> Compressing static files" - python "$MANAGE_FILE" compress 2>&1 | indent - - # After running the compressor, I can now remove the assets directory and - # all the NPM packages. - rm -rf assets/ - rm -rf .heroku/vendor/node/ -fi - -echo "-----> Post-compile done" diff --git a/foundation/settings.py b/foundation/settings.py index 9bbd09ac..a8bdc7a8 100644 --- a/foundation/settings.py +++ b/foundation/settings.py @@ -8,15 +8,18 @@ https://docs.djangoproject.com/en/1.6/ref/settings/ """ +import os +import sys import email.utils import logging -import os from os import environ as env - import dj_database_url -from memcacheify import memcacheify - from django.utils.translation import ugettext_lazy as _ +from dotenv import load_dotenv + +# Activate dotenv +if 'test' not in sys.argv: + load_dotenv('.env') # Silence warnings from ipython/sqlite import warnings @@ -61,16 +64,10 @@ def _parse_email_list(varname): EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' else: EMAIL_USE_TLS = env.get('DJANGO_EMAIL_USE_TLS', 'true') == 'true' - if 'MANDRILL_USERNAME' in env: - EMAIL_HOST = 'smtp.mandrillapp.com' - EMAIL_PORT = 587 - EMAIL_HOST_USER = env['MANDRILL_USERNAME'] - EMAIL_HOST_PASSWORD = env['MANDRILL_APIKEY'] - else: - EMAIL_HOST = env.get('DJANGO_EMAIL_HOST', 'localhost') - EMAIL_PORT = env.get('DJANGO_EMAIL_PORT', '25') - EMAIL_HOST_USER = env.get('DJANGO_EMAIL_USER', 'mail') - EMAIL_HOST_PASSWORD = env.get('DJANGO_EMAIL_HOST_PASSWORD', 'mail') + EMAIL_HOST = env.get('DJANGO_EMAIL_HOST', 'localhost') + EMAIL_HOST_USER = env.get('DJANGO_EMAIL_HOST_USER', 'mail') + EMAIL_HOST_PASSWORD = env.get('DJANGO_EMAIL_HOST_PASSWORD', 'mail') + EMAIL_PORT = env.get('DJANGO_EMAIL_PORT', '25') # set default email sender account for contact form enquiries CONTACT_EMAIL_SENDER = env.get('CONTACT_EMAIL_SENDER') @@ -208,22 +205,29 @@ def _parse_email_list(varname): ) ALDRYN_BOILERPLATE_NAME = 'bootstrap3' - - ROOT_URLCONF = 'foundation.urls' - WSGI_APPLICATION = 'foundation.wsgi.application' - BOWER_COMPONENTS_ROOT = 'bower_components' -if DEBUG: +# Cache configuration + +CACHE_URL = env.get('CACHE_URL') +if CACHE_URL: CACHES = { - 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'} + "default": { + "BACKEND": "django_redis.cache.RedisCache", + "LOCATION": CACHE_URL, + "OPTIONS": { + "CLIENT_CLASS": "django_redis.client.DefaultClient", + } + } } else: - # Use memcache for django.core.cache if available (see the - # django-heroku-memcacheify documentation for details) - CACHES = memcacheify() + CACHES = { + 'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache'} + } + +# Database configuration db_config = dj_database_url.config(default='sqlite:///development.sqlite3') DATABASES = { @@ -234,44 +238,26 @@ def _parse_email_list(varname): # Keep database connections around for a while, reusing them when possible. CONN_MAX_AGE = 60 -# Search engine configurations - -# NB: simple_backend doesn't play nicely with Django==1.6 due to a known bug: -# -# https://github.com/toastdriven/django-haystack/issues/908 -# -HAYSTACK_CONNECTIONS = { - 'default': { - 'ENGINE': 'haystack.backends.simple_backend.SimpleEngine' - } -} +# Search configuration # Use realtime updates (synchronously update the index on model save/delete) HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' - -haystack_default = HAYSTACK_CONNECTIONS['default'] -haystack_engine = env.get('HAYSTACK_SEARCH_ENGINE') - -if haystack_engine == 'solr': - haystack_default['ENGINE'] = 'haystack.backends.solr_backend.SolrEngine' - haystack_default['URL'] = env.get('HAYSTACK_SOLR_URL') -elif haystack_engine == 'elasticsearch': - haystack_default['ENGINE'] = \ - 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine' - haystack_default['URL'] = env.get('HAYSTACK_ELASTICSEARCH_URL') - haystack_default['INDEX_NAME'] = \ - env.get('HAYSTACK_ELASTICSEARCH_INDEX_NAME', 'foundation') -# Haystack also supports a number of other backends which could be configured -# here. - -# Haystack on heroku using Bonsai: -bonsai_url = env.get('BONSAI_URL') -if bonsai_url is not None: - haystack_default['ENGINE'] = \ - 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine' - haystack_default['URL'] = bonsai_url - haystack_default['INDEX_NAME'] = \ - env.get('HAYSTACK_ELASTICSEARCH_INDEX_NAME', 'foundation') +SEARCH_URL = env.get('SEARCH_URL') +if SEARCH_URL: + HAYSTACK_CONNECTIONS = { + 'default': { + 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', + 'URL': SEARCH_URL, + 'INDEX_NAME': 'foundation', + } + } +else: + HAYSTACK_CONNECTIONS = { + 'default': { + 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', + 'PATH': os.path.join(os.path.dirname(__file__), '..', 'whoosh_index'), + } + } # Internationalization # https://docs.djangoproject.com/en/1.6/topics/i18n/ diff --git a/requirements.in b/requirements.in index 3cc2f46a..b4aacad4 100644 --- a/requirements.in +++ b/requirements.in @@ -1,4 +1,3 @@ -# Primary deps Django>=1.6,<1.7 Pillow>=2.4.0 # required by djangocms-text-ckeditor South @@ -11,7 +10,7 @@ django-csp django-countries django-geoposition django-haystack>=2.1,<2.2 -django-heroku-memcacheify +django-redis>4.8,<4.9 django-markdown-deux django-pagedown django-reversion>=1.8 @@ -25,11 +24,10 @@ djangocms-text-ckeditor>=2.1.4,<2.2 iso3166 sorl-thumbnail unicodecsv - -# Heroku deployment requirements gunicorn -newrelic psycopg2 pyelasticsearch>=0.6,<0.7 # required by django-haystack requests>=2.3,<2.4 # required by django-haystack static +python-dotenv>0.8 +whoosh diff --git a/requirements.txt b/requirements.txt index 9ca83ff3..614fba59 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,12 +15,11 @@ django-csp==2.0.3 django-countries==4.0 django-geoposition==0.2.2 django-haystack==2.4.1 -django-heroku-memcacheify==1.0.0 +django-redis==4.8.0 django-formtools==1.0 django-markdown-deux==1.0.5 django-mptt==0.8.3 django-pagedown==0.1.1 -django-pylibmc-sasl==0.2.4 #django-reversion==1.8.5 django-reversion==1.10.1 django-s3-folder-storage==0.3 @@ -40,11 +39,9 @@ html5lib==0.9999999 iso3166==0.7 libsass==0.11.1 markdown2==2.3.1 -newrelic==2.62.0.47 opengraph==0.5 psycopg2==2.7.1 elasticsearch==2.3.0 -pylibmc==1.5.1 pystache==0.5.4 requests==2.9.1 simplejson==3.8.2 @@ -55,3 +52,7 @@ dj-static==0.0.6 unicodecsv==0.14.1 rcssmin==1.0.6 rjsmin==1.0.12 +pytz==2018.4 +redis==2.10.6 +python-dotenv==0.8.2 +whoosh==2.7.4 diff --git a/runtime.txt b/runtime.txt deleted file mode 100644 index 0239feab..00000000 --- a/runtime.txt +++ /dev/null @@ -1 +0,0 @@ -python-2.7.11 diff --git a/sendemail/views.py b/sendemail/views.py index a09b0b04..d374da1d 100644 --- a/sendemail/views.py +++ b/sendemail/views.py @@ -33,6 +33,10 @@ def contactview(request): else: recepients = settings.PRESS_EMAIL_RECEPIENTS + # flatten recepients list: + # (('name1', 'email1'), ...) -> ('email1', ...) + recepients = map(lambda recepient: recepient[1], recepients) + # all form data will originate from the same email address try: send_mail( diff --git a/tox.ini b/tox.ini index ee242675..3c5a44e5 100644 --- a/tox.ini +++ b/tox.ini @@ -10,6 +10,7 @@ skipsdist = true [flake8] exclude = migrations,.tox,node_modules ignore = E121, E123, E126, E133, E226, E241, E242, E402, E704, +max-line-length = 90 [testenv] deps = From ab33b7af8693fb4c8397146c9cdfdca1fe2a3151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Mercader?= Date: Tue, 24 Jul 2018 11:06:04 +0200 Subject: [PATCH 2/3] Allow sorting of the Board members (#408) * Allow sorting of the Board members * Add migration for board order fields * Fix board members list in template. Add test * Remove order in board model * minor edit * update npm, bower, dependencies * update bower version * update bower version * point to new Bower registry * install bower before running tests --- .DS_Store | Bin 0 -> 10244 bytes .bowerrc | 3 +- .travis.yml | 4 + .../migrations/0011_auto_20180719_1144.py | 23 + foundation/organisation/models.py | 11 +- .../templates/organisation/board_details.html | 4 +- foundation/organisation/tests/test_views.py | 19 +- package-lock.json | 1295 +---------------- package.json | 9 +- 9 files changed, 137 insertions(+), 1231 deletions(-) create mode 100644 .DS_Store create mode 100644 foundation/organisation/migrations/0011_auto_20180719_1144.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4d58d70369940d13d17b09820ff76a5060028aac GIT binary patch literal 10244 zcmeHMYitx%6h5bvGIvVp6oKy4E?p^w3JbQSbSbU4eL@u!ZK35^_A$W3?QY$fZIN12 z#n%tTD8ApX#3)ApNTU8g;}fGn(Z*MzKYYdbN2Af`ANAaOXIHvx4aOIVGs)a@=iGbl z&OP&;`<;6i0I)R`tp)G_fI>Hy+H@*%T)ds%CtP`shBqSF1DFsA4_kxbSR#BvZ&%@Z z!1aLZ0oMbr2V4)F3LYTN=9f|^rCYila6RC9AmahPKKSV7GU&)LDaF!3h1dd+%qO+D zs80I;VdHaT(2-+O3R41(D`L_b|@%*o$P#~ zJ77>sw{$(=df-G4@USTW3v39{J#qj3dU!BqT6Rs%`)rMNt*CNZr=GJ2BjC zhwPNq8cJ^APwPYW?yytuNhD&KdMLcnG=}@NS#6299WvuaQW%?2gSu?(HRI95aBCtJ zk6L1!ZrPwHOkw?+XJlk~V7cE{Utc@w_l*PsHB?{LFgnVV(yH3CyLJp*x_9KV(aZ0Y z^Fn8Bfa0uq-jzMcm^IWU4=M7J=}CT&o+M+1p3aihYx*@UWf>P4v5;*J8SNq4u==%P zi)PyuNyOJDjUk#@ZzK^*4aBLXBoc~6Qq#GnZ+H zl&w*E%XNt;A2BLgJmsEwin4|4+mZ&AQq8J73z-&DdMtWlIm9C7XPU)&E~ZZ>P0wPr ziWX%XVxh1Rld5{wplIi@-XS?Hscd9TN(uT|UnDUwK=ZMrdX*=rXh)Ro{I}PJEc=2% zBThfh=iXZG@oeJymT1(7DvDAWtd^g)GFT%k8Yd1N{ICi-VKYP^4#RLg+yMLGE_fK8 zgs0&!yb5o?QFsg9h7aLW_#D1~FX0>b7QTb;5s;yZg;*hNfWV>t%hg379$_NCG<& z90D|HPzc116HxWC)0uYz!O7S&8M?J;95{;TUE%Y3HI5khIKRrvG$c?n(RyYTwdOf( zOO{gG6vD4;t6Rpr+Ejw7v<$3ZOv@)M%hu+zskMMmtBmWVo;j?QwKE=28svc8q@a5c z9*1WMaPPqT@G*hyYXaI&@C)YS44i`=JRQr?iwm$C7vW;`6U+kGh${uuItA1&#BSVx z8wqebFpN<&a3>}RZWh{@!pm_CuN1($0r%rgcr)IDx8i*gTp7r%NrO#Fd^8(!L*2=E zED_&DdJfaV;~4;U5)Z_{0PDE3+#_jV{#RU3IxEO$z0!|f^%=S1^xII1F-$_9&)Vt1A*XCTd|2i$?i0%wiXvkT?J8!|_n&m6cX?Ivb zRsS3-P@om*WqNs$-nm#C@; zdJ$z@Q(LF%axoBb$W;viRZlMpBK)|rsae%CON|VE&R}|r-j8Rs8!4@?XzN;{ZE!c|Z;d;D?!nX&v5l`^I-9=2XhnQjnFT<;yfIWcs;Jw5c58zYy z48Djj;mi069>sTYT!J?f#_QyBy2OwF5WHy)*`5o$WgVR=Wi&Z*j(;4y6G=p5HkmJ* zMItB78xz>ZAraL(8MY<4h~z_?CRXzZ%7`gDpM(&&15boi^YfFAUr2Bmt*iA zd;*_QzVb67PQwz)RV0zj#f6lua2i=c*~$t*Bh8etbW+CBMQH3HB9VDZgouQr(ZnPX zNeYJul~)jvTuu4Qb%I6?5Ru%A58=aE7|hOIo|qhiS)`JNtt(v*xE?qKJupSSlaHVO zcTE2O|0($9?kl+-a6RyMc>wd-;bP literal 0 HcmV?d00001 diff --git a/.bowerrc b/.bowerrc index 7a72fb87..cd1ce65c 100644 --- a/.bowerrc +++ b/.bowerrc @@ -1,3 +1,4 @@ { - "directory": "static/vendor" + "directory": "static/vendor", + "registry": "https://registry.bower.io" } diff --git a/.travis.yml b/.travis.yml index a806c027..55ae8521 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,13 @@ language: python python: - 2.7 install: + - npm i -g npm - npm install - pip install -r requirements.dev.txt - pip install coveralls +before_script: + - npm install -g bower + - bower install script: - coverage run manage.py test - flake8 . diff --git a/foundation/organisation/migrations/0011_auto_20180719_1144.py b/foundation/organisation/migrations/0011_auto_20180719_1144.py new file mode 100644 index 00000000..297ad6bf --- /dev/null +++ b/foundation/organisation/migrations/0011_auto_20180719_1144.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organisation', '0010_networkgroup_forum_group_url'), + ] + + operations = [ + migrations.AlterModelOptions( + name='boardmembership', + options={'ordering': ['-order', 'person__name']}, + ), + migrations.AddField( + model_name='boardmembership', + name='order', + field=models.IntegerField(help_text=b'Higher numbers mean higher up in the list', null=True, blank=True), + ), + ] diff --git a/foundation/organisation/models.py b/foundation/organisation/models.py index 8732af09..cfb8c985 100644 --- a/foundation/organisation/models.py +++ b/foundation/organisation/models.py @@ -118,7 +118,7 @@ class Unit(models.Model): members = models.ManyToManyField('Person', through='UnitMembership') order = models.IntegerField( blank=True, null=True, - help_text="Higher numbers mean higher up in the food chain") + help_text="Higher numbers mean higher up in the list") def __unicode__(self): return self.name @@ -136,7 +136,7 @@ class UnitMembership(models.Model): unit = models.ForeignKey('Unit') order = models.IntegerField( blank=True, null=True, - help_text="Higher numbers mean higher up in the food chain") + help_text="Higher numbers mean higher up in the list") def __unicode__(self): return self.person.name + ' - ' + self.title @@ -152,6 +152,7 @@ class Board(models.Model): name = models.CharField(max_length=100) slug = models.SlugField(max_length=100, unique=True) description = models.TextField() + members = models.ManyToManyField('Person', through='BoardMembership') def __unicode__(self): @@ -165,10 +166,16 @@ class BoardMembership(models.Model): title = models.CharField(max_length=100) person = models.ForeignKey('Person') board = models.ForeignKey('Board') + order = models.IntegerField( + blank=True, null=True, + help_text="Higher numbers mean higher up in the list") def __unicode__(self): return self.person.name + ' - ' + self.title + class Meta: + ordering = ["-order", "person__name"] + class Project(models.Model): created_at = models.DateTimeField(auto_now_add=True) diff --git a/foundation/organisation/templates/organisation/board_details.html b/foundation/organisation/templates/organisation/board_details.html index 4151443c..d5dc07bc 100644 --- a/foundation/organisation/templates/organisation/board_details.html +++ b/foundation/organisation/templates/organisation/board_details.html @@ -10,8 +10,8 @@

{{ object.name }}

{% block custom_sidebar %}

Members

-
    {% for member in object.members.all %} -
  • {{ member.name }}
  • + {% static_placeholder object.name|truncatechars:10|add:" (sidebar)" %} {% endblock %} diff --git a/foundation/organisation/tests/test_views.py b/foundation/organisation/tests/test_views.py index 6f615322..8e10bfdf 100644 --- a/foundation/organisation/tests/test_views.py +++ b/foundation/organisation/tests/test_views.py @@ -212,11 +212,19 @@ def setUp(self): # flake8: noqa self.april_council = BoardMembership.objects.create( title='Technical consultant', person=self.april, - board=self.council) + board=self.council, + order=2) self.casey_council = BoardMembership.objects.create( title='Sport utilities consultant', person=self.casey, - board=self.council) + board=self.council, + order=1) + self.leonardo_council = BoardMembership.objects.create( + title='Medical consultant', + person=self.leonardo, + board=self.council, + order=3) + def test_board(self): response = self.app.get(reverse('board')) @@ -256,6 +264,13 @@ def test_advisory_council(self): self.assertTrue(self.splinter.name not in response.body) + def test_manual_order_of_units(self): + response = self.app.get(reverse('advisory-board')) + april = response.body.find(escape(self.april.name)) + leonardo = response.body.find(self.leonardo.name) + casey = response.body.find(self.casey.name) + self.assertTrue(leonardo < april < casey) + @override_settings(ROOT_URLCONF='foundation.tests.urls') class ProjectListViewTest(WebTest): diff --git a/package-lock.json b/package-lock.json index f3252c86..13c72281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,30 +10,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -43,22 +19,6 @@ "color-convert": "^1.9.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -82,36 +42,12 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "autoprefixer": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.2.0.tgz", @@ -126,43 +62,12 @@ "postcss-value-parser": "^3.2.3" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "body": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", @@ -175,19 +80,10 @@ "safe-json-parse": "~1.0.1" } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "bower": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.7.9.tgz", - "integrity": "sha1-tylsI5Pg117apso5ZIEy3SVYErA=" + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz", + "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=" }, "brace-expansion": { "version": "1.1.11", @@ -243,12 +139,6 @@ "integrity": "sha512-3rrhqUxwBgrwNlWVUEwIJfqdZNwLPX18eTo7MGXb3gueDpbOFW6w5OXyHscdBd6IJcu9wnKmKVd7nSl+r7fmgw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -260,29 +150,6 @@ "supports-color": "^5.3.0" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "coffeescript": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", @@ -310,64 +177,18 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, "continuable-cache": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -377,15 +198,6 @@ "array-find-index": "^1.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "dateformat": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", @@ -411,44 +223,12 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "dev": true, - "requires": { - "onetime": "^1.0.0", - "set-immediate-shim": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, "electron-to-chromium": { "version": "1.3.41", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz", @@ -466,9 +246,9 @@ } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -498,30 +278,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -565,57 +321,12 @@ } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "gaze": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", @@ -625,27 +336,6 @@ "globule": "^1.0.0" } }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -658,15 +348,6 @@ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", @@ -715,9 +396,9 @@ "dev": true }, "grunt": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", - "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", + "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", "dev": true, "requires": { "coffeescript": "~1.10.0", @@ -728,14 +409,15 @@ "glob": "~7.0.0", "grunt-cli": "~1.2.0", "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~1.0.0", - "grunt-legacy-util": "~1.0.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", "iconv-lite": "~0.4.13", "js-yaml": "~3.5.2", "minimatch": "~3.0.2", + "mkdirp": "~0.5.1", "nopt": "~3.0.6", "path-is-absolute": "~1.0.0", - "rimraf": "~2.2.8" + "rimraf": "~2.6.2" }, "dependencies": { "grunt-cli": { @@ -788,85 +470,65 @@ "dev": true }, "grunt-legacy-log": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", - "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", "dev": true, "requires": { "colors": "~1.1.2", - "grunt-legacy-log-utils": "~1.0.0", + "grunt-legacy-log-utils": "~2.0.0", "hooker": "~0.2.3", "lodash": "~4.17.5" } }, "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", "dev": true, "requires": { - "chalk": "~1.1.1", - "lodash": "~4.3.0" + "chalk": "~2.4.1", + "lodash": "~4.17.10" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true } } }, "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", "dev": true, "requires": { "async": "~1.5.2", "exit": "~0.1.1", "getobject": "~0.1.0", "hooker": "~0.2.3", - "lodash": "~4.3.0", - "underscore.string": "~3.2.3", - "which": "~1.2.1" + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" }, "dependencies": { "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true } } @@ -883,71 +545,17 @@ } }, "grunt-sass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-2.1.0.tgz", - "integrity": "sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA==", - "dev": true, - "requires": { - "each-async": "^1.0.0", - "node-sass": "^4.7.2", - "object-assign": "^4.0.1" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.0.1.tgz", + "integrity": "sha512-eKmtsPmtO+cjE1wT0EkvgavsQCzT2x+2J1tS4SuoBu3j0CDpI6o3cJUJ5CxrbjaWULpLlsu0GFiOa6nYetnaqQ==", "dev": true }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", @@ -955,9 +563,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, "http-parser-js": { @@ -966,29 +574,15 @@ "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", @@ -1014,12 +608,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1044,76 +632,18 @@ "number-is-nan": "^1.0.0" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", - "dev": true - }, "js-yaml": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", @@ -1124,58 +654,6 @@ "esprima": "^2.6.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "livereload-js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", @@ -1201,24 +679,6 @@ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -1229,16 +689,6 @@ "signal-exit": "^3.0.0" } }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -1263,21 +713,6 @@ "trim-newlines": "^1.0.0" } }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "~1.33.0" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1316,187 +751,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "2", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.3.1", - "npmlog": "^4.0.0", - "request": "~2.79.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "qs": "~6.3.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1", - "uuid": "^3.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -1524,18 +778,6 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -1548,12 +790,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1569,43 +805,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -1641,12 +840,6 @@ "pinkie-promise": "^2.0.0" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -1685,30 +878,6 @@ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, "raw-body": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", @@ -1748,21 +917,6 @@ "read-pkg": "^1.0.0" } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -1782,46 +936,6 @@ "is-finite": "^1.0.0" } }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -1829,16 +943,13 @@ "dev": true }, "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } }, "safe-json-parse": { "version": "1.0.1", @@ -1846,38 +957,11 @@ "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { "version": "5.5.0", @@ -1885,33 +969,12 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1950,30 +1013,11 @@ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - } - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "sprintf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", + "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "dev": true }, "string-template": { "version": "0.2.1", @@ -1981,41 +1025,6 @@ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -2043,17 +1052,6 @@ "has-flag": "^3.0.0" } }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, "tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", @@ -2076,73 +1074,28 @@ } } }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "dev": true, "requires": { - "glob": "^6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", @@ -2153,17 +1106,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "websocket-driver": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", @@ -2181,39 +1123,14 @@ "dev": true }, "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2225,64 +1142,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } } } } diff --git a/package.json b/package.json index 933e544b..f0c2c953 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,13 @@ }, "homepage": "https://github.com/okfn/website#readme", "dependencies": { - "bower": "1.7.9" - }, - "scripts": { - "postinstall": "bower install" + "bower": "1.8.4" }, "devDependencies": { "autoprefixer": "^8.2.0", - "grunt": "^1.0.2", + "grunt": "^1.0.3", "grunt-contrib-watch": "^1.1.0", "grunt-postcss": "^0.9.0", - "grunt-sass": "^2.1.0" + "grunt-sass": "^3.0.1" } } From f5da18e1e3b37afbbbf18502d2fe3243023b8284 Mon Sep 17 00:00:00 2001 From: Brook Elgie Date: Tue, 24 Jul 2018 10:24:59 +0100 Subject: [PATCH 3/3] bump to version 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0c2c953..d73e5c9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "1.0.0", + "version": "1.0.1", "description": "This is the Django/Django CMS project that runs .", "repository": { "type": "git",